Subversion Repositories bacoAlunos

Compare Revisions

Ignore whitespace Rev 395 → Rev 396

/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>