package pt.estgp.estgweb.web.utils;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.DocumentException;
import pt.estgp.estgweb.Globals;
import pt.estgp.estgweb.services.directories.DirectoryNodeType;
import pt.estgp.estgweb.utils.ConfigProperties;
import pt.estgp.estgweb.utils.Dom4jUtil;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
import com.sun.mail.imap.Rights;
/**
* @author Jorge Machado
* @date 8/Out/2008
* @see pt.estgp.estgweb.web.utils
*/
public class ProxyUtils
{
// proxy/accaoSocialAlunosPortalMenu/estgp
private static final 1.5.0/docs/api/java/util/logging/Logger.html">Logger logger =
1.5.0/docs/api/java/util/logging/Logger.html">Logger.
getLogger(ProxyUtils.
class);
public static 1.5.0/docs/api/java/lang/String.html">String getTopImageLink
(HttpServletRequest request
)
{
1.5.0/docs/api/java/lang/String.html">String pathIfo = request.
getPathInfo();
1.5.0/docs/api/java/lang/String.html">String queryString = request.
getQueryString();
if(request.
getServletPath().
equals("/proxy"))
{
int startServerPathIndex = pathIfo.
indexOf('/',1
) +
1;
int lastServerPathIndex = pathIfo.
indexOf('/',startServerPathIndex + 1
);
1.5.0/docs/api/java/lang/String.html">String server = pathIfo.
substring(startServerPathIndex,lastServerPathIndex
);
1.5.0/docs/api/java/lang/String.html">String serverHostUrl = ConfigProperties.
getProperty("server." + server
) + ConfigProperties.
getProperty("server." + server +
".start.path");
1.5.0/docs/api/java/lang/String.html">String finalFileCandidate1 = pathIfo.
substring(0,pathIfo.
lastIndexOf("/")) +
"/top.jpg";
int lastIndexOfDot = pathIfo.
lastIndexOf(".");
1.5.0/docs/api/java/lang/String.html">String finalFileCandidate2 =
null;
if(lastIndexOfDot
>=
0)
finalFileCandidate2 = pathIfo.
substring(0,lastIndexOfDot
) +
".jpg";
// String protocol = request.getRequestURL().substring(0,request.getRequestURL().indexOf("://"));
1.5.0/docs/api/java/lang/String.html">String finalFileCandidate1total = serverHostUrl + finalFileCandidate1.
substring(lastServerPathIndex
);
1.5.0/docs/api/java/lang/String.html">String finalFileCandidate2total =
null;
if(finalFileCandidate2
!=
null)
finalFileCandidate2total = serverHostUrl + finalFileCandidate2.
substring(lastServerPathIndex
);
if(finalFileCandidate2
!=
null)
try
{
1.5.0/docs/api/java/net/URL.html">URL url =
new 1.5.0/docs/api/java/net/URL.html">URL(finalFileCandidate2total
);
url.
openConnection().
getInputStream();
return request.
getContextPath() +
"/proxy" + finalFileCandidate2
;
}
catch (1.5.0/docs/api/java/net/MalformedURLException.html">MalformedURLException e
)
{
logger.
error("BAD TOP IMAGE URL 2: " + finalFileCandidate2total
);
}
catch (1.5.0/docs/api/java/io/IOException.html">IOException e
)
{
logger.
debug("candidate 2 don't exist: " + finalFileCandidate2total
);
}
try
{
1.5.0/docs/api/java/net/URL.html">URL url =
new 1.5.0/docs/api/java/net/URL.html">URL(finalFileCandidate1total
);
url.
openConnection().
getInputStream();
return request.
getContextPath() +
"/proxy" + finalFileCandidate1
;
}
catch (1.5.0/docs/api/java/net/MalformedURLException.html">MalformedURLException e
)
{
logger.
error("BAD TOP IMAGE URL 1: " + finalFileCandidate1total
);
}
catch (1.5.0/docs/api/java/io/IOException.html">IOException e
)
{
logger.
debug("candidate 1 don't exist: " + finalFileCandidate1total
);
}
}
else
{
1.5.0/docs/api/java/lang/String.html">String link = request.
getServletPath();
if(pathIfo
!=
null)
link+= pathIfo
;
if(queryString
!=
null)
link+=
"?" + queryString
;
for(int i =
0; i
< Globals.
TOP_IMAGE_FILTER_LINKS.
size();i++
)
{
1.5.0/docs/api/java/lang/String.html">String url = Globals.
TOP_IMAGE_FILTER_LINKS.
get(i
);
if(link.
startsWith(url
))
{
1.5.0/docs/api/java/lang/String.html">String finalUrl = Globals.
TOP_IMAGE_FILTER_IMAGES_URL.
get(i
);
if(finalUrl.
startsWith("/"))
return request.
getContextPath() + finalUrl
;
else
return finalUrl
;
}
}
}
return null;
}
public static Map
<String, String
> namespaces =
new HashMap
<String, String
>();
static
{
namespaces.
put("d",
"http://www.estgp.pt/baco/directory/");
}
public static 1.5.0/docs/api/java/lang/String.html">String getTopImageFromDirectoryLink
(HttpServletRequest request
)
{
1.5.0/docs/api/java/lang/String.html">String path = request.
getPathInfo();
if(!request.
getServletPath().
equals("/dir"))
{
1.5.0/docs/api/java/lang/String.html">String link = request.
getServletPath();
1.5.0/docs/api/java/lang/String.html">String queryString = request.
getQueryString();
if(path
!=
null)
link+= path
;
if(queryString
!=
null)
link+=
"?" + queryString
;
for(int i =
0; i
< Globals.
TOP_IMAGE_FILTER_LINKS.
size();i++
)
{
1.5.0/docs/api/java/lang/String.html">String url = Globals.
TOP_IMAGE_FILTER_LINKS.
get(i
);
if(link.
startsWith(url
))
{
1.5.0/docs/api/java/lang/String.html">String finalUrl = Globals.
TOP_IMAGE_FILTER_IMAGES_URL.
get(i
);
if(finalUrl.
startsWith("/"))
return request.
getContextPath() + finalUrl
;
else
return finalUrl
;
}
}
return null;
}
1.5.0/docs/api/java/lang/String.html">String directory = path.
substring(1,path.
indexOf('/'));
5+0%2Fdocs%2Fapi+Document">Document directoryDocument =
null;
try
{
directoryDocument = Dom4jUtil.
parseSourceFileFromCache("/pt/estgp/estgweb/directories/" + directory +
".xml");
}
catch (DocumentException e
)
{
logger.
error(e,e
);
return null;
}
catch (1.5.0/docs/api/java/io/IOException.html">IOException e
)
{
e.
printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
if (path.
startsWith("/"))
path = path.
substring(1
);
1.5.0/docs/api/java/lang/String.html">String[] ids = path.
split("/");
1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder startPath =
new 1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder();
DirectoryNodeType directoryNodeType =
null;
1.5.0/docs/api/java/lang/String.html">String actualNodeId =
null;
5+0%2Fdocs%2Fapi+Element">Element actualNode =
null;
int stopName =
0;
List
<Rights
> rights =
new ArrayList
<Rights
>();
for (1.5.0/docs/api/java/lang/String.html">String id : ids
)
{
1.5.0/docs/api/javax/xml/xpath/XPath.html">XPath idXpath = directoryDocument.
createXPath("//*[@id='" + id +
"']");
idXpath.
setNamespaceURIs(namespaces
);
5+0%2Fdocs%2Fapi+Element">Element idElem =
(5+0%2Fdocs%2Fapi+Element">Element) idXpath.
selectSingleNode(directoryDocument
);
if (idElem ==
null)
{
directoryNodeType = DirectoryNodeType.
external;
break;
}
1.5.0/docs/api/java/lang/String.html">String name = idElem.
getQName().
getName();
if (name.
equals("leaf"))
{
directoryNodeType = DirectoryNodeType.
leaf;
actualNodeId = id
;
actualNode = idElem
;
startPath.
append("/").
append(id
);
}
else if (name.
equals("node"))
{
directoryNodeType = DirectoryNodeType.
node;
actualNodeId = id
;
actualNode = idElem
;
startPath.
append("/").
append(id
);
}
else if (name.
equals("directory"))
{
directoryNodeType = DirectoryNodeType.
directory;
actualNodeId = id
;
actualNode = idElem
;
startPath.
append("/").
append(id
);
}
else
{
logger.
error("Unexpected node " + name +
" with id " + id
);
return null;
}
stopName++
;
}
if(directoryNodeType == DirectoryNodeType.
external)
{
1.5.0/docs/api/java/lang/String.html">String externalFile = buildExternalFile
(stopName, ids
);
1.5.0/docs/api/java/lang/String.html">String url = getAttributeValue
(actualNode,
"url");
1.5.0/docs/api/java/lang/String.html">String proxy = getAttributeValue
(actualNode,
"proxy");
if(proxy
!=
null && proxy.
length() > 0
)
{
1.5.0/docs/api/java/lang/String.html">String link = getLink
(proxy,url
);
if(link ==
null)
return null;
else
{
return startPath + link
;
}
}
}
return null;
}
private static 1.5.0/docs/api/java/lang/String.html">String getLink
(1.5.0/docs/api/java/lang/String.html">String server,
1.5.0/docs/api/java/lang/String.html">String urlPath
)
{
1.5.0/docs/api/java/lang/String.html">String serverHostUrl = ConfigProperties.
getProperty("server." + server
) + ConfigProperties.
getProperty("server." + server +
".start.path");
1.5.0/docs/api/java/lang/String.html">String finalFileCandidate1 = urlPath.
substring(0,urlPath.
lastIndexOf("/")) +
"/top.jpg";
int lastIndexOfDot = urlPath.
lastIndexOf(".");
1.5.0/docs/api/java/lang/String.html">String finalFileCandidate2 =
null;
if(lastIndexOfDot
>=
0)
finalFileCandidate2 = urlPath.
substring(0,lastIndexOfDot
) +
".jpg";
// String protocol = request.getRequestURL().substring(0,request.getRequestURL().indexOf("://"));
1.5.0/docs/api/java/lang/String.html">String finalFileCandidate1total = serverHostUrl + finalFileCandidate1
;
1.5.0/docs/api/java/lang/String.html">String finalFileCandidate2total =
null;
if(finalFileCandidate2
!=
null)
finalFileCandidate2total = serverHostUrl + finalFileCandidate2
;
if(finalFileCandidate2
!=
null)
try
{
1.5.0/docs/api/java/net/URL.html">URL url =
new 1.5.0/docs/api/java/net/URL.html">URL(finalFileCandidate2total
);
url.
openConnection().
getInputStream();
return finalFileCandidate2.
substring(finalFileCandidate2.
lastIndexOf("/"));
}
catch (1.5.0/docs/api/java/net/MalformedURLException.html">MalformedURLException e
)
{
logger.
error("BAD TOP IMAGE URL 2: " + finalFileCandidate2total
);
}
catch (1.5.0/docs/api/java/io/IOException.html">IOException e
)
{
logger.
debug("candidate 2 don't exist: " + finalFileCandidate2total
);
}
try
{
1.5.0/docs/api/java/net/URL.html">URL url =
new 1.5.0/docs/api/java/net/URL.html">URL(finalFileCandidate1total
);
url.
openConnection().
getInputStream();
return "/top.jpg";
}
catch (1.5.0/docs/api/java/net/MalformedURLException.html">MalformedURLException e
)
{
logger.
error("BAD TOP IMAGE URL 1: " + finalFileCandidate1total
);
}
catch (1.5.0/docs/api/java/io/IOException.html">IOException e
)
{
logger.
debug("candidate 1 don't exist: " + finalFileCandidate1total
);
}
return null;
}
private static 1.5.0/docs/api/java/lang/String.html">String getAttributeValue
(5+0%2Fdocs%2Fapi+Element">Element actualNode,
1.5.0/docs/api/java/lang/String.html">String name
)
{
return (actualNode.
attribute(name
) !=
null ? actualNode.
attribute(name
).
getValue() :
null);
}
private static 1.5.0/docs/api/java/lang/String.html">String buildExternalFile
(int stopName,
1.5.0/docs/api/java/lang/String.html">String[] ids
)
{
if (stopName
<= ids.
length)
{
1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder externalFileBuilder =
new 1.5.0/docs/api/java/lang/StringBuilder.html">StringBuilder();
for (int i = stopName
; i
< ids.
length; i++
)
{
int questionMark = ids
[i
].
indexOf("?");
if (questionMark
>=
0)
{
externalFileBuilder.
append("/").
append(ids
[i
].
substring(0, questionMark
));
break;
}
else
externalFileBuilder.
append("/").
append(ids
[i
]);
}
return externalFileBuilder.
toString();
}
return null;
}
}