Subversion Repositories bacoAlunos

Rev

Rev 1306 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

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;


                        int matchSize = 0;
                    1.5.0/docs/api/java/lang/String.html">String finalUrlAux = null;
            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);
                                int nowMatchSize = url.length();
                if(link.startsWith(url) && nowMatchSize > matchSize)
                {
                    1.5.0/docs/api/java/lang/String.html">String finalUrl = Globals.TOP_IMAGE_FILTER_IMAGES_URL.get(i);
                    if(finalUrl.startsWith("/"))
                        finalUrlAux = request.getContextPath() + finalUrl;
                    else
                        finalUrlAux = finalUrl;
                                        matchSize = nowMatchSize;
                }
                               
            }
                        return finalUrlAux;
        }
        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;
    }
}