Java tutorial
/** * Copyright (C) 2008-2010, Squale Project - http://www.squale.org * * This file is part of Squale. * * Squale is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the * License, or any later version. * * Squale is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Squale. If not, see <http://www.gnu.org/licenses/>. */ /* * Cr le 30 juin 05 * * Pour changer le modle de ce fichier gnr, allez : * Fentre>Prfrences>Java>Gnration de code>Code et commentaires */ package org.squale.welcom.struts.webServer; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import java.util.Date; import javax.servlet.ServletContext; import javax.servlet.http.HttpServlet; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.squale.welcom.outils.Util; import org.squale.welcom.outils.WelcomConfigurator; /** * @author M327837 Pour changer le modle de ce commentaire de type gnr, allez : * Fentre>Prfrences>Java>Gnration de code>Code et commentaires */ public class URLManager { /** Fichier wel */ private WebFile mWebFile = null; /** Type mime */ private String mimeType = ""; /** Url Saisie */ private String sUrl = ""; /** Servlet HTTP */ private HttpServlet servlet; /** logger */ private static Log logger = LogFactory.getLog(URLManager.class); /** * Construit un nouvel URL Manager * * @param pSUrl : URL sous formatChaine * @param pServlet : servlet * @throws IOException Pb sur la stream */ public URLManager(final String pSUrl, final HttpServlet pServlet) throws IOException { sUrl = pSUrl; // Pour compatibilit avec le calendrier popup v3 if (sUrl.indexOf('?') > 0) { sUrl = sUrl.substring(0, sUrl.indexOf('?')); } servlet = pServlet; computeURL(); } /** * Recontruit l'URL et recherche la derniere date de modification * * @throws IOException Pb sur la stream */ private void computeURL() throws IOException { mWebFile = getWebFileFromContext(servlet.getServletContext(), sUrl); // Si webFile est null .. if (mWebFile == null && Util.isTrue(WelcomConfigurator.getMessage(WelcomConfigurator.OPTIFLUX_JSOBFUSCATOR_DISABLED))) { if (mWebFile == null) { mWebFile = getWebFileFromClassPath( "/web/" + WelcomConfigurator.getCharte().getWelcomConfigPrefix() + "/debug/" + sUrl); } if (mWebFile == null) { mWebFile = getWebFileFromClassPath("/web/debug/" + sUrl); } } if (mWebFile == null) { mWebFile = getWebFileFromClassPath( "/web/" + WelcomConfigurator.getCharte().getWelcomConfigPrefix() + "/" + sUrl); } if (mWebFile == null) { mWebFile = getWebFileFromClassPath("/web/" + sUrl); } // Si l'url n'est pas sur le site if (mWebFile == null) { mWebFile = getWebFileFromHTTP(sUrl); } // Teste si le logger est en debug, permet d'augment les perfs if (logger.isDebugEnabled()) { logger.info("web file : " + sUrl + " , " + mWebFile.getUrl()); } // Stocke le type mime en demandant a WAS le type associ mimeType = servlet.getServletConfig().getServletContext().getMimeType(sUrl); } /** * Retourn l'url a partie d'un site distant * * @param pUrl url * @throws MalformedURLException problem sur l'url * @throws IOException exception * @return webfile */ private WebFile getWebFileFromHTTP(String pUrl) throws MalformedURLException, IOException { WebFile webFile = new WebFile(WebFile.TYPE_DISTANT); webFile.setUrl(new URL(pUrl)); final URLConnection urlcon = webFile.getUrl().openConnection(); urlcon.setUseCaches(true); urlcon.connect(); webFile.setLastDate(new Date(urlcon.getLastModified())); if (urlcon.getLastModified() == 0) { webFile.setLastDate(new Date(urlcon.getDate())); } return webFile; } /** * Retoune le webFile dans le repertoire webcontent * * @param context context * @param pUrl url * @return le webfile */ public WebFile getWebFileFromContext(ServletContext context, String pUrl) { WebFile webFile = new WebFile(WebFile.TYPE_SERVLET); // Compatibilit Tomcat !! try { webFile.setUrl(context.getResource(pUrl)); } catch (final Exception e) { try { // Test compatiblite Tomcat (Necessite un /) webFile.setUrl(context.getResource("/" + pUrl)); } catch (final Exception ee) { // Recherche si la resource demand ne se trouve pas dans le jar Welcom } } if (webFile.getUrl() != null) { // recherche la date final String file = context.getRealPath(sUrl); final File f = new File(file); webFile.setLastDate(new Date(f.lastModified())); return webFile; } else { return null; } } /** * Retourne le web file a partir du classPath * * @param pUrl url * @return le webFile */ public WebFile getWebFileFromClassPath(String pUrl) { logger.debug("TEST : " + pUrl); WebFile webFile = new WebFile(WebFile.TYPE_CLASSPATH); try { webFile.setUrl(this.getClass().getResource(pUrl)); if (webFile.getUrl() != null) { webFile.setLastDate(getURLDate(webFile.getUrl())); } } catch (final Exception e) { // Ne fais rien -> webFile.getUrl()== null } if (webFile.getUrl() == null) { return null; } else { return webFile; } } /** * Recupere la date du fichier dont le chemin est l'url * * @param pUrl : L'url * @return : Date dir URL OK * @throws IOException Probleme sur l'ouverture de la connection */ public Date getURLDate(final URL pUrl) throws IOException { final URLConnection urlcon = pUrl.openConnection(); urlcon.setUseCaches(true); urlcon.connect(); return new Date(urlcon.getLastModified()); } /** * @return Date de derniere modification */ public Date getLastDate() { if ((WelcomConfigurator.getLastDate() != null) && (WelcomConfigurator.getLastDate().getTime() >= mWebFile.getLastDate().getTime())) { return WelcomConfigurator.getLastDate(); } else { return mWebFile.getLastDate(); } } /** * @return Type mime */ public String getMimeType() { return mimeType; } /** * @return Url d'origine */ public String getSUrl() { return sUrl; } /** * @return Relle URL */ public URL getUrl() { return mWebFile.getUrl(); } /** * Retourne true si c'est une image * * @return vrais si c'est une image */ public boolean isImage() { return (getMimeType().indexOf("image") > -1); } }