/impl/conf/WEB-INF/web.xml |
---|
17,6 → 17,10 |
<filter-class>pt.estgp.estgweb.web.filters.TopImageFilter</filter-class> |
</filter> |
<filter> |
<filter-name>TopImageDirectoryFilter</filter-name> |
<filter-class>pt.estgp.estgweb.web.filters.TopImageDirectoryFilter</filter-class> |
</filter> |
<filter> |
<filter-name>UserFilter</filter-name> |
<filter-class>pt.estgp.estgweb.web.filters.UserFilter</filter-class> |
</filter> |
/impl/conf/app.properties |
---|
83,7 → 83,7 |
ionline.user=Baco_web |
server.estgp.start.path= |
server.estgp=http://localhost:8180/static |
server.estgp=http://deptal.estgp.pt:9090/static |
estgp.encoding=UTF-8 |
estgp.proxy.host= |
estgp.proxy.port= |
259,6 → 259,16 |
#filter.ignore.extension.6=.tif |
#filter.ignore.extension.7=.bmp |
#filter.ignore.extension.8=.swf |
filter.top.image.ignore.extension.1=.js |
filter.top.image.ignore.extension.2=.css |
filter.top.image.ignore.extension.3=.jpg |
filter.top.image.ignore.extension.4=.gif |
filter.top.image.ignore.extension.5=.png |
filter.top.image.ignore.extension.6=.tif |
filter.top.image.ignore.extension.7=.bmp |
filter.top.image.ignore.extension.8=.swf |
filter.ignore.prefix.1=/statUnits.jsp |
filter.ignore.prefix.2=/units.jsp |
filter.ignore.prefix.3=/js |
/impl/src/java/pt/estgp/estgweb/Globals.java |
---|
115,6 → 115,7 |
public static final List<String> URL_STAT_IGNORE_EXTENSIONS = ConfigProperties.getListValues("url.stat.ignore.extension"); |
public static final List<String> URL_STAT_IGNORE_PREFIXS = ConfigProperties.getListValues("url.stat.ignore.prefix"); |
public static final List<String> FILTER_TOP_IMAGE_IGNORE_EXTENSIONS = ConfigProperties.getListValues("filter.top.image.ignore.extension"); |
public static final List<String> FILTER_IGNORE_EXTENSIONS = ConfigProperties.getListValues("filter.ignore.extension"); |
public static final List<String> FILTER_IGNORE_PREFIXES = ConfigProperties.getListValues("filter.ignore.prefix"); |
/impl/src/java/pt/estgp/estgweb/services/directories/DirectoryNodeType.java |
---|
New file |
0,0 → 1,14 |
package pt.estgp.estgweb.services.directories; |
/** |
* @author Jorge |
* @date 17/Fev/2009 |
* @time 11:06:06 |
*/ |
public enum DirectoryNodeType |
{ |
node, |
leaf, |
directory, |
external |
} |
/impl/src/java/pt/estgp/estgweb/web/utils/ProxyUtils.java |
---|
1,13 → 1,26 |
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 |
15,28 → 28,32 |
*/ |
public class ProxyUtils |
{ |
// proxy/accaoSocialAlunosPortalMenu/estgp |
// proxy/accaoSocialAlunosPortalMenu/estgp |
private static final Logger logger = Logger.getLogger(ProxyUtils.class); |
public static String getTopImageLink(HttpServletRequest request) |
{ |
String pathIfo = request.getPathInfo(); |
String queryString = request.getQueryString(); |
if(request.getServletPath().equals("/proxy")) |
{ |
int startServerPathIndex = pathIfo.indexOf('/',1) + 1; |
int lastServerPathIndex = pathIfo.indexOf('/',startServerPathIndex + 1); |
String server = pathIfo.substring(startServerPathIndex,lastServerPathIndex); |
String serverHostUrl = ConfigProperties.getProperty("server." + server) + ConfigProperties.getProperty("server." + server + ".start.path"); |
String finalFileCandidate1 = pathIfo.substring(0,pathIfo.lastIndexOf("/")) + "/top.jpg"; |
int lastIndexOfDot = pathIfo.lastIndexOf("."); |
String finalFileCandidate2 = null; |
if(lastIndexOfDot >= 0) |
finalFileCandidate2 = pathIfo.substring(0,lastIndexOfDot) + ".jpg"; |
String protocol = request.getRequestURL().substring(0,request.getRequestURL().indexOf("://")); |
String finalFileCandidate1total = protocol + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/proxy" + finalFileCandidate1; |
// String protocol = request.getRequestURL().substring(0,request.getRequestURL().indexOf("://")); |
String finalFileCandidate1total = serverHostUrl + finalFileCandidate1.substring(lastServerPathIndex); |
String finalFileCandidate2total = null; |
if(finalFileCandidate2 != null) |
finalFileCandidate2total = protocol + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/proxy" + finalFileCandidate2; |
finalFileCandidate2total = serverHostUrl + finalFileCandidate2.substring(lastServerPathIndex); |
if(finalFileCandidate2 != null) |
try |
93,4 → 110,181 |
} |
return null; |
} |
public static Map<String, String> namespaces = new HashMap<String, String>(); |
static |
{ |
namespaces.put("d", "http://www.estgp.pt/baco/directory/"); |
} |
public static String getTopImageFromDirectoryLink(HttpServletRequest request) |
{ |
String path = request.getPathInfo(); |
if(!request.getServletPath().equals("/dir")) |
return null; |
String directory = path.substring(1,path.indexOf('/')); |
Document directoryDocument = null; |
try |
{ |
directoryDocument = Dom4jUtil.parseSourceFileFromCache("/pt/estgp/estgweb/directories/" + directory + ".xml"); |
} |
catch (DocumentException e) |
{ |
logger.error(e,e); |
return null; |
} |
catch (IOException e) |
{ |
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. |
} |
if (path.startsWith("/")) |
path = path.substring(1); |
String[] ids = path.split("/"); |
StringBuilder startPath = new StringBuilder(); |
DirectoryNodeType directoryNodeType = null; |
String actualNodeId = null; |
Element actualNode = null; |
int stopName = 0; |
List<Rights> rights = new ArrayList<Rights>(); |
for (String id : ids) |
{ |
XPath idXpath = directoryDocument.createXPath("//*[@id='" + id + "']"); |
idXpath.setNamespaceURIs(namespaces); |
Element idElem = (Element) idXpath.selectSingleNode(directoryDocument); |
if (idElem == null) |
{ |
directoryNodeType = DirectoryNodeType.external; |
break; |
} |
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) |
{ |
String externalFile = buildExternalFile(stopName, ids); |
String url = getAttributeValue(actualNode, "url"); |
String proxy = getAttributeValue(actualNode, "proxy"); |
if(proxy != null && proxy.length() > 0) |
{ |
String link = getLink(proxy,url); |
if(link == null) |
return null; |
else |
{ |
return startPath + link; |
} |
} |
} |
return null; |
} |
private static String getLink(String server, String urlPath) |
{ |
String serverHostUrl = ConfigProperties.getProperty("server." + server) + ConfigProperties.getProperty("server." + server + ".start.path"); |
String finalFileCandidate1 = urlPath.substring(0,urlPath.lastIndexOf("/")) + "/top.jpg"; |
int lastIndexOfDot = urlPath.lastIndexOf("."); |
String finalFileCandidate2 = null; |
if(lastIndexOfDot >= 0) |
finalFileCandidate2 = urlPath.substring(0,lastIndexOfDot) + ".jpg"; |
// String protocol = request.getRequestURL().substring(0,request.getRequestURL().indexOf("://")); |
String finalFileCandidate1total = serverHostUrl + finalFileCandidate1; |
String finalFileCandidate2total = null; |
if(finalFileCandidate2 != null) |
finalFileCandidate2total = serverHostUrl + finalFileCandidate2; |
if(finalFileCandidate2 != null) |
try |
{ |
URL url = new URL(finalFileCandidate2total); |
url.openConnection().getInputStream(); |
return finalFileCandidate2.substring(finalFileCandidate2.lastIndexOf("/")); |
} |
catch (MalformedURLException e) |
{ |
logger.error("BAD TOP IMAGE URL 2: " + finalFileCandidate2total); |
} |
catch (IOException e) |
{ |
logger.debug("candidate 2 don't exist: " + finalFileCandidate2total); |
} |
try |
{ |
URL url = new URL(finalFileCandidate1total); |
url.openConnection().getInputStream(); |
return "/top.jpg"; |
} |
catch (MalformedURLException e) |
{ |
logger.error("BAD TOP IMAGE URL 1: " + finalFileCandidate1total); |
} |
catch (IOException e) |
{ |
logger.debug("candidate 1 don't exist: " + finalFileCandidate1total); |
} |
return null; |
} |
private static String getAttributeValue(Element actualNode, String name) |
{ |
return (actualNode.attribute(name) != null ? actualNode.attribute(name).getValue() : null); |
} |
private static String buildExternalFile(int stopName, String[] ids) |
{ |
if (stopName <= ids.length) |
{ |
StringBuilder externalFileBuilder = new 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; |
} |
} |
/impl/src/java/pt/estgp/estgweb/web/DirLayoutController.java |
---|
25,6 → 25,7 |
import pt.estgp.estgweb.utils.Dom4jUtil; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.web.exceptions.NotAuthorizedException; |
import pt.estgp.estgweb.services.directories.DirectoryNodeType; |
import jomm.web.ftp.IFile; |
import jomm.web.ftp.impl.FtpFile; |
import jomm.web.utils.NavPlace; |
47,14 → 48,8 |
namespaces.put("d", "http://www.estgp.pt/baco/directory/"); |
} |
private static enum DirectoryNodeType |
{ |
node, |
leaf, |
directory, |
external |
} |
private static class Rights |
{ |
List<RightsT> rightsT; |
/impl/src/java/pt/estgp/estgweb/web/filters/TopImageDirectoryFilter.java |
---|
New file |
0,0 → 1,81 |
package pt.estgp.estgweb.web.filters; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.web.utils.ProxyUtils; |
import javax.servlet.*; |
import javax.servlet.http.HttpServletRequest; |
import java.io.IOException; |
/** |
* |
* @author Jorge Machado |
*/ |
public class TopImageDirectoryFilter implements Filter |
{ |
public static final String TOP_IMAGE = "TOP_IMAGE"; |
public static final String TOP_CSS = "TOP_CSS"; |
public TopImageDirectoryFilter() |
{ |
} |
public void init(FilterConfig config) |
{ |
} |
/** |
* |
* @param request The servlet request we are processing |
* @param chain The filter chain we are processing |
* |
* @exception java.io.IOException if an input/output error occurs |
* @exception javax.servlet.ServletException if a servlet error occurs |
*/ |
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) |
throws IOException, ServletException |
{ |
HttpServletRequest hrequest = (HttpServletRequest) request; |
String relativePath = hrequest.getServletPath(); |
if (relativePath == null) |
relativePath = ""; |
if (hrequest.getPathInfo() != null && hrequest.getPathInfo().length() > 0) |
{ |
relativePath += hrequest.getPathInfo(); |
} |
for (String ignore : Globals.FILTER_TOP_IMAGE_IGNORE_EXTENSIONS) |
{ |
if (relativePath.endsWith(ignore)) |
{ |
chain.doFilter(request, response); |
return; |
} |
} |
for (String ignore : Globals.FILTER_IGNORE_PREFIXES) |
{ |
if (relativePath.startsWith(ignore)) |
{ |
chain.doFilter(request, response); |
return; |
} |
} |
String link = ProxyUtils.getTopImageFromDirectoryLink((HttpServletRequest) request); |
if(link != null) |
{ |
request.setAttribute(TOP_IMAGE,link); |
request.setAttribute(TOP_CSS,link.substring(0,link.lastIndexOf("."))+".css"); |
} |
chain.doFilter(request,response); |
} |
public void destroy() |
{ |
// Nothing |
} |
} |
/impl/src/java/pt/estgp/estgweb/web/filters/TopImageFilter.java |
---|
19,6 → 19,7 |
{ |
public static final String TOP_IMAGE = "TOP_IMAGE"; |
public static final String TOP_CSS = "TOP_CSS"; |
public TopImageFilter() |
{ |
40,8 → 41,8 |
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) |
throws IOException, ServletException |
{ |
HttpServletRequest hrequest = (HttpServletRequest) request; |
String relativePath = hrequest.getServletPath(); |
HttpServletRequest hrequest = (HttpServletRequest) request; |
String relativePath = hrequest.getServletPath(); |
if (relativePath == null) |
relativePath = ""; |
50,7 → 51,7 |
relativePath += hrequest.getPathInfo(); |
} |
for (String ignore : Globals.FILTER_IGNORE_EXTENSIONS) |
for (String ignore : Globals.FILTER_TOP_IMAGE_IGNORE_EXTENSIONS) |
{ |
if (relativePath.endsWith(ignore)) |
{ |
67,9 → 68,14 |
} |
} |
String link = ProxyUtils.getTopImageLink((HttpServletRequest) request); |
request.setAttribute(TOP_IMAGE,link); |
chain.doFilter(request,response); |
String link = ProxyUtils.getTopImageLink((HttpServletRequest) request); |
if(link != null) |
{ |
request.setAttribute(TOP_IMAGE,link); |
request.setAttribute(TOP_CSS,link.substring(0,link.lastIndexOf("."))+".css"); |
} |
chain.doFilter(request,response); |
} |
public void destroy() |
/impl/src/web/css/style.css |
---|
39,6 → 39,11 |
background-color: black; |
} |
#header #headerTable |
{ |
background-image:url(@contextPath@/imgs/topFundoTijolo.jpg) |
} |
.log |
{ |
background:gray; |
/impl/src/web/layout/scripts.jsp |
---|
1,3 → 1,4 |
<%@ page import="pt.estgp.estgweb.web.filters.TopImageFilter" %> |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<link type="text/css" rel="stylesheet" href="<%=request.getContextPath()%>/css/style.css"/> |
<script type="text/javascript" src="<%=request.getContextPath()%>/js/functions.js"></script> |
3,5 → 4,17 |
<script type="text/javascript" src="<%=request.getContextPath()%>/js/ajax.js"></script> |
<script type="text/javascript" src="<%=request.getContextPath()%>/js/compactedPopup.js"></script> |
<% |
String link = (String) request.getAttribute(TopImageFilter.TOP_CSS); |
if (link != null) |
{ |
%> |
<link type="text/css" rel="stylesheet" href="<%=link%>"/> |
<% |
} |
%> |
<script type="text/javascript" language="JavaScript"> |
var cal = new CalendarPopup(); |
</script> |
/impl/src/web/layout/header.jsp |
---|
6,7 → 6,7 |
<%@ taglib uri="/WEB-INF/tlds/struts-logic.tld" prefix="logic" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-bean.tld" prefix="bean" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-tiles.tld" prefix="tiles" %> |
<table width="100%" style="background-image:url(<%=request.getContextPath()%>/imgs/topFundoTijolo.jpg)"> |
<table id="headerTable" width="100%"> |
<tr> |
<td> |