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(a)free.fr>
-* Copyright Code Lutin
-* @version $Revision$
-*
-* Mise a jour: $Date$
-* par : $Author$
-*/
+ * Resource.java
+ *
+ * Created: Sun Apr 14 2002
+ *
+ * @author POUSSIN Benjamin <bpoussin(a)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