[Lutinutil-commits] r870 - trunk/lutinutil/src/main/java/org/codelutin/util
Author: chatellier Date: 2008-07-10 14:02:23 +0000 (Thu, 10 Jul 2008) New Revision: 870 Modified: trunk/lutinutil/src/main/java/org/codelutin/util/Resource.java Log: Reformat code, add comment, and correct some comments Modified: trunk/lutinutil/src/main/java/org/codelutin/util/Resource.java =================================================================== --- trunk/lutinutil/src/main/java/org/codelutin/util/Resource.java 2008-07-10 08:34:12 UTC (rev 869) +++ trunk/lutinutil/src/main/java/org/codelutin/util/Resource.java 2008-07-10 14:02:23 UTC (rev 870) @@ -1,33 +1,33 @@ /**##%% -* Copyright (C) 2002, 2003, 2004 Code Lutin, C�dric Pineau, Benjamin Poussin -* -* This program is free software; you can redistribute it and/or -* modify it under the terms of the GNU General Public License -* as published by the Free Software Foundation; either version 2 -* of the License, or (at your option) any later version. -* -* This program 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 General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*##%%**/ + * Copyright (C) 2002, 2003, 2004 Code Lutin, C�dric Pineau, Benjamin Poussin + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program 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 General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + *##%%**/ /** -* Resource.java -* -* Created: Sun Apr 14 2002 -* -* @author POUSSIN Benjamin <bpoussin@free.fr> -* Copyright Code Lutin -* @version $Revision$ -* -* Mise a jour: $Date$ -* par : $Author$ -*/ + * Resource.java + * + * Created: Sun Apr 14 2002 + * + * @author POUSSIN Benjamin <bpoussin@free.fr> + * Copyright Code Lutin + * @version $Revision$ + * + * Mise a jour: $Date$ + * par : $Author$ + */ package org.codelutin.util; @@ -54,14 +54,13 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; - /** -* Cette class permet de recherche un fichier en indiquant son nom -* avec son chemin. Cette librairie ira ensuite chercher ce fichier -* sur le syst�me de fichier, et s'il n'est pas trouv� dans le -* classpath. Le fichier peut donc �tre dans un fichier .jar ou .zip. -*/ -public class Resource { // Resource + * Cette class permet de rechercher un fichier en indiquant son nom avec son + * chemin. Cette librairie ira ensuite chercher ce fichier sur le syst�me de + * fichier, et s'il n'est pas trouv� dans le classpath. Le fichier peut donc + * �tre dans un fichier .jar ou .zip. + */ +public class Resource { // Resource /** to use log facility, just put in your code: log.info(\"...\"); */ private static final Log log = LogFactory.getLog(Resource.class); @@ -71,64 +70,72 @@ } /** - * Permet d'ajouter dans le classloader par defaut une nouvelle URL - * dans lequel il faut rechercher les fichiers. - * @param url l'url a ajouter - */ - static public void addDefaultClassLoader(URL url){ - try{ + * Permet d'ajouter dans le classloader par defaut une nouvelle URL dans + * lequel il faut rechercher les fichiers. + * + * @param url l'url a ajouter + */ + static public void addDefaultClassLoader(URL url) { + try { ClassLoader classLoader = ClassLoader.getSystemClassLoader(); - Method method = URLClassLoader.class.getDeclaredMethod("addURL", new Class[]{URL.class}); + Method method = URLClassLoader.class.getDeclaredMethod("addURL", + new Class[] { URL.class }); method.setAccessible(true); method.invoke(classLoader, url); - }catch(Exception eee){ - throw new RuntimeException("Can't add url in default classloader", eee); + } catch (Exception eee) { + throw new RuntimeException("Can't add url in default classloader", + eee); } } /** - * recherche la ressource nom - * @param name nom de la ressource - * @return l'url de la ressource - * @throws ResourceNotFoundException si la resource n'a pas ete trouvee - */ + * Recherche la ressource nom. + * + * @param name nom de la ressource + * @return l'url de la ressource + * @throws ResourceNotFoundException si la resource n'a pas ete trouvee + */ static public URL getURL(String name) { URL url = getURLOrNull(name); - if (url != null){ + if (url != null) { return url; } - throw new ResourceNotFoundException("La resource " + name + - " n'a pas �t� trouv�e"); + throw new ResourceNotFoundException("La resource " + name + + " n'a pas �t� trouv�e"); } /** - * recherche la ressource nom - * @param name le nom de la ressource - * @return l'url de la ressource ou null - */ + * Recherche la ressource nom. + * + * @param name le nom de la ressource + * @return l'url de la ressource ou null + */ static public URL getURLOrNull(String name) { // on recherche d'abord sur le filesystem File file = new File(name); - if (file.exists()){ - try{ + if (file.exists()) { + try { return file.toURI().toURL(); - }catch(MalformedURLException eee){ - log.warn("Le fichier '" + file + "' a �t� trouv�, mais il n'a pas pu etre converti en URL"); + } catch (MalformedURLException eee) { + log + .warn("Le fichier '" + + file + + "' a �t� trouv�, mais il n'a pas pu etre converti en URL"); } } - //on ne l'a pas trouve on recherche dans le classpath + // on ne l'a pas trouve on recherche dans le classpath // on supprime le / devant le nom de la ressource, sinon elle // n'est pas trouve (pas de recherche dans les differents // element du classpath. - if(name.length() > 1 && name.startsWith("/")){ + if (name.length() > 1 && name.startsWith("/")) { name = name.substring(1); } URL url = ClassLoader.getSystemClassLoader().getResource(name); - if (url != null){ + if (url != null) { return url; } @@ -138,35 +145,50 @@ } /** - * Retourne l'icon demande - * @param name le nom de l'icone + * Retourne l'icone demandee. + * + * @param name le nom de l'icone * @return Retourne l'icon demande ou null s'il n'est pas trouv� - */ - static public ImageIcon getIcon(String name){ - try{ + */ + static public ImageIcon getIcon(String name) { + try { return new ImageIcon(getURL(name)); - }catch(Exception eee){ + } catch (Exception eee) { log.warn("Can't find icon: " + name, eee); return null; } } - /** - * Recherche et retourne l'objet properties de configuration � utiliser. - * Les diff�rents fichiers trouv� sont chain�. L'ordre de recherche est - * le classpath, le fichier dans /etc et enfin le chemin sur le filesystem - * @param filename le nom du fichier � rechercher - * @return l'objet Properties de configuration - * @throws java.io.IOException si pb - */ - static public Properties getConfigProperties(String filename) throws IOException { + * Recherche et retourne l'objet properties de configuration � utiliser. + * + * Les diff�rents fichiers trouv� sont chain�. L'ordre de recherche est le + * classpath, le fichier dans /etc et enfin le chemin sur le filesystem. + * + * @param filename le nom du fichier � rechercher + * @return l'objet Properties de configuration + * @throws IOException si une erreur est survenue + */ + static public Properties getConfigProperties(String filename) + throws IOException { Properties result; result = getConfigProperties(filename, null); return result; } - static public Properties getConfigProperties(String filename, Properties parent) throws IOException { + /** + * Recherche et retourne l'objet properties de configuration � utiliser. + * + * Les diff�rents fichiers trouv� sont chain�. L'ordre de recherche est le + * classpath, le fichier dans /etc et enfin le chemin sur le filesystem. + * + * @param filename le nom du fichier � rechercher + * @param parent les proprietes parent a surcharger + * @return l'objet Properties de configuration + * @throws IOException si une erreur est survenue + */ + static public Properties getConfigProperties(String filename, + Properties parent) throws IOException { Properties result; if (parent != null) { result = new Properties(parent); @@ -174,28 +196,29 @@ result = new Properties(); } - URL inClasspath = ClassLoader.getSystemClassLoader().getResource(filename); + URL inClasspath = ClassLoader.getSystemClassLoader().getResource( + filename); if (inClasspath == null) { inClasspath = Resource.class.getResource(filename); } if (inClasspath == null) { inClasspath = getURLOrNull(filename); } - if(inClasspath != null){ + if (inClasspath != null) { log.info("Chargement du fichier de config: " + inClasspath); result.load(inClasspath.openStream()); result = new Properties(result); } File etcConfig = new File("/etc/" + filename); - if(etcConfig.exists()){ + if (etcConfig.exists()) { log.info("Chargement du fichier de config: " + etcConfig); result.load(etcConfig.toURI().toURL().openStream()); result = new Properties(result); } File config = new File(filename); - if(config.exists()){ + if (config.exists()) { log.info("Chargement du fichier de config: " + config); result.load(config.toURI().toURL().openStream()); result = new Properties(result); @@ -205,22 +228,23 @@ } /** - * Retourner la liste des fichiers du classLoader. Ces fichiers doivent - * correspondent au pattern donne - * - * @param pattern le nom du fichier a extraire du - * fichier compress� ou durepertoire doit correspondre - * au pattern (repertoire + nom compris). - * @return la liste des urls correspondant au pattern - */ + * Retourner la liste des fichiers du classLoader. Ces fichiers doivent + * correspondre au pattern donne. + * + * @param pattern le nom du fichier a extraire du fichier compress� ou + * du repertoire doit correspondre au pattern (repertoire + nom + * compris). + * @return la liste des urls correspondant au pattern + */ static public List<URL> getURLs(String pattern) { return getURLs(pattern, (URLClassLoader) null); } - static private URL[] getURLs(URLClassLoader classLoader) { - Method m; + static protected URL[] getURLs(URLClassLoader classLoader) { + Method m; try { - // Essai de r�cup�ration de la m�thode getAllURLs() de RepositoryClassLoader (JBoss) + // Essai de r�cup�ration de la m�thode getAllURLs() de + // RepositoryClassLoader (JBoss) m = classLoader.getClass().getMethod("getAllURLs"); } catch (Exception e) { m = null; @@ -239,34 +263,34 @@ } /** - * Retourner la liste des fichiers du classLoader. Ces fichiers doivent - * correspondent au pattern donne - * - *@param classLoader le classLoader - *@param pattern le nom du fichier a extraire du - * fichier compress� ou durepertoire doit correspondre - * au pattern (repertoire + nom compris). - *@return la liste des urls correspondant au pattern - */ + * Retourner la liste des fichiers du classLoader. Ces fichiers doivent + * correspondre au pattern donne. + * + * @param classLoader le classLoader + * @param pattern le nom du fichier a extraire du fichier compress� ou + * du repertoire doit correspondre au pattern (repertoire + nom + * compris). + * @return la liste des urls correspondant au pattern + */ static public List<URL> getURLs(String pattern, URLClassLoader classLoader) { - if(classLoader == null){ - classLoader = (URLClassLoader)ClassLoader.getSystemClassLoader(); + if (classLoader == null) { + classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader(); } URL[] arrayURL = getURLs(classLoader); - return getURLs(pattern,arrayURL); + return getURLs(pattern, arrayURL); } /** - * Retourner la liste des fichiers du classLoader. Ces fichiers doivent - * correspondent au pattern donne - * - *@param arrayURL les urls ou chercher - *@param pattern le nom du fichier a extraire du - * fichier compress� ou durepertoire doit correspondre - * au pattern (repertoire + nom compris). - *@return la liste des urls correspondant au pattern - */ - static public List<URL> getURLs(String pattern, URL... arrayURL ) { + * Retourner la liste des fichiers du classLoader. Ces fichiers doivent + * correspondre au pattern donne. + * + * @param arrayURL les urls ou chercher + * @param pattern le nom du fichier a extraire du fichier compress� ou + * durepertoire doit correspondre au pattern (repertoire + nom + * compris). + * @return la liste des urls correspondant au pattern + */ + static public List<URL> getURLs(String pattern, URL... arrayURL) { long t0 = System.nanoTime(); HashList<URL> urlList = new HashList<URL>(); @@ -279,7 +303,7 @@ arrayURL = getClassPathURLsFromJarManifest(jarURL); } catch (Exception e) { log.warn(e); - arrayURL = new URL[]{jarURL}; + arrayURL = new URL[] { jarURL }; } } } @@ -291,8 +315,9 @@ for (URL urlFile : arrayURL) { String fileName = urlFile.getFile(); - //TODO deal with encoding in windows, this is very durty, but it works... - File file= new File(fileName.replaceAll("%20", " ")); + // TODO deal with encoding in windows, this is very durty, but it + // works... + File file = new File(fileName.replaceAll("%20", " ")); // cas ou le ichier du classLoader est un fichier jar ou zip if (file.exists() && (isJar(fileName) || isZip(fileName))) { if (log.isDebugEnabled()) { @@ -305,18 +330,22 @@ if (log.isDebugEnabled()) { log.debug("file to search " + file); } - // on traite le cas ou il peut y avoir des repertoire dans ce repertoire + // on traite le cas ou il peut y avoir des repertoire dans ce + // repertoire urlList.addAll(Resource.getURLsFromDirectory(file, pattern)); } } if (log.isInfoEnabled()) { - log.info("search URLs pattern: " + pattern + " in " + arrayURL.length+" urls in "+StringUtil.convertTime(System.nanoTime()-t0)); + log.info("search URLs pattern: " + pattern + " in " + + arrayURL.length + " urls in " + + StringUtil.convertTime(System.nanoTime() - t0)); } return urlList; } - static public URL[] getClassPathURLsFromJarManifest(URL jarURL) throws IOException, URISyntaxException { - JarFile jar=null; + static public URL[] getClassPathURLsFromJarManifest(URL jarURL) + throws IOException, URISyntaxException { + JarFile jar = null; URL[] result; try { String jarPath = jarURL.toURI().getPath(); @@ -327,7 +356,8 @@ jar = new JarFile(jarFile); File container = jarFile.getParentFile(); Manifest mf = jar.getManifest(); - String classPath = mf.getMainAttributes().getValue(Attributes.Name.CLASS_PATH); + String classPath = mf.getMainAttributes().getValue( + Attributes.Name.CLASS_PATH); String[] paths = classPath.split(" "); result = new URL[paths.length + 1]; result[0] = jarURL; @@ -336,9 +366,9 @@ String s = paths[i]; if (s.startsWith(".") || !s.startsWith("/")) { // relative url - path =new File(container,s); + path = new File(container, s); } else { - path =new File(s); + path = new File(s); } if (log.isDebugEnabled()) { log.debug(path); @@ -347,7 +377,7 @@ } jar.close(); } finally { - if (jar!=null) { + if (jar != null) { jar.close(); } } @@ -355,8 +385,8 @@ } static public List<URL> getURLsFromJar(File jarfile, String pattern) { - try{ - if(log.isTraceEnabled()) { + try { + if (log.isTraceEnabled()) { log.trace("search '" + pattern + "' in " + jarfile); } @@ -371,44 +401,45 @@ } String name = entry.getName(); - if(log.isTraceEnabled()) { + if (log.isTraceEnabled()) { log.trace("jarfile: " + jarfile + " name: " + name); } if (pattern == null || name.matches(pattern)) { - // on recupere le fichier correspondant au pattern dans le classloader + // on recupere le fichier correspondant au pattern dans le + // classloader URL url = Resource.getURL(name); - // on ajoute le fichier correspondant au pattern dans la liste - if(log.isTraceEnabled()) { + // on ajoute le fichier correspondant au pattern dans la + // liste + if (log.isTraceEnabled()) { log.trace("jarfile: " + jarfile + " url: " + url); } result.add(url); } } - if(log.isTraceEnabled()) { + if (log.isTraceEnabled()) { log.trace("found with pattern '" + pattern + "' : " + result); } return result; - }catch(IOException eee){ - throw new ResourceException("Erreur lors de la lecture du fichier compress�", eee); + } catch (IOException eee) { + throw new ResourceException( + "Erreur lors de la lecture du fichier compress�", eee); } } /** - * Retourner la liste des fichiers correspondant au pattern donne, aucun - * ordre ne doit sur le fichier ne doit �tre suppos�. - * - *@param repository repertoire dans lequel on recherche les fichiers - *@param pattern le nom du fichier a extraire du - * fichier du repertoire doit correspondre - * au pattern (repertoire + nom compris). - * si le pattern est null, tous les fichiers trouv� - * sont retourn�. - * - *@return la liste des urls correspondant au pattern - */ + * Retourne la liste des fichiers correspondant au pattern donne, aucun + * ordre ne doit �tre suppos� sur les fichiers. + * + * @param repository repertoire dans lequel on recherche les fichiers + * @param pattern le nom du fichier a extraire du fichier du repertoire doit + * correspondre au pattern (repertoire + nom compris). si le + * pattern est null, tous les fichiers trouv� sont retourn�. + * + * @return la liste des urls correspondant au pattern + */ static public List<URL> getURLsFromDirectory(File repository, String pattern) { - try{ - if(log.isTraceEnabled()) { + try { + if (log.isTraceEnabled()) { log.trace("search '" + pattern + "' in " + repository); } @@ -422,37 +453,44 @@ String name = file.getAbsolutePath(); if (log.isTraceEnabled()) { - log.trace("directory: " + repository + " name: " + name); + log + .trace("directory: " + repository + " name: " + + name); } // cas de recursivite : repertoire dans un repertoire if (file.exists() && file.isDirectory()) { - urlList.addAll(Resource.getURLsFromDirectory(file, pattern)); - // si le fichier du repertoire n'est pas un repertoire on verifie s'il correspond au pattern + urlList.addAll(Resource.getURLsFromDirectory(file, + pattern)); + // si le fichier du repertoire n'est pas un repertoire + // on verifie s'il correspond au pattern } else if (pattern == null || name.matches(pattern)) { URL url = file.toURI().toURL(); if (log.isTraceEnabled()) { - log.trace("directory: " + repository + " url: " + url); + log.trace("directory: " + repository + " url: " + + url); } urlList.add(url); } } } - if(log.isTraceEnabled()) { + if (log.isTraceEnabled()) { log.trace("found with pattern '" + pattern + "' : " + urlList); } return urlList; - }catch(MalformedURLException eee){ - throw new ResourceException("Le fichier n'a pu �tre converti en URL", eee); + } catch (MalformedURLException eee) { + throw new ResourceException( + "Le fichier n'a pu �tre converti en URL", eee); } } /** - * Verifie si le fichier est un fichier jar - * @param name nom du fichier a tester - * @return vrai si le fichier se termine par .jar faux sinon - */ - static public boolean isJar(String name){ + * Verifie si le fichier est un fichier jar. + * + * @param name nom du fichier a tester + * @return vrai si le fichier se termine par .jar faux sinon + */ + static public boolean isJar(String name) { if (name != null && name.length() > 4) { String ext = name.substring(name.length() - 4, name.length()); return ".jar".equalsIgnoreCase(ext); @@ -461,11 +499,12 @@ } /** - * Verifie si le fichier est un fichier zip - * @param name nom du fichier a tester - * @return vrai si le fichier se termine par .zip faux sinon - */ - static public boolean isZip(String name){ + * Verifie si le fichier est un fichier zip + * + * @param name nom du fichier a tester + * @return vrai si le fichier se termine par .zip faux sinon + */ + static public boolean isZip(String name) { if (name != null && name.length() > 4) { String ext = name.substring(name.length() - 4, name.length()); return ".zip".equalsIgnoreCase(ext); @@ -474,49 +513,48 @@ } /** - * Verifie si la classe est de type primtif - * @param clazz nom de la classe a tester - * @return vrai si le classe est de type primitif faux sinon - */ - static public boolean isPrimitive(Class clazz){ - return clazz.isPrimitive() - || clazz == Boolean.class - || clazz == Byte.class - || clazz == Character.class - || clazz == Short.class - || clazz == Integer.class - || clazz == Long.class - || clazz == Float.class - || clazz == Double.class; + * Verifie si la classe est de type primitif. + * + * @param clazz nom de la classe a tester + * @return vrai si le classe est de type primitif faux sinon + */ + static public boolean isPrimitive(Class clazz) { + return clazz.isPrimitive() || clazz == Boolean.class + || clazz == Byte.class || clazz == Character.class + || clazz == Short.class || clazz == Integer.class + || clazz == Long.class || clazz == Float.class + || clazz == Double.class; } /** - * Retourne la classe du type primitf associ� avec la classe de de l'objet - * pass� en parametre. Par exemple si la classe pass�e en param�tre est - * Integer alors le resultat sera la classe de int. - * @param clazz la classe dont on souhaite le type primitf - * @return le type primitif associ� a la classe en param�tre, ou null - * s'il n'y a pas de type primitif associ�. - */ + * Retourne la classe du type primitf associ� avec la classe de de l'objet + * pass� en parametre. Par exemple si la classe pass�e en param�tre est + * Integer alors le resultat sera la classe de int. + * + * @param clazz la classe dont on souhaite le type primitf + * @return le type primitif associ� a la classe en param�tre, ou null s'il + * n'y a pas de type primitif associ�. + */ static public Class getPrimitiveClass(Class clazz) { - if (clazz == Boolean.class) return Boolean.TYPE; - if (clazz == Byte.class) return Byte.TYPE; - if (clazz == Character.class) return Character.TYPE; - if (clazz == Short.class) return Short.TYPE; - if (clazz == Integer.class) return Integer.TYPE; - if (clazz == Long.class) return Long.TYPE; - if (clazz == Float.class) return Float.TYPE; - if (clazz == Double.class) return Double.TYPE; - if (clazz == Void.class) return Void.TYPE; + if (clazz == Boolean.class) + return Boolean.TYPE; + if (clazz == Byte.class) + return Byte.TYPE; + if (clazz == Character.class) + return Character.TYPE; + if (clazz == Short.class) + return Short.TYPE; + if (clazz == Integer.class) + return Integer.TYPE; + if (clazz == Long.class) + return Long.TYPE; + if (clazz == Float.class) + return Float.TYPE; + if (clazz == Double.class) + return Double.TYPE; + if (clazz == Void.class) + return Void.TYPE; return null; } -// /** -// * Test -// */ -// static public void main(String [] args) throws Exception { -// String r = args.length>0?args[0]:"/org/codelutin/lutinbuilder/LutinBuilder.class"; -// System.out.println(getURL(r)); -// } - } // Resource
participants (1)
-
chatellier@users.labs.libre-entreprise.org