Nuiton-utils-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
May 2009
- 3 participants
- 151 discussions
[Lutinutil-commits] r1547 - in nuitonutil/trunk/src: main/java/org test/java/org
by tchemit@users.labs.libre-entreprise.org 14 May '09
by tchemit@users.labs.libre-entreprise.org 14 May '09
14 May '09
Author: tchemit
Date: 2009-05-14 05:39:58 +0000 (Thu, 14 May 2009)
New Revision: 1547
Removed:
nuitonutil/trunk/src/main/java/org/codelutin/
nuitonutil/trunk/src/test/java/org/codelutin/
Log:
migrate to nuiton
1
0
[Lutinutil-commits] r1546 - maven-license-switcher-plugin/trunk
by tchemit@users.labs.libre-entreprise.org 14 May '09
by tchemit@users.labs.libre-entreprise.org 14 May '09
14 May '09
Author: tchemit
Date: 2009-05-14 05:21:43 +0000 (Thu, 14 May 2009)
New Revision: 1546
Modified:
maven-license-switcher-plugin/trunk/pom.xml
Log:
ajout dependence sur plexus-utils
Modified: maven-license-switcher-plugin/trunk/pom.xml
===================================================================
--- maven-license-switcher-plugin/trunk/pom.xml 2009-05-14 05:19:42 UTC (rev 1545)
+++ maven-license-switcher-plugin/trunk/pom.xml 2009-05-14 05:21:43 UTC (rev 1546)
@@ -36,7 +36,15 @@
<version>${helper.version}</version>
<scope>compile</scope>
</dependency>
-
+
+ <!-- FIXME si on ne le rajoute pas, on se retrouve avec la version 1.1 qui ne convient pas -->
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>1.5.5</version>
+ <scope>compile</scope>
+ </dependency>
+
<!-- tests dependencies -->
<dependency>
@@ -54,20 +62,6 @@
<scope>test</scope>
</dependency>
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-plugin-api</artifactId>
- <version>${maven.version}</version>
- <scope>provided</scope>
- </dependency>
-
- <dependency>
- <groupId>org.apache.maven</groupId>
- <artifactId>maven-project</artifactId>
- <version>${maven.version}</version>
- <scope>provided</scope>
- </dependency>
-
</dependencies>
<!-- ************************************************************* -->
@@ -117,29 +111,6 @@
</executions>
</plugin>
- <!--plugin>
- <artifactId>maven-antrun-plugin</artifactId>
- <executions>
-
- <execution>
- <id>CopySiteFiles2</id>
- <phase>pre-site</phase>
- <configuration>
- <tasks>
- <mkdir dir="target/site" />
- <copy todir="target/site" verbose="${maven.verbose}" overwrite="false">
- <fileset dir="${maven.src.dir}/main/resources/META-INF">
- <include name="licenses/**" />
- </fileset>
- </copy>
- </tasks>
- </configuration>
- <goals>
- <goal>run</goal>
- </goals>
- </execution>
- </executions>
- </plugin-->
<!-- plugin site -->
<plugin>
<artifactId>maven-site-plugin</artifactId>
1
0
[Lutinutil-commits] r1545 - in maven-i18n-plugin/trunk: . src/main/java/org/nuiton/i18n/plugin src/main/java/org/nuiton/i18n/plugin/parser src/site src/site/rst
by tchemit@users.labs.libre-entreprise.org 14 May '09
by tchemit@users.labs.libre-entreprise.org 14 May '09
14 May '09
Author: tchemit
Date: 2009-05-14 05:19:42 +0000 (Thu, 14 May 2009)
New Revision: 1545
Removed:
maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/PluginHelper.java
maven-i18n-plugin/trunk/src/site/rst/Todo.rst
Modified:
maven-i18n-plugin/trunk/pom.xml
maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/AbstractI18nPlugin.java
maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/Bundle.java
maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/Generate.java
maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/Getter.java
maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/I18nLogger.java
maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/parser/AbstractI18nParser.java
maven-i18n-plugin/trunk/src/site/site.xml
Log:
utilisation nuiton-i18n-api
Modified: maven-i18n-plugin/trunk/pom.xml
===================================================================
--- maven-i18n-plugin/trunk/pom.xml 2009-05-14 05:19:13 UTC (rev 1544)
+++ maven-i18n-plugin/trunk/pom.xml 2009-05-14 05:19:42 UTC (rev 1545)
@@ -24,6 +24,13 @@
<dependency>
<groupId>org.nuiton</groupId>
+ <artifactId>nuiton-i18n-api</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.nuiton</groupId>
<artifactId>nuitonprocessor</artifactId>
<version>${processor.version}</version>
<scope>compile</scope>
@@ -36,6 +43,28 @@
<scope>compile</scope>
</dependency>
+ <dependency>
+ <groupId>xalan</groupId>
+ <artifactId>xalan</artifactId>
+ <version>2.7.1</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>commons-collections</groupId>
+ <artifactId>commons-collections</artifactId>
+ <version>3.1</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <!-- FIXME si on ne le rajoute pas, on se retrouve avec la version 1.1 qui ne convient pas -->
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>1.5.5</version>
+ <scope>compile</scope>
+ </dependency>
+
<!-- tests dependencies -->
<dependency>
@@ -53,27 +82,13 @@
<scope>test</scope>
</dependency>
- <dependency>
+ <!--dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>maven-dependency-tree</artifactId>
<version>1.2</version>
</dependency>
<dependency>
- <groupId>xalan</groupId>
- <artifactId>xalan</artifactId>
- <version>2.7.0</version>
- <scope>compile</scope>
- </dependency>
-
- <dependency>
- <groupId>commons-collections</groupId>
- <artifactId>commons-collections</artifactId>
- <version>3.1</version>
- <scope>compile</scope>
- </dependency>
-
- <dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>${maven.version}</version>
@@ -85,24 +100,17 @@
<artifactId>maven-project</artifactId>
<version>${maven.version}</version>
<scope>provided</scope>
- </dependency>
+ </dependency-->
- <dependency>
- <groupId>org.codelutin</groupId>
- <artifactId>lutinutil</artifactId>
- <version>${lutinutil.version}</version>
- <scope>provided</scope>
- </dependency>
-
</dependencies>
<!-- ************************************************************* -->
<!-- *** Project Information ************************************* -->
<!-- ************************************************************* -->
- <name>Plugin maven pour lutini18n</name>
+ <name>Plugin maven pour i18n</name>
<description>
- Plugin pour maven 2 pour la génération des bundles pour l'internationnalisation des applications java fait par
- lutinutil-i18n
+ Plugin pour maven 2 de génération des bundles pour l'internationnalisation (i18n) des applications java
+ basé sur nuiton-i18n-api.
</description>
<inceptionYear>2007</inceptionYear>
@@ -126,7 +134,6 @@
<helper.licenseName>lgpl_v3</helper.licenseName>
<site.home.url>http://lutinutil.labs.libre-entreprise.org</site.home.url>
<repository.home.url>http://lutinbuilder.labs.libre-entreprise.org/maven2</repository.home.url>
- <lutinutil.version>1.0.6</lutinutil.version>
</properties>
<build>
Modified: maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/AbstractI18nPlugin.java
===================================================================
--- maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/AbstractI18nPlugin.java 2009-05-14 05:19:13 UTC (rev 1544)
+++ maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/AbstractI18nPlugin.java 2009-05-14 05:19:42 UTC (rev 1545)
@@ -19,12 +19,13 @@
import org.apache.maven.plugin.AbstractMojo;
import org.nuiton.i18n.plugin.parser.ParserEvent;
+import org.codelutin.i18n.I18nUtil;
import java.io.File;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
-import org.codelutin.i18n.I18n;
/**
* Classe permettant d'obenir les parametres pendant les différentes phases
@@ -151,11 +152,7 @@
if (verbose) {
getLog().info("config - verbose mode is on");
}
- locales = I18n.parseLocales(bundles);
-// bundlesToUse = bundles.split(",");
-// for (int i = 0, j = bundlesToUse.length; i < j; i++) {
-// bundlesToUse[i] = bundlesToUse[i].trim();
-// }
+ locales = I18nUtil.parseLocales(bundles);
}
public String getArtifactId() {
@@ -185,4 +182,60 @@
protected I18nLogger getVerboseLog() {
return verboseLog;
}
+
+ /**
+ * @param root le repertoire ou sont stockes les fichiers i18n
+ * @param artifactId le nom de l'artifact
+ * @param locale le nom du bundle
+ * @param create <code>true</code> pour creer le fichier si non present
+ * @return le fichier i18n
+ * @throws java.io.IOException si probleme lors de la creation du fichier
+ */
+ public File getI18nFile(File root, String artifactId, Locale locale, boolean create) throws IOException {
+ File file = new File(root.getAbsolutePath() + File.separatorChar + artifactId + "-" + locale.toString() + ".properties");
+ if (create && !file.exists()) {
+ if (!file.exists()) {
+ file.getParentFile().mkdirs();
+ }
+ file.createNewFile();
+ }
+ return file;
+ }
+
+ /**
+ * @param root le repertoire ou sont stockes les fichiers getter
+ * @param getter le nom du getter
+ * @param create <code>true</code> pour creer le fichier si non present
+ * @return le fichier i18n
+ * @throws java.io.IOException si probleme lors de la creation du fichier
+ */
+ public File getGetterFile(File root, String getter, boolean create) throws IOException {
+ File file = new File(root.getAbsolutePath() + File.separatorChar + getter);
+ if (create && !file.exists()) {
+ if (!file.exists()) {
+ file.getParentFile().mkdirs();
+ }
+ file.createNewFile();
+ }
+ return file;
+ }
+
+ /**
+ * @param root le repertoire ou sont stockes les fichiers getter
+ * @param getter le nom du getter
+ * @return le fichier i18n
+ */
+ public File getGetterFileBackup(File root, String getter) {
+ return new File(root.getAbsolutePath() + File.separatorChar + getter + '~');
+ }
+
+ /**
+ * @param root le reertoire ou sont stockes les fichiers i18n
+ * @param artifactId le nom de l'artifact
+ * @param bundle le nom du bundle
+ * @return le fichier i18n de backup
+ */
+ public File getI18nFileBackup(File root, String artifactId, Locale bundle) {
+ return new File(root.getAbsolutePath() + File.separatorChar + artifactId + "-" + bundle.toString() + ".properties~");
+ }
}
Modified: maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/Bundle.java
===================================================================
--- maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/Bundle.java 2009-05-14 05:19:13 UTC (rev 1544)
+++ maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/Bundle.java 2009-05-14 05:19:42 UTC (rev 1545)
@@ -43,10 +43,10 @@
import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder;
import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException;
import org.codelutin.i18n.bundle.I18nBundleEntry;
+import org.nuiton.util.PluginHelper.SortedProperties;
+import org.nuiton.util.DependencyUtil;
import org.codelutin.i18n.bundle.I18nBundleFactory;
-import org.nuiton.i18n.plugin.PluginHelper.I18nProperties;
-import org.nuiton.util.DependencyUtil;
-import org.codelutin.util.StringUtil;
+import org.nuiton.util.PluginHelper;
/**
* Créer un bundle pour une application finale.
@@ -223,11 +223,11 @@
long t0 = System.nanoTime();
- File bundleOut = PluginHelper.getI18nFile(bundleOutputDir, bundleOutputName, locale, false);
+ File bundleOut = getI18nFile(bundleOutputDir, bundleOutputName, locale, false);
getLog().info("prepare bundle " + bundleOut.getAbsolutePath());
- I18nProperties propertiesOut = new I18nProperties(encoding, false);
+ SortedProperties propertiesOut = new SortedProperties(encoding, false);
for (I18nArtifact artifact : i18nArtifacts) {
I18nBundleEntry[] bundleEntries = artifact.getBundleEntries(locale, defaultLocale);
@@ -236,13 +236,13 @@
bundleEntry.load(propertiesOut);
if (verbose) {
- getLog().info("loaded " + bundleEntry.getPath() + " in " + StringUtil.convertTime(t0, System.nanoTime()));
+ getLog().info("loaded " + bundleEntry.getPath() + " in " + PluginHelper.convertTime(t0, System.nanoTime()));
}
}
}
propertiesOut.store(bundleOut);
if (verbose) {
- getLog().info("bundle created in " + StringUtil.convertTime(t0, System.nanoTime()) + " (detected sentences : " + propertiesOut.size() + ")");
+ getLog().info("bundle created in " + PluginHelper.convertTime(t0, System.nanoTime()) + " (detected sentences : " + propertiesOut.size() + ")");
}
}
@@ -257,7 +257,7 @@
p.store(new FileOutputStream(defOut), null);
if (verbose) {
- getLog().info("done in " + StringUtil.convertTime(t00, System.nanoTime()));
+ getLog().info("done in " + PluginHelper.convertTime(t00, System.nanoTime()));
}
} catch (IOException e) {
getLog().error("File Error I/O ", e);
Modified: maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/Generate.java
===================================================================
--- maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/Generate.java 2009-05-14 05:19:13 UTC (rev 1544)
+++ maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/Generate.java 2009-05-14 05:19:42 UTC (rev 1545)
@@ -15,12 +15,11 @@
* You should have received a copy of the GNU General Lesser Public
* License along with this program. If not, see
* <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
package org.nuiton.i18n.plugin;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
-import org.nuiton.i18n.plugin.PluginHelper.I18nProperties;
+import org.nuiton.util.PluginHelper.SortedProperties;
import org.nuiton.util.FileUtil;
import java.io.File;
@@ -51,14 +50,14 @@
for (Locale bundle : locales) {
try {
// Merge
- File bundleSrc = PluginHelper.getI18nFile(src, artifactId, bundle, false);
- File bundleOut = PluginHelper.getI18nFile(out, artifactId, bundle, false);
+ File bundleSrc = getI18nFile(src, artifactId, bundle, false);
+ File bundleOut = getI18nFile(out, artifactId, bundle, false);
if (bundleSrc.exists()) {
- I18nProperties propertiesSrc = new I18nProperties(encoding).load(bundleSrc);
+ SortedProperties propertiesSrc = new SortedProperties(encoding).load(bundleSrc);
- I18nProperties propertiesOut = new I18nProperties(encoding);
+ SortedProperties propertiesOut = new SortedProperties(encoding);
if (!strictMode) {
// push back in bundle out, all the bundle src keys
@@ -89,7 +88,7 @@
// Sauvegarde avant copie
if (genSrc && keepBackup) {
- FileUtil.copy(bundleSrc, PluginHelper.getI18nFileBackup(src, artifactId, bundle));
+ FileUtil.copy(bundleSrc, getI18nFileBackup(src, artifactId, bundle));
}
getLog().info("merge bundle " + bundleSrc.getAbsolutePath());
@@ -109,5 +108,4 @@
}
}
}
-
}
Modified: maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/Getter.java
===================================================================
--- maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/Getter.java 2009-05-14 05:19:13 UTC (rev 1544)
+++ maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/Getter.java 2009-05-14 05:19:42 UTC (rev 1545)
@@ -21,12 +21,12 @@
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.codehaus.plexus.util.DirectoryScanner;
-import org.nuiton.i18n.plugin.PluginHelper.I18nProperties;
import org.nuiton.util.FileUtil;
import java.io.File;
import java.io.IOException;
import java.util.Locale;
+import org.nuiton.util.PluginHelper.SortedProperties;
/**
* Recupere les différents fichiers des parsers en un fichier de proprietes.
@@ -65,7 +65,7 @@
// Fusion des fichiers propriétés des différents parsers
for (String file : files) {
- File bundleGetter = PluginHelper.getGetterFile(out, file, false);
+ File bundleGetter = getGetterFile(out, file, false);
concactProperties(bundleGetter, bundleGetters);
if (genSrc) {
bundleGetter.delete();
@@ -75,7 +75,7 @@
// Création des bundles
for (Locale bundle : locales) {
- File bundleOut = PluginHelper.getI18nFile(out, artifactId, bundle, false);
+ File bundleOut = getI18nFile(out, artifactId, bundle, false);
FileUtil.copy(bundleGetters, bundleOut);
if (verbose) {
getVerboseLog().infoAction("generate", bundleOut.getAbsolutePath());
@@ -97,9 +97,9 @@
* @throws IOException si problème pendant la sauvegarde ou fichier non trouvé.
*/
protected void concactProperties(File in, File out) throws IOException {
- I18nProperties propertiesIn = new I18nProperties(encoding).load(in);
+ SortedProperties propertiesIn = new SortedProperties(encoding).load(in);
- I18nProperties propertiesOut = new I18nProperties(encoding).load(out);
+ SortedProperties propertiesOut = new SortedProperties(encoding).load(out);
propertiesOut.putAll(propertiesIn);
propertiesOut.store(out);
}
Modified: maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/I18nLogger.java
===================================================================
--- maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/I18nLogger.java 2009-05-14 05:19:13 UTC (rev 1544)
+++ maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/I18nLogger.java 2009-05-14 05:19:42 UTC (rev 1545)
@@ -4,7 +4,7 @@
import java.beans.Introspector;
import java.io.File;
-
+import org.nuiton.util.PluginHelper;
/**
* Le logger utilisé par les mojo.
*
Deleted: maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/PluginHelper.java
===================================================================
--- maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/PluginHelper.java 2009-05-14 05:19:13 UTC (rev 1544)
+++ maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/PluginHelper.java 2009-05-14 05:19:42 UTC (rev 1545)
@@ -1,278 +0,0 @@
-/**
- * *##% Plugin maven pour lutini18n
- * Copyright (C) 2007 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%*
- */
-package org.nuiton.i18n.plugin;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.text.MessageFormat;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Locale;
-import java.util.Properties;
-import java.util.Vector;
-
-/**
- * Une classe pour mutualiser toutes les méthodes utiles dans ce plugin.
- * <p/>
- * Note : On a dupliqué ici du code de la librairie lutinutil, pour casser la dépendance ver ce projet qui utilise ce plugin
- * et donc introduit un cycle dans le graphe des dépendances, ce qui n'est pas souhaitable.
- *
- * @author chemit
- */
-public class PluginHelper {
-
- /**
- * @param root le repertoire ou sont stockes les fichiers i18n
- * @param artifactId le nom de l'artifact
- * @param locale le nom du bundle
- * @param create <code>true</code> pour creer le fichier si non present
- * @return le fichier i18n
- * @throws java.io.IOException si probleme lors de la creation du fichier
- */
- public static File getI18nFile(File root, String artifactId, Locale locale, boolean create) throws IOException {
- File file = new File(root.getAbsolutePath() + File.separatorChar + artifactId + "-" + locale.toString() + ".properties");
- if (create && !file.exists()) {
- if (!file.exists()) {
- file.getParentFile().mkdirs();
- }
- file.createNewFile();
- }
- return file;
- }
-
- /**
- * @param root le repertoire ou sont stockes les fichiers getter
- * @param getter le nom du getter
- * @param create <code>true</code> pour creer le fichier si non present
- * @return le fichier i18n
- * @throws java.io.IOException si probleme lors de la creation du fichier
- */
- public static File getGetterFile(File root, String getter, boolean create) throws IOException {
- File file = new File(root.getAbsolutePath() + File.separatorChar + getter);
- if (create && !file.exists()) {
- if (!file.exists()) {
- file.getParentFile().mkdirs();
- }
- file.createNewFile();
- }
- return file;
- }
-
- /**
- * @param root le repertoire ou sont stockes les fichiers getter
- * @param getter le nom du getter
- * @return le fichier i18n
- */
- public static File getGetterFileBackup(File root, String getter) {
- return new File(root.getAbsolutePath() + File.separatorChar + getter + '~');
- }
-
- /**
- * @param root le reertoire ou sont stockes les fichiers i18n
- * @param artifactId le nom de l'artifact
- * @param bundle le nom du bundle
- * @return le fichier i18n de backup
- */
- public static File getI18nFileBackup(File root, String artifactId, Locale bundle) {
- return new File(root.getAbsolutePath() + File.separatorChar + artifactId + "-" + bundle.toString() + ".properties~");
- }
-
- /**
- * Permet de convertir une liste non typee, en une liste typee.
- * <p/>
- * La liste en entree en juste bien castee.
- * <p/>
- * On effectue une verification sur le typage des elements de la liste.
- * <p/>
- * Note : <b>Aucune liste n'est creee, ni recopiee</b>
- *
- * @param <O> le type des objets de la liste
- * @param list la liste a convertir
- * @param type le type des elements de la liste
- * @return la liste typee
- * @throws IllegalArgumentException si un element de la liste en entree n'est
- * pas en adequation avec le type voulue.
- */
- @SuppressWarnings({"unchecked"})
- static public <O> List<O> toGenericList(List<?> list, Class<O> type) throws IllegalArgumentException {
- if (list.isEmpty()) {
- return (List<O>) list;
- }
- for (Object o : list) {
- if (!(type.isAssignableFrom(o.getClass()))) {
- throw new IllegalArgumentException("can not cast List with object of type " + o.getClass() + " to " + type + " type!");
- }
- }
- return (List<O>) list;
- }
- static final protected double[] timeFactors = {1000000, 1000, 60, 60, 24};
- static final protected String[] timeUnites = {"ns", "ms", "s", "m", "h", "d"};
-
- static public String convertTime(long value) {
- return convert(value, timeFactors, timeUnites);
- }
-
- static public String convertTime(long value, long value2) {
- return convertTime(value2 - value);
- }
-
- static public String convert(long value, double[] factors, String[] unites) {
- long sign = value == 0 ? 1 : value / Math.abs(value);
- int i = 0;
- double tmp = Math.abs(value);
- while (i < factors.length && i < unites.length && tmp > factors[i]) {
- tmp = tmp / factors[i++];
- }
-
- tmp *= sign;
- String result;
- result = MessageFormat.format("{0,number,0.###}{1}", tmp,
- unites[i]);
- return result;
- }
-
- /**
- * Permet d'avoir les fichiers de proprietes tries.
- *
- * @author julien
- * @author chemit
- */
- public static class I18nProperties extends Properties {
-
- private static final long serialVersionUID = -1147150444452577558L;
- /** l'encoding a utiliser pour lire et ecrire le properties. */
- protected String encoding;
- /** un drapeau pour savoir s'il faut enlever l'entete generere */
- protected boolean removeHeader;
-
- public I18nProperties(String encoding) {
- this(encoding, true);
- }
-
- public I18nProperties(String encoding, boolean removeHeader) {
- super();
- this.encoding = encoding;
- this.removeHeader = removeHeader;
- }
-
- public I18nProperties(Properties defaults) {
- super(defaults);
- }
-
- @Override
- public synchronized Enumeration<Object> keys() {
- List<Object> objects = Collections.list(super.keys());
- Vector<Object> result;
- try {
- // Attention, si les clef ne sont pas des string, ca ne marchera pas
- List<String> list = toGenericList(objects, String.class);
- Collections.sort(list);
- result = new Vector<Object>(list);
- } catch (IllegalArgumentException e) {
- // keys are not string !!!
- // can not sort keys
- result = new Vector<Object>(objects);
- }
- return result.elements();
- }
-
- /**
- * Charge le properties a partir d'un fichier.
- *
- * @param src le fichier src a charger en utilisant l'encoding declare
- * @return l'instance du properties
- * @throws IOException if any io pb
- */
- public I18nProperties load(File src) throws IOException {
- super.load(new InputStreamReader(new FileInputStream(src), encoding));
- return this;
- }
-
- /**
- * Sauvegarde le properties dans un fichier, sans commentaire et en utilisant l'encoding declare.
- *
- * @param dst the fichier de destination
- * @throws IOException if any io pb
- */
- public void store(File dst) throws IOException {
- if (removeHeader) {
- super.store(new OutputStreamWriter(new PropertiesDateRemoveFilterStream(new FileOutputStream(dst)), encoding), null);
- } else {
- super.store(new FileOutputStream(dst), null);
- }
- }
-
- /**
- * Sauvegarde le properties dans un fichier, sans commentaire en laissant java encode en unicode.
- *
- * @param dst le fichier de destination
- * @throws IOException if any io pb
- */
- public void store(OutputStream dst) throws IOException {
- if (removeHeader) {
- super.store(new PropertiesDateRemoveFilterStream(dst), null);
- } else {
- super.store(dst, null);
- }
- }
- }
-
- /**
- * Un ecrivain qui supprime la premiere ligne rencontree dans le flux.
- *
- *
- * <b>Note: </b> Attention, les performance d'utilisation de cet ecrivain
- * est problèmatique, car sur de gros fichiers (>1000 entrees) les
- * performances se degradent serieusement : pour 1200 entrees on arrive à
- * plus de 5 secondes, alors que sans on a 76 ms! ...
- *
- * FIXME : implanter quelque chose de plus performant dans tous les cas
- */
- public static class PropertiesDateRemoveFilterStream extends FilterOutputStream {
-
- private boolean firstLineOver;
- char endChar;
-
- public PropertiesDateRemoveFilterStream(OutputStream out) {
- super(out);
- firstLineOver = false;
- String lineSeparator = System.getProperty("line.separator");
- endChar = lineSeparator.charAt(lineSeparator.length() - 1);
- }
-
- @Override
- public void write(int b) throws IOException {
- if (!firstLineOver) {
- char c = (char) b;
- if (c == endChar) {
- firstLineOver = true;
- }
- } else {
- out.write(b);
- }
- }
- }
-}
Modified: maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/parser/AbstractI18nParser.java
===================================================================
--- maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/parser/AbstractI18nParser.java 2009-05-14 05:19:13 UTC (rev 1544)
+++ maven-i18n-plugin/trunk/src/main/java/org/nuiton/i18n/plugin/parser/AbstractI18nParser.java 2009-05-14 05:19:42 UTC (rev 1545)
@@ -1,5 +1,5 @@
/*
-* *##% Plugin maven pour lutini18n
+ * *##% Plugin maven pour lutini18n
* Copyright (C) 2007 - 2008 CodeLutin
*
* This program is free software: you can redistribute it and/or modify
@@ -21,13 +21,12 @@
import org.apache.maven.plugin.MojoFailureException;
import org.nuiton.i18n.plugin.AbstractI18nPlugin;
import org.nuiton.i18n.plugin.I18nLogger;
-import org.nuiton.i18n.plugin.PluginHelper;
-import org.nuiton.i18n.plugin.PluginHelper.I18nProperties;
+import org.nuiton.util.PluginHelper.SortedProperties;
import org.nuiton.i18n.plugin.SourceEntry;
import org.nuiton.i18n.plugin.parser.event.KeysModifier;
import org.nuiton.util.FileUpdater;
import org.nuiton.util.FileUtil;
-
+import org.nuiton.util.PluginHelper;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
@@ -60,21 +59,18 @@
protected abstract File getDefaultBasedir();
public abstract FileUpdater newFileUpdater(SourceEntry entry);
-
/**
* treate default entry
*
* @parameter expression="${i18n.treateDefaultEntry}" default-value="true"
*/
protected boolean treateDefaultEntry;
-
/**
* Source entries (src+includes+excludes) .
*
* @parameter expression="${i18n.entries}"
*/
protected MySourceEntry[] entries;
-
/**
* flag to display touched files while parsing.
* <p/>
@@ -92,15 +88,11 @@
* @since 0.9
*/
protected boolean safeMode;
-
- protected I18nProperties result;
-
- protected I18nProperties oldParser;
-
- protected I18nProperties oldLanguage;
+ protected SortedProperties result;
+ protected SortedProperties oldParser;
+ protected SortedProperties oldLanguage;
protected int fileTreated = 0;
protected long t0;
-
protected boolean touchFile;
protected List<File> treadedFiles;
@@ -108,9 +100,9 @@
public void init() {
super.init();
t0 = System.nanoTime();
- result = new I18nProperties(encoding);
- oldParser = new I18nProperties(encoding);
- oldLanguage = new I18nProperties(encoding);
+ result = new SortedProperties(encoding);
+ oldParser = new SortedProperties(encoding);
+ oldLanguage = new SortedProperties(encoding);
out.mkdirs();
// evenements
if (keysModifier) {
@@ -124,9 +116,9 @@
/*
- * (non-Javadoc)
- * @see org.apache.maven.plugin.AbstractMojo#execute()
- */
+ * (non-Javadoc)
+ * @see org.apache.maven.plugin.AbstractMojo#execute()
+ */
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
@@ -145,15 +137,15 @@
try {
// Reprise sur un ancien parsing
- File oldParserFile = PluginHelper.getGetterFile(out, getOutGetter(), true);
- File saveFile = PluginHelper.getGetterFileBackup(out, getOutGetter());
+ File oldParserFile = getGetterFile(out, getOutGetter(), true);
+ File saveFile = getGetterFileBackup(out, getOutGetter());
oldParser.load(oldParserFile);
FileUtil.copy(oldParserFile, saveFile);
// Anciennes cles disponnibles
//fixme : pourquoi on utilise un bundle precis ? le premier ici, je ne comprends pas
- File oldLanguageFile = PluginHelper.getI18nFile(src, artifactId, locales[0], true);
+ File oldLanguageFile = getI18nFile(src, artifactId, locales[0], true);
oldLanguage.load(oldLanguageFile);
@@ -215,7 +207,7 @@
if (verbose) {
// log skipped files
for (String skipFile : entry.getSkipFiles()) {
- vLog.setFile( new File(entry.getBasedir(), skipFile));
+ vLog.setFile(new File(entry.getBasedir(), skipFile));
vLog.infoFile("skip", null);
}
}
@@ -227,7 +219,6 @@
}
}
-
/**
* Add the default entry to entries given in configuration.
* <p/>
@@ -308,11 +299,10 @@
* @throws IOException if any io pb
*/
protected void saveGetterFile() throws IOException {
- File getterFile = PluginHelper.getGetterFile(out, getOutGetter(), false);
+ File getterFile = getGetterFile(out, getOutGetter(), false);
result.store(getterFile);
}
-
public static class MySourceEntry extends SourceEntry {
public boolean init(AbstractI18nParser mojo) {
@@ -363,7 +353,6 @@
return false;
}
-
/**
* Obtain all the relative path of files to treate for a given entry.
*
@@ -373,6 +362,5 @@
protected String[] getFilesForEntry(AbstractI18nParser mojo) {
return getIncludedFiles(mojo.getDefaultBasedir(), mojo.getDefaultIncludes(), mojo.getDefaultExcludes());
}
-
}
}
Deleted: maven-i18n-plugin/trunk/src/site/rst/Todo.rst
===================================================================
--- maven-i18n-plugin/trunk/src/site/rst/Todo.rst 2009-05-14 05:19:13 UTC (rev 1544)
+++ maven-i18n-plugin/trunk/src/site/rst/Todo.rst 2009-05-14 05:19:42 UTC (rev 1545)
@@ -1,4 +0,0 @@
-TODO
-====
-
-Any idea ?
Modified: maven-i18n-plugin/trunk/src/site/site.xml
===================================================================
--- maven-i18n-plugin/trunk/src/site/site.xml 2009-05-14 05:19:13 UTC (rev 1544)
+++ maven-i18n-plugin/trunk/src/site/site.xml 2009-05-14 05:19:42 UTC (rev 1545)
@@ -58,10 +58,6 @@
name="Sources (jar)"/>
</menu>
- <menu name="Développeur">
- <item name="A faire" href="Todo.html"/>
- </menu>
-
<menu ref="reports"/>
</body>
1
0
[Lutinutil-commits] r1544 - in nuitonutil/trunk: . src/main/java/org src/main/java/org/codelutin/i18n src/main/java/org/codelutin/util src/main/resources/i18n src/test/java/org src/test/java/org/codelutin/i18n/bundle src/test/java/org/codelutin/util
by tchemit@users.labs.libre-entreprise.org 14 May '09
by tchemit@users.labs.libre-entreprise.org 14 May '09
14 May '09
Author: tchemit
Date: 2009-05-14 05:19:13 +0000 (Thu, 14 May 2009)
New Revision: 1544
Added:
nuitonutil/trunk/src/main/java/org/nuiton/
nuitonutil/trunk/src/main/resources/i18n/nuitonutil-en_GB.properties
nuitonutil/trunk/src/main/resources/i18n/nuitonutil-fr_FR.properties
nuitonutil/trunk/src/test/java/org/nuiton/
Removed:
nuitonutil/trunk/src/main/java/org/codelutin/i18n/CountryEnum.java
nuitonutil/trunk/src/main/java/org/codelutin/i18n/I18nDefaultTooltipFilter.java
nuitonutil/trunk/src/main/java/org/codelutin/i18n/I18nFileReader.java
nuitonutil/trunk/src/main/java/org/codelutin/i18n/I18nFilter.java
nuitonutil/trunk/src/main/java/org/codelutin/i18n/LanguageEnum.java
nuitonutil/trunk/src/main/java/org/codelutin/util/LocaleConverter.java
nuitonutil/trunk/src/main/resources/i18n/lutinutil-en_GB.properties
nuitonutil/trunk/src/main/resources/i18n/lutinutil-fr_FR.properties
nuitonutil/trunk/src/test/java/org/codelutin/i18n/bundle/I18nBunsleScopeTest.java
nuitonutil/trunk/src/test/java/org/codelutin/util/LocaleConverterTest.java
Modified:
nuitonutil/trunk/pom.xml
nuitonutil/trunk/src/main/java/org/codelutin/i18n/I18nLoader.java
nuitonutil/trunk/src/main/java/org/codelutin/i18n/Language.java
nuitonutil/trunk/src/main/java/org/codelutin/i18n/LocaleEditor.java
nuitonutil/trunk/src/test/java/org/codelutin/i18n/bundle/I18nBundleManagerTest.java
Log:
utilisation nuiton-i18n-api
Modified: nuitonutil/trunk/pom.xml
===================================================================
--- nuitonutil/trunk/pom.xml 2009-05-14 05:18:40 UTC (rev 1543)
+++ nuitonutil/trunk/pom.xml 2009-05-14 05:19:13 UTC (rev 1544)
@@ -11,10 +11,17 @@
<groupId>org.codelutin</groupId>
<artifactId>lutinproject</artifactId>
<version>3.5.4</version>
+ <!--groupId>org.nuiton</groupId>
+ <artifactId>mavenpom</artifactId>
+ <version>1.0.0-SNAPSHOT</version-->
</parent>
- <artifactId>lutinutil</artifactId>
+ <!-- assuprimer du de l'utilisation de mavenpom -->
+ <groupId>org.nuiton</groupId>
+
+ <artifactId>nuitonutil</artifactId>
+
<version>1.1.0-SNAPSHOT</version>
<dependencies>
@@ -27,6 +34,12 @@
</dependency>
<dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.1.1</version>
+ </dependency>
+
+ <dependency>
<groupId>commons-primitives</groupId>
<artifactId>commons-primitives</artifactId>
<version>1.0</version>
@@ -46,7 +59,7 @@
<version>1.8.0</version>
<scope>compile</scope>
</dependency>
-
+
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
@@ -54,6 +67,20 @@
<scope>compile</scope>
</dependency>
+ <dependency>
+ <groupId>org.nuiton</groupId>
+ <artifactId>nuiton-i18n-api</artifactId>
+ <version>1.0.0-SNAPSHOT</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.6</version>
+ <scope>test</scope>
+ </dependency>
+
</dependencies>
@@ -61,7 +88,7 @@
<!-- *** Project Information ************************************* -->
<!-- ************************************************************* -->
- <name>Lutin utilities library</name>
+ <name>Nuiton utilities library</name>
<description>Library of usefull class to be used in any project.</description>
<inceptionYear>2004</inceptionYear>
@@ -73,9 +100,16 @@
<properties>
+ <redmine.project>nuitonprocessor</redmine.project>
+
+ <!-- assuprimer du de l'utilisation de mavenpom -->
<labs.id>12</labs.id>
<labs.project>lutinutil</labs.project>
-
+ <helper.version>1.0.0-SNAPSHOT</helper.version>
+ <helper.licenseName>lgpl_v3</helper.licenseName>
+ <site.home.url>http://lutinutil.labs.libre-entreprise.org</site.home.url>
+ <repository.home.url>http://lutinbuilder.labs.libre-entreprise.org/maven2</repository.home.url>
+
</properties>
<build>
@@ -86,9 +120,9 @@
<!-- plugin i18n -->
<plugin>
- <groupId>org.codelutin</groupId>
+ <groupId>org.nuiton</groupId>
<artifactId>maven-i18n-plugin</artifactId>
- <version>0.11</version>
+ <version>1.0.0-SNAPSHOT</version>
<executions>
<execution>
<goals>
@@ -114,7 +148,7 @@
</dependency>
</dependencies>
</plugin>
-
+
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.1</version>
@@ -135,7 +169,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
- <version>2.5</version>
+ <!--version>2.5</version-->
<configuration>
<quiet>true</quiet>
<links>
@@ -151,6 +185,7 @@
<!-- ************************************************************* -->
<!--Source control management-->
+ <!-- a supprimer -->
<scm>
<url>${maven.scm.url}</url>
<connection>${maven.scm.connection}</connection>
@@ -173,7 +208,7 @@
</releases>
</repository>
</repositories>
-
+
<profiles>
<profile>
<id>release-profile</id>
@@ -186,22 +221,6 @@
<build>
<plugins>
- <!-- always add license and third-party files to classpath -->
- <plugin>
- <groupId>org.codelutin</groupId>
- <artifactId>maven-license-switcher-plugin</artifactId>
- <version>0.8</version>
- <executions>
- <execution>
- <id>attach-licenses</id>
- <goals>
- <goal>license</goal>
- <goal>third-party</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
-
<!-- launch in a release the assembly automaticly -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
Deleted: nuitonutil/trunk/src/main/java/org/codelutin/i18n/CountryEnum.java
===================================================================
--- nuitonutil/trunk/src/main/java/org/codelutin/i18n/CountryEnum.java 2009-05-14 05:18:40 UTC (rev 1543)
+++ nuitonutil/trunk/src/main/java/org/codelutin/i18n/CountryEnum.java 2009-05-14 05:19:13 UTC (rev 1544)
@@ -1,286 +0,0 @@
-/*
-* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-package org.codelutin.i18n;
-
-import static org.codelutin.i18n.I18n._;
-
-/**
- * Une énumération pour représenter le pays d'une locale
- * <p/>
- * <a href="http://www.iso.org/iso/country_codes"><code>ISO 3166-1:1998 (ICS n° 01.140.20)</code></a>.
- * <p/>
- * <a href="http://www.iso.org/iso/french_country_names_and_code_elements">la liste des codes</a>
- * <p/>
- * Chaque pays est repésenté ainsi :
- * <pre>A2, // A3 Number Country name</pre>
- *
- * @author chemit
- */
-
-public enum CountryEnum {
- AF, // AFG 004 AFGHANISTAN
- AL, // ALB 008 ALBANIA
- DZ, // DZA 012 ALGERIA
- AS, // ASM 016 AMERICAN SAMOA
- AD, // AND 020 ANDORRA
- AO, // AGO 024 ANGOLA
- AI, // AIA 660 ANGUILLA
- AQ, // ATA 010 ANTARCTICA
- AG, // ATG 028 ANTIGUA AND BARBUDA
- AR, // ARG 032 ARGENTINA
- AM, // ARM 051 ARMENIA
- AW, // ABW 533 ARUBA
- AU, // AUS 036 AUSTRALIA
- AT, // AUT 040 AUSTRIA
- AZ, // AZE 031 AZERBAIJAN
- BS, // BHS 044 BAHAMAS
- BH, // BHR 048 BAHRAIN
- BD, // BGD 050 BANGLADESH
- BB, // BRB 052 BARBADOS
- BY, // BLR 112 BELARUS
- BE, // BEL 056 BELGIUM
- BZ, // BLZ 084 BELIZE
- BJ, // BEN 204 BENIN
- BM, // BMU 060 BERMUDA
- BT, // BTN 064 BHUTAN
- BO, // BOL 068 BOLIVIA
- BA, // BIH 070 BOSNIA AND HERZEGOWINA
- BW, // BWA 072 BOTSWANA
- BV, // BVT 074 BOUVET ISLAND
- BR, // BRA 076 BRAZIL
- IO, // IOT 086 BRITISH INDIAN OCEAN TERRITORY
- BN, // BRN 096 BRUNEI DARUSSALAM
- BG, // BGR 100 BULGARIA
- BF, // BFA 854 BURKINA FASO
- BI, // BDI 108 BURUNDI
- KH, // KHM 116 CAMBODIA
- CM, // CMR 120 CAMEROON
- CA, // CAN 124 CANADA
- CV, // CPV 132 CAPE VERDE
- KY, // CYM 136 CAYMAN ISLANDS
- CF, // CAF 140 CENTRAL AFRICAN REPUBLIC
- TD, // TCD 148 CHAD
- CL, // CHL 152 CHILE
- CN, // CHN 156 CHINA
- CX, // CXR 162 CHRISTMAS ISLAND
- CC, // CCK 166 COCOS (KEELING) ISLANDS
- CO, // COL 170 COLOMBIA
- KM, // COM 174 COMOROS
- CG, // COG 178 CONGO
- CK, // COK 184 COOK ISLANDS
- CR, // CRI 188 COSTA RICA
- CI, // CIV 384 COTE D'IVOIRE
- HR, // HRV 191 CROATIA (local name: Hrvatska)
- CU, // CUB 192 CUBA
- CY, // CYP 196 CYPRUS
- CZ, // CZE 203 CZECH REPUBLIC
- DK, // DNK 208 DENMARK
- DJ, // DJI 262 DJIBOUTI
- DM, // DMA 212 DOMINICA
- DO, // DOM 214 DOMINICAN REPUBLIC
- TP, // TMP 626 EAST TIMOR
- EC, // ECU 218 ECUADOR
- EG, // EGY 818 EGYPT
- SV, // SLV 222 EL SALVADOR
- GQ, // GNQ 226 EQUATORIAL GUINEA
- ER, // ERI 232 ERITREA
- EE, // EST 233 ESTONIA
- ET, // ETH 210 ETHIOPIA
- FK, // FLK 238 FALKLAND ISLANDS (MALVINAS)
- FO, // FRO 234 FAROE ISLANDS
- FJ, // FJI 242 FIJI
- FI, // FIN 246 FINLAND
- FR, // FRA 250 FRANCE
- FX, // FXX 249 FRANCE, METROPOLITAN
- GF, // GUF 254 FRENCH GUIANA
- PF, // PYF 258 FRENCH POLYNESIA
- TF, // ATF 260 FRENCH SOUTHERN TERRITORIES
- GA, // GAB 266 GABON
- GM, // GMB 270 GAMBIA
- GE, // GEO 268 GEORGIA
- DE, // DEU 276 GERMANY
- GH, // GHA 288 GHANA
- GI, // GIB 292 GIBRALTAR
- GR, // GRC 300 GREECE
- GL, // GRL 304 GREENLAND
- GD, // GRD 308 GRENADA
- GP, // GLP 312 GUADELOUPE
- GU, // GUM 316 GUAM
- GT, // GTM 320 GUATEMALA
- GN, // GIN 324 GUINEA
- GW, // GNB 624 GUINEA-BISSAU
- GY, // GUY 328 GUYANA
- HT, // HTI 332 HAITI
- HM, // HMD 334 HEARD AND MC DONALD ISLANDS
- HN, // HND 340 HONDURAS
- HK, // HKG 344 HONG KONG
- HU, // HUN 348 HUNGARY
- IS, // ISL 352 ICELAND
- IN, // IND 356 INDIA
- ID, // IDN 360 INDONESIA
- IR, // IRN 364 IRAN (ISLAMIC REPUBLIC OF)
- IQ, // IRQ 368 IRAQ
- IE, // IRL 372 IRELAND
- IL, // ISR 376 ISRAEL
- IT, // ITA 380 ITALY
- JM, // JAM 388 JAMAICA
- JP, // JPN 392 JAPAN
- JO, // JOR 400 JORDAN
- KZ, // KAZ 398 KAZAKHSTAN
- KE, // KEN 404 KENYA
- KI, // KIR 296 KIRIBATI
- KP, // PRK 408 KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF
- KR, // KOR 410 KOREA, REPUBLIC OF
- KW, // KWT 414 KUWAIT
- KG, // KGZ 417 KYRGYZSTAN
- LA, // LAO 418 LAO PEOPLE'S DEMOCRATIC REPUBLIC
- LV, // LVA 428 LATVIA
- LB, // LBN 422 LEBANON
- LS, // LSO 426 LESOTHO
- LR, // LBR 430 LIBERIA
- LY, // LBY 434 LIBYAN ARAB JAMAHIRIYA
- LI, // LIE 438 LIECHTENSTEIN
- LT, // LTU 440 LITHUANIA
- LU, // LUX 442 LUXEMBOURG
- MO, // MAC 446 MACAU
- MK, // MKD 807 (provis) MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF
- MG, // MDG 450 MADAGASCAR
- MW, // MWI 454 MALAWI
- MY, // MYS 458 MALAYSIA
- MV, // MDV 462 MALDIVES
- ML, // MLI 466 MALI
- MT, // MLT 470 MALTA
- MH, // MHL 584 MARSHALL ISLANDS
- MQ, // MTQ 474 MARTINIQUE
- MR, // MRT 478 MAURITANIA
- MU, // MUS 480 MAURITIUS
- YT, // MYT 175 MAYOTTE
- MX, // MEX 484 MEXICO
- FM, // FSM 583 MICRONESIA, FEDERATED STATES OF
- MD, // MDA 498 MOLDOVA, REPUBLIC OF
- MC, // MCO 492 MONACO
- MN, // MNG 496 MONGOLIA
- MS, // MSR 500 MONTSERRAT
- MA, // MAR 504 MOROCCO
- MZ, // MOZ 508 MOZAMBIQUE
- MM, // MMR 104 MYANMAR
- NA, // NAM 516 NAMIBIA
- NR, // NRU 520 NAURU
- NP, // NPL 524 NEPAL
- NL, // NLD 528 NETHERLANDS
- AN, // ANT 530 NETHERLANDS ANTILLES
- NC, // NCL 540 NEW CALEDONIA
- NZ, // NZL 554 NEW ZEALAND
- NI, // NIC 558 NICARAGUA
- NE, // NER 562 NIGER
- NG, // NGA 566 NIGERIA
- NU, // NIU 570 NIUE
- NF, // NFK 574 NORFOLK ISLAND
- MP, // MNP 580 NORTHERN MARIANA ISLANDS
- NO, // NOR 578 NORWAY
- OM, // OMN 512 OMAN
- PK, // PAK 586 PAKISTAN
- PW, // PLW 585 PALAU
- PA, // PAN 591 PANAMA
- PG, // PNG 598 PAPUA NEW GUINEA
- PY, // PRY 600 PARAGUAY
- PE, // PER 604 PERU
- PH, // PHL 608 PHILIPPINES
- PN, // PCN 612 PITCAIRN
- PL, // POL 616 POLAND
- PT, // PRT 620 PORTUGAL
- PR, // PRI 630 PUERTO RICO
- QA, // QAT 634 QATAR
- RE, // REU 638 REUNION
- RO, // ROM 642 ROMANIA
- RU, // RUS 643 RUSSIAN FEDERATION
- RW, // RWA 646 RWANDA
- KN, // KNA 659 SAINT KITTS AND NEVIS
- LC, // LCA 662 SAINT LUCIA
- VC, // VCT 670 SAINT VINCENT AND THE GRENADINES
- WS, // WSM 882 SAMOA
- SM, // SMR 674 SAN MARINO
- ST, // STP 678 SAO TOME AND PRINCIPE
- SA, // SAU 682 SAUDI ARABIA
- SN, // SEN 686 SENEGAL
- SC, // SYC 690 SEYCHELLES
- SL, // SLE 694 SIERRA LEONE
- SG, // SGP 702 SINGAPORE
- SK, // SVK 703 SLOVAKIA (Slovak Republic)
- SI, // SVN 705 SLOVENIA
- SB, // SLB 090 SOLOMON ISLANDS
- SO, // SOM 706 SOMALIA
- ZA, // ZAF 710 SOUTH AFRICA
- ES, // ESP 724 SPAIN
- LK, // LKA 144 SRI LANKA
- SH, // SHN 654 ST. HELENA
- PM, // SPM 666 ST. PIERRE AND MIQUELON
- SD, // SDN 736 SUDAN
- SR, // SUR 740 SURINAME
- SJ, // SJM 744 SVALBARD AND JAN MAYEN ISLANDS
- SZ, // SWZ 748 SWAZILAND
- SE, // SWE 752 SWEDEN
- CH, // CHE 756 SWITZERLAND
- SY, // SYR 760 SYRIAN ARAB REPUBLIC
- TW, // TWN 158 TAIWAN, PROVINCE OF CHINA
- TJ, // TJK 762 TAJIKISTAN
- TZ, // TZA 834 TANZANIA, UNITED REPUBLIC OF
- TH, // THA 764 THAILAND
- TG, // TGO 768 TOGO
- TK, // TKL 772 TOKELAU
- TO, // TON 776 TONGA
- TT, // TTO 780 TRINIDAD AND TOBAGO
- TN, // TUN 788 TUNISIA
- TR, // TUR 792 TURKEY
- TM, // TKM 795 TURKMENISTAN
- TC, // TCA 796 TURKS AND CAICOS ISLANDS
- TV, // TUV 798 TUVALU
- UG, // UGA 800 UGANDA
- UA, // UKR 804 UKRAINE
- AE, // ARE 784 UNITED ARAB EMIRATES
- GB, // GBR 826 UNITED KINGDOM
- US, // USA 840 UNITED STATES
- UM, // UMI 581 UNITED STATES MINOR OUTLYING ISLANDS
- UY, // URY 858 URUGUAY
- UZ, // UZB 860 UZBEKISTAN
- VU, // VUT 548 VANUATU
- VA, // VAT 336 VATICAN CITY STATE (HOLY SEE)
- VE, // VEN 862 VENEZUELA
- VN, // VNM 704 VIET NAM
- VG, // VGB 092 VIRGIN ISLANDS (BRITISH)
- VI, // VIR 850 VIRGIN ISLANDS (U.S.)
- WF, // WLF 876 WALLIS AND FUTUNA ISLANDS
- EH, // ESH 732 WESTERN SAHARA
- YE, // YEM 887 YEMEN
- YU, // YUG 891 YUGOSLAVIA
- ZR, // ZAR 180 ZAIRE
- ZM, // ZMB 894 ZAMBIA
- ZW; // ZWE 716 ZIMBABWE
-
- public static CountryEnum valueOf(String country, CountryEnum defaultValue) {
- CountryEnum countryValue = null;
- try {
- countryValue = CountryEnum.valueOf(country.toUpperCase());
- } catch (IllegalArgumentException e) {
- System.err.println(_("lutinutil.error.i18n.unfound.country", country, defaultValue));
- } catch (NullPointerException e) {
- System.err.println(_("lutinutil.error.i18n.unfound.country", country, defaultValue));
- }
- return countryValue == null ? defaultValue : countryValue;
- }
-}
Deleted: nuitonutil/trunk/src/main/java/org/codelutin/i18n/I18nDefaultTooltipFilter.java
===================================================================
--- nuitonutil/trunk/src/main/java/org/codelutin/i18n/I18nDefaultTooltipFilter.java 2009-05-14 05:18:40 UTC (rev 1543)
+++ nuitonutil/trunk/src/main/java/org/codelutin/i18n/I18nDefaultTooltipFilter.java 2009-05-14 05:19:13 UTC (rev 1544)
@@ -1,41 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * i18nDefaultTooltipFilter.java
- *
- * Created: 2 déc. 2003
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * Copyright Code Lutin
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-
-package org.codelutin.i18n;
-
-public class I18nDefaultTooltipFilter implements I18nFilter { // I18nDefaultTooltipFilter
-
- public String applyFilter(String message) {
- if (message != null && message.startsWith("defaultToolTip-"))
- return null;
- return message;
- }
-} // I18nDefaultTooltipFilter
-
Deleted: nuitonutil/trunk/src/main/java/org/codelutin/i18n/I18nFileReader.java
===================================================================
--- nuitonutil/trunk/src/main/java/org/codelutin/i18n/I18nFileReader.java 2009-05-14 05:18:40 UTC (rev 1543)
+++ nuitonutil/trunk/src/main/java/org/codelutin/i18n/I18nFileReader.java 2009-05-14 05:19:13 UTC (rev 1544)
@@ -1,131 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * I18nFileReader.java
- *
- * Created: Nov 22, 2004
- *
- * @author Cédric Pineau <pineau(a)codelutin.com>
- * @version $Revision$
- *
- * Last update : $Date$
- * by : $Author$
- */
-
-package org.codelutin.i18n;
-
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.nio.charset.Charset;
-import java.util.Properties;
-import java.util.regex.Pattern;
-
-/** Classe assurant la lecture et les possibles traitement nécessaires à I18n. */
-public class I18nFileReader extends Properties {
-
- protected static final Pattern commentPattern = Pattern.compile("[^\\\\]#");
-
- protected static final Pattern splitPattern = Pattern.compile("[^\\\\]=");
- private static final long serialVersionUID = 3611718334066783394L;
-
- public void load(InputStream inStream, String encodingTo) throws IOException {
- Charset charsetTo = Charset.forName(encodingTo);
- BufferedReader readerFile;
- readerFile = new BufferedReader(new InputStreamReader(inStream, charsetTo));
- String lineFile;
- StringBuilder builderFile;
- builderFile = new StringBuilder();
- while ((lineFile = readerFile.readLine()) != null) {
- builderFile.append(lineFile).append('\n');
- }
- readerFile.close();
- super.load(new ByteArrayInputStream(builderFile.toString().getBytes()));
- }
-
- protected String interpretBackslashes(String message) {
- int backslashIndex = -1;
- while ((backslashIndex = message.indexOf("\\", backslashIndex + 1)) != -1) {
- if (message.length() >= backslashIndex + 1) {
- char charNextToBackslash = message.charAt(backslashIndex + 1);
- char replacementChar;
- switch (charNextToBackslash) {
- case '\\':
- replacementChar = '\\';
- break;
- case 't':
- replacementChar = '\t';
- break;
- case 'n':
- replacementChar = '\n';
- break;
- case ' ':
- replacementChar = ' ';
- break;
- case '=':
- replacementChar = '=';
- break;
- case ':':
- replacementChar = ':';
- break;
- default:
- replacementChar = '\\';
- break;
- }
- message = message.substring(0, backslashIndex) + replacementChar + message.substring(backslashIndex + 2);
- }
- }
- return message;
- }
-
- private static char[] chars = {'\\', '\n', '\t', ' ', '=', ':'};
-
- protected String serializeBackslashes(String message) {
- for (char c : chars) {
- int charIndex = -1;
- while ((charIndex = message.indexOf(c, charIndex + 2)) != -1) {
- String replacementString = "" + c;
- switch (c) {
- case '\\':
- replacementString = "\\\\";
- break;
- case '\t':
- replacementString = "\\t";
- break;
- case '\n':
- replacementString = "\\n";
- break;
- case ' ':
- replacementString = "\\ ";
- break;
- case '=':
- replacementString = "\\=";
- break;
- case ':':
- replacementString = "\\:";
- break;
- }
- message = message.substring(0, charIndex) + replacementString + message.substring(charIndex + 1);
- }
- }
- return message;
- }
-
-} //I18nFileReader
Deleted: nuitonutil/trunk/src/main/java/org/codelutin/i18n/I18nFilter.java
===================================================================
--- nuitonutil/trunk/src/main/java/org/codelutin/i18n/I18nFilter.java 2009-05-14 05:18:40 UTC (rev 1543)
+++ nuitonutil/trunk/src/main/java/org/codelutin/i18n/I18nFilter.java 2009-05-14 05:19:13 UTC (rev 1544)
@@ -1,37 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * i18nFilter.java
- *
- * Created: 2 déc. 2003
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * Copyright Code Lutin
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-
-package org.codelutin.i18n;
-
-public interface I18nFilter { // I18nFilter
-
- public String applyFilter(String message);
-} // I18nFilter
-
Modified: nuitonutil/trunk/src/main/java/org/codelutin/i18n/I18nLoader.java
===================================================================
--- nuitonutil/trunk/src/main/java/org/codelutin/i18n/I18nLoader.java 2009-05-14 05:18:40 UTC (rev 1543)
+++ nuitonutil/trunk/src/main/java/org/codelutin/i18n/I18nLoader.java 2009-05-14 05:19:13 UTC (rev 1544)
@@ -19,15 +19,20 @@
package org.codelutin.i18n;
import java.net.URL;
+import java.net.URLClassLoader;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import org.codelutin.i18n.bundle.I18nBundle;
import org.codelutin.i18n.bundle.I18nBundleEntry;
import org.codelutin.i18n.bundle.I18nBundleFactory;
+import org.codelutin.util.ClassLoaderUtil;
+import org.codelutin.util.Resource;
import org.codelutin.util.StringUtil;
/**
@@ -142,7 +147,7 @@
if (urls == null) {
// on utilise le mecanisme de recherche des bundles dans toutes
// les entrees du classloader
- urls = I18nBundleFactory.getURLs(Language.getLoader(), I18n.getExtraURL());
+ urls = getURLs(Language.getLoader(), I18n.getExtraURL());
}
}
@@ -236,4 +241,105 @@
throw new IllegalStateException("should call init method on " + I18nLoader.class);
}
}
+
+ /**
+ * Detecte les urls de toutes les entrees de bunbles sur tout un classLoader.
+ *
+ * Il s'agit du mode initialie de detection des entréés de bundles, i.e des
+ * fichiers de traductions.
+ *
+ * <b>Note: </b> Cette methode devient couteuse des que le classLoader
+ * contient de nombreuses entrées. Il est meiux d'utiliser le second type
+ * de chargement qui n'utilise qu'un seul fichier de traduction unifié.
+ *
+ * @param loader le classloader a utiliser pour trouver les resources.
+ * @return les urls des entrees de bundles
+ */
+ public static URL[] getURLs(URLClassLoader loader) {
+ try {
+ // on calcule toutes les urls utilisable dans le classloader donnee
+ List<URL> urlToSeek = new ArrayList<URL>();
+ urlToSeek.addAll(Arrays.asList(ClassLoaderUtil.getDeepURLs(loader)));
+
+ // on va maintenant supprimer toutes les urls qui ne respectent pas
+ // le pattern i18n : il faut que la resource contienne un repertoire i18n
+ // ce simple test permet de restreindre la recherche des resources
+ // i18n qui est tres couteuse
+ int size = urlToSeek.size();
+ for (Iterator<URL> it = urlToSeek.iterator(); it.hasNext();) {
+ URL url = it.next();
+ if (!Resource.containsDirectDirectory(url, I18nBundleFactory.DIRECTORY_SEARCH_BUNDLE_PATTERN)) {
+ if (log.isDebugEnabled()) {
+ log.debug("skip url with no " + I18nBundleFactory.DIRECTORY_SEARCH_BUNDLE_PATTERN + " directory : " + url);
+ }
+ it.remove();
+ }
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("detect " + urlToSeek.size() + " i18n capable url (out of " + size + ")");
+ }
+ // on effectue la recherche des urls des resources i18n (tous les
+ // fichiers de traductions) sur toutes les urls precedemment calculees)
+ List<URL> result = Resource.getURLs(I18nBundleFactory.SEARCH_BUNDLE_PATTERN, urlToSeek.toArray(new URL[urlToSeek.size()]));
+ if (log.isDebugEnabled()) {
+ for (URL url : result) {
+ log.debug(url.toString());
+ }
+ }
+ return result.toArray(new URL[result.size()]);
+ } catch (Exception eee) {
+ log.warn("Unable to find urls for loader : " + loader + " for reason " + eee.getMessage(), eee);
+ return new URL[0];
+ }
+ }
+
+ /**
+ * Recherche la liste des url de toutes les resources i18n, i.e les urls
+ * des fichiers de traduction.
+ *
+ * @param loader le classLoader où trouver les bundles
+ * @param extraUrl des urls de resources i18n deja calcule, à ajouter au resultat sans traitement particulier
+ * @return la liste des urls de bundle i18n pour la langue donné
+ */
+ public static URL[] getURLs(URLClassLoader loader, URL... extraUrl) {
+
+ try {
+ // on calcule toutes les urls utilisable dans le classloader donnee
+ List<URL> urlToSeek = new ArrayList<URL>();
+ urlToSeek.addAll(Arrays.asList(ClassLoaderUtil.getDeepURLs(loader)));
+ // on ajoute les urls de resources i18n donnes
+ if (extraUrl.length > 0) {
+ urlToSeek.addAll(Arrays.asList(extraUrl));
+ }
+ // on va maintenant supprimer toutes les urls qui ne respectent pas
+ // le pattern i18n : il faut que la resource contienne un repertoire i18n
+ // ce simple test permet de restreindre la recherche des resources
+ // i18n qui est tres couteuse
+ int size = urlToSeek.size();
+ for (Iterator<URL> it = urlToSeek.iterator(); it.hasNext();) {
+ URL url = it.next();
+ if (!Resource.containsDirectDirectory(url, I18nBundleFactory.DIRECTORY_SEARCH_BUNDLE_PATTERN)) {
+ if (log.isDebugEnabled()) {
+ log.debug("skip url with no " + I18nBundleFactory.DIRECTORY_SEARCH_BUNDLE_PATTERN + " directory : " + url);
+ }
+ it.remove();
+ }
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("detect " + urlToSeek.size() + " i18n capable url (out of " + size + ")");
+ }
+ // on effectue la recherche des urls des resources i18n (tous les
+ // fichiers de traductions) sur toutes les urls precedemment calculees)
+ List<URL> result = Resource.getURLs(I18nBundleFactory.SEARCH_BUNDLE_PATTERN, urlToSeek.toArray(new URL[urlToSeek.size()]));
+ if (log.isDebugEnabled()) {
+ for (URL url : result) {
+ log.debug(url.toString());
+ }
+ }
+ return result.toArray(new URL[result.size()]);
+ } catch (Exception eee) {
+ log.warn("Unable to find urls for loader : " + loader + " for reason " + eee.getMessage(), eee);
+ return new URL[0];
+ }
+ }
}
Modified: nuitonutil/trunk/src/main/java/org/codelutin/i18n/Language.java
===================================================================
--- nuitonutil/trunk/src/main/java/org/codelutin/i18n/Language.java 2009-05-14 05:18:40 UTC (rev 1543)
+++ nuitonutil/trunk/src/main/java/org/codelutin/i18n/Language.java 2009-05-14 05:19:13 UTC (rev 1544)
@@ -35,7 +35,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.codelutin.i18n.bundle.I18nBundleEntry;
-import org.codelutin.i18n.bundle.I18nBundleManager;
import org.codelutin.util.RecursiveProperties;
/**
@@ -70,27 +69,6 @@
}
/**
- * charge les traductions de la langue.
- * <p/>
- * recherche dans un premier temps, les urls des bundles puis les charge.
- *
- * @param bundleManager the used bundle manager
- */
- @Deprecated
- public void load(I18nBundleManager bundleManager) {
- // make sure the bundlemanager is init
- bundleManager.init();
- // load resources from bundles
- resource = new RecursiveProperties();
- // get bundles for this locale
- try {
- bundleManager.load(this, resource);
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
- /**
* charge les traductions de la languea partir d'une liste donnee de
* fichiers de traduction.
*
Deleted: nuitonutil/trunk/src/main/java/org/codelutin/i18n/LanguageEnum.java
===================================================================
--- nuitonutil/trunk/src/main/java/org/codelutin/i18n/LanguageEnum.java 2009-05-14 05:18:40 UTC (rev 1543)
+++ nuitonutil/trunk/src/main/java/org/codelutin/i18n/LanguageEnum.java 2009-05-14 05:19:13 UTC (rev 1544)
@@ -1,185 +0,0 @@
-/*
-* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-package org.codelutin.i18n;
-
-import static org.codelutin.i18n.I18n._;
-
-/**
- * Une énumération pour représenter le langue d'une locale définie dans la norme
- * <a href="http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm…"><code>ISO 639-1:1998 (ICS n° 01.140.20)</code></a>.
- * <p/>
- * <a href="http://www.loc.gov/standards/iso639-2/php/French_list.php">la liste des codes</a>
- *
- * @author chemit
- */
-
-public enum LanguageEnum {
- aa, // Afar
- ab, // Abkhazian
- af, // Afrikaans
- am, // Amharic
- ar, // Arabic
- as, // Assamese
- ay, // Aymara
- az, // Azerbaijani
- ba, // Bashkir
- be, // Byelorussian
- bg, // Bulgarian
- bh, // Bihari
- bi, // Bislama
- bn, // Bengali; Bangla
- bo, // Tibetan
- br, // Breton
- ca, // Catalan
- co, // Corsican
- cs, // Czech
- cy, // Welsh
- da, // Danish
- de, // German
- dz, // Bhutani
- el, // Greek
- en, // English
- eo, // Esperanto
- es, // Spanish
- et, // Estonian
- eu, // Basque
- fa, // Persian
- fi, // Finnish
- fj, // Fiji
- fo, // Faroese
- fr, // French
- fy, // Frisian
- ga, // Irish
- gd, // Scots Gaelic
- gl, // Galician
- gn, // Guarani
- gu, // Gujarati
- ha, // Hausa
- he, // Hebrew (formerly iw)
- hi, // Hindi
- hr, // Croatian
- hu, // Hungarian
- hy, // Armenian
- ia, // Interlingua
- id, // Indonesian (formerly in)
- ie, // Interlingue
- ik, // Inupiak
- is, // Icelandic
- it, // Italian
- iu, // Inuktitut
- ja, // Japanese
- jw, // Javanese
- ka, // Georgian
- kk, // Kazakh
- kl, // Greenlandic
- km, // Cambodian
- kn, // Kannada
- ko, // Korean
- ks, // Kashmiri
- ku, // Kurdish
- ky, // Kirghiz
- la, // Latin
- ln, // Lingala
- lo, // Laothian
- lt, // Lithuanian
- lv, // Latvian, Lettish
- mg, // Malagasy
- mi, // Maori
- mk, // Macedonian
- ml, // Malayalam
- mn, // Mongolian
- mo, // Moldavian
- mr, // Marathi
- ms, // Malay
- mt, // Maltese
- my, // Burmese
- na, // Nauru
- ne, // Nepali
- nl, // Dutch
- no, // Norwegian
- oc, // Occitan
- om, // (Afan) Oromo
- or, // Oriya
- pa, // Punjabi
- pl, // Polish
- ps, // Pashto, Pushto
- pt, // Portuguese
- qu, // Quechua
- rm, // Rhaeto-Romance
- rn, // Kirundi
- ro, // Romanian
- ru, // Russian
- rw, // Kinyarwanda
- sa, // Sanskrit
- sd, // Sindhi
- sg, // Sangho
- sh, // Serbo-Croatian
- si, // Sinhalese
- sk, // Slovak
- sl, // Slovenian
- sm, // Samoan
- sn, // Shona
- so, // Somali
- sq, // Albanian
- sr, // Serbian
- ss, // Siswati
- st, // Sesotho
- su, // Sundanese
- sv, // Swedish
- sw, // Swahili
- ta, // Tamil
- te, // Telugu
- tg, // Tajik
- th, // Thai
- ti, // Tigrinya
- tk, // Turkmen
- tl, // Tagalog
- tn, // Setswana
- to, // Tonga
- tr, // Turkish
- ts, // Tsonga
- tt, // Tatar
- tw, // Twi
- ug, // Uighur
- uk, // Ukrainian
- ur, // Urdu
- uz, // Uzbek
- vi, // Vietnamese
- vo, // Volapuk
- wo, // Wolof
- xh, // Xhosa
- yi, // Yiddish (formerly ji)
- yo, // Yoruba
- za, // Zhuang
- zh, // Chinese
- zu; // Zulu
-
- public static LanguageEnum valueOf(String language, LanguageEnum defaultValue) {
- LanguageEnum languageValue = null;
- try {
- languageValue = LanguageEnum.valueOf(language.toLowerCase());
- } catch (IllegalArgumentException e) {
- System.err.println(_("lutinutil.error.i18n.unfound.language", language, defaultValue));
- } catch (NullPointerException e) {
- System.err.println(_("lutinutil.error.i18n.unfound.language", language, defaultValue));
- }
- return languageValue == null ? defaultValue : languageValue;
- }
-
-
-}
Modified: nuitonutil/trunk/src/main/java/org/codelutin/i18n/LocaleEditor.java
===================================================================
--- nuitonutil/trunk/src/main/java/org/codelutin/i18n/LocaleEditor.java 2009-05-14 05:18:40 UTC (rev 1543)
+++ nuitonutil/trunk/src/main/java/org/codelutin/i18n/LocaleEditor.java 2009-05-14 05:19:13 UTC (rev 1544)
@@ -26,7 +26,7 @@
* use the static method to have an instance of editor {@link #newEditor(java.util.Locale[])}
* <p/>
* If no locale is given to this method, it will go and seek via
- * {@link org.codelutin.i18n.bundle.I18nBundleManager#getLocales()} all loaded locales in i18n system
+ * {@link org.codelutin.i18n.I18nLoader#getLocales()} all loaded locales in i18n system
*
* @author chemit
*/
Deleted: nuitonutil/trunk/src/main/java/org/codelutin/util/LocaleConverter.java
===================================================================
--- nuitonutil/trunk/src/main/java/org/codelutin/util/LocaleConverter.java 2009-05-14 05:18:40 UTC (rev 1543)
+++ nuitonutil/trunk/src/main/java/org/codelutin/util/LocaleConverter.java 2009-05-14 05:19:13 UTC (rev 1544)
@@ -1,122 +0,0 @@
-/*
- * *##% Lutin utilities library
- * Copyright (C) 2004 - 2009 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-package org.codelutin.util;
-
-import org.apache.commons.beanutils.ConversionException;
-import org.apache.commons.beanutils.Converter;
-import static org.apache.commons.logging.LogFactory.getLog;
-import org.codelutin.i18n.CountryEnum;
-import org.codelutin.i18n.LanguageEnum;
-
-import java.util.Locale;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * classe pour convertir une chaine en un objet {@link java.util.Locale}.
- *
- * @author chemit
- */
-public class LocaleConverter implements Converter {
-
- private static final Pattern FULL_SCOPE_PATTERN = Pattern.compile("([a-zA-Z]{2})_([a-zA-Z]{2})");
-
- private static final Pattern MEDIUM_SCOPE_PATTERN = Pattern.compile("([a-zA-Z]{2})");
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static org.apache.commons.logging.Log log = getLog(LocaleConverter.class);
-
- public Object convert(Class aClass, Object value) {
- if (value == null) {
- throw new ConversionException("can not convert null value in " + this + " convertor");
- }
- if (isEnabled(aClass)) {
- Object result;
- if (isEnabled(value.getClass())) {
- result = value;
- return result;
- }
- if (value instanceof String) {
- result = valueOf(((String) value).trim());
- return result;
- }
- }
- throw new ConversionException("could not find a convertor for type " + aClass.getName() + " and value : " + value);
- }
-
- protected Locale valueOf(String value) {
- try {
- Locale result = convertFullScope(value);
-
- if (result == null) {
- result = convertMediumScope(value);
- }
-
- if (result == null) {
- throw new ConversionException("could not convert locale " + value);
- }
-
- return result;
- } catch (Exception e) {
- throw new ConversionException("could not convert locale " + value + " for reason " + e.getMessage());
- }
- }
-
- private Locale convertFullScope(String value) {
- Matcher m = FULL_SCOPE_PATTERN.matcher(value);
- if (m.matches()) {
- // found a full scope pattern (language + country)
- LanguageEnum language = LanguageEnum.valueOf(m.group(1).toLowerCase());
- CountryEnum country = CountryEnum.valueOf(m.group(2).toUpperCase());
- if (language == null || country == null) {
- // not safe
- throw new ConversionException("could not convert locale " + value);
- }
- return new Locale(language.name(), country.name());
- }
- return null;
- }
-
- private Locale convertMediumScope(String value) {
- Matcher m = MEDIUM_SCOPE_PATTERN.matcher(value);
- if (m.matches()) {
- // found a medium scope pattern (only language)
- LanguageEnum language = LanguageEnum.valueOf(m.group(1).toLowerCase());
-
- if (language == null) {
- // not safe
- throw new ConversionException("could not convert locale " + value);
- }
- return new Locale(language.name());
- }
- return null;
- }
-
-
- public LocaleConverter() {
- if (log.isDebugEnabled()) {
- log.debug(this);
- }
- }
-
- protected boolean isEnabled(Class aClass) {
- return aClass == Locale.class;
- }
-
-}
Deleted: nuitonutil/trunk/src/main/resources/i18n/lutinutil-en_GB.properties
===================================================================
--- nuitonutil/trunk/src/main/resources/i18n/lutinutil-en_GB.properties 2009-05-14 05:18:40 UTC (rev 1543)
+++ nuitonutil/trunk/src/main/resources/i18n/lutinutil-en_GB.properties 2009-05-14 05:19:13 UTC (rev 1544)
@@ -1,34 +0,0 @@
-hello\ you\ \!=hello you \!
-lutinutil.debug.objectutil.create=Try to create %s with %s
-lutinutil.debug.objectutil.instantiate=Can't instantiate %s with params %s
-lutinutil.debug.objectutil.invoke=Invoke %s with %s
-lutinutil.error.add.url.in.classloader=Can't add url in classloader %1$s for reason %2$s
-lutinutil.error.applicationconfig.save=Can't save config in file %s
-lutinutil.error.convert.file.to.url=Can't convert %s for reason %s
-lutinutil.error.convertor.noValue=No value specified for converter %s
-lutinutil.error.get.url.from.zip=Error while reading %s \: %s
-lutinutil.error.i18n.unformated.message=Message can't be formatted\: '%s' with arguments %s
-lutinutil.error.i18n.unfound.country=could not find country from '%s', use default country '%s'
-lutinutil.error.i18n.unfound.language=could not find language from '%s', use default language '%s'
-lutinutil.error.i18n.untranslated.message=Message can't be translated\: '%s'
-lutinutil.error.no.convertor=no convertor found for type %2$s and objet '%1$s'
-lutinutil.error.resource.not.found=Can't find resource \: %s
-lutinutil.error.unfound.month=could not found month from '%s', use default month '%s'
-lutinutil.error.unknown.url.type=could not treate unknown type of url %1$s
-lutinutil.error.url.convertor=a problem occurs while converting value '%s' with url convertor %s for reason %s
-lutinutil.fileCompletion.cancel=.. to cancel or return to parent directory
-lutinutil.fileCompletion.enter=Enter to display file list, or to complete path
-lutinutil.fileCompletion.exit=Enter "\!q" to exit
-lutinutil.fileCompletion.save=Enter "\!s" in the end of the file name to save
-lutinutil.month.april=april
-lutinutil.month.august=august
-lutinutil.month.december=december
-lutinutil.month.february=february
-lutinutil.month.january=january
-lutinutil.month.july=july
-lutinutil.month.june=june
-lutinutil.month.march=march
-lutinutil.month.may=may
-lutinutil.month.november=november
-lutinutil.month.october=october
-lutinutil.month.september=september
Deleted: nuitonutil/trunk/src/main/resources/i18n/lutinutil-fr_FR.properties
===================================================================
--- nuitonutil/trunk/src/main/resources/i18n/lutinutil-fr_FR.properties 2009-05-14 05:18:40 UTC (rev 1543)
+++ nuitonutil/trunk/src/main/resources/i18n/lutinutil-fr_FR.properties 2009-05-14 05:19:13 UTC (rev 1544)
@@ -1,34 +0,0 @@
-hello\ you\ \!=
-lutinutil.debug.objectutil.create=Essaye de cr\u00E9er %s avec %s
-lutinutil.debug.objectutil.instantiate=Ne peut pas instancier %s avec les param\u00EAtres %s
-lutinutil.debug.objectutil.invoke=Invocation de %s avec %s
-lutinutil.error.add.url.in.classloader=Impossible d'ajouter une url dans le classloader %s pour la raison \: %s
-lutinutil.error.applicationconfig.save=Impossible de sauvegarder le fichier de configuration dans %s
-lutinutil.error.convert.file.to.url=Le fichier '%1$s' n'a pas pu \u00EAtre converti en URL pour la raison suivante \: %2$S
-lutinutil.error.convertor.noValue=Aucune valeur \u00E0 convertir pour le convertisseur %s
-lutinutil.error.get.url.from.zip=Erreur lors de la lecture du fichier compress\u00E9 %1$s \: %2$s
-lutinutil.error.i18n.unformated.message=Le message suivant n''a pas pu \u00EAtre format\u00E9 \: '%s' avec les arguments %s
-lutinutil.error.i18n.unfound.country=n'a pas pu trouver le pays \u00E0 partir de '%s', utilise le pays par d\u00E9faut '%s'
-lutinutil.error.i18n.unfound.language=n'a pas pu trouver la langue \u00E0 partir de '%s', utilise la langue par d\u00E9faut '%s'
-lutinutil.error.i18n.untranslated.message=Le message suivant n'a pas pu \u00EAtre traduit \: '%s'
-lutinutil.error.no.convertor=Aucun convertisseur trouv\u00E9 pour le type %2$s et l''objet '%1$s'
-lutinutil.error.resource.not.found=Impossible de trouver la ressource \: %s
-lutinutil.error.unfound.month=n'a pas pu trouv\u00E9 le mois \u00E0 partir de '%s', utilise le mois par d\u00E9faut '%s'
-lutinutil.error.unknown.url.type=could not treate unknown type of url %1$s
-lutinutil.error.url.convertor=Un probl\u00E8me est apparu lors de la convertion en url de '%s' avec le convertisseur %s pour la raison suivante \: %s
-lutinutil.fileCompletion.cancel=.. pour annuler ou pour revenir au repertoire pr\u00E9c\u00E9dent
-lutinutil.fileCompletion.enter=Entrer pour afficher la liste des fichiers, ou pour compl\u00E9ter le chemin
-lutinutil.fileCompletion.exit=Saisir "\!q" pour quitter
-lutinutil.fileCompletion.save=Saisir "\!s" a la fin du nom de fichier pour l'enregistrer
-lutinutil.month.april=avril
-lutinutil.month.august=ao\u00FBt
-lutinutil.month.december=d\u00E9cembre
-lutinutil.month.february=f\u00E9vrier
-lutinutil.month.january=janvier
-lutinutil.month.july=juillet
-lutinutil.month.june=juin
-lutinutil.month.march=mars
-lutinutil.month.may=mai
-lutinutil.month.november=novembre
-lutinutil.month.october=octobre
-lutinutil.month.september=septembre
Copied: nuitonutil/trunk/src/main/resources/i18n/nuitonutil-en_GB.properties (from rev 1537, nuitonutil/trunk/src/main/resources/i18n/lutinutil-en_GB.properties)
===================================================================
--- nuitonutil/trunk/src/main/resources/i18n/nuitonutil-en_GB.properties (rev 0)
+++ nuitonutil/trunk/src/main/resources/i18n/nuitonutil-en_GB.properties 2009-05-14 05:19:13 UTC (rev 1544)
@@ -0,0 +1,34 @@
+hello\ you\ \!=hello you \!
+lutinutil.debug.objectutil.create=Try to create %s with %s
+lutinutil.debug.objectutil.instantiate=Can't instantiate %s with params %s
+lutinutil.debug.objectutil.invoke=Invoke %s with %s
+lutinutil.error.add.url.in.classloader=Can't add url in classloader %1$s for reason %2$s
+lutinutil.error.applicationconfig.save=Can't save config in file %s
+lutinutil.error.convert.file.to.url=Can't convert %s for reason %s
+lutinutil.error.convertor.noValue=No value specified for converter %s
+lutinutil.error.get.url.from.zip=Error while reading %s \: %s
+lutinutil.error.i18n.unformated.message=Message can't be formatted\: '%s' with arguments %s
+lutinutil.error.i18n.unfound.country=could not find country from '%s', use default country '%s'
+lutinutil.error.i18n.unfound.language=could not find language from '%s', use default language '%s'
+lutinutil.error.i18n.untranslated.message=Message can't be translated\: '%s'
+lutinutil.error.no.convertor=no convertor found for type %2$s and objet '%1$s'
+lutinutil.error.resource.not.found=Can't find resource \: %s
+lutinutil.error.unfound.month=could not found month from '%s', use default month '%s'
+lutinutil.error.unknown.url.type=could not treate unknown type of url %1$s
+lutinutil.error.url.convertor=a problem occurs while converting value '%s' with url convertor %s for reason %s
+lutinutil.fileCompletion.cancel=.. to cancel or return to parent directory
+lutinutil.fileCompletion.enter=Enter to display file list, or to complete path
+lutinutil.fileCompletion.exit=Enter "\!q" to exit
+lutinutil.fileCompletion.save=Enter "\!s" in the end of the file name to save
+lutinutil.month.april=april
+lutinutil.month.august=august
+lutinutil.month.december=december
+lutinutil.month.february=february
+lutinutil.month.january=january
+lutinutil.month.july=july
+lutinutil.month.june=june
+lutinutil.month.march=march
+lutinutil.month.may=may
+lutinutil.month.november=november
+lutinutil.month.october=october
+lutinutil.month.september=september
Property changes on: nuitonutil/trunk/src/main/resources/i18n/nuitonutil-en_GB.properties
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:mergeinfo
+
Name: svn:eol-style
+ native
Copied: nuitonutil/trunk/src/main/resources/i18n/nuitonutil-fr_FR.properties (from rev 1537, nuitonutil/trunk/src/main/resources/i18n/lutinutil-fr_FR.properties)
===================================================================
--- nuitonutil/trunk/src/main/resources/i18n/nuitonutil-fr_FR.properties (rev 0)
+++ nuitonutil/trunk/src/main/resources/i18n/nuitonutil-fr_FR.properties 2009-05-14 05:19:13 UTC (rev 1544)
@@ -0,0 +1,34 @@
+hello\ you\ \!=
+lutinutil.debug.objectutil.create=Essaye de cr\u00E9er %s avec %s
+lutinutil.debug.objectutil.instantiate=Ne peut pas instancier %s avec les param\u00EAtres %s
+lutinutil.debug.objectutil.invoke=Invocation de %s avec %s
+lutinutil.error.add.url.in.classloader=Impossible d'ajouter une url dans le classloader %s pour la raison \: %s
+lutinutil.error.applicationconfig.save=Impossible de sauvegarder le fichier de configuration dans %s
+lutinutil.error.convert.file.to.url=Le fichier '%1$s' n'a pas pu \u00EAtre converti en URL pour la raison suivante \: %2$S
+lutinutil.error.convertor.noValue=Aucune valeur \u00E0 convertir pour le convertisseur %s
+lutinutil.error.get.url.from.zip=Erreur lors de la lecture du fichier compress\u00E9 %1$s \: %2$s
+lutinutil.error.i18n.unformated.message=Le message suivant n''a pas pu \u00EAtre format\u00E9 \: '%s' avec les arguments %s
+lutinutil.error.i18n.unfound.country=n'a pas pu trouver le pays \u00E0 partir de '%s', utilise le pays par d\u00E9faut '%s'
+lutinutil.error.i18n.unfound.language=n'a pas pu trouver la langue \u00E0 partir de '%s', utilise la langue par d\u00E9faut '%s'
+lutinutil.error.i18n.untranslated.message=Le message suivant n'a pas pu \u00EAtre traduit \: '%s'
+lutinutil.error.no.convertor=Aucun convertisseur trouv\u00E9 pour le type %2$s et l''objet '%1$s'
+lutinutil.error.resource.not.found=Impossible de trouver la ressource \: %s
+lutinutil.error.unfound.month=n'a pas pu trouv\u00E9 le mois \u00E0 partir de '%s', utilise le mois par d\u00E9faut '%s'
+lutinutil.error.unknown.url.type=could not treate unknown type of url %1$s
+lutinutil.error.url.convertor=Un probl\u00E8me est apparu lors de la convertion en url de '%s' avec le convertisseur %s pour la raison suivante \: %s
+lutinutil.fileCompletion.cancel=.. pour annuler ou pour revenir au repertoire pr\u00E9c\u00E9dent
+lutinutil.fileCompletion.enter=Entrer pour afficher la liste des fichiers, ou pour compl\u00E9ter le chemin
+lutinutil.fileCompletion.exit=Saisir "\!q" pour quitter
+lutinutil.fileCompletion.save=Saisir "\!s" a la fin du nom de fichier pour l'enregistrer
+lutinutil.month.april=avril
+lutinutil.month.august=ao\u00FBt
+lutinutil.month.december=d\u00E9cembre
+lutinutil.month.february=f\u00E9vrier
+lutinutil.month.january=janvier
+lutinutil.month.july=juillet
+lutinutil.month.june=juin
+lutinutil.month.march=mars
+lutinutil.month.may=mai
+lutinutil.month.november=novembre
+lutinutil.month.october=octobre
+lutinutil.month.september=septembre
Property changes on: nuitonutil/trunk/src/main/resources/i18n/nuitonutil-fr_FR.properties
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:mergeinfo
+
Name: svn:eol-style
+ native
Modified: nuitonutil/trunk/src/test/java/org/codelutin/i18n/bundle/I18nBundleManagerTest.java
===================================================================
--- nuitonutil/trunk/src/test/java/org/codelutin/i18n/bundle/I18nBundleManagerTest.java 2009-05-14 05:18:40 UTC (rev 1543)
+++ nuitonutil/trunk/src/test/java/org/codelutin/i18n/bundle/I18nBundleManagerTest.java 2009-05-14 05:19:13 UTC (rev 1544)
@@ -210,12 +210,12 @@
@Test
public void testGetURLs() throws Exception {
- Assert.assertEquals(getNbURLs(), I18nBundleFactory.getURLs(loader).length);
+ Assert.assertEquals(getNbURLs(), I18nLoader.getURLs(loader).length);
}
@Test
public void testDetectBundles() throws Exception {
- URL[] urls = I18nBundleFactory.getURLs(loader);
+ URL[] urls = I18nLoader.getURLs(loader);
Assert.assertEquals(BundleTest.values().length, I18nBundleFactory.detectBundles(urls).size());
}
Deleted: nuitonutil/trunk/src/test/java/org/codelutin/i18n/bundle/I18nBunsleScopeTest.java
===================================================================
--- nuitonutil/trunk/src/test/java/org/codelutin/i18n/bundle/I18nBunsleScopeTest.java 2009-05-14 05:18:40 UTC (rev 1543)
+++ nuitonutil/trunk/src/test/java/org/codelutin/i18n/bundle/I18nBunsleScopeTest.java 2009-05-14 05:19:13 UTC (rev 1544)
@@ -1,63 +0,0 @@
-/**
- * *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%*
- */
-package org.codelutin.i18n.bundle;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import java.util.Locale;
-
-/** @author chemit */
-public class I18nBunsleScopeTest {
-
- Locale locale;
- I18nBundleScope excepted;
-
- @Test
- public void testFullScope() {
- excepted = I18nBundleScope.FULL;
-
- locale = new Locale("fr", "FR");
- Assert.assertEquals(excepted, I18nBundleScope.valueOf(locale));
- }
-
- @Test
- public void testLanguageScope() {
- excepted = I18nBundleScope.LANGUAGE;
-
- locale = new Locale("fr");
- Assert.assertEquals(excepted, I18nBundleScope.valueOf(locale));
-
- locale = new Locale("fr", "");
- Assert.assertEquals(excepted, I18nBundleScope.valueOf(locale));
- }
-
- @Test
- public void testGeneralScope() {
-
- excepted = I18nBundleScope.GENERAL;
-
- locale = null;
- Assert.assertEquals(excepted, I18nBundleScope.valueOf(locale));
-
- locale = new Locale("");
- Assert.assertEquals(excepted, I18nBundleScope.valueOf(locale));
- }
-
-}
Deleted: nuitonutil/trunk/src/test/java/org/codelutin/util/LocaleConverterTest.java
===================================================================
--- nuitonutil/trunk/src/test/java/org/codelutin/util/LocaleConverterTest.java 2009-05-14 05:18:40 UTC (rev 1543)
+++ nuitonutil/trunk/src/test/java/org/codelutin/util/LocaleConverterTest.java 2009-05-14 05:19:13 UTC (rev 1544)
@@ -1,124 +0,0 @@
-/**
- * *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%*
- */
-package org.codelutin.util;
-
-import junit.framework.TestCase;
-import org.apache.commons.beanutils.Converter;
-
-import java.util.Locale;
-
-/** @author chemit */
-public class LocaleConverterTest extends TestCase {
-
- String toConvert;
- Locale excepted;
- Converter converter;
-
- @Override
- protected void setUp() throws Exception {
- super.setUp();
- converter = ConverterUtil.getConverter(Locale.class);
- }
-
- public void testConvertFull() throws Exception {
- toConvert = "fr_FR";
- excepted = Locale.FRANCE;
- assertEquals(toConvert, excepted);
-
- toConvert = "fr_fr";
- assertEquals(toConvert, excepted);
-
- toConvert = "FR_fr";
- assertEquals(toConvert, excepted);
-
- toConvert = "FR_FR";
- assertEquals(toConvert, excepted);
-
- toConvert = "\n\tFr_fR ";
- assertEquals(toConvert, excepted);
-
- toConvert = "en_GB";
- excepted = Locale.UK;
- assertEquals(toConvert, excepted);
-
- toConvert = "en_US";
- excepted = Locale.US;
- assertEquals(toConvert, excepted);
-
- //TODO Arch, we must also check coherence !
- toConvert = "fr_GB";
- excepted = new Locale("fr","GB");
- assertEquals(toConvert, excepted);
- }
-
- public void testConvertMedium() throws Exception {
- toConvert = "fr";
- excepted = new Locale("fr");
- assertEquals(toConvert, excepted);
-
- toConvert = "fR";
- assertEquals(toConvert, excepted);
-
- toConvert = "FR";
- assertEquals(toConvert, excepted);
-
- toConvert = " fR \t";
- assertEquals(toConvert, excepted);
-
- toConvert = "en";
- excepted = new Locale("en");
- assertEquals(toConvert, excepted);
-
- toConvert = "es";
- excepted = new Locale("es");
- assertEquals(toConvert, excepted);
-
- }
-
- public void testConvertFailed() throws Exception {
-
- toConvert = null;
- assertConvertFailed(toConvert);
-
- toConvert = "";
- assertConvertFailed(toConvert);
-
- toConvert = "fr_";
- assertConvertFailed(toConvert);
-
- toConvert = "_FR";
- assertConvertFailed(toConvert);
-
- }
-
- protected void assertEquals(String toConvert, Locale expected) {
- Object result = converter.convert(Locale.class, toConvert);
- assertEquals(expected, result);
- }
-
- protected void assertConvertFailed(String toConvert) {
- try {
- converter.convert(Locale.class, toConvert);
- fail();
- } catch (Exception e) {
- assertTrue(true);
- }
-
- }
-}
1
0
[Lutinutil-commits] r1543 - in nuiton-i18n-api/trunk/src: main/java/org/codelutin/i18n test/resources
by tchemit@users.labs.libre-entreprise.org 14 May '09
by tchemit@users.labs.libre-entreprise.org 14 May '09
14 May '09
Author: tchemit
Date: 2009-05-14 05:18:40 +0000 (Thu, 14 May 2009)
New Revision: 1543
Added:
nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nDefaultTooltipFilter.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nFilter.java
Removed:
nuiton-i18n-api/trunk/src/test/resources/i18n/
Log:
utilisation nuiton-i18n-api
Copied: nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nDefaultTooltipFilter.java (from rev 1537, nuitonutil/trunk/src/main/java/org/codelutin/i18n/I18nDefaultTooltipFilter.java)
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nDefaultTooltipFilter.java (rev 0)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nDefaultTooltipFilter.java 2009-05-14 05:18:40 UTC (rev 1543)
@@ -0,0 +1,43 @@
+/* *##% Lutin utilities library
+ * Copyright (C) 2004 - 2008 CodeLutin
+ *
+ * This program 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 (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 Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
+
+/* *
+ * i18nDefaultTooltipFilter.java
+ *
+ * Created: 2 déc. 2003
+ *
+ * @author Benjamin Poussin <poussin(a)codelutin.com>
+ * Copyright Code Lutin
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+
+package org.codelutin.i18n;
+
+public class I18nDefaultTooltipFilter implements I18nFilter { // I18nDefaultTooltipFilter
+
+ @Override
+ public String applyFilter(String message) {
+ if (message != null && message.startsWith("defaultToolTip-")) {
+ return null;
+ }
+ return message;
+ }
+} // I18nDefaultTooltipFilter
+
Property changes on: nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nDefaultTooltipFilter.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:mergeinfo
+
Name: svn:eol-style
+ native
Copied: nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nFilter.java (from rev 1537, nuitonutil/trunk/src/main/java/org/codelutin/i18n/I18nFilter.java)
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nFilter.java (rev 0)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nFilter.java 2009-05-14 05:18:40 UTC (rev 1543)
@@ -0,0 +1,37 @@
+/* *##% Lutin utilities library
+ * Copyright (C) 2004 - 2008 CodeLutin
+ *
+ * This program 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 (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 Lesser Public License for more details.
+ *
+ * You should have received a copy of the GNU General Lesser Public
+ * License along with this program. If not, see
+ * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
+
+/* *
+ * i18nFilter.java
+ *
+ * Created: 2 déc. 2003
+ *
+ * @author Benjamin Poussin <poussin(a)codelutin.com>
+ * Copyright Code Lutin
+ * @version $Revision$
+ *
+ * Mise a jour: $Date$
+ * par : $Author$
+ */
+
+package org.codelutin.i18n;
+
+public interface I18nFilter { // I18nFilter
+
+ public String applyFilter(String message);
+} // I18nFilter
+
Property changes on: nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nFilter.java
___________________________________________________________________
Name: svn:keywords
+ Author Date Id Revision
Name: svn:mergeinfo
+
Name: svn:eol-style
+ native
1
0
[Lutinutil-commits] r1542 - nuitonutil/trunk/src/main/java/org/codelutin/i18n
by tchemit@users.labs.libre-entreprise.org 14 May '09
by tchemit@users.labs.libre-entreprise.org 14 May '09
14 May '09
Author: tchemit
Date: 2009-05-14 05:18:10 +0000 (Thu, 14 May 2009)
New Revision: 1542
Removed:
nuitonutil/trunk/src/main/java/org/codelutin/i18n/bundle/
Log:
utilisation nuiton-i18n-api
1
0
[Lutinutil-commits] r1541 - in nuiton-i18n-api/trunk: . src/main/java/org src/main/java/org/codelutin/i18n src/main/java/org/codelutin/i18n/bundle src/main/java/org/codelutin/util src/site src/site/rst src/test/java/org/codelutin/i18n src/test/java/org/codelutin/i18n/bundle src/test/java/org/codelutin/util
by tchemit@users.labs.libre-entreprise.org 14 May '09
by tchemit@users.labs.libre-entreprise.org 14 May '09
14 May '09
Author: tchemit
Date: 2009-05-14 04:43:24 +0000 (Thu, 14 May 2009)
New Revision: 1541
Added:
nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nUtil.java
nuiton-i18n-api/trunk/src/main/java/org/nuiton/
Removed:
nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18n.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nBundleBridge.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nDefaultTooltipFilter.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nFilter.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nLoader.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nf.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/Language.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/LocaleEditor.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleManager.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ApplicationConfig.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ArgumentsParser.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ArgumentsParserDefaultOption.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ArgumentsParserException.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ArgumentsParserOption.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ArrayUtil.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/BoundedList.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/BoundedListOutOfBoundsException.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/CallAnalyse.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/CardinalityHelper.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/CategorisedListenerSet.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ClassLoaderUtil.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/CollectionUtil.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ConverterUtil.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/DigestGenerator.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/EnumConverter.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/EnumEditor.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ExceptionUtil.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/FileCompletion.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/FileUtil.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/FormatConverter.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/FormatConverterFactory.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/FormatMap.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/GZUtil.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/GZUtilException.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/H2TypeEnum.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/HashList.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/IOUtils.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/LRUMapMultiKey.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ListenerSet.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/Log.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/LoggingException.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/LoggingPatternFormatter.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/MD5.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/MD5InputStream.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/MD5OutputStream.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/MD5State.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/MonthEnum.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ObjectUtil.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/PropertiesDateRemoveFilterStream.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/RecursiveProperties.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ReflectUtil.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/Resource.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ResourceException.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ResourceNotFoundException.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/SimplePaginationEnum.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/SortedProperties.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/StreamKeywordTokenizer.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/StringUtil.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/StringUtilException.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/Tbz2Util.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/TransformedList.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/Transformer.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/TransparenteSoftReference.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/TransparenteWeakReference.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/URIConverter.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/URLConverter.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/VersionNumber.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/VersionNumberConverter.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/VersionNumberUtil.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ZipStreamEncoder.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ZipUtil.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/package.html
nuiton-i18n-api/trunk/src/site/rst/CommandLineArgumentApplication.rst
nuiton-i18n-api/trunk/src/site/rst/LutinUtil.rst
nuiton-i18n-api/trunk/src/site/rst/Todo.rst
nuiton-i18n-api/trunk/src/test/java/org/codelutin/i18n/I18nLoaderTest.java
nuiton-i18n-api/trunk/src/test/java/org/codelutin/i18n/bundle/I18nBundleManagerTest.java
nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ApplicationConfigTest.java
nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/CallAnalyseTest.java
nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/CardinalityHelperTest.java
nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/CategorisedListenerSetTest.java
nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/CollectionUtilTest.java
nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ConverterUtilTest.java
nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/FileCompletionTest.java
nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/FileUtilTest.java
nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/LRUMapMultiKeyTest.java
nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ListenerSetTest.java
nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/LogTest.java
nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ObjectUtilTest.java
nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/RecursivePropertiesTest.java
nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ResourceTest.java
nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/StreamKeywordTokenizerTest.java
nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/StringUtilTest.java
nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/Tbz2UtilTest.java
nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/TransparenteReferenceTest.java
nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/VersionNumberUtilTest.java
nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ZipUtilTest.java
Modified:
nuiton-i18n-api/trunk/pom.xml
nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/CountryEnum.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/LanguageEnum.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleEntry.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleFactory.java
nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleScope.java
nuiton-i18n-api/trunk/src/site/rst/index.rst
nuiton-i18n-api/trunk/src/site/site.xml
nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/LocaleConverterTest.java
Log:
juste keep i18n stuff neutral from nuiton-util
Modified: nuiton-i18n-api/trunk/pom.xml
===================================================================
--- nuiton-i18n-api/trunk/pom.xml 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/pom.xml 2009-05-14 04:43:24 UTC (rev 1541)
@@ -11,47 +11,47 @@
<groupId>org.codelutin</groupId>
<artifactId>lutinproject</artifactId>
<version>3.5.4</version>
+ <!--groupId>org.nuiton</groupId>
+ <artifactId>mavenpom</artifactId>
+ <version>1.0.0-SNAPSHOT</version-->
</parent>
- <artifactId>lutinutil</artifactId>
+ <!-- assuprimer du de l'utilisation de mavenpom -->
+ <url>${site.home.url}</url>
+ <groupId>org.nuiton</groupId>
- <version>1.1.0-SNAPSHOT</version>
+ <artifactId>nuiton-i18n-api</artifactId>
+
+ <version>1.0.0-SNAPSHOT</version>
+
<dependencies>
- <dependency>
+ <!--dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
<scope>compile</scope>
- </dependency>
+ </dependency-->
<dependency>
- <groupId>commons-primitives</groupId>
- <artifactId>commons-primitives</artifactId>
- <version>1.0</version>
- <scope>compile</scope>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.1.1</version>
</dependency>
<dependency>
- <groupId>commons-collections</groupId>
- <artifactId>commons-collections</artifactId>
- <version>3.2.1</version>
- <scope>compile</scope>
- </dependency>
-
- <dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.8.0</version>
<scope>compile</scope>
</dependency>
-
+
<dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-compress</artifactId>
- <version>20090504</version>
- <scope>compile</scope>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.6</version>
+ <scope>test</scope>
</dependency>
</dependencies>
@@ -61,8 +61,8 @@
<!-- *** Project Information ************************************* -->
<!-- ************************************************************* -->
- <name>Lutin utilities library</name>
- <description>Library of usefull class to be used in any project.</description>
+ <name>Nuiton i18n api</name>
+ <description>Api of i18n system</description>
<inceptionYear>2004</inceptionYear>
<!-- ************************************************************* -->
@@ -73,9 +73,16 @@
<properties>
+ <redmine.project>nuitonprocessor</redmine.project>
+
+ <!-- assuprimer du de l'utilisation de mavenpom -->
<labs.id>12</labs.id>
<labs.project>lutinutil</labs.project>
-
+ <helper.version>1.0.0-SNAPSHOT</helper.version>
+ <helper.licenseName>lgpl_v3</helper.licenseName>
+ <site.home.url>http://lutinutil.labs.libre-entreprise.org/nuiton-i18n-api</site.home.url>
+ <repository.home.url>http://lutinbuilder.labs.libre-entreprise.org/maven2</repository.home.url>
+
</properties>
<build>
@@ -84,21 +91,6 @@
<plugins>
- <!-- plugin i18n -->
- <plugin>
- <groupId>org.codelutin</groupId>
- <artifactId>maven-i18n-plugin</artifactId>
- <version>0.11</version>
- <executions>
- <execution>
- <goals>
- <goal>parserJava</goal>
- <goal>gen</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
-
</plugins>
<pluginManagement>
@@ -114,7 +106,7 @@
</dependency>
</dependencies>
</plugin>
-
+
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.1</version>
@@ -135,7 +127,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
- <version>2.5</version>
+ <!--version>2.5</version-->
<configuration>
<quiet>true</quiet>
<links>
@@ -151,6 +143,7 @@
<!-- ************************************************************* -->
<!--Source control management-->
+ <!-- a supprimer -->
<scm>
<url>${maven.scm.url}</url>
<connection>${maven.scm.connection}</connection>
@@ -173,7 +166,7 @@
</releases>
</repository>
</repositories>
-
+
<profiles>
<profile>
<id>release-profile</id>
@@ -186,22 +179,6 @@
<build>
<plugins>
- <!-- always add license and third-party files to classpath -->
- <plugin>
- <groupId>org.codelutin</groupId>
- <artifactId>maven-license-switcher-plugin</artifactId>
- <version>0.8</version>
- <executions>
- <execution>
- <id>attach-licenses</id>
- <goals>
- <goal>license</goal>
- <goal>third-party</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
-
<!-- launch in a release the assembly automaticly -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
Modified: nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/CountryEnum.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/CountryEnum.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/CountryEnum.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,5 +1,5 @@
/*
-* *##% Lutin utilities library
+ * *##% Lutin utilities library
* Copyright (C) 2004 - 2008 CodeLutin
*
* This program is free software: you can redistribute it and/or modify
@@ -17,8 +17,6 @@
* <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
package org.codelutin.i18n;
-import static org.codelutin.i18n.I18n._;
-
/**
* Une énumération pour représenter le pays d'une locale
* <p/>
@@ -31,8 +29,8 @@
*
* @author chemit
*/
-
public enum CountryEnum {
+
AF, // AFG 004 AFGHANISTAN
AL, // ALB 008 ALBANIA
DZ, // DZA 012 ALGERIA
@@ -277,9 +275,9 @@
try {
countryValue = CountryEnum.valueOf(country.toUpperCase());
} catch (IllegalArgumentException e) {
- System.err.println(_("lutinutil.error.i18n.unfound.country", country, defaultValue));
+ System.err.println("unfound country " + country + ", will use default one : " + defaultValue);
} catch (NullPointerException e) {
- System.err.println(_("lutinutil.error.i18n.unfound.country", country, defaultValue));
+ System.err.println("unfound country " + country + ", will use default one : " + defaultValue);
}
return countryValue == null ? defaultValue : countryValue;
}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18n.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18n.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18n.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,352 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * I18n.java
- *
- * Created: 2 d?c. 2003
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * Copyright Code Lutin
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-package org.codelutin.i18n;
-
-import java.net.URL;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Locale;
-import java.util.logging.Logger;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codelutin.util.ConverterUtil;
-
-/**
- * This class is a facility for internationalization. To use it in your soft,
- * you can either :
- * <ul>
- * <li> import the org.codelutin.i18n.I18n class,
- * <li> init the translation support with the init(String language) or
- * init(String language, String country), init(Localelocale) static methods in your main, ( eg:
- * I18n.init("fr","FR") )
- * <li> call the translate static method for each sentence, ( eg:
- * I18n._("hello you !") )
- * <li> create a resource file for each language following the naming
- * convention given in the java.util.ResourceBundle javadoc and translate all
- * the sentence.
- * </ul>
- *
- * @author poussin
- * @author chemit
- * created 2 decembre 2003
- */
-public class I18n {
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- private static Log log = LogFactory.getLog(I18n.class);
- public static final String ISO_8859_1_ENCONDING = "ISO-8859-1";
- public static final String UTF_8_ENCONDING = "UTF-8";
- public static final String DEFAULT_ENCODING = ISO_8859_1_ENCONDING;
- public static final Locale DEFAULT_LOCALE = Locale.UK;
- /** la classe responsable du chargement des ressources */
- static I18nLoader loader;
- /** la gestionnaire de bundle */
-// static I18nBundleManager bundleManager;
- /** Filtre a appliquer avant de retourner les chaines */
- protected static I18nFilter filter;
- /** Indique le chemin du fichier dans lequel ecrire les entrees non trouvees */
- protected static String recordFilePath;
- /**
- * some extra urls to given to bundle manager.
- * <p/>
- * Note: use this before call <code>init(...)</code> methods
- */
- static URL[] extraURL;
- /**
- * le nom d'un unique bundle à utiliser.
- *
- * Si l'on positionne cette propriété, on n'utilisera pas la recherche
- * classique des bunldes à charger mais on se contentera de rechercher
- * le bundle (et ses entrées) à cet emplacement
- * <code>META-INF/uniqueBundleName-XXX.properties</code>.
- *
- * Cela permet de chargement I18n en une seule fois et de ne scruter qu'un
- * seul jar (ou repertoire)...
- *
- * Un goal dans le plugin i18n (i18n:bundle) permet de construire le bundle
- * englobant toutes les autres traductions avec gestion des dépendances.
- *
- * @since 1.0.6
- */
- protected static String uniqueBundleName;
-
- /** Initialise la librairie avec encoding par defaut et locale par defaut */
- public static void init() {
- init(null);
- }
-
- /**
- * Initialize the library for given <code>locale</code with {@link #DEFAULT_ENCODING}.
- *
- * @param locale language to use
- */
- public static void init(Locale locale) {
- if (locale == null) {
- locale = newLocale(null, null);
- }
- getLoader().setLanguage(locale);
- }
-
- /**
- * Initialise la librairie
- *
- * @param language une chaine representant la langue à utiliser fr, en, ...
- * @param country une chaine representant le pays à utiliser FR, GB, ...
- */
- public static void init(String language, String country) {
- init(newLocale(language, country));
- }
-
- /**
- * Retourne la chaine traduite si possible.
- *
- * @param message la chaine a traduire
- * @return la traduction si possible ou la chaine passee en parametre
- * sinon.
- */
- public static String _(String message) {
- if (loader == null || loader.getLanguage() == null) {
- return applyFilter(message);
- }
- return applyFilter(loader.getLanguage().translate(message));
- }
-
- /**
- * Retourne la chaine traduite si possible.
- *
- * @param message message formate avec la meme syntaxe que {@link String#format}
- * @param args les parametres pour le message.
- * @return la traduction si possible ou la chaine passee en parametre
- * sinon.
- */
- public static String _(String message, Object... args) {
- String result = message;
- Language language = loader == null ? null : loader.getLanguage();
- if (language != null) {
- result = language.translate(message);
- }
- try {
- return applyFilter(String.format(result, args));
- } catch (Exception eee) {
- try {
- return applyFilter(String.format(message, args));
- } catch (Exception zzz) {
- log.warn(I18n._("lutinutil.error.i18n.untranslated.message", message), zzz);
- return applyFilter(message);
- }
- }
- }
-
- /**
- * Retourne la chaine passée en argument.
- *
- * @param message message formate avec la meme syntaxe que {@link
- * java.text.MessageFormat}
- * @param args les parametres pour le message.
- * @return le message passe en argument mais formatte
- * avec les parametres
- */
- public static String n_(String message, Object... args) {
- try {
- return String.format(message, args);
- } catch (Exception eee) {
- log.warn(I18n._("lutinutil.error.i18n.unformated.message", message, Arrays.toString(args)), eee);
- return message;
- }
- }
-
- /**
- * Retourne la chaine passé en argument
- *
- * @param message la chaine à traduire
- * @return la chaine passée en argument
- * sinon.
- */
- public static String n_(String message) {
- return message;
- }
-
- public static String getRecordFilePath() {
- return recordFilePath;
- }
-
- /** @return the array of extra url to include in bundle search */
- public static URL[] getExtraURL() {
- return extraURL == null ? new URL[0] : extraURL;
- }
-
- /**
- *@return the unique bundle name to use for loading of system
- *
- * @since 1.0.6
- */
- public static String getUniqueBundleName() {
- return uniqueBundleName;
- }
-
- /**
- * Change le filtre des chaines traduites
- *
- * @param filter l'objet filtre a utiliser
- */
- public static void setFilter(I18nFilter filter) {
- I18n.filter = filter;
- }
-
- public static void setRecordFilePath(String recordFilePath) {
- I18n.recordFilePath = recordFilePath;
- }
-
- /**
- * Change extra urls to use in bundle discovering
- * <p/>
- * Note: <b>This method will close the i18n system.</b>
- *
- * @param extraURL new extra urls to use
- */
- public static void setExtraURL(URL[] extraURL) {
- I18n.extraURL = extraURL;
- // must reset loader urls
- I18nLoader.urls = null;
- // and close system
- close();
- }
-
- /**
- * Change the unique bunlde name to use
- * <p/>
- * Note: <b>This method will close the i18n system.</b>
- *
- * @param uniqueBundleName the new unique bundle pattern to use
- *
- * @since 1.0.6
- */
- public static void setUniqueBundleName(String uniqueBundleName) {
- I18n.uniqueBundleName = uniqueBundleName;
- // must reset loader urls
- I18nLoader.urls = null;
- // and close system
- close();
- }
-
- /**
- * close i18n caches, says the loader if exists
- * <p/>
- * This method should be called to reset all caches (languages, bundles,...)
- */
- public static void close() {
- if (loader != null) {
- loader.close();
- loader = null;
- }
- }
-
- /**
- * Applique le filtre s'il y en a un
- *
- * @param message le message qui devrait etre retourne avant application du
- * filtre.
- * @return le message filtre
- */
- protected static String applyFilter(String message) {
- if (getFilter() != null) {
- return getFilter().applyFilter(message);
- }
- return message;
- }
-
- protected static I18nFilter getFilter() {
- return filter;
- }
-
- /**
- * Get the i18n loader.
- * <p/>
- * If no loader found, then instanciate a new one.
- *
- * @return the instanciated i18n loader
- */
- public static synchronized I18nLoader getLoader() {
-
- if (loader == null) {
- loader = new I18nLoader(DEFAULT_LOCALE, uniqueBundleName);
- }
- return loader;
- }
-
- /**
- * Parse a list of {@link Locale} seperated by comma.
- *
- * Example : fr_FR,en_GB
- *
- * @param str the string representation of locale separated by comma
- * @return list of available locales
- * @throws IllegalArgumentException ia a locale is not valid
- */
- public static Locale[] parseLocales(String str) throws IllegalArgumentException {
- List<Locale> result = new java.util.ArrayList<Locale>();
- String[] bundlesToUse = str.split(",");
- for (int i = 0, j = bundlesToUse.length; i < j; i++) {
- String s = bundlesToUse[i].trim();
- // on devrait verifier que le bundle existe
- try {
- Locale l = ConverterUtil.convert(Locale.class, s);
- result.add(l);
- } catch (Exception e) {
- throw new IllegalArgumentException("bundle " + s + " is not a valid locale,e");
- }
- }
- return result.toArray(new Locale[result.size()]);
- }
-
- public static Locale newLocale(String str) {
- if (str == null) {
- // get use locale
- return newLocale(null, null);
- }
- try {
- return ConverterUtil.convert(Locale.class, str);
- } catch (Exception e) {
- Logger.getLogger("org.codelutin.i18n.I18n").warning("could not load locale '" + str + " for reason : " + e.getMessage());
- // use default locale
- return DEFAULT_LOCALE;
- }
- }
-
- public static Locale newLocale(String language, String country) {
- if (language == null) {
- // get user locale
- language = System.getProperty("user.language", DEFAULT_LOCALE.getLanguage());
- country = System.getProperty("user.country", DEFAULT_LOCALE.getCountry());
- }
- return newLocale(language + (country == null ? "" : '_' + country));
- }
-} //I18n
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nBundleBridge.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nBundleBridge.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nBundleBridge.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,44 +0,0 @@
-/* **##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
-* BundleBridge.java
-*
-* Created: 6 sept. 06
-*
-* @author Arnaud Thimel <thimel(a)codelutin.com>
-* @version $Revision$
-*
-* Mise a jour: $Date$
-* par : $Author$
-*/
-
-package org.codelutin.i18n;
-
-public class I18nBundleBridge extends java.util.ResourceBundle {
-
- @Override
- public java.util.Enumeration<String> getKeys() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public Object handleGetObject(String key) {
- return I18n._(key);
- }
-
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nDefaultTooltipFilter.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nDefaultTooltipFilter.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nDefaultTooltipFilter.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,41 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * i18nDefaultTooltipFilter.java
- *
- * Created: 2 déc. 2003
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * Copyright Code Lutin
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-
-package org.codelutin.i18n;
-
-public class I18nDefaultTooltipFilter implements I18nFilter { // I18nDefaultTooltipFilter
-
- public String applyFilter(String message) {
- if (message != null && message.startsWith("defaultToolTip-"))
- return null;
- return message;
- }
-} // I18nDefaultTooltipFilter
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nFilter.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nFilter.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nFilter.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,37 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * i18nFilter.java
- *
- * Created: 2 déc. 2003
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * Copyright Code Lutin
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-
-package org.codelutin.i18n;
-
-public interface I18nFilter { // I18nFilter
-
- public String applyFilter(String message);
-} // I18nFilter
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nLoader.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nLoader.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nLoader.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,239 +0,0 @@
-/**
- * *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%*
- */
-package org.codelutin.i18n;
-
-import java.net.URL;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Locale;
-import org.codelutin.i18n.bundle.I18nBundle;
-import org.codelutin.i18n.bundle.I18nBundleEntry;
-import org.codelutin.i18n.bundle.I18nBundleFactory;
-import org.codelutin.util.StringUtil;
-
-/**
- * Classe responsible of loading of I18n system.
- * <p/>
- * Contains the current used {@link #language} (can be null, if not set), and the list of already loaded {@link #languages}.
- * <p/>
- * <p/>
- * Note: <b>Init methods are package acces and should not be used alone, but within {@link I18n} class <code>init(XXX)</code> methods.</b>
- *
- * @author chemit
- */
-public class I18nLoader {
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- private static final Log log = LogFactory.getLog(I18nLoader.class);
- /** le language actuellement utilise */
- protected Language language;
- /** le cache de languages deja charges */
- protected List<Language> languages;
- /** le cache des urls de recheche des bundles */
- protected static URL[] urls;
- /** le cache de bundles deja charges */
- protected I18nBundle[] bundles;
- /** la locale par defaut a utiliser */
- protected final Locale defaultLocale;
- /** le nom de l'unique bunlde a charger (mode unique) */
- protected final String uniqueBundleName;
-
- public I18nLoader(Locale defaultLocale) {
- this(defaultLocale, null);
- }
-
- public I18nLoader(Locale defaultLocale, String uniqueBundleName) {
- this.defaultLocale = defaultLocale;
- this.uniqueBundleName = uniqueBundleName;
- }
-
- /** @return current language loaded or null, if no language was load */
- public Language getLanguage() {
- return language;
- }
-
- /** @return le cache de language avec instanciation paresseuse */
- public List<Language> getLanguages() {
- if (languages == null) {
- languages = new ArrayList<Language>();
- }
- return languages;
- }
-
- public Locale getDefaultLocale() {
- return defaultLocale;
- }
-
- public boolean isEmpty() {
- checkInit();
- boolean isEmpty = I18nBundleFactory.isEmpty(bundles);
- return isEmpty;
- }
-
- /** @return array of all locales loaded */
- public Locale[] getLocales() {
- checkInit();
- Locale[] result = I18nBundleFactory.getLocales(bundles);
- return result;
- }
-
- public I18nBundle[] getBundles() {
- checkInit();
- return bundles;
- }
-
- public I18nBundle[] getBundles(Locale l) {
- checkInit();
- I18nBundle[] result = I18nBundleFactory.getBundles(l, bundles);
- return result;
- }
-
- public I18nBundleEntry[] getBundleEntries() {
- checkInit();
- I18nBundleEntry[] result = I18nBundleFactory.getBundleEntries(bundles);
- return result;
- }
-
- public I18nBundleEntry[] getBundleEntries(Locale l) {
- checkInit();
- I18nBundleEntry[] result = I18nBundleFactory.getBundleEntries(l, defaultLocale, bundles);
- return result;
- }
-
- void init() {
-
- if (isInit()) {
- // already init
- return;
- }
-
- // get all bundles urls
- if (urls == null || urls.length == 0) {
-
- // cache this expensive search
-
- if (uniqueBundleName != null) {
- // on recherche directement un bundle precis a aprtir
- // de son fichier de definition
- urls = I18nBundleFactory.getURLs(uniqueBundleName);
- if (urls == null) {
- log.warn("coudl not find uniqueBundleName i18n " + uniqueBundleName);
- }
- }
- if (urls == null) {
- // on utilise le mecanisme de recherche des bundles dans toutes
- // les entrees du classloader
- urls = I18nBundleFactory.getURLs(Language.getLoader(), I18n.getExtraURL());
- }
- }
-
- long t0 = System.nanoTime();
-
- // detect bundles
- List<I18nBundle> bundleDetected = I18nBundleFactory.detectBundles(urls);
-
- // save bundles in cache
- this.bundles = bundleDetected.toArray(new I18nBundle[bundleDetected.size()]);
-
- log.info(bundleDetected.size() + " bundle(s) found, [" + getBundleEntries().length + " file(s)] in " + StringUtil.convertTime(System.nanoTime() - t0));
- }
-
- /**
- * Set a new language in loader, given a locale.
- *
- * @param locale la locale du language requis
- * @param bundleManager bundle manager to used
- */
- synchronized void setLanguage(Locale locale) {
- init();
- if (log.isDebugEnabled()) {
- log.debug("locale: " + locale);
- }
- Language result = getLanguage(locale);
- if (result == null) {
- result = addLanguage(locale);
- } else {
- log.debug("using cached language : " + result);
- }
- language = result;
- }
-
- /**
- * Close loader and release cache ofg language.
- * <p/>
- * Current language will be also clean.
- */
- void close() {
- if (languages != null) {
- log.info("nb languages loaded : " + languages.size());
- for (Language l : languages) {
- l.close();
- }
- languages.clear();
- languages = null;
- }
- if (urls != null) {
- urls = null;
- }
- if (bundles != null) {
- bundles = null;
- }
- language = null;
- }
-
- /**
- * @param locale la locale du language recherche
- * @return le language trouve dans le cache, ou null.
- */
- Language getLanguage(Locale locale) {
-
- if (!(languages == null || languages.isEmpty())) {
- for (Language l : languages) {
- if (locale.equals(l.getLocale())) {
- return l;
- }
- }
- }
- return null;
- }
-
- Language addLanguage(Locale locale) {
- Language result;
- result = new Language(locale);
- long t0 = System.nanoTime();
- I18nBundleEntry[] entries = getBundleEntries(locale);
- result.load(entries);
- log.info(result + ", nbEntries: " + entries.length + ", nbSentences: " + result.size() + " in " + StringUtil.convertTime(System.nanoTime() - t0));
- getLanguages().add(result);
- return result;
- }
-
- boolean isInit() {
- return bundles != null;
- }
-
- void checkInit() {
- if (!isInit()) {
- throw new IllegalStateException("should call init method on " + I18nLoader.class);
- }
- }
-}
Added: nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nUtil.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nUtil.java (rev 0)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nUtil.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -0,0 +1,194 @@
+package org.codelutin.i18n;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.logging.Logger;
+import java.util.zip.ZipFile;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.codelutin.util.LocaleConverter;
+
+/**
+ *
+ * @author chemit
+ */
+public class I18nUtil {
+
+ /** to use log facility, just put in your code: log.info(\"...\"); */
+ private static final Log log = LogFactory.getLog(I18nUtil.class);
+ public static final String ISO_8859_1_ENCONDING = "ISO-8859-1";
+ public static final String UTF_8_ENCONDING = "UTF-8";
+ public static final String DEFAULT_ENCODING = ISO_8859_1_ENCONDING;
+ public static final Locale DEFAULT_LOCALE = Locale.UK;
+
+ /**
+ * Parse a list of {@link Locale} seperated by comma.
+ *
+ * Example : fr_FR,en_GB
+ *
+ * @param str the string representation of locale separated by comma
+ * @return list of available locales
+ * @throws IllegalArgumentException ia a locale is not valid
+ */
+ public static Locale[] parseLocales(String str) throws IllegalArgumentException {
+ List<Locale> result = new java.util.ArrayList<Locale>();
+ String[] bundlesToUse = str.split(",");
+ for (int i = 0, j = bundlesToUse.length; i < j; i++) {
+ String s = bundlesToUse[i].trim();
+ // on devrait verifier que le bundle existe
+ try {
+ Locale l = (Locale) new LocaleConverter().convert(Locale.class, s);
+ result.add(l);
+ } catch (Exception e) {
+ throw new IllegalArgumentException("bundle " + s + " is not a valid locale,e");
+ }
+ }
+ return result.toArray(new Locale[result.size()]);
+ }
+
+ public static Locale newLocale(String str) {
+ if (str == null) {
+ // get use locale
+ return newLocale(null, null);
+ }
+ try {
+ return (Locale) new LocaleConverter().convert(Locale.class, str);
+ } catch (Exception e) {
+ Logger.getLogger("org.codelutin.i18n.I18n").warning("could not load locale '" + str + " for reason : " + e.getMessage());
+ // use default locale
+ return DEFAULT_LOCALE;
+ }
+ }
+
+ public static Locale newLocale(String language, String country) {
+ if (language == null) {
+ // get user locale
+ language = System.getProperty("user.language", DEFAULT_LOCALE.getLanguage());
+ country = System.getProperty("user.country", DEFAULT_LOCALE.getCountry());
+ }
+ return newLocale(language + (country == null ? "" : '_' + country));
+ }
+
+ /**
+ * Test if an url contains the given directory with no recurse seeking.
+ *
+ * @param url the url to seek
+ * @param directory the directory to find
+ * @return <code>true</code> if directory was found, <code>false</code> otherwise.
+ * @throws java.io.IOException if any io pb
+ */
+ public static boolean containsDirectDirectory(URL url, String directory) throws IOException {
+ String fileName = url.getFile();
+ // TODO deal with encoding in windows, this is very durty, but it works...
+ File file = new File(fileName.replaceAll("%20", " "));
+ if (!file.exists()) {
+ return false;
+ }
+ if (isJar(fileName) || isZip(fileName)) {
+ // cas ou le fichier du classLoader est un fichier jar ou zip
+ if (log.isTraceEnabled()) {
+ log.trace("zip to search " + file);
+ }
+ return new ZipFile(file).getEntry(directory + "/") != null;
+ }
+ if (file.isDirectory()) {
+ // cas ou le ichier du classLoader est un repertoire
+ if (log.isTraceEnabled()) {
+ log.trace("directory to search " + file);
+ }
+ return new File(file, directory).exists();
+ }
+
+ if (log.isWarnEnabled()) {
+ log.warn("unknown resource type " + url);
+ }
+ return false;
+ }
+
+ /**
+ * 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);
+ }
+ return false;
+ }
+
+ /**
+ * 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);
+ }
+ return false;
+ }
+
+ /**
+ * 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()) {
+ log.trace("search '" + pattern + "' in " + repository);
+ }
+
+ List<URL> urlList = new ArrayList<URL>();
+ File[] filesList = repository.listFiles();
+
+ if (filesList != null) {
+
+ for (File file : filesList) {
+
+ String name = file.getAbsolutePath();
+
+ if (log.isTraceEnabled()) {
+ log.trace("directory: " + repository + " name: " + name);
+ }
+
+ // cas de recursivite : repertoire dans un repertoire
+ if (file.exists() && file.isDirectory()) {
+ urlList.addAll(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);
+ }
+ urlList.add(url);
+ }
+ }
+ }
+ if (log.isTraceEnabled()) {
+ log.trace("found with pattern '" + pattern + "' : " + urlList);
+ }
+ return urlList;
+ } catch (MalformedURLException eee) {
+ throw new IllegalArgumentException("Erreur lors de la conversion de l'url " + repository + " (pattern " + pattern + ") " + eee.getMessage(), eee);
+ //throw new ResourceException("Le fichier n'a pu être converti en URL", eee);
+ }
+ }
+}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nf.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nf.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/I18nf.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,34 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-package org.codelutin.i18n;
-
-/**
- * Transition class during project switch between MessageFormat.format syntax
- * to String.format syntax.
- *
- * @author poussin
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- *
- * @deprecated Use I18n class instead.
- */
-public class I18nf extends I18n {
-
-}
\ No newline at end of file
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/Language.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/Language.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/Language.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,227 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/**
- * Language.java
- */
-
-package org.codelutin.i18n;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.net.URLClassLoader;
-import java.util.Enumeration;
-import java.util.Locale;
-import java.util.MissingResourceException;
-import java.util.Properties;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codelutin.i18n.bundle.I18nBundleEntry;
-import org.codelutin.i18n.bundle.I18nBundleManager;
-import org.codelutin.util.RecursiveProperties;
-
-/**
- * This class is used by the i18n class. It encapsulates the translation
- * resource for a given language.
- * <p/>
- * Encoding to be used to read properties files will be ISO-8859-1 since java does it like this.
- */
-public class Language {
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- private static final Log log = LogFactory.getLog(Language.class);
-
- public static URLClassLoader getLoader() {
- ClassLoader loader = Language.class.getClassLoader();
- if (loader instanceof URLClassLoader) {
- return (URLClassLoader) loader;
- }
- log.warn("could not find the URLClassLoader : "+loader);
- return null;
- }
-
- /** toutes les traductions pour cette langue */
- protected Properties resource;
-
- /** la locale de la langue */
- protected Locale locale;
-
- /** @param l the current locale of the language */
- public Language(Locale l) {
- this.locale = l;
- }
-
- /**
- * charge les traductions de la langue.
- * <p/>
- * recherche dans un premier temps, les urls des bundles puis les charge.
- *
- * @param bundleManager the used bundle manager
- */
- @Deprecated
- public void load(I18nBundleManager bundleManager) {
- // make sure the bundlemanager is init
- bundleManager.init();
- // load resources from bundles
- resource = new RecursiveProperties();
- // get bundles for this locale
- try {
- bundleManager.load(this, resource);
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
- /**
- * charge les traductions de la languea partir d'une liste donnee de
- * fichiers de traduction.
- *
- * @param bundleEntries the used bundles entries to load
- */
- public void load(I18nBundleEntry[] bundleEntries) {
-
- resource = new RecursiveProperties();
-
- try {
- for (I18nBundleEntry e : bundleEntries) {
- e.load(resource);
- }
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
- /**
- * translate takes a sentence and returns its translation if found, the very
- * same string otherwise.
- *
- * @param sentence sentence to translate
- * @return translated sentence
- */
- public String translate(String sentence) {
- if (resource == null) {
- recordNotFound(sentence);
- return sentence;
- }
- try {
- String result = resource.getProperty(sentence);
- if (null != result && !"".equals(result)) {
- return result;
- }
- recordNotFound(sentence);
- return sentence;
- } catch (MissingResourceException eee) {
- log.warn("Resource " + sentence + " unavailable", eee);
- return sentence;
- } catch (Exception eee) {
- log.error("Unexpected error while translating : ", eee);
- return sentence;
- }
- }
-
- private void recordNotFound(String key) {
- if (I18n.recordFilePath != null && key != null && !"".equals(key)) {
- File f = new File(I18n.recordFilePath);
- Properties recordProps = new Properties();
- try {
- if (f.exists()) {
- FileInputStream fis = new FileInputStream(f);
- recordProps.load(fis);
- fis.close();
- }
- recordProps.put(key, "");
- FileOutputStream fos = new FileOutputStream(f);
- recordProps.store(fos, "Adding the key : " + key);
- fos.close();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
-
- /**
- * untranslate takes a translated sentence and returns the original one if
- * found, the very same string otherwise.
- *
- * @param sentence sentence to untranslate
- * @return untranslated sentence
- */
- public String untranslate(String sentence) {
- if (resource == null) {
- return sentence;
- }
- try {
- Enumeration<?> e = resource.propertyNames();
- // Look for the given sentence through all translations
- while (e.hasMoreElements()) {
- String key = (String) e.nextElement();
- String translation = resource.getProperty(key);
- // If found returns the corresponding key
- if (sentence.equals(translation)) {
- return key;
- }
- }
- } catch (MissingResourceException eee) {
- // Well, this can't happen...
- }
- // No such translated sentence in our resourceBundle
- return sentence;
- }
-
- public Locale getLocale() {
- return locale;
- }
-
- public int size() {
- return resource == null ? 0 : resource.size();
- }
-
- public void close() {
- if (resource != null) {
- log.info(this);
- resource.clear();
- resource = null;
- }
- }
-
- @Override
- protected void finalize() throws Throwable {
- super.finalize();
- close();
- }
-
- @Override
- public boolean equals(Object o) {
- return this == o || o instanceof Language && locale.equals(((Language) o).locale);
- }
-
- @Override
- public int hashCode() {
- return locale.hashCode();
- }
-
- @Override
- public String toString() {
- return "Language <locale: " + locale + ",nbStences:" + (size()) + ">";
- }
-}
Modified: nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/LanguageEnum.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/LanguageEnum.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/LanguageEnum.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,5 +1,5 @@
/*
-* *##% Lutin utilities library
+ * *##% Lutin utilities library
* Copyright (C) 2004 - 2008 CodeLutin
*
* This program is free software: you can redistribute it and/or modify
@@ -17,8 +17,6 @@
* <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
package org.codelutin.i18n;
-import static org.codelutin.i18n.I18n._;
-
/**
* Une énumération pour représenter le langue d'une locale définie dans la norme
* <a href="http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm…"><code>ISO 639-1:1998 (ICS n° 01.140.20)</code></a>.
@@ -27,8 +25,8 @@
*
* @author chemit
*/
-
public enum LanguageEnum {
+
aa, // Afar
ab, // Abkhazian
af, // Afrikaans
@@ -174,12 +172,10 @@
try {
languageValue = LanguageEnum.valueOf(language.toLowerCase());
} catch (IllegalArgumentException e) {
- System.err.println(_("lutinutil.error.i18n.unfound.language", language, defaultValue));
+ System.err.println("Unfound language " + language + ", will use default one " + defaultValue);
} catch (NullPointerException e) {
- System.err.println(_("lutinutil.error.i18n.unfound.language", language, defaultValue));
+ System.err.println("Unfound language " + language + ", will use default one " + defaultValue);
}
return languageValue == null ? defaultValue : languageValue;
}
-
-
}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/LocaleEditor.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/LocaleEditor.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/LocaleEditor.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,57 +0,0 @@
-/*
-* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-package org.codelutin.i18n;
-
-import javax.swing.JComboBox;
-import java.util.Locale;
-
-/**
- * A {@link Locale} editor.
- * <p/>
- * use the static method to have an instance of editor {@link #newEditor(java.util.Locale[])}
- * <p/>
- * If no locale is given to this method, it will go and seek via
- * {@link org.codelutin.i18n.bundle.I18nBundleManager#getLocales()} all loaded locales in i18n system
- *
- * @author chemit
- */
-public class LocaleEditor extends JComboBox {
-
- /** serialVersionUID */
- private static final long serialVersionUID = -6777873426011538807L;
-
- protected Locale[] type;
-
- public static LocaleEditor newEditor(Locale... type) {
- return new LocaleEditor(type);
- }
-
- public LocaleEditor(Locale... type) {
- super(buildModel(type));
- }
-
- protected static Locale[] buildModel(Locale... type) {
- if (type.length > 0) {
- return type;
- }
- // get availables locales registred in I18n system
- type = I18n.getLoader().getLocales();
- return type;
- }
-
-}
Modified: nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleEntry.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleEntry.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleEntry.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,5 +1,5 @@
/*
-* *##% Lutin utilities library
+ * *##% Lutin utilities library
* Copyright (C) 2004 - 2008 CodeLutin
*
* This program is free software: you can redistribute it and/or modify
@@ -17,15 +17,14 @@
* <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
package org.codelutin.i18n.bundle;
-import org.codelutin.i18n.I18n;
-import org.codelutin.i18n.I18nFileReader;
-
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Locale;
import java.util.Map.Entry;
import java.util.Properties;
+import org.codelutin.i18n.I18nUtil;
+import org.codelutin.i18n.I18nFileReader;
/**
* A class to represent an entry in a bundle.
@@ -53,10 +52,8 @@
/** path to resource file */
protected URL path;
-
/** local of the entry, can be null if general scope */
protected Locale locale;
-
/** scope of the entry */
protected I18nBundleScope scope;
@@ -130,11 +127,11 @@
sb.append(getPath()).append("\n");
}
// TC 20081117 always use ISO_8859_1_ENCONDING, since java does it like this.
- fileReader.load(inputStream, I18n.ISO_8859_1_ENCONDING);
+ fileReader.load(inputStream, I18nUtil.ISO_8859_1_ENCONDING);
if (I18nBundle.log.isDebugEnabled()) {
for (Entry<Object, Object> entry : fileReader.entrySet()) {
- sb.append(I18n.ISO_8859_1_ENCONDING).append(" : ").append(entry).append("\n");
+ sb.append(I18nUtil.ISO_8859_1_ENCONDING).append(" : ").append(entry).append("\n");
}
}
for (Entry<Object, Object> entry : fileReader.entrySet()) {
@@ -167,6 +164,7 @@
}
}
+ @Override
public int compareTo(I18nBundleEntry o) {
int i = getScope().compareTo(o.getScope());
if (i == 0) {
@@ -191,5 +189,4 @@
String s = super.toString();
return "<" + s.substring(s.lastIndexOf(".") + 1) + ", locale:" + locale + ", scope " + scope + ", path:" + path + ">";
}
-
}
Modified: nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleFactory.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleFactory.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleFactory.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -18,11 +18,7 @@
import java.util.zip.ZipInputStream;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.codelutin.i18n.I18n;
-import org.codelutin.util.ClassLoaderUtil;
-import org.codelutin.util.HashList;
-import org.codelutin.util.Resource;
-import org.codelutin.util.ResourceException;
+import org.codelutin.i18n.I18nUtil;
/**
* Classe qui est responsable de la detection et construction
@@ -145,108 +141,7 @@
}
/**
- * Detecte les urls de toutes les entrees de bunbles sur tout un classLoader.
- *
- * Il s'agit du mode initialie de detection des entréés de bundles, i.e des
- * fichiers de traductions.
- *
- * <b>Note: </b> Cette methode devient couteuse des que le classLoader
- * contient de nombreuses entrées. Il est meiux d'utiliser le second type
- * de chargement qui n'utilise qu'un seul fichier de traduction unifié.
- *
- * @param loader le classloader a utiliser pour trouver les resources.
- * @return les urls des entrees de bundles
- */
- public static URL[] getURLs(URLClassLoader loader) {
- try {
- // on calcule toutes les urls utilisable dans le classloader donnee
- List<URL> urlToSeek = new ArrayList<URL>();
- urlToSeek.addAll(Arrays.asList(ClassLoaderUtil.getDeepURLs(loader)));
-
- // on va maintenant supprimer toutes les urls qui ne respectent pas
- // le pattern i18n : il faut que la resource contienne un repertoire i18n
- // ce simple test permet de restreindre la recherche des resources
- // i18n qui est tres couteuse
- int size = urlToSeek.size();
- for (Iterator<URL> it = urlToSeek.iterator(); it.hasNext();) {
- URL url = it.next();
- if (!Resource.containsDirectDirectory(url, DIRECTORY_SEARCH_BUNDLE_PATTERN)) {
- if (log.isDebugEnabled()) {
- log.debug("skip url with no " + DIRECTORY_SEARCH_BUNDLE_PATTERN + " directory : " + url);
- }
- it.remove();
- }
- }
- if (log.isDebugEnabled()) {
- log.debug("detect " + urlToSeek.size() + " i18n capable url (out of " + size + ")");
- }
- // on effectue la recherche des urls des resources i18n (tous les
- // fichiers de traductions) sur toutes les urls precedemment calculees)
- List<URL> result = Resource.getURLs(SEARCH_BUNDLE_PATTERN, urlToSeek.toArray(new URL[urlToSeek.size()]));
- if (log.isDebugEnabled()) {
- for (URL url : result) {
- log.debug(url.toString());
- }
- }
- return result.toArray(new URL[result.size()]);
- } catch (Exception eee) {
- log.warn("Unable to find urls for loader : " + loader + " for reason " + eee.getMessage(), eee);
- return new URL[0];
- }
- }
-
- /**
* Recherche la liste des url de toutes les resources i18n, i.e les urls
- * des fichiers de traduction.
- *
- * @param loader le classLoader où trouver les bundles
- * @param extraUrl des urls de resources i18n deja calcule, à ajouter au resultat sans traitement particulier
- * @return la liste des urls de bundle i18n pour la langue donné
- */
- public static URL[] getURLs(URLClassLoader loader, URL... extraUrl) {
-
- try {
- // on calcule toutes les urls utilisable dans le classloader donnee
- List<URL> urlToSeek = new ArrayList<URL>();
- urlToSeek.addAll(Arrays.asList(ClassLoaderUtil.getDeepURLs(loader)));
- // on ajoute les urls de resources i18n donnes
- if (extraUrl.length > 0) {
- urlToSeek.addAll(Arrays.asList(extraUrl));
- }
- // on va maintenant supprimer toutes les urls qui ne respectent pas
- // le pattern i18n : il faut que la resource contienne un repertoire i18n
- // ce simple test permet de restreindre la recherche des resources
- // i18n qui est tres couteuse
- int size = urlToSeek.size();
- for (Iterator<URL> it = urlToSeek.iterator(); it.hasNext();) {
- URL url = it.next();
- if (!Resource.containsDirectDirectory(url, DIRECTORY_SEARCH_BUNDLE_PATTERN)) {
- if (log.isDebugEnabled()) {
- log.debug("skip url with no " + DIRECTORY_SEARCH_BUNDLE_PATTERN + " directory : " + url);
- }
- it.remove();
- }
- }
- if (log.isDebugEnabled()) {
- log.debug("detect " + urlToSeek.size() + " i18n capable url (out of " + size + ")");
- }
- // on effectue la recherche des urls des resources i18n (tous les
- // fichiers de traductions) sur toutes les urls precedemment calculees)
- List<URL> result = Resource.getURLs(SEARCH_BUNDLE_PATTERN, urlToSeek.toArray(new URL[urlToSeek.size()]));
- if (log.isDebugEnabled()) {
- for (URL url : result) {
- log.debug(url.toString());
- }
- }
- return result.toArray(new URL[result.size()]);
- } catch (Exception eee) {
- log.warn("Unable to find urls for loader : " + loader + " for reason " + eee.getMessage(), eee);
- return new URL[0];
- }
- }
-
- /**
- * Recherche la liste des url de toutes les resources i18n, i.e les urls
* des fichiers de traduction en mode uniqueBundleName.
*
* On va d'abord rechercher un fichier /META-INF/unqiueBundleName-definition.properties
@@ -274,7 +169,7 @@
stream.close();
String localesAsStr = p.getProperty(BUNDLE_DEF_LOCALES);
- Locale[] locales = I18n.parseLocales(localesAsStr);
+ Locale[] locales = I18nUtil.parseLocales(localesAsStr);
List<URL> lUrls = new java.util.ArrayList<URL>(1);
String prefixURL = defURL.toString();
prefixURL = prefixURL.substring(0, prefixURL.length() - definitionFileName.length());
@@ -327,7 +222,7 @@
int size = urlToSeek.size();
for (Iterator<URL> it = urlToSeek.iterator(); it.hasNext();) {
URL url = it.next();
- if (!Resource.containsDirectDirectory(url, DIRECTORY_SEARCH_BUNDLE_PATTERN)) {
+ if (!I18nUtil.containsDirectDirectory(url, DIRECTORY_SEARCH_BUNDLE_PATTERN)) {
if (log.isDebugEnabled()) {
log.debug("skip url with no " + DIRECTORY_SEARCH_BUNDLE_PATTERN + " directory : " + url);
}
@@ -355,7 +250,7 @@
// works...
File file = new File(fileName.replaceAll("%20", " "));
- if (Resource.isJar(fileName)) {
+ if (I18nUtil.isJar(fileName)) {
// cas ou le ichier du classLoader est un fichier jar
if (log.isDebugEnabled()) {
log.debug("jar to search " + file);
@@ -610,7 +505,7 @@
return result;
} catch (Exception eee) {
- throw new ResourceException("n'a pas pu trouve la resource dans le jar " + jarfile.getAbsolutePath(), eee);
+ throw new RuntimeException("n'a pas pu trouve la resource dans le jar " + jarfile.getAbsolutePath(), eee);
}
}
@@ -621,7 +516,7 @@
log.debug("search '" + pattern + "' in " + repository);
}
- List<URL> urlList = new HashList<URL>();
+ List<URL> urlList = new ArrayList<URL>();
File[] filesList = repository.listFiles();
if (filesList != null) {
@@ -632,7 +527,7 @@
// cas de recursivite : repertoire dans un repertoire
if (file.exists() && file.isDirectory()) {
- urlList.addAll(Resource.getURLsFromDirectory(file,
+ urlList.addAll(I18nUtil.getURLsFromDirectory(file,
pattern));
// si le fichier du repertoire n'est pas un repertoire
// on verifie s'il correspond au pattern
@@ -647,7 +542,7 @@
}
return urlList;
} catch (MalformedURLException eee) {
- throw new ResourceException("n'a pas pu trouve la resource dans le repertoire " + repository.getAbsolutePath(), eee);
+ throw new RuntimeException("n'a pas pu trouve la resource dans le repertoire " + repository.getAbsolutePath(), eee);
}
}
}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleManager.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleManager.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleManager.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,449 +0,0 @@
-/*
- * *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-package org.codelutin.i18n.bundle;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codelutin.i18n.I18n;
-import org.codelutin.i18n.Language;
-import org.codelutin.util.ClassLoaderUtil;
-import org.codelutin.util.Resource;
-import org.codelutin.util.StringUtil;
-
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Properties;
-import java.util.regex.Matcher;
-
-/**
- * Manager of Bundle.
- * TODO
- *
- * @author chemit
- *
- * @deprecated since 1.0.6, on prefere utiliser une seule classe qui gere le
- * chargement {@link org.codelutin.i18n.I18nLoader} et une classe utilitaire qui permet de
- * reutiliser le code {@link I18nBundleFactory}.
- *
- */
-@Deprecated
-public class I18nBundleManager {
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- private static final Log log = LogFactory.getLog(I18nBundleManager.class);
- /** pattern to find all i18n bundles in classloader class path */
- public static final String SEARCH_BUNDLE_PATTERN = ".*i18n/.+\\.properties";
- public static final String DIRECTORY_SEARCH_BUNDLE_PATTERN = "i18n";
- /** le cache de bundles deja charges */
- protected List<I18nBundle> cache;
- /** le cache des urls de recheche des bundles */
- protected static URL[] urls;
- protected final Locale defaultLocale;
-
- public static void resetURL() {
- log.info(" old cache size " + (urls == null ? 0 : urls.length));
- if (urls != null) {
- urls = null;
- }
- }
-
- public I18nBundleManager(Locale defaultLocale) {
- this.defaultLocale = defaultLocale;
- }
-
- public void init() {
-
- if (isInit()) {
- // already init
- return;
- }
-
- // get all bundles urls
- if (urls == null || urls.length == 0) {
- // cache this expensive search
- urls = prepareURLs();
- }
-
- long t0 = System.nanoTime();
-
- // detect bundles
- List<I18nBundle> bundles = detectBundles(urls);
-
- // once for all, sort entries from general to full
- for (I18nBundle bundle : bundles) {
- Collections.sort(bundle.getEntries());
- }
-
- // save bundles in cache
- cache = Collections.unmodifiableList(bundles);
-
- log.info(bundles.size() + " bundle(s) found, [" + getBundleEntries().length + " file(s)] in " + StringUtil.convertTime(System.nanoTime() - t0));
- }
-
- public Locale getDefaultLocale() {
- return defaultLocale;
- }
-
- public I18nBundle[] getBundles() {
- checkInit();
- return cache.toArray(new I18nBundle[cache.size()]);
- }
-
- /** @return array of all locales loaded */
- public Locale[] getLocales() {
- checkInit();
- List<Locale> result = new ArrayList<Locale>();
- for (I18nBundle i18nBundle : cache) {
- for (I18nBundleEntry entry : i18nBundle.getEntries()) {
- Locale o = entry.getLocale();
- if (o != null && !result.contains(o)) {
- result.add(o);
- }
- }
- }
- return result.toArray(new Locale[result.size()]);
- }
-
- public boolean isEmpty() {
- checkInit();
- for (I18nBundle i18nBundle : cache) {
- if (!i18nBundle.getEntries().isEmpty()) {
- // on a trouve au moins une entree
- return false;
- }
- }
- return true;
- }
-
- public I18nBundle[] getBundles(Locale l) {
- checkInit();
- List<I18nBundle> result = new ArrayList<I18nBundle>();
- for (I18nBundle i18nBundle : cache) {
- if (i18nBundle.matchLocale(l)) {
- result.add(i18nBundle);
- }
- }
- return result.toArray(new I18nBundle[result.size()]);
- }
-
- public I18nBundleEntry[] getBundleEntries() {
- checkInit();
- List<I18nBundleEntry> result = new ArrayList<I18nBundleEntry>();
- for (I18nBundle i18nBundle : cache) {
- List<I18nBundleEntry> list = i18nBundle.getEntries();
- if (!list.isEmpty()) {
- result.addAll(list);
- }
- }
- return result.toArray(new I18nBundleEntry[result.size()]);
- }
-
- public I18nBundleEntry[] getBundleEntries(Locale l) {
- checkInit();
- List<I18nBundleEntry> result = new ArrayList<I18nBundleEntry>();
- for (I18nBundle i18nBundle : cache) {
- I18nBundleEntry[] entries = i18nBundle.getEntries(l);
- if (entries.length == 0) {
- //no entry found for the bundle, try pomotion
- entries = promuteBundle(i18nBundle, l);
- }
- result.addAll(Arrays.asList(entries));
- }
- return result.toArray(new I18nBundleEntry[result.size()]);
- }
-
- public URL[] getUrls() {
- return urls;
- }
-
- public void load(Language language, Properties resource) throws IOException {
- long t0 = System.nanoTime();
- I18nBundleEntry[] entries = getBundleEntries(language.getLocale());
- for (I18nBundleEntry entry : entries) {
- entry.load(resource);
- }
- log.info(language + ", nbEntries: " + entries.length + ", nbSentences: " + language.size() + " in " + StringUtil.convertTime(System.nanoTime() - t0));
- }
-
- public void close() {
- if (cache != null) {
- cache = null;
- }
- }
-
- /**
- * Obtain some rescue entries for a given locale.
- * <p/>
- * Note: <b>Calling this method implies there is no entry matched by the common method
- * {@link #getBundleEntries(java.util.Locale)} return a empty array.
- *
- * @param bundle the bundle to promute
- * @param l the locale required
- * @return the table of entries promuted for the given locale
- */
- protected I18nBundleEntry[] promuteBundle(I18nBundle bundle, Locale l) {
-
- I18nBundleScope scope = I18nBundleScope.valueOf(l);
-
- if (log.isDebugEnabled()) {
- log.debug('[' + bundle.getBundlePrefix() + "] did not find matching entries for locale " + l + ". Try to detect best entries...");
- }
-
- if (bundle.size() == 0) {
- // there is no entry to take...
- log.warn("PROMUTE NO ENTRY FOUND");
- return new I18nBundleEntry[0];
- }
-
- if (bundle.size() == 1) {
- // there is one entry take it,what ever...
- I18nBundleEntry entry = bundle.getEntries().get(0);
- log.warn("PROMUTE" + l + " to " + entry.getLocale() + " [" + bundle.getBundlePrefix() + ']');
- return new I18nBundleEntry[]{entry};
- }
-
- List<I18nBundleEntry> result = new ArrayList<I18nBundleEntry>();
-
- switch (scope) {
- case FULL:
- promuteFull(bundle, l, result);
- break;
- case LANGUAGE:
- promuteLanguage(bundle, l, result);
- break;
- case GENERAL:
- promuteGeneral(bundle, l, result);
- break;
- }
- return result.toArray(new I18nBundleEntry[result.size()]);
- }
-
- /**
- *
- * @return les urls où rechercher des bundles
- */
- protected URL[] prepareURLs() {
- URL[] result = getURLs(Language.getLoader(), I18n.getExtraURL());
- return result;
- }
-
- /**
- * Recherche la liste des url de bundles i18n correspondant à la langue
- * donné.
- *
- * @param loader le classe loader où trouver les bundles
- * @param extraUrl extra urls to add
- * @return la liste des urls de bundle i18n pour la langue donné
- */
- protected URL[] getURLs(URLClassLoader loader, URL... extraUrl) {
-
- try {
- // on calcule toutes les urls utilisable dans le classloader donnee
- List<URL> urlToSeek = new ArrayList<URL>();
- urlToSeek.addAll(Arrays.asList(ClassLoaderUtil.getDeepURLs(loader)));
- // on ajoute les urls de resources i18n donnes
- if (extraUrl.length > 0) {
- urlToSeek.addAll(Arrays.asList(extraUrl));
- }
- // on va maintenant supprimer toutes les urls qui ne respectent pas
- // le pattern i18n : il faut que la resource contienne un repertoire i18n
- // ce simple test permet de restreindre la recherche des resources
- // i18n qui est tres couteuse
- int size = urlToSeek.size();
- for (Iterator<URL> it = urlToSeek.iterator(); it.hasNext();) {
- URL url = it.next();
- if (!Resource.containsDirectDirectory(url, DIRECTORY_SEARCH_BUNDLE_PATTERN)) {
- if (log.isDebugEnabled()) {
- log.debug("skip url with no " + DIRECTORY_SEARCH_BUNDLE_PATTERN + " directory : " + url);
- }
- it.remove();
- }
- }
- if (log.isDebugEnabled()) {
- log.debug("detect " + urlToSeek.size() + " i18n capable url (out of " + size + ")");
- }
- // on effectue la recherche des urls des resources i18n (tous les
- // fichiers de traductions) sur toutes les urls precedemment calculees)
- List<URL> result = Resource.getURLs(SEARCH_BUNDLE_PATTERN, urlToSeek.toArray(new URL[urlToSeek.size()]));
- if (log.isDebugEnabled()) {
- for (URL url : result) {
- log.debug(url.toString());
- }
- }
- return result.toArray(new URL[result.size()]);
- } catch (Exception eee) {
- log.warn("Unable to find urls for loader : " + loader + " for reason " + eee.getMessage(), eee);
- return new URL[0];
- }
- }
-
- /**
- * Detecte les bundles i18n a partir des urls des fichiers de traduction
- * donnes.
- *
- * @param urls les urls des fichiers de traductions
- * @return la liste des bundle i18n construits à partir des fichiers de
- * traduction donnes.
- */
- protected List<I18nBundle> detectBundles(URL... urls) {
-
- List<String> bundleNames = new ArrayList<String>();
- List<I18nBundle> bundles = new ArrayList<I18nBundle>();
-
- for (URL url : urls) {
-
- if (addBundleEntry(url, I18nBundleScope.FULL, bundleNames, bundles)) {
- // found a full bundle
- continue;
- }
- if (addBundleEntry(url, I18nBundleScope.LANGUAGE, bundleNames, bundles)) {
- // found a language bundle
- continue;
- }
- // must be a general bundle with no locale defined
- addBundleEntry(url, I18nBundleScope.GENERAL, bundleNames, bundles);
- }
- bundleNames.clear();
- return bundles;
- }
-
- protected boolean addBundleEntry(URL url, I18nBundleScope scope, List<String> bundleNames, List<I18nBundle> bundles) {
- String path = url.toString();
- Matcher matcher = scope.getMatcher(path);
- if (!matcher.matches()) {
- // no match at this scope
- return false;
- }
- // create a new bundle entry
- I18nBundleEntry entry = new I18nBundleEntry(url, scope.getLocale(matcher), scope);
- if (log.isDebugEnabled()) {
- log.debug("bundle (" + bundles.size() + ") : " + entry);
- }
- // get the associated bundle
- I18nBundle bundle = addBundle(scope.getBundlePrefix(matcher), bundleNames, bundles);
- // add entry to bundle
- bundle.addEntry(entry);
- return true;
- }
-
- protected I18nBundle addBundle(String bundleName, List<String> bundleNames, List<I18nBundle> bundles) {
- I18nBundle bundle;
- int index = bundleNames.indexOf(bundleName);
- if (index > -1) {
- bundle = bundles.get(index);
- } else {
- bundle = new I18nBundle(bundleName);
- if (log.isDebugEnabled()) {
- log.debug("bundle (" + bundles.size() + ") : " + bundle);
- }
- bundles.add(bundle);
- bundleNames.add(bundleName);
- }
- return bundle;
- }
-
- protected void promuteFull(I18nBundle bundle, Locale locale, List<I18nBundleEntry> result) {
- if (bundle.size() == 0) {
- return;
- }
- // try with a another FULL matching locale ?
- for (I18nBundleEntry entry : bundle.getEntries()) {
- I18nBundleScope i18nBundleScope = entry.getScope();
- // load from general to the max scope and always if there is only one bundle entry found
- if (i18nBundleScope == I18nBundleScope.FULL &&
- !entry.getLocale().getCountry().equals(locale.getCountry()) &&
- entry.getLocale().getLanguage().equals(locale.getLanguage())) {
- log.warn(locale + " to " + entry.getLocale() + " [" + bundle.getBundlePrefix() + ']');
- result.add(entry);
- // we take the first one, this is a resuce!!!
- break;
- }
- }
- if (result.isEmpty()) {
- // full promotion failed,trylanguage promotion
- promuteLanguage(bundle, locale, result);
- }
-
- }
-
- protected void promuteLanguage(I18nBundle bundle, Locale locale, List<I18nBundleEntry> result) {
- if (bundle.size() == 0) {
- return;
- }
- for (I18nBundleEntry entry : bundle.getEntries()) {
- I18nBundleScope i18nBundleScope = entry.getScope();
- // load from general to the max scope and always if there is only one bundle entry found
- if (i18nBundleScope == I18nBundleScope.FULL && entry.getLocale().getLanguage().equals(locale.getLanguage())) {
- result.add(entry);
- log.warn(locale + " to " + entry.getLocale() + " [" + bundle.getBundlePrefix() + ']');
- // we take the first one, this is a resuce!!!
- break;
- }
- }
- if (result.isEmpty()) {
- // language promotion failed,try general promotion
- promuteGeneral(bundle, locale, result);
- }
- }
-
- protected void promuteGeneral(I18nBundle bundle, Locale locale, List<I18nBundleEntry> result) {
- if (bundle.size() == 0) {
- return;
- }
- if (bundle.size() == 1) {
- // there is one entry take it,what ever...
- I18nBundleEntry entry = bundle.getEntries().get(0);
- result.add(entry);
- log.warn(locale + " to " + entry.getLocale() + " [" + bundle.getBundlePrefix() + ']');
- return;
- }
- I18nBundleScope scope = I18nBundleScope.valueOf(defaultLocale);
- for (I18nBundleEntry entry : bundle.getEntries(scope)) {
- if (entry.getLocale().equals(defaultLocale)) {
- // default locale found
- log.warn(locale + " to " + entry.getLocale() + " [" + bundle.getBundlePrefix() + ']');
- result.add(entry);
- return;
- }
- }
-
- // default locale not found, take the first one ?
- I18nBundleEntry entry = bundle.getEntries().get(0);
- result.add(entry);
- log.warn(locale + " to " + entry.getLocale() + " [" + bundle.getBundlePrefix() + ']');
- //TODO Should try to load default en_GB from I18nLoader ?
- //I18n.DEFAULT_LOCALE.getCountry()
- }
-
- protected boolean isInit() {
- return cache != null;
- }
-
- protected void checkInit() {
- if (!isInit()) {
- throw new IllegalStateException("should call init method on " + I18nBundleManager.class);
- }
- }
-}
Modified: nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleScope.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleScope.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/i18n/bundle/I18nBundleScope.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -17,11 +17,10 @@
* <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
package org.codelutin.i18n.bundle;
-import org.codelutin.i18n.I18n;
-
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.codelutin.i18n.I18nUtil;
/**
* The enumaration defines the scope of a bundle entry.
@@ -69,7 +68,7 @@
public Locale getLocale(Matcher matcher) {
Locale result = null;
if (matcher.matches()) {
- result = I18n.newLocale(matcher.group(2));
+ result = I18nUtil.newLocale(matcher.group(2));
}
return result;
}
@@ -82,7 +81,7 @@
public Locale getLocale(Matcher matcher) {
Locale result = null;
if (matcher.matches()) {
- result = I18n.newLocale(matcher.group(2));
+ result = I18nUtil.newLocale(matcher.group(2));
}
return result;
}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ApplicationConfig.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ApplicationConfig.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ApplicationConfig.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,989 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-package org.codelutin.util;
-
-import org.apache.commons.beanutils.ConstructorUtils;
-import org.apache.commons.beanutils.ConvertUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import static org.codelutin.i18n.I18n._;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.Writer;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.net.URL;
-import java.sql.Date;
-import java.sql.Time;
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-import java.util.Properties;
-import java.beans.PropertyChangeSupport;
-import java.beans.PropertyChangeListener;
-
-/**
- * <h1>To do</h1>
- * <p/>
- * <ul>
- * <li> ajout d'annotations sur les methodes
- * pour precisser plus de chose pour les options (pattern, min/max, alias,
- * description, ...)
- * <li> trouver un moyen de document les options et actions pour automatiquement
- * generer l'aide en ligne. Pour eviter de devoir maintenir une methode
- * dans lequel est ecrit l'aide en plus des options.
- * <li> prise en compte du flag {@link #useOnlyAliases}
- * <li> vu qu'en java on ne peut pas pointer une methode mais seulement une classe
- * il y a un bout des actions qui sont des chaines (nom de la methode). Il faudrait
- * faire un plugin maven qui check que l'action existe bien durant la compilation.
- * Il est simple de le faire a l'execution mais c trop tard :(
- * </ul>
- * <p/>
- * <h1>Usage</h1>
- * <li> create subclass of ApplicationConfig, where in constructor you call
- * addAliases, setConfigFileName, setDefaultActionPackage, setDefaultActionClass, setDefaultActionMethod
- * to have properly value.
- * <p/>
- * <li> conf = new MonAppConfig();
- * <li> conf.parse(args);
- * <li> here you can used conf.getOption(key);
- * <li> conf.doAction(0);
- * <li> ...
- * <li> conf.doAction(n);
- * <p/>
- * <h1>Lecture des fichiers de configuration</h1>
- * <p/>
- * <p/>
- * La lecture des fichiers de configuration se fait durant l'appel de la methode
- * {@link #parse} en utilisant la valeur de {@link #getConfigFileName} pour
- * trouver les fichiers (voir Les options de configuration pour l'ordre de
- * chargement des fichiers)
- * <p/>
- * <h1>La sauvegarde</h1>
- * <p/>
- * <p/>
- * La sauvegarde des options se fait via une des trois methodes disponible
- * <p/>
- * <ul>
- * <li> {@link #save(File, boolean,String[])} sauve les données dans le fichier demandé
- * <li> {@link #saveForSystem} sauvegarde les donnees dans /etc
- * <li> {@link #saveForUser} sauvegarde les donnees dans $HOME
- * </ul>
- * <p/>
- * Lors de l'utilisation de la methode {@link #saveForSystem(String[])} ou
- * {@link #saveForUser(String[])} seul les options lu dans un fichier ou modifier par
- * programmation ({@link #setOption} seront sauvegardees. Par exemple les
- * options passees sur la ligne de commande ne seront pas sauvees.
- * <p/>
- * <h1>Les options de configuration</h1>
- * <p/>
- * <p/>
- * Cette classe permet de lire les fichiers de configuration, utiliser les
- * variable d'environnement et de parser la ligne de commande. L'ordre de prise
- * en compte des informations trouvées est la suivante (le premier le plus
- * important).
- * <p/>
- * <ul>
- * <li>options ajoutees par programmation: {@link #setOption}(key, value)</li>
- * <li>ligne de commande</li>
- * <li>variable d'environnement de la JVM: java -Dkey=value</li>
- * <li>variable d'environnement; export key=value</li>
- * <li>fichier de configuration du repertoire courant: $user.dir/filename</li>
- * <li>fichier de configuration du repertoire home de l'utilisateur: $user.home/.filename</li>
- * <li>fichier de configuration du repertoire /etc: /etc/filename</li>
- * <li>fichier de configuration trouve dans le classpath: $CLASSPATH/filename</li>
- * <li>options ajoutees par programmation: {@link #defaults}.put(key, value)</li>
- * </ul>
- * <p/>
- * <p/>
- * Les options sur la ligne de commande sont de la forme:
- * <pre>
- * --option key value
- * --monOption key value1 value2
- * </pre>
- * <p/>
- * <ul>
- * <li>--option key value: est la syntaxe par defaut
- * <li>--monOption key value1 value2: est la syntaxe si vous avez ajouter une
- * methode setMonOption(key, value1, value2) sur votre classe de configuration
- * qui herite de {@link ApplicationConfig}. Dans ce cas vous pouvez mettre les
- * arguments que vous souhaitez du moment qu'ils soient convertibles de la
- * representation String vers le type que vous avez mis.
- * </ul>
- * <p/>
- * <h1>Les actions</h1>
- * <p/>
- * Les actions ne peuvent etre que sur la ligne de commande. Ils sont de la
- * forme:
- * <pre>
- * --le.package.LaClass#laMethode arg1 arg2 arg3 ... argN
- * </pre>
- * <p/>
- * <p/>
- * Une action est donc defini par le chemin complet vers la methode qui traitera
- * l'action. Cette methode peut-etre une methode static ou non. Si la methode
- * n'est pas static lors de l'instanciation de l'objet on essaie de passer en
- * parametre du constructeur la classe de configuration utilisee pour permettre
- * a l'action d'avoir a sa disposition les options de configuration. Si aucun
- * constructeur avec comme seul parametre une classe heritant de
- * {@link ApplicationConfig} n'existe alors le constructeur par defaut est
- * utilise (il doit etre accessible). Toutes methodes d'actions faisant
- * parties d'un meme objet utiliseront la meme instance de cette objet lors
- * de leur execution.
- * <p/>
- * <p/>
- * Si la methode utilise les arguments variants alors tous les arguments
- * jusqu'au prochain -- ou la fin de la ligne de commande sont utilises. Sinon
- * Le nombre exact d'argument necessaire a la methode sont utilises.
- * <p/>
- * <p/>
- * Les arguments sont automatiquement converti dans le bon type reclame par la
- * methode.
- * <p/>
- * <p/>
- * Si l'on veut des arguments optionnels le seul moyen actuellement est
- * d'utiliser une methode avec des arguments variants
- * <p/>
- * <p> Les actions ne sont pas execute mais seulement parsees. Pour les executer
- * il faut utiilser la methode {@link #doAction} qui prend en argument un numero
- * de 'step'. Par defaut toutes les actions sont de niveau 0 et sont executee
- * dans l'ordre d'apparition sur la ligne de commande. Si l'on souhaite
- * distinguer les actions il est possible d'utiliser l'annotation
- * {@link ApplicationConfig.Action.Step} sur la methode qui fera l'action en
- * precisant une autre valeur que 0.
- * <p/>
- * <pre>
- * doAction(0);
- * ... do something ...
- * doAction(1);
- * </pre>
- * <p/>
- * <p/>
- * dans cette exemple on fait un traitement entre l'execution des actions
- * de niveau 0 et les actions de niveau 1.
- * <p/>
- * <h1>Les arguments non parses</h1>
- * <p/>
- * <p/>
- * Tout ce qui n'est pas option ou action est considere comme non parse et peut
- * etre recupere par la methode {@link #getUnparsed}. Si l'on souhaite forcer
- * la fin du parsing de la ligne de commande il est possible de mettre --.
- * Par exemple:
- * <pre>
- * monProg "mon arg" --option k1 v1 -- --option k2 v2 -- autre
- * </pre>
- * <p/>
- * <p/>
- * Dans cet exemple seule la premiere option sera considere comme une option.
- * On retrouvera dans unparsed: "mon arg", "--option", "k2", "v2", "--", "autre"
- * <p/>
- * <h1>Les alias</h1>
- * <p/>
- * On voit qu'aussi bien pour les actions que pour les options, le nom de la
- * methode doit etre utilise. Pour eviter ceci il est possible de definir
- * des alias ce qui permet de creer des options courtes par exemple. Pour cela,
- * on utilise la methode {@link #addAlias}.
- * <p/>
- * <pre>
- * addAlias("-v", "--option", "verbose", "true");
- * addAlias("-o", "--option", "outputfile");
- * addAlias("-i", "--mon.package.MaClass#MaMethode", "import");
- * </pre>
- * <p/>
- * <p/>
- * En faite avant le parsing de la ligne de commande tous les alias trouves sont
- * automatiquement remplacer par leur correspondance. Il est donc possible
- * d'utiliser ce mecanisme pour autre chose par exemple:
- * <p/>
- * <pre>
- * addAlias("cl", "Code Lutin");
- * addAlias("bp", "Benjamin POUSSIN);
- * </pre>
- * <p/>
- * <p/>
- * Dans le premier exemple on simplifie une option de flags l'option -v n'attend
- * donc plus d'argument. Dans le second exemple on simplifie une option qui
- * attend encore un argment de type File. Enfin dans le troisieme exemple
- * on simplifie la syntaxe d'une action et on force le premier argument de
- * l'action a etre "import".
- * <p/>
- * <h1>Conversion de type</h1>
- * Pour la conversion de type nous utilisons common-beans. Les types supporte
- * sont:
- * <p/>
- * <ul>
- * <li> les primitif (byte, short, int, long, float, double, char, boolean)
- * <li> String
- * <li> File
- * <li> URL
- * <li> Class
- * <li> SqlDate
- * <li> SqlTime
- * <li> SqlTimestamps
- * <li> les tableaux d'un type primitif ou String. Chaque element doit etre
- * separe par une virgule
- * </ul>
- * <p/>
- * Pour suporter d'autre type, il vous suffit d'enregistrer de nouveau
- * converter dans commons-beans
- *
- * @author poussin
- * @version $Revision$
- * @since 0.30
- * <p/>
- * Last update $Date$
- * by $Author$
- */
-public class ApplicationConfig {
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static private Log log = LogFactory.getLog(ApplicationConfig.class);
-
- /**
- * used to know what is separator between la class et la method sur la
- * ligne de commande
- */
- static final private String CLASS_METHOD_SEPARATOR = "#";
-
- static final public String CONFIG_FILE_NAME = "config.file";
-
- protected boolean useOnlyAliases = false;
- protected Map<String, List<String>> aliases = new HashMap<String, List<String>>();
-
- /** file /etc/[filename] */
- String systemPath = File.separator + "etc" + File.separator;
- /** file $user.home/.[filename] */
- String userPath = getUserHome() + File.separator + ".";
-
- /** vrai si on est en train de parser les options de la ligne de commande */
- protected boolean inParseOptionPhase = false;
-
- protected Properties defaults = new Properties();
- protected Properties classpath = new Properties(defaults);
- protected Properties etcfile = new Properties(classpath);
- protected Properties homefile = new Properties(etcfile);
- protected Properties curfile = new Properties(homefile);
- protected Properties env = new Properties(curfile);
- protected Properties jvm = new Properties(env);
- protected Properties line = new Properties(jvm);
- protected Properties options = new Properties(line);
-
- protected Map<String, CacheItem<?>> cacheOption = new HashMap<String, CacheItem<?>>();
- protected Map<Class<?>, Object> cacheAction = new HashMap<Class<?>, Object>();
-
- /** contient apres l'appel de parse, la liste des arguments non utilises */
- protected List<String> unparsed = new ArrayList<String>();
-
- protected Map<Integer, List<Action>> actions = new HashMap<Integer, List<Action>>();
-
- /** suport of config modification */
- protected PropertyChangeSupport pcs = new PropertyChangeSupport(this);
-
- static public class Action {
-
- @Retention(RetentionPolicy.RUNTIME)
- @Target(ElementType.METHOD)
- static public @interface Step {
- int value() default 0;
- }
-
- protected int step;
- protected Object o;
- protected Method m;
- protected String[] params;
-
- public Action(int step, Object o, Method m, String... params) {
- this.step = step;
- this.o = o;
- this.m = m;
- this.params = params;
- }
-
- public void doAction() throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {
- ObjectUtil.call(o, m, params);
- }
- }
-
- /**
- * Item used for cacheOption
- *
- * @param <T>
- */
- static protected class CacheItem<T> {
- /** typed option value */
- public T item;
- /** hash of string representation */
- public int hash;
-
- public CacheItem(T item, int hash) {
- this.item = item;
- this.hash = hash;
- }
-
- }
-
- public ApplicationConfig() {
- setConfigFileName(this.getClass().getSimpleName());
- }
-
- static public String getUserHome() {
- String result = System.getProperty("user.home");
- return result;
- }
-
- public String getUsername() {
- String result = getOption("user.name");
- return result;
- }
-
- /**
- * Used to put default configuration option in config option. Those options
- * are used as fallback value.
- *
- * @param key default property key
- * @param value default property value
- */
- protected void setDefaultOption(String key, String value) {
- defaults.setProperty(key, value);
- }
-
- /**
- * Save configuration, in specified file
- *
- * @param file file where config will be writen
- * @param forceAll if true save all config option
- * (with defaults, classpath, env, command line)
- * @param excludeKeys optional list of keys to exclude from
- * @throws IOException if IO pb
- */
- public void save(File file, boolean forceAll, String... excludeKeys) throws IOException {
- Properties prop = new Properties();
- if (forceAll) {
- prop.putAll(defaults);
- prop.putAll(classpath);
- }
- prop.putAll(etcfile);
- prop.putAll(homefile);
- prop.putAll(curfile);
- if (forceAll) {
- prop.putAll(jvm);
- prop.putAll(env);
- prop.putAll(line);
- }
- prop.putAll(options);
-
- for (String excludeKey : excludeKeys) {
- prop.remove(excludeKey);
- }
- Writer writer = new FileWriter(file);
- prop.store(writer, "Last saved " + new java.util.Date());
- }
-
- /**
- * Save configuration, in system directory (/etc/) using the
- * {@link #getConfigFileName}. Default, env and commande line note saved.
- *
- * @param excludeKeys optional list of keys to exclude from
- */
- public void saveForSystem(String... excludeKeys) {
- File file = new File(systemPath + getConfigFileName());
- try {
- save(file, false, excludeKeys);
- } catch (IOException eee) {
- if (log.isWarnEnabled()) {
- log.warn(_("lutinutil.error.applicationconfig.save", file), eee);
- }
- }
- }
-
- /**
- * Save configuration, in user home directory using the
- * {@link #getConfigFileName}. Default, env and commande line note saved
- *
- * @param excludeKeys optional list of keys to exclude from
- */
- public void saveForUser(String... excludeKeys) {
- File file = new File(userPath + getConfigFileName());
- try {
- save(file, false, excludeKeys);
- } catch (IOException eee) {
- if (log.isWarnEnabled()) {
- log.warn(_("lutinutil.error.applicationconfig.save", file), eee);
- }
- }
- }
-
- /**
- * Return list of unparsed command line argument
- *
- * @return list of unparsed arguments
- */
- public List<String> getUnparsed() {
- return unparsed;
- }
-
- /**
- * Add action to list of action to do
- *
- * @param action action to add, can be null.
- */
- public void addAction(Action action) {
- if (action != null) {
- Integer step = action.step;
- List<Action> list = actions.get(step);
- if (list == null) {
- list = new LinkedList<ApplicationConfig.Action>();
- actions.put(step, list);
- }
- list.add(action);
- }
- }
-
- public void doAction(int step) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {
- List<Action> list = actions.get(step);
- if (list != null) {
- for (Action a : list) {
- a.doAction();
- }
- }
- }
-
- public void setUseOnlyAliases(boolean useOnlyAliases) {
- this.useOnlyAliases = useOnlyAliases;
- }
-
- public boolean isUseOnlyAliases() {
- return useOnlyAliases;
- }
-
- /**
- * All argument in aliases as key is substitued by target
- *
- * @param alias alias string as '-v'
- * @param target substitution as '--option verbose true'
- */
- public void addAlias(String alias, String... target) {
- aliases.put(alias, Arrays.asList(target));
- }
-
- /**
- * Add alias for action. This method put just -- front the actionMethod and
- * call {@link #addAlias(String, String[])}
- *
- * @param alias the alias to add for the given method action
- * @param actionMethod must be fully qualified method path: package.Class.method
- */
- public void addActionAlias(String alias, String actionMethod) {
- addAlias(alias, "--" + actionMethod);
- }
-
- /**
- * Set name of file where options are read (in /etc, $HOME, $CURDIR)
- * This set used {@link #setDefaultOption(String, String)}
- *
- * @param name file name
- */
- public void setConfigFileName(String name) {
- // put in defaults, this permit user to overwrite it on commande line
- setDefaultOption(CONFIG_FILE_NAME, name);
- }
-
- public String getConfigFileName() {
- String result = options.getProperty(CONFIG_FILE_NAME);
- return result;
- }
-
- /**
- * Set option value
- *
- * @param key property key
- * @param value property value
- */
- public void setOption(String key, String value) {
- if (inParseOptionPhase) {
- line.setProperty(key, value);
- } else {
- options.setProperty(key, value);
- }
- }
-
- /**
- * get option value as string
- *
- * @param key the option's key
- * @return String representation value
- */
- public String getOption(String key) {
- String value = options.getProperty(key);
- return value;
- }
-
- /**
- * Permet de recuperer l'ensemble des options commencant par une certaine
- * chaine
- *
- * @param prefix debut de cle a recuperer
- * @return la liste des options filtrées
- */
- public Properties getOptionStartsWith(String prefix) {
- Properties result = new Properties();
-
- for (String key : options.stringPropertyNames()) {
- if(key.startsWith(prefix)) {
- result.setProperty(key, options.getProperty(key));
- }
- }
-
- return result;
- }
-
- /**
- * get option value as typed value
- *
- * @param <T> type of the object wanted as return type
- * @param clazz type of object wanted as return type
- * @param key the option's key
- * @return typed value
- */
- @SuppressWarnings("unchecked")
- public <T> T getOption(Class<T> clazz, String key) {
- T result = null;
- String cacheKey = key + "-" + clazz.getName();
-
- String value = options.getProperty(key);
- int hash = 0;
- if (value != null) {
- hash = value.hashCode();
- }
- CacheItem<T> cacheItem = (CacheItem<T>)cacheOption.get(cacheKey);
- // compute value if value don't exist in cacheOption or
- // if it's modified since last computation
- if (cacheItem == null || cacheItem.hash != hash) {
- result = (T) ConvertUtils.convert(value, clazz);
- cacheItem = new CacheItem<T>(result, hash);
- cacheOption.put(cacheKey, cacheItem);
- } else {
- result = cacheItem.item;
- }
-
- return result;
- }
-
- /**
- * get option value as typed value
- *
- * @param key the option's key
- * @return typed value
- */
- public File getOptionAsFile(String key) {
- File result = getOption(File.class, key);
- result = result.getAbsoluteFile();
- return result;
- }
-
- /**
- * get option value as typed value
- *
- * @param key the option's key
- * @return typed value
- */
- public URL getOptionAsURL(String key) {
- URL result = getOption(URL.class, key);
- return result;
- }
-
- /**
- * get option value as typed value
- *
- * @param key the option's key
- * @return typed value
- */
- public Class<?> getOptionAsClass(String key) {
- Class<?> result = getOption(Class.class, key);
- return result;
- }
-
- /**
- * get option value as typed value
- *
- * @param key the option's key
- * @return typed value
- */
- public Date getOptionAsDate(String key) {
- Date result = getOption(Date.class, key);
- return result;
- }
-
- /**
- * get option value as typed value
- *
- * @param key the option's key
- * @return typed value
- */
- public Time getOptionAsTime(String key) {
- Time result = getOption(Time.class, key);
- return result;
- }
-
- /**
- * get option value as typed value
- *
- * @param key the option's key
- * @return typed value
- */
- public Timestamp getOptionAsTimestamp(String key) {
- Timestamp result = getOption(Timestamp.class, key);
- return result;
- }
-
- /**
- * get option value as typed value
- *
- * @param key the option's key
- * @return typed value
- */
- public int getOptionAsInt(String key) {
- Integer result = getOption(Integer.class, key);
- return result;
- }
-
- /**
- * get option value as typed value
- *
- * @param key the option's key
- * @return typed value
- */
- public double getOptionAsDouble(String key) {
- Double result = getOption(Double.class, key);
- return result;
- }
-
- /**
- * get option value as typed value
- *
- * @param key the option's key
- * @return typed value
- */
- public boolean getOptionAsBoolean(String key) {
- Boolean result = getOption(Boolean.class, key);
- return result;
- }
-
- /**
- * Get all set method on this object or super object
- *
- * @return map with method name without set and in lower case as key, and
- * method as value
- */
- protected Map<String, Method> getMethods() {
- // looking for all methods set on ApplicationConfig
- Method[] allMethods = this.getClass().getMethods();
- Map<String, Method> methods = new HashMap<String, Method>();
- for (Method m : allMethods) {
- String methodName = m.getName();
- if (methodName.startsWith("set")) {
- methodName = methodName.substring(3).toLowerCase();
- methods.put(methodName, m);
- }
- }
- return methods;
- }
-
- /**
- * Take required argument for method in args. Argument used is removed from
- * args. If method has varArgs, we take all argument to next '--'
- *
- * @param m the method to call
- * @param args iterator with many argument (equals or more than necessary
- * @return the arguments found for the given method
- */
- protected String[] getParams(Method m, ListIterator<String> args) {
- List<String> result = new ArrayList<String>();
- if (m.isVarArgs()) {
- while (args.hasNext()) {
- String p = args.next();
- if (p.startsWith("--")) {
- // stop search
- args.previous();
- break;
- } else {
- result.add(p);
- args.remove();
- }
- }
- } else {
- int paramLenght = m.getParameterTypes().length;
- for (int i = 0; i < paramLenght; i++) {
- String p = args.next();
- args.remove(); // remove this arg because is used now
- result.add(p);
- }
- }
- return result.toArray(new String[result.size()]);
- }
-
- /**
- * Create action from string, string must be [package.][class][#][method]
- * if package, class or method missing, default is used
- *
- * @param name name of the action
- * @param args
- * @return the created action
- * @throws ArgumentsParserException
- * @throws IllegalAccessException
- * @throws IllegalArgumentException
- * @throws InstantiationException
- * @throws java.lang.reflect.InvocationTargetException
- */
- protected Action createAction(String name, ListIterator<String> args) throws ArgumentsParserException, InstantiationException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
- Action result = null;
-
- Class<?> clazz;
- Method method = null;
- String className;
- String methodName;
-
- // looking for method name
- int sep = name.lastIndexOf(CLASS_METHOD_SEPARATOR);
- if (sep == -1) {
- throw new IllegalArgumentException(String.format(
- "Can't find action method in %s", name));
- } else {
- className = name.substring(0, sep);
- methodName = name.substring(sep + 1);
- }
-
- // looking for class name
- try {
- clazz = Class.forName(className);
- } catch (ClassNotFoundException eee) {
- throw new IllegalArgumentException(String.format(
- "Can't find action class %s", className));
- }
-
- List<Method> methods = ObjectUtil.getMethod(clazz, methodName, true);
- if (methods.size() > 0) {
- if (methods.size() > 1) {
- log.warn(String.format(
- "More than one method found, used the first: %s", methods));
- }
- method = methods.get(0);
- }
-
- if (method != null) {
- args.remove(); // remove option from command line, because is used now
-
- // creation de l'object sur lequel on fera l'appel
- Object o = cacheAction.get(clazz);
- if (o == null && !Modifier.isStatic(method.getModifiers())) {
- try {
- o = ConstructorUtils.invokeConstructor(clazz, this);
- } catch (NoSuchMethodException eee) {
- log.debug(String.format(
- "Use default constructor, because no constructor with Config parameter on class %s",
- clazz.getName()));
- o = clazz.newInstance();
- }
- cacheAction.put(clazz, o);
- }
-
- // recherche du step de l'action
- int step = 0;
- Action.Step annotation = method.getAnnotation(Action.Step.class);
- if (annotation != null) {
- step = annotation.value();
- }
-
- String[] params = getParams(method, args);
- result = new Action(step, o, method, params);
- }
-
- return result;
- }
-
- /**
- * Parse option and call set necessary method, read jvm, env variable,
- * Load configuration file and prepare Action.
- *
- * @param args argument as main(String[] args)
- * @throws ArgumentsParserException
- *
- */
- public void parse(String[] args) throws ArgumentsParserException {
- try {
- Map<String, Method> methods = getMethods();
-
- List<String> arguments = new ArrayList<String>(args.length);
- for (String arg : args) {
- if (aliases.containsKey(arg)) {
- arguments.addAll(aliases.get(arg));
- } else {
- arguments.add(arg);
- }
- }
-
- inParseOptionPhase = true;
- // first parse option
- for (ListIterator<String> i = arguments.listIterator(); i.hasNext();) {
- String arg = i.next();
- if (arg.equals("--")) {
- // stop parsing
- break;
- }
- if (arg.startsWith("--")) {
- String optionName = arg.substring(2);
- if (methods.containsKey(optionName)) {
- i.remove(); // remove this arg because is used now
- Method m = methods.get(optionName);
- String[] params = getParams(m, i);
- log.debug(String.format("Set option '%s' with method '%s %s'", optionName, m, Arrays.toString(params)));
- ObjectUtil.call(this, m, params);
- }
- }
- }
- inParseOptionPhase = false;
-
- //
- // second load options from all sources
- //
- // JVM
- jvm.putAll(System.getProperties());
- // ENV
- env.putAll(System.getenv());
-
- // classpath
- String filename = getConfigFileName();
- URL inClasspath = ClassLoader.getSystemClassLoader().getResource(filename);
- if (inClasspath == null) {
- inClasspath = ApplicationConfig.class.getResource(filename);
- }
- if (inClasspath != null) {
- log.info("Chargement du fichier de config: " + inClasspath);
- classpath.load(inClasspath.openStream());
- }
-
- File etcConfig = new File(systemPath + filename);
- if (etcConfig.exists()) {
- log.info("Chargement du fichier de config: " + etcConfig);
- etcfile.load(etcConfig.toURI().toURL().openStream());
- }
-
- File homeConfig = new File(userPath + filename);
- if (homeConfig.exists()) {
- log.info("Chargement du fichier de config: " + homeConfig);
- homefile.load(homeConfig.toURI().toURL().openStream());
- }
-
- // file $CURDIR/filename
- File config = new File(filename);
- if (config.exists()) {
- log.info("Chargement du fichier de config: " + config);
- curfile.load(config.toURI().toURL().openStream());
- }
-
- //
- // third parse action and do action
- //
- for (ListIterator<String> i = arguments.listIterator(); i.hasNext();) {
- String arg = i.next();
- if (arg.equals("--")) {
- // stop parsing
- break;
- }
- if (arg.startsWith("--")) {
- String optionName = arg.substring(2);
- Action action = createAction(optionName, i);
- addAction(action);
- }
- }
-
- //
- // not used args added to unparsed
- //
- arguments.remove("--");
- unparsed.addAll(arguments);
-
- } catch (Exception eee) {
- eee.printStackTrace();
- throw new ArgumentsParserException("Can't parse argument", eee);
- }
- }
-
- /**
- * For debugging
- */
- public void printConfig() {
- System.out.println("-------------------Value-------------------------");
- System.out.println("defaults " + defaults);
- System.out.println("classpath " + classpath);
- System.out.println("etcfile " + etcfile);
- System.out.println("homefile " + homefile);
- System.out.println("curfile " + curfile);
- System.out.println("env " + env);
- System.out.println("jvm " + jvm);
- System.out.println("line " + line);
- System.out.println("options " + options);
- System.out.println("-------------------------------------------------");
- }
-
- protected void firePropertyChange(String propertyName,Object oldValue,Object newValue) {
- pcs.firePropertyChange(propertyName,oldValue,newValue);
- }
-
- public void addPropertyChangeListener(PropertyChangeListener listener) {
- pcs.addPropertyChangeListener(listener);
- }
-
- public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
- pcs.addPropertyChangeListener(propertyName, listener);
- }
-
- public void removePropertyChangeListener(PropertyChangeListener listener) {
- pcs.removePropertyChangeListener(listener);
- }
-
- public void removePropertyChangeListener(String propertyName, PropertyChangeListener listener) {
- pcs.removePropertyChangeListener(propertyName, listener);
- }
-
- public synchronized boolean hasListeners(String propertyName) {
- return pcs.hasListeners(propertyName);
- }
-
- public synchronized PropertyChangeListener[] getPropertyChangeListeners(String propertyName) {
- return pcs.getPropertyChangeListeners(propertyName);
- }
-
- public synchronized PropertyChangeListener[] getPropertyChangeListeners() {
- return pcs.getPropertyChangeListeners();
- }
-
-
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ArgumentsParser.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ArgumentsParser.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ArgumentsParser.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,393 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
-* ArgumentsParser.java
-*
-* Created: 22 août 2003
-*
-* @author Benjamin Poussin <poussin(a)codelutin.com>
-* @version $Revision$
-*
-* Mise a jour: $Date$
-* par : $Author$
-*/
-
-package org.codelutin.util;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-
-/**
- * Parser d'option de la ligne de commande.
- * IDEA: ajouter le type de l'argument a parser (int, double, String, boolean, Class, File, ...)
- * et mettre des methodes pour récupérer directement ce type.
- *
- * @author poussin
- *
- * @deprecated since 0.30 , prefer use of {@link ApplicationConfig} instead
- */
-@Deprecated
-public class ArgumentsParser {
-
- /** La liste des arguments qui ne sont pas des options */
- protected ArrayList<String> arguments = new ArrayList<String>();
- /** le nom à afficher pour l'usage */
- protected String name = "";
-
- /**
- * la liste des options, la cle est une option, et la valeur est la liste
- * des options qui ont été lu grâce à celle-ci.
- */
- protected HashMap<ArgumentsParserOption, ArrayList<ArgumentsParserOption>> options =
- new HashMap<ArgumentsParserOption, ArrayList<ArgumentsParserOption>>();
- /** liste a plat de toutes les options lus. */
- protected ArrayList<ArgumentsParserOption> parsedOptions = new ArrayList<ArgumentsParserOption>();
-
- /**
- * Constructor for the ArgumentsParser object
- *
- * @param name le nom à afficher pour l'usage
- */
- public ArgumentsParser(String name) {
- this.name = name;
- }
-
- /**
- * Permet de d'ajouter une option facilement au parser, sans avoir besoin de
- * créer un objet Option.
- *
- * @param optionName le nom de cette option.
- * @param acceptedOption la liste des marqueurs acceptables pour cette
- * option. exemple -o, --option, --options
- * @param argument le nombre d'argument que cette option a
- * @param description description de cette option
- * @return retourne l'option créer et qui sera utilisé
- * @see #addOption(ArgumentsParserOption)
- */
- public ArgumentsParserOption addOption(String optionName,
- String description, int argument, String... acceptedOption) {
- return addOption(new ArgumentsParserDefaultOption
- (optionName, description, argument, acceptedOption));
- }
-
- /**
- * Permet d'ajouter une option au parseur
- *
- * @param option l'option à ajouter
- * @return retourne l'option passé en paramètre
- */
- public ArgumentsParserOption addOption(ArgumentsParserOption option) {
- options.put(option, new ArrayList<ArgumentsParserOption>());
- return option;
- }
-
- /**
- * Permet de vérifier la coherence de toutes les options. Cela consiste à
- * regarder si deux options n'utilise pas les même marqueurs, si deux
- * options n'ont pas le même nom, si le nombre de répétition min d'une
- * option n'est pas suppérieur au nombre de répétition max
- *
- * @return une chaine de caractère indiquant toutes les erreurs. Si la
- * chaine est vide alors il n'y a pas d'erreur.
- */
- public String checkCoherence() {
- StringBuffer result = new StringBuffer();
- HashSet<String> optionNames = new HashSet<String>();
- HashSet<String> used = new HashSet<String>();
-
- for (ArgumentsParserOption option : options.keySet()) {
- if (optionNames.contains(option.getName())) {
- result.append("option name " + option.getName()
- + " is allready used\n");
- }
- optionNames.add(option.getName());
-
- String[] acceptedOptions = option.getAcceptedOption();
- for (String acceptedOption : acceptedOptions) {
- if (used.contains(acceptedOption)) {
- result.append("Option " + acceptedOption + " in "
- + option.getName() + " is allready used\n");
- }
- used.add(acceptedOption);
- }
-
- if (option.getRepetitionMax() > 0
- && option.getRepetitionMin() > option.getRepetitionMax()) {
- result.append("repetition min is over repetition max for: "
- + option.getName() + "\n");
- option.setRepetitionMax(option.getRepetitionMin());
- }
- }
- return result.toString();
- }
-
- /**
- * Permet de vérifier la cohérence de la ligne de commande par rapport aux
- * contraintes des options. Cela consiste à vérifier que chaque option est
- * bien répété le nmobre de fois souhaité par l'option qui à permis de la
- * lire.
- *
- * @return vrai s'il n'y a pas d'erreur
- * @throws ArgumentsParserException une exception est levé dès qu'une
- * erreur est détectée.
- */
- boolean checkParsing() throws ArgumentsParserException {
- for (ArgumentsParserOption option : options.keySet()) {
- ArrayList<ArgumentsParserOption> list = options.get(option);
- if (option.getRepetitionMin() > 0
- && list.size() < option.getRepetitionMin()) {
- throw new ArgumentsParserException(
- "Error option repeted less than accepted need "
- + option.getRepetitionMin() + " find " + list.size() + ": "
- + option);
- }
- if (option.getRepetitionMax() > 0
- && list.size() > option.getRepetitionMax()) {
- throw new ArgumentsParserException(
- "Error option repeted more than accepted: " + option);
- }
- }
- return true;
- }
-
- /**
- * Retourne les arguments de la ligne de commande qui n'ont pas été lu pas
- * les options
- *
- * @return la liste des arguments non lu par les options.
- */
- public ArrayList<String> getArguments() {
- return arguments;
- }
-
- /**
- * Retourne le nom utilisé pour l'affichage de l'usage
- *
- * @return la chaine de caratère utilisée pour l'usage
- */
- public String getName() {
- return name;
- }
-
- /**
- * Permet de savoir si une option a ete trouvée sur la ligne de commande
- *
- * @param optionName le nom de l'option dont il faut vérifier l'existance
- * @return vrai si l'option existe sur la ligne de commande
- */
- public boolean hasParsedOption(String optionName) {
- return getParsedOptions(optionName).size() != 0;
- }
-
- /**
- * Retourne le premier argument d'un certain type
- *
- * @param optionName le nom de l'option à retourner
- * @return la valeur de l'option si elle existe, null sinon
- */
- public String[] getParsedOption(String optionName) {
- ArrayList<ArgumentsParserOption> list = getParsedOptions(optionName);
- if (list.size() == 0) {
- return null;
- } else {
- return list.get(0).getArguments();
- }
- }
-
- /**
- * Retourne la liste de toutes les options créées durant le parsage de la
- * ligne de commande.
- *
- * @return la liste de toutes les options lus
- */
- public ArrayList<ArgumentsParserOption> getParsedOptions() {
- return parsedOptions;
- }
-
- /**
- * Retourne la liste de toutes les options d'un certain type
- *
- * @param optionName le nom des options à retourner
- * @return la liste des options d'un certain nom, ou une liste vide si
- * aucune option de ce nom existe ou si cette option n'a pas été trouvé
- * sur la ligne de commande
- */
- public ArrayList<ArgumentsParserOption> getParsedOptions(String optionName) {
- ArrayList<ArgumentsParserOption> result = new ArrayList<ArgumentsParserOption>();
- for (ArgumentsParserOption option : options.keySet()) {
- if (optionName.equals(option.getName())) {
- result = options.get(option);
- }
- }
- return result;
- }
-
- /**
- * Permet de recherche une option permettant de lire l'argument courant de
- * la ligne de commande et d'utiliser une copie de cette option pour lire la
- * suite de la ligne de commande.
- *
- * @param args la ligne de commande
- * @param index la position courant de parsage de la ligne de commande
- * @return retourne l'option qui a permit de lire la ligne de commande
- * ou null si aucune option ne peut lire l'argument courant.
- */
- ArgumentsParserOption lookingForOption(String[] args, int index) {
- for (ArgumentsParserOption option : options.keySet()) {
- ArgumentsParserOption copy = option.copy();
- if (copy.parse(args, index)) {
- ArrayList<ArgumentsParserOption> list = options.get(option);
- parsedOptions.add(copy);
- list.add(copy);
- return copy;
- }
- }
- return null;
- }
-
-
- /**
- * Une methode main pour tester la librairie
- *
- * @param args The command line arguments
- * @throws Exception on fait suivre toutes les erreurs
- */
- public static void main(String[] args) throws Exception {
- ArgumentsParser ap = new ArgumentsParser("ArgumentsParserTest");
- ap.addOption("project", "le nom du projet", 1, "-p")
- .setRepetitionMin(1);
-
- ap.addOption("lib", "les librairies", 1, "-l")
- .setRepetitionMin(2).setRepetitionMax(1);
-
- ap.addOption("truc", "les dummy", 1, "-t");
-
- ap.addOption("package", "le package utilisé",
- 1, "-k", "--package").setRepetitionMax(10);
-
- System.out.println(ap.usage());
- System.out.println();
- System.out.println("check coherence...");
- System.out.println(ap.checkCoherence());
- System.out.println("parsing...");
- ap.parse(args);
- System.out.println(ap.getParsedOptions());
- System.out.println(ap.getParsedOptions("package"));
- System.out.println(ap.getArguments());
- }
-
- /**
- * Cette méthode permet de parser une ligne de commande. Aucune
- * réinitialisation n'est faite entre deux appels.
- *
- * @param args la ligne de commande à parser
- * @return la liste de toutes les options lus
- * @throws ArgumentsParserException si la vérification de la lecture
- * montre des incohérence une exception est levée
- */
- public ArgumentsParserOption[] parse(String[] args) throws ArgumentsParserException {
- for (int i = 0; i < args.length; i++) {
- ArgumentsParserOption option = lookingForOption(args, i);
- if (option != null) {
- i += option.count();
- } else {
- arguments.add(args[i]);
- }
- }
-
- checkParsing();
-
- return (ArgumentsParserOption[]) parsedOptions.toArray(
- new ArgumentsParserOption[parsedOptions.size()]);
- }
-
- /**
- * <p>
- * <p/>
- * Permet d'afficher l'usage gràce aux informations des options: répétition,
- * description, ...</p> <p>
- * <p/>
- * la chaîne retourné est de la forme suivante</p> <pre>
- * usage: ArgumentsParserTest [package{10}][truc+] lib project+
- * <p/>
- * package(-k, --package) le package utilisé
- * truc(-t) les dummy
- * lib(-l) les librairies
- * project(-p) le nom du projet
- * </pre> <p>
- * <p/>
- * ArgumentsParserTest est le nom passé au constructeur de ArgumentsParser.
- * </p> <p>
- * <p/>
- * une option qui a une répétition min à 0 est entre [ ]</p> <p>
- * <p/>
- * une option qui a une répétition max à 0 à un + ajouté</p> <p>
- * <p/>
- * une option qui a une répétition max à supérieur à 1 à le nombre max
- * ajouté entre {}</p>
- *
- * @return la chaîne de caratère de l'usage.
- */
- public String usage() {
- StringBuffer result = new StringBuffer();
- result.append("usage: " + getName() + " ");
- for (ArgumentsParserOption option : options.keySet()) {
- if (option.getRepetitionMin() <= 0) {
- result.append("[");
- } else {
- result.append(" ");
- }
- result.append(option.getName());
- if (option.getRepetitionMax() <= 0) {
- result.append("+");
- } else if (option.getRepetitionMax() > 1) {
- result.append("{" + option.getRepetitionMax() + "}");
- }
-
- for (int a = 0; a < option.count(); a++) {
- result.append(" <arg" + a + ">");
- }
-
- if (option.getRepetitionMin() <= 0) {
- result.append("]");
- } else {
- result.append(" ");
- }
- }
- result.append("\n\n");
- for (ArgumentsParserOption option : options.keySet()) {
- result.append(option.getName());
- result.append("(");
- String[] acceptedOption = option.getAcceptedOption();
- for (int i = 0; i < acceptedOption.length; i++) {
- result.append(acceptedOption[i]);
- if (i + 1 < acceptedOption.length) {
- result.append(", ");
- }
- }
- result.append(")");
- result.append("\t");
- result.append(option.getDescription());
- result.append("\n");
- }
- return result.toString();
- }
-}
-// -- end class ArgumentsParser
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ArgumentsParserDefaultOption.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ArgumentsParserDefaultOption.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ArgumentsParserDefaultOption.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,222 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%*
- */
-
-/**
- * ArgumentsParserDefaultOption.java Created: 22 août 2003
- *
- *@author Benjamin Poussin <poussin(a)codelutin.com>
- *
- * Copyright Code Lutin
- *@version $Revision$ Mise a jour: $Date$ par : $Author$
- */
-
-package org.codelutin.util;
-
-import java.util.ArrayList;
-
-/**
- * Description of the Class
- *
- * @author poussin
- * created 22 août 2003
- *
- * @deprecated since 0.30 , prefer use of {@link ApplicationConfig} instead
- */
-public class ArgumentsParserDefaultOption implements ArgumentsParserOption {// ArgumentsParserDefaultOption
-
- /** Toutes les options accepté: -o --option */
- String[] acceptedOption;
- /** L'option utilisé sur la ligne de commande */
- String parsedOption;
- /** Le nom de cette option */
- String name;
- /** le nombre d'argument de cette option */
- int argument = 0;
- /** la liste des arguments */
- ArrayList<String> argumentList = new ArrayList<String>();
- /**
- * le nombre de fois minimum que l'option peut-être répétée sur la ligne de
- * commande
- */
- int repetitionMin = 0;
- /**
- * le nombre de fois maximum que l'option peut-être répétée sur la ligne de
- * commande: 1 par defaut
- */
- int repetitionMax = 1;
- /** Description of the argument */
- String description = "";
-
- /**
- * @param name le nom de l'option
- * @param acceptedOption la liste variante de l'option accepté: -o --option
- * @param argument le nombre d'argument que cette option accepte
- * @param description TODO Description of the Parameter
- */
- public ArgumentsParserDefaultOption(String name, String description,
- int argument, String... acceptedOption) {
- this.name = name;
- this.description = description;
- this.acceptedOption = acceptedOption;
- this.argument = argument;
- }
-
- public String[] getAcceptedOption() {
- return acceptedOption;
- }
-
- /**
- * TODO Description of the Method
- *
- * @return TODO Description of the Return Value
- */
- public ArgumentsParserOption copy() {
- return new ArgumentsParserDefaultOption(name, description, argument, acceptedOption).setRepetitionMin(getRepetitionMin()).setRepetitionMax(getRepetitionMax());
- }
-
- /**
- * Description of the Method
- *
- * @param args Description of the Parameter
- * @param index Description of the Parameter
- * @return vrai si le parsing a reussi
- */
- public boolean parse(String[] args, int index) {
- parsedOption = args[index++];
- if (acceptOption(parsedOption)) {
- for (int i = 0; i < count(); i++) {
- argumentList.add(args[index + i]);
- }
- return true;
- }
- return false;
- }
-
- /**
- * Gets the usedOption attribute of the DefaultOption object
- *
- * @return The usedOption value
- */
- public String getUsedOption() {
- return parsedOption;
- }
-
- /**
- * Gets the description attribute of the DefaultOption object
- *
- * @return The description value
- */
- public String getDescription() {
- return description;
- }
-
-
- /**
- * Get repetitionMin property.
- *
- * @return RepetitionMin property.
- */
- public int getRepetitionMin() {
- return this.repetitionMin;
- }
-
- /**
- * Set repetitionMin property.
- *
- * @param repetitionMin New repetitionMin property.
- * @return TODO Description of the Return Value
- */
- public ArgumentsParserOption setRepetitionMin(int repetitionMin) {
- this.repetitionMin = repetitionMin;
- return this;
- }
-
-
- /**
- * Get repetitionMax property.
- *
- * @return RepetitionMax property.
- */
- public int getRepetitionMax() {
- return this.repetitionMax;
- }
-
- /**
- * Set repetitionMax property.
- *
- * @param repetitionMax New repetitionMax property.
- * @return TODO Description of the Return Value
- */
- public ArgumentsParserOption setRepetitionMax(int repetitionMax) {
- this.repetitionMax = repetitionMax;
- return this;
- }
-
-
- /**
- * Gets the name attribute of the DefaultOption object
- *
- * @return The name value
- */
- public String getName() {
- return name;
- }
-
- /**
- * Gets the arguments attribute of the DefaultOption object
- *
- * @return The arguments value
- */
- public String[] getArguments() {
- return (String[]) argumentList.toArray(new String[count()]);
- }
-
- /**
- * return numbers of args for this option
- *
- * @return numbers of args for this option
- */
- public int count() {
- return argument;
- }
-
- /**
- * Description of the Method
- *
- * @param optionName Description of the Parameter
- * @return Description of the Return Value
- */
- protected boolean acceptOption(String optionName) {
- for (int i = 0; i < acceptedOption.length; i++) {
- if (acceptedOption[i].equals(optionName)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * TODO Description of the Method
- *
- * @return TODO Description of the Return Value
- */
- public String toString() {
- return name + "(" + parsedOption + ")" + argumentList;
- }
-}// ArgumentsParserDefaultOption
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ArgumentsParserException.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ArgumentsParserException.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ArgumentsParserException.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,44 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%*/
-
-package org.codelutin.util;
-
-/**
- * Argument parsing exception
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * Copyright Code Lutin
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-public class ArgumentsParserException extends Exception { // ArgumentsParserException
-
- /** serialVersionUID. */
- private static final long serialVersionUID = 8265924907001359910L;
-
- public ArgumentsParserException(String msg) {
- super(msg);
- }
-
- public ArgumentsParserException(String msg, Throwable eee) {
- super(msg, eee);
- }
-
-} // ArgumentsParserException
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ArgumentsParserOption.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ArgumentsParserOption.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ArgumentsParserOption.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,84 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%*
- */
-
-package org.codelutin.util;
-
-/**
- * Cette classe représente une option de la ligne de commande
- *
- * @author poussin
- * created 22 août 2003
- *
- * @deprecated since 0.30 , prefer use of {@link ApplicationConfig} instead
- */
-public interface ArgumentsParserOption extends Cloneable {// Option
- /**
- * Essai de parser un argument. Si cela a fonctionné, retourne un argument
- * sinon retourne null.
- *
- *@param arg liste des arguments de la ligne de commande
- *@param index l'index ou le parser est rendu
- *@return vrai si le parsing a réussi
- */
- public boolean parse(String[] arg, int index);
-
- /**
- * Retourne le nom de l'option
- *
- * @return le nom
- */
- public String getName();
-
- public String getDescription();
-
- public String [] getAcceptedOption();
-
- public int getRepetitionMin();
- public int getRepetitionMax();
- public ArgumentsParserOption setRepetitionMin(int repetitionMin);
- public ArgumentsParserOption setRepetitionMax(int repetitionMax);
-
- /**
- * Retourne l'option utilisée sur la ligne de commande
- *
- *@return l'option utilisée sur la ligne de commende
- */
- public String getUsedOption();
-
- /**
- * Retourne la liste des arguments de l'option.
- *
- *@return la liste des arguments de l'option.
- */
- public String[] getArguments();
-
- /**
- * Permet de connaitre le nombre d'argument consommé par cet objet
- *
- *@return le nombre d'argument
- */
- public int count();
-
- /**
- * Copie l'objet
- *
- *@return retourne un nouvel objet
- */
- public ArgumentsParserOption copy();
-}// Option
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ArrayUtil.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ArrayUtil.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ArrayUtil.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,209 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * ArrayUtil.java
- *
- * Created: 31 oct. 2004
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-
-package org.codelutin.util;
-
-import java.lang.reflect.Array;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
-public class ArrayUtil { // ArrayUtil
-
- /**
- * Permet de convertir un tableau en une liste, le type primitif
- * est encapsulé dans un objet.
- *
- * @param a le tableau a convertir
- * @return la liste
- * @deprecated avec l'auto-boxing en java 5 et plus ?
- */
- static public List<Double> asList(double[] a) {
- ArrayList<Double> result = new ArrayList<Double>(a.length);
- for (double anA : a) {
- result.add(anA);
- }
- return result;
- }
-
- static public <T> List<T> asList(T[] a) {
- return Arrays.asList(a);
- }
-
- /**
- * Permet de convertir un tableau en une liste, le type primitif
- * est encapsulé dans un objet.
- *
- * @param a le tableau a convertir
- * @return la liste
- * @deprecated avec l'auto-boxing en java 5 et plus ?
- */
- static public List<Integer> asList(int[] a) {
- ArrayList<Integer> result = new ArrayList<Integer>(a.length);
- for (int anA : a) {
- result.add(anA);
- }
- return result;
- }
-
- public static int[] asIntArray(String[] a) {
- int[] result = new int[a.length];
- for (int i = 0; i < a.length; i++) {
- result[i] = StringUtil.toInt(a[i]);
- }
- return result;
- }
-
-
- /**
- * Fait la somme des 2 tableaux et retourne un nouveau tableau, les
- * 2 tableaux passés en argument ne sont pas modifiés. Les deux tableaux
- * doivent être non null et avoir la même taille.
- *
- * @param a le premier tableau
- * @param b le second tableau
- * @return le tableau des sommes
- */
- static public int[] sum(int[] a, int[] b) {
- if (a == null || b == null || a.length != b.length) {
- throw new IllegalArgumentException("Au moins des tableaux est null ou les tableaux ne font pas la même taille");
- }
- int[] result = new int[a.length];
- for (int i = 0; i < a.length; i++) {
- result[i] = a[i] + b[i];
- }
- return result;
- }
-
- static public int[] concat(int[]... tabs) {
- int length = 0;
- for (int[] tab : tabs) {
- if (tab != null) {
- length += tab.length;
- }
- }
- int[] result = new int[length];
- length = 0;
- for (int[] tab : tabs) {
- if (tab != null) {
- System.arraycopy(tab, 0, result, length, tab.length);
- length += tab.length;
- }
- }
- return result;
- }
-
- /**
- * Retourne un nouveau tableau qui est la concatenation des deux autres.
- * Essai de garder pour le tableau resultat le type des tableaux en entré
- * si possible. [Double], [Number] -> [Number]; [Double], [Long] -> [Object]
- *
- * @param tabs les tableaux
- * @return le nouveau tableau ou null, si les deux tableaux sont null
- * todo essayer de retourner le meilleur type de tableau possible
- * [Double], [Long] -> [Number]
- */
- static public Object[] concat(Object[]... tabs) {
- Object[] result = null;
- Class<?> clazz = null;
- int length = 0;
- for (Object[] tab : tabs) {
- if (tab != null) {
- length += tab.length;
- Class<?> tmp = tab.getClass().getComponentType();
- if (clazz == null) {
- clazz = tmp;
- } else if (tmp.isAssignableFrom(clazz)) {
- clazz = tmp;
- } else if (clazz.isAssignableFrom(tmp)) {
- // do nothing, because clazz can't be better
- } else {
- clazz = Object.class;
- }
- }
- }
-
- if (clazz != null) {
- result = (Object[]) Array.newInstance(clazz, length);
- length = 0;
- for (Object[] tab : tabs) {
- if (tab != null) {
- System.arraycopy(tab, 0, result, length, tab.length);
- length += tab.length;
- }
- }
- }
- return result;
- }
-
- /**
- * Ajoute a un tableau un ensemble d'element. Le type du tableau retourné
- * est le meilleur possible.
- *
- * @param tab les valeurs initiales du tableau
- * @param elems les elemements a ajouter
- * @return un nouveau tableau contenant a la fin les elements souhaites
- */
- @SuppressWarnings("unchecked")
- static public <E, F extends E> E[] concatElems(E[] tab, F... elems) {
- E[] result;
- result = (E[]) concat(tab, elems);
- return result;
- }
-
- /**
- * Recherche dans le table le 1er element qui correspond a la classe
- * passée en argument.
- *
- * @param tab le tableau dans lequel il faut chercher
- * @param clazz la classe de l'objet souhaité
- * @return un objet de la classe demandé, ou null si aucun ne correspond
- */
- static public <A> A search(Object[] tab, Class<A> clazz) {
- A result = null;
- for (Object o : tab) {
- if (clazz.isInstance(o)) {
- result = clazz.cast(o);
- }
- }
- return result;
- }
-
- @SuppressWarnings({"unchecked"})
- static public <T> T[] toArray(Collection list, Class<T> clazz) {
- T[] result = (T[]) Array.newInstance(clazz, list == null ? 0 : list.size());
- int i = 0;
- for (Object o : list) {
- result[i++] = (T) o;
- }
- return result;
- }
-} // ArrayUtil
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/BoundedList.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/BoundedList.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/BoundedList.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,231 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
-* BoundedList.java
-*
-* Created: 30 mai 2005
-*
-* @author Arnaud Thimel <thimel(a)codelutin.com>
-* @version $Revision$
-*/
-
-
-package org.codelutin.util;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-/** ArrayList with minimum and maximum sizes. For each operation, the size is checked and the BoundedList to ensure that it is kept in the range. */
-public class BoundedList<E> extends ArrayList<E> {
- /** */
- private static final long serialVersionUID = -3211387041114409849L;
-
- //By defaut, maxSize is set to -1 (infinite)
- private int minSize = 0;
- private int maxSize = -1;
-
- /**
- * Indicates if the list size is at the maximum
- *
- * @return true is the maximum size has been reached
- */
- public boolean isFull() {
- return (maxSize == -1 || size() >= maxSize);
- }
-
- /**
- * Indicates if the list size is to the minimum
- *
- * @return true is the list size is the minimum size
- */
- public boolean isToMinimum() {
- return (size() <= minSize);
- }
-
- /**
- * Creates a new BoundedList with the specified initialCapacity. The min size is set to 0 and the max size to the infinite.
- *
- * @param initialCapacity
- */
- public BoundedList(int initialCapacity) {
- super(initialCapacity);
- }
-
- /** Creates a new BoundedList with the default capacity. The min size is set to 0 and the max size to the infinite. */
- public BoundedList() {
- super();
- }
-
- /**
- * Creates a new BoundedList with the specified collection of elements. The min size is set to 0 and the max size to the infinite.
- *
- * @param arg0
- */
- public BoundedList(Collection<E> arg0) {
- super(arg0);
- }
-
- /**
- * Creates a new empty BoundedList with the specified min and max sizes. Please be informed that -1 represents the infinite.
- *
- * @param minSize
- * @param maxSize
- */
- public BoundedList(int minSize, int maxSize) {
- super();
- if (minSize > 0)
- this.minSize = minSize;
- if (minSize > -1)
- this.maxSize = maxSize;
- }
-
- /**
- * Appends the specified element to the end of this list.
- *
- * @param o the Object to be added
- */
- @Override
- public boolean add(E o) {
- if (checkNewSize(1))
- return super.add(o);
- else
- throw getException("Cannot add element. Use set to replace element or remove to free space or addAll");
- }
-
- /**
- * Inserts the specified element at the specified position in this list.
- *
- * @param index the position where to add the Object
- * @param o the Object to be added
- */
- @Override
- public void add(int index, E o) {
- if (checkNewSize(1))
- super.add(index, o);
- else
- throw getException("Cannot add element. Use set to replace element or remove to free space or addAll");
- }
-
- /**
- * Appends all of the elements in the specified Collection to the end of this list, in the order that they are returned by the specified Collection's Iterator.
- *
- * @param c the collection of Objects to be added
- */
- @Override
- public boolean addAll(Collection<? extends E> c) {
- if (checkNewSize(c.size()))
- return super.addAll(c);
- else
- throw getException("Cannot add element. Use set to replace element or remove to free space or addAll");
- }
-
- /**
- * Inserts all of the elements in the specified Collection into this list, starting at the specified position.
- *
- * @param index the index where to start adding the collection of objects
- * @param c the collection of Objects to be added
- */
- @Override
- public boolean addAll(int index, Collection<? extends E> c) {
- if (checkNewSize(c.size()))
- return super.addAll(index, c);
- else
- throw getException("Cannot add element. Use set to replace element or remove to free space or addAll");
- }
-
- /** Returns a shallow copy of this BoundedList instance */
- @SuppressWarnings("unchecked")
- @Override
- public Object clone() {
- BoundedList<E> bL = (BoundedList<E>) super.clone();
- bL.minSize = minSize;
- bL.maxSize = maxSize;
- return bL;
- }
-
- /*
- public Object set(int index, Object o) {
- //Pas d'action particulière à priori
- return super.set(index, o);
- }
- */
-
- /**
- * Removes the element at the specified position in this list.
- *
- * @param index the position of the element to be removed
- */
- @Override
- public E remove(int index) {
- if (checkNewSize(-1))
- return super.remove(index);
- else
- throw getException("Cannot remove element, minSize is " + minSize);
- }
-
- /**
- * Removes from this List all of the elements whose index is between fromIndex, inclusive and toIndex, exclusive.
- *
- * @param fromIndex index of first element to be removed
- * @param toIndex index after last element to be removed
- */
- @Override
- protected void removeRange(int fromIndex, int toIndex) {
- if (checkNewSize(-(toIndex - fromIndex)))
- super.removeRange(fromIndex, toIndex);
- else
- throw getException("Cannot remove element, minSize is " + minSize);
- }
-
- /** Removes a single instance of the specified element from this list, if it is present (optional operation). */
- @Override
- public boolean remove(Object o) {
- if (checkNewSize(-1) || !contains(o))
- return super.remove(o);
- else
- throw getException("Cannot remove element, minSize is " + minSize);
- }
-
- /** Removes from this collection all of its elements that are contained in the specified collection (optional operation). */
- @Override
- public boolean removeAll(Collection<?> c) {
- //On ne sait pas si les éléments de la Collection sont contenus dans la liste.
- //De plus, on ne sait pas si les instances sont présentes un ou plusieurs fois (Si elles y sont +sieurs fois elles sont supprimées +sieurs fois)
- if (checkNewSize(-c.size()))
- return super.removeAll(c);
- else
- throw getException("Cannot remove element, minSize is " + minSize);
- }
-
- private boolean checkNewSize(int size) {
- if (size == 0) //Pas de changement de taille !
- return (((size()) >= minSize) && ((maxSize == -1) || (size() <= maxSize)));
- else if (size > 0) //Ajout d'un elem - vérification qu'on ne dépasse pas la borne max
- return ((maxSize == -1) || ((size() + size) <= maxSize));
- return ((size() + size) >= minSize); //Suppression d'un élem - on vérifie qu'on ne descend pas en dessous de la borne min
- }
-
- private RuntimeException getException(String msg) {
- return new BoundedListOutOfBoundsException(msg);
- }
-
- @Override
- public String toString() {
- return /*"(" + minSize + ", " + maxSize + ") " +*/ super.toString();
- }
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/BoundedListOutOfBoundsException.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/BoundedListOutOfBoundsException.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/BoundedListOutOfBoundsException.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,61 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
-* BoundedListOfBoundsException.java
-*
-* Created: 30 mai 2005
-*
-* @author Arnaud Thimel <thimel(a)codelutin.com>
-* @version $Revision$
-*/
-
-
-package org.codelutin.util;
-
-
-public class BoundedListOutOfBoundsException extends RuntimeException {
-
- /** */
- private static final long serialVersionUID = 7006384682459926080L;
-
- /**
- *
- */
- public BoundedListOutOfBoundsException() {
- super();
- }
-
- /** @param message */
- public BoundedListOutOfBoundsException(String message) {
- super(message);
- }
-
- /**
- * @param message
- * @param cause
- */
- public BoundedListOutOfBoundsException(String message, Throwable cause) {
- super(message, cause);
- }
-
- /** @param cause */
- public BoundedListOutOfBoundsException(Throwable cause) {
- super(cause);
- }
-
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/CallAnalyse.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/CallAnalyse.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/CallAnalyse.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,328 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * CallAnalyse.java
- *
- * Created: 25 ao�t 2005 14:09:22 CEST
- *
- * @author Benjamin POUSSIN <poussin(a)codelutin.com>
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-
-package org.codelutin.util;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-
-import org.apache.commons.collections.primitives.ArrayLongList;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/**
-* Cette classe permet de faire des analyses sur les appels de methode
-* En debut de methode on appelle la methode {@link #enter}, et en fin de methode
-* la methode {@link #exit}.
-* <p>
-* Ensuite on peut récuperer les statistiques par Thread ou de tous les threads
-* <p>
-* On a comme statistique
-* <li> le temps d'execution
-* <li> la memore utilisé
-* <li> le nombre d'appels
-*/
-public class CallAnalyse { // CallAnalyse
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static private Log log = LogFactory.getLog(CallAnalyse.class);
-
- static private List<ThreadStatistics> listThreadStatistics =
- new ArrayList<ThreadStatistics>();
-
- static private ThreadLocal<ThreadStatistics> stats =
- new ThreadLocal<ThreadStatistics>(){
- protected synchronized ThreadStatistics initialValue(){
- ThreadStatistics result = new ThreadStatistics();
- listThreadStatistics.add(result);
- return result;
- }
- };
-
- /**
- * Permet d'activer les statistiques, pour le thread courant
- */
- static public void activate(){
- stats.get().setActivated(true);
- }
-
- /**
- * Permet de desactiver les statistiques, pour le thread courant
- */
- static public void desactivate(){
- stats.get().setActivated(false);
- }
-
- /**
- * Permet de savoir si les statistiques sont activées ou non, pour le
- * thread courant
- */
- static public boolean isActivate(){
- return stats.get().getActivated();
- }
-
- /**
- * @param name le nom de l'appel a monitorer
- */
- static public void enter(String name){
- ThreadStatistics t = stats.get();
- if(t.getActivated()){
- t.get(name).enter();
- }
- }
-
- /**
- * Indique la sortie de l'appel, name doit avoir ete utilisé lors d'un enter
- * @param name le nom de l'appel a monitorer, doit etre identique a
- * celui utilisé pour la methode enter
- */
- static public void exit(String name){
- ThreadStatistics t = stats.get();
- if(t.getActivated()){
- t.get(name).exit();
- }
- }
-
- /**
- * Returns the statistics for the current thread
- */
- static public ThreadStatistics getThreadStatistics(){
- return stats.get();
- }
-
- /**
- * Returns the statistics for all threads
- */
- static public List<ThreadStatistics> getAllThreadStatistics(){
- return listThreadStatistics;
- }
-
- static public class ThreadStatistics extends TreeMap<String, CallStatistics>{
- /** */
- private static final long serialVersionUID = -36051448464013504L;
- protected boolean activated = false;
- public boolean getActivated(){
- return activated;
- }
- public void setActivated(boolean activated){
- this.activated = activated;
- }
- public CallStatistics get(String name){
- CallStatistics result = super.get(name);
- if(result == null){
- put(name, result = new CallStatistics(name));
- }
- return result;
- }
- public String toString(){
- return values().toString();
- }
- }
-
- /**
- * This method will get all the statistics from all the threads and put it
- * all together in a {@link Map} which key is the name of the watched
- * element and the value is its instance of {@link CallStatisticsSummary}
- *
- * @return A map with all collected statistics
- */
- public static Map<String, CallStatisticsSummary> getSummary() {
- Map<String, CallStatisticsSummary> results = new HashMap<String, CallStatisticsSummary>();
- for (ThreadStatistics stats : CallAnalyse.getAllThreadStatistics()) {
- for (String name : stats.keySet()) {
- CallStatisticsSummary stat = results.get(name);
- if (stat == null) {
- stat = new CallStatisticsSummary(name);
- results.put(name, stat);
- }
- stat.addCallStats(stats.get(name));
- }
- }
- return results;
- }
-
- /**
- * CallStatistics is the class which handles values on excecution time and
- * memory usage.
- * Each CallStatistics object is for one particular name.
- *
- * @author bpoussin
- */
- static public class CallStatistics implements Cloneable {
- protected String name = null;
- protected long calls = 0;
- protected long minTime = Long.MAX_VALUE;
- protected long maxTime = Long.MIN_VALUE;
- protected long sumTime = 0;
- protected long minMemory = Long.MAX_VALUE;
- protected long maxMemory = Long.MIN_VALUE;
- protected long sumMemory = 0;
- /** pile contenant le temps de appel, util pour les appels recursifs */
- protected ArrayLongList times = new ArrayLongList();
- protected ArrayLongList memories = new ArrayLongList();
- protected Runtime runtime = Runtime.getRuntime();
-
- public CallStatistics(String name){
- this.name = name;
- }
- public void enter(){
- times.add(System.nanoTime());
- memories.add(getMemory());
- }
- public void exit(){
- calls ++;
-
- if(times.size() == 0){
- log.info("To many exit call for " + name);
- return;
- }
- long time = times.removeElementAt(times.size() - 1);
- time = System.nanoTime() - time;
- if(time < minTime || minTime == Long.MAX_VALUE){
- minTime = time;
- }
- if(time > maxTime){
- maxTime = time;
- }
- sumTime += time;
-
- long memory = memories.removeElementAt(memories.size() - 1);
- memory = getMemory() - memory;
- if(memory < minMemory || minMemory == Long.MAX_VALUE){
- minMemory = memory;
- }
- if(memory > maxMemory){
- maxMemory = memory;
- }
- sumMemory += memory;
- }
- public String getName(){
- return name;
- }
- public long getCalls(){
- return calls;
- }
-
- public long getMinTime(){
- return minTime;
- }
- public long getMaxTime(){
- return maxTime;
- }
- public long getSumTime(){
- return sumTime;
- }
- public long getAvgTime(){
- if (calls == 0){
- return 0;
- } else {
- return sumTime / calls;
- }
- }
-
- public long getMinMemory(){
- return minMemory;
- }
- public long getMaxMemory(){
- return maxMemory;
- }
- public long getSumMemory(){
- return sumMemory;
- }
- public long getAvgMemory(){
- if ( calls == 0) {
- return 0;
- } else {
- return sumMemory / calls;
- }
- }
-
- protected long getMemory(){
- // runtime.gc();
- return runtime.totalMemory() - runtime.freeMemory();
- }
-
- public String toString(){
- return getName() + " calls=" + getCalls()
- + " time=" + StringUtil.convertTime(getSumTime())
- + "(" + StringUtil.convertTime(getMinTime()) + "/" + StringUtil.convertTime(getAvgTime()) + "/" + StringUtil.convertTime(getMaxTime()) + ")"
- + " memory=" + StringUtil.convertMemory(getSumMemory())
- + "(" + StringUtil.convertMemory(getMinMemory()) + "/" + StringUtil.convertMemory(getAvgMemory()) + "/" + StringUtil.convertMemory(getMaxMemory()) + ")"
- ;
- }
-
- } //CallStatistics
-
- /**
- * This class is collecting data from different CallStatistics classes by
- * using the method {@link #addCallStats(org.codelutin.util.CallAnalyse.CallStatistics)}.
- *
- * @author thimel
- */
- static public class CallStatisticsSummary extends CallStatistics {
-
- public CallStatisticsSummary(String name) {
- super(name);
- }
-
- /**
- * This methods read the given {@link CallStatistics} and add values to
- * its own
- *
- * @param other an other CallStatistics object
- */
- public void addCallStats(CallStatistics other) {
- if (other == null || this.equals(other)) {
- return;
- }
- calls += other.getCalls();
- if(other.getMinTime() < minTime || minTime == Long.MAX_VALUE){
- minTime = other.getMinTime();
- }
- if(other.getMaxTime() > maxTime){
- maxTime = other.getMaxTime();
- }
-
- sumTime += other.getSumTime();
-
- if(other.getMinMemory() < minMemory || minMemory == Long.MAX_VALUE){
- minMemory = other.getMinMemory();
- }
- if(other.getMaxMemory() > maxMemory){
- maxMemory = other.getMaxMemory();
- }
- sumMemory += other.getSumMemory();
- }
- } //CallStatisticsSummary
-
-} // CallAnalyse
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/CardinalityHelper.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/CardinalityHelper.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/CardinalityHelper.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,253 +0,0 @@
-/*
-* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-package org.codelutin.util;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Une classe avec des méthodes utiles sur les cardinalités :
- * <p/>
- * parser une cardinalité {@link #parseCardinalite(String, boolean)}
- * <p/>
- * afficher une cardinité {@link #printCardinalite(StringBuilder, String, int, int, boolean, String, String, String, String)}
- * <p/>
- * et pour tester des cardinalités :
- * <p/>
- * {@link #isMandatory(int)}, savoir si une cardinalité est obligatoire à
- * partir de son min.
- * <p/>
- * {@link #isRepetable(int)}, savoir si une cardinalité est répétable à partir
- * de son max.
- * <p/>
- * {@link #isMaxBounded(int)}, savoir si une cardinalité est bornée sur son max
- * à partir de son max.
- * <p/>
- * {@link #isDefaultMandatory(int, int)}, savoir si la cardinalité est la
- * cardinalité obligatoire par défaut {1}.
- * <p/>
- * {@link #isDefaultOptional(int, int)}, savoir si la cardinalité est la
- * cardinalité optionel par défaut {0,1}.
- * <p/>
- * {@link #isAvailable(int, int)}, savoir si il reste encore des occurrences
- * disponibles sur une cardianlité à partir d'un nombre d'oocurrence et du max
- * de la cardinalité.
- *
- * @author tony
- */
-public class CardinalityHelper {
-
- static final Pattern PATTERN_OPTIONAL = Pattern.compile("\\[.*\\]");
- static final Pattern PATTERN_MANDATORY = Pattern.compile("\\<.*\\>");
-
- /** XXX + ou XXX * */
- public static final Pattern PATTERN_NO_MAX_BOUND = Pattern.compile("(.*)(\\+|\\*)");
-
- /** XXX {n} n est un entier */
- public static final Pattern PATTERN_EXTACLY = Pattern.compile("(.*)\\{([0-9]+)\\}");
-
- /** XXX {n,m} n est un entier, m est un entier ou * */
- public static final Pattern PATTERN_BOUNDED = Pattern.compile("(.*)\\{([0-9]+),([0-9]+|\\*)\\}");
-
- /**
- * Indique si une cardinalité est la cardinalité obligatoire par défaut {1}
- *
- * @param min le min de la cardinalité à tester
- * @param max le max de la cardinalité à tester
- * @return <code>true</code> si min==1 et max=1
- */
- public static boolean isDefaultMandatory(int min, int max) {
- return min == 1 && max == 1;
- }
-
- /**
- * Indique si une cardinalité est la cardinalité optionel par défaut {0,1}
- *
- * @param min le min de la cardinalité à tester
- * @param max le max de la cardinalité à tester
- * @return <code>true</code> si min==0 && max==1
- */
- public static boolean isDefaultOptional(int min, int max) {
- return min == 0 && max == 1;
- }
-
- /**
- * Indique si une cardinalité est obligatoire à partir de son min
- *
- * @param min le min de la cardinalité à tester
- * @return <code>true</code> if min>0
- */
- public static boolean isMandatory(int min) {
- return min > 0;
- }
-
- /**
- * Indique si une cardinalité est majorée à partir de son max
- *
- * @param max le max de la cardinalité à tester
- * @return <code>true</code> si max!=-1
- */
- public static boolean isMaxBounded(int max) {
- return max != -1;
- }
-
- /**
- * Indique si une cardinalité est répétable à partir de son max
- *
- * @param max le max de la cardinalité à tester
- * @return <code>true</code> si max>0 || max==-1
- */
- public static boolean isRepetable(int max) {
- return !isMaxBounded(max) || max > 1;
- }
-
- /**
- * Indique si on n'a pas encore atteint la borne max d'une cardinalité à
- * partir de son max et d'un nombre d'occurrences déjà atteint.
- *
- * @param current le nombre d'occurence actuel
- * @param max la borne max de la cardinalité
- * @return <code>true</code> si la cardinalité n'a pas atteint sa borne max
- */
-
- public static boolean isAvailable(int current, int max) {
- return !isMaxBounded(max) || current < max;
- }
-
- /**
- * Retourne le min par défault d'une cardinalité à partir du critère
- * obligatoire ou non.
- *
- * @param mandatory le critère à tester
- * @return <code>1</code> si obligatoire, 0 sinon.
- */
- public static int getDefaultMin(boolean mandatory) {
- return mandatory ? 1 : 0;
- }
-
- /**
- * Parse la cardinalite à la fin d'un texte.
- *
- * @param txt la valeur dont on cherche la cardinalité
- * @param mandatory si vrai, valeurs par default {1}, sinon {0,1}
- * @return un tableau contenant 3 object : le texte donné sans les
- * informations de cardinalité, la répétitionMin, la répétitionMax.
- */
- public static Object[] parseCardinalite(String txt, boolean mandatory) {
-
- Object[] result = new Object[3];
- Matcher matcher;
-
- // always trim the text
- txt = txt.trim();
- if ((matcher = PATTERN_NO_MAX_BOUND.matcher(txt)).matches()) {
- // find a no max cardinalite *|+
- result[0] = matcher.group(1).trim();
- result[1] = getDefaultMin(matcher.group(2).equals("+"));
- result[2] = -1;
- } else if ((matcher = PATTERN_EXTACLY.matcher(txt)).matches()) {
- // found a exactly cardinalite {n}
- result[0] = matcher.group(1).trim();
- result[1] = Integer.valueOf(matcher.group(2));
- result[2] = result[1];
- } else if ((matcher = PATTERN_BOUNDED.matcher(txt)).matches()) {
- // found a bounded cardinalite {n,m}
- result[0] = matcher.group(1).trim();
- result[1] = Integer.valueOf(matcher.group(2));
- String max = matcher.group(3);
- result[2] = max.equals("*") ? -1 : Integer.valueOf(max);
- } else {
- // no cardinalite was found, use default values
- result[0] = txt.trim();
- result[1] = getDefaultMin(mandatory);
- result[2] = 1;
- }
- return result;
- }
-
- /**
- * Imprime dans le builder, le txt + une cardinalité.
- *
- * @param sb le builder
- * @param txt le txt à imprimer
- * @param min la caridnalité min
- * @param max la cardinalité max
- * @param mandatory pour indiquer dans quel cas on affiche la cardinalité :
- * si elle correspond aux valeurs par défaut
- * de mandatory {1} ou optionel {0,1}, pas d'impression.
- * @param mo le caractère ouvrant pour un object obligatoire
- * @param mc le caractère fermant pour un object obligatoire
- * @param oo le caractère ouvrant pour un object optionel
- * @param oc le caractère fermant pour un object optionel
- */
- public static void printCardinalite(StringBuilder sb, String txt, int min, int max, boolean mandatory, String mo, String mc, String oo, String oc) {
- // flag pour indiquer s'il faut ou non imprimer les bordures
- boolean print = false;
-
- boolean maxBounded = isMaxBounded(max);
- if (isMandatory(min)) {
- sb.append(mo).append(txt).append(mc);
- if (isDefaultMandatory(min, max)) {
- if (mandatory || mo.length() > 0) {
- // rien a faire on a la valeur par defaut attendue, ou la
- // bordure existe et remplace la valeur par defaut
- } else {
- // pas de bordure, ou valeur optionel attendue, on doit imprimer la cardinalite
- print = true;
- }
- } else {
- if (!maxBounded && min == 1) {
- sb.append('+');
- } else {
- print = true;
- }
- }
- } else {
- sb.append(oo).append(txt).append(oc);
- if (isDefaultOptional(min, max)) {
- if (!mandatory || oo.length() > 0) {
- // rien a faire on a la valeur par defaut attendue, ou la
- // bordure existe et remplace la valeur par defaut
- } else {
- // pas de bordure, ou valeur optionel attendue, on doit imprimer la cardinalite
- print = true;
- }
- } else {
- if (!maxBounded) {
- sb.append('*');
- } else {
- print = true;
- }
- }
- }
- if (print) {
- sb.append('{');
- sb.append(min);
- if (max != min) {
- sb.append(',');
- sb.append(maxBounded ? max : "*");
- }
- sb.append('}');
- }
- }
-
- protected CardinalityHelper() {
- // do not instanciate
- }
-
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/CategorisedListenerSet.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/CategorisedListenerSet.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/CategorisedListenerSet.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,260 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * CategorisedListenerSet.java
- *
- * Created: 13 mai 2004
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * Copyright Code Lutin
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-
-package org.codelutin.util;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import java.beans.Statement;
-import java.util.Iterator;
-import java.util.WeakHashMap;
-
-/**
- * Objet permettant de géré plusieurs liste de listener de facon simple.
- * Chaque liste de listener est rangé en fonction d'une cle (categorie)
- * Une categorie peut avoir un pere, dans ce cas si un event doit etre lancé
- * sur une categorie il est aussi lancer sur le pere de la categorie.
- * Mais attention l'inverse n'est pas vrai, un event lancé sur un père n'est
- * jamais lancé sur ses fils.
- * Il existe une Category spéciale {@link #ALL} qui permet d'envoyer un event
- * a tous les listeners.
- * Si cette classe est la derniere classe a conserver l'objet categorie
- * alors la categorie est libere et ainsi que les listeners si c'etait aussi
- * leur derniers referencements
- * <p/>
- * <p> Si les categories sont representees par des Class, alors vous pouvez
- * utiliser la hierachie de classe pour creer de facon automatique les pere
- *
- * @see org.codelutin.util.ListenerSet
- */
-public class CategorisedListenerSet<Listener> { // CategorisedListenerSet
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static private Log log = LogFactory.getLog(CategorisedListenerSet.class);
-
- /**
- * permet de remplacer toutes les categories.
- * Si on utilise cette category, alors tous les listeners present
- * seront utilisé.
- */
- static public final Object ALL = new Object();
-
- /**
- * HashMap de ListenerSet, en cle l'objet qui caracterise la categorie
- * en valeur un ListenerSet
- */
- protected WeakHashMap<Object, ListenerSet<Listener>> listeners = new WeakHashMap<Object, ListenerSet<Listener>>();
- protected WeakHashMap<Object, Object> categoryParent = new WeakHashMap<Object, Object>();
- protected boolean isClassCategory = true;
-// protected Class listenerClass = null;
-
- /**
- * Construit un CategorisedListenerSet qui accepte n'importe quel type
- * de listener et dont le isClassCategory est activé
- */
- public CategorisedListenerSet() {
- }
-
-// /**
-// * Construit un CategorisedListenerSet qui accepte les listeners
-// * dont le type est passé en parametre et dont le isClassCategory est activé
-// */
-// public CategorisedListenerSet(Class listenerClass){
-// this.listenerClass = listenerClass;
-// }
-
- /**
- * @param listenerClass la classe dont doit heriter les listeners pour
- * etre accepté lors de l'ajout
- * @param isClassCategory si vrai et que les categorie passé en arguement
- * lors de l'ajout sont de type Class alors lors du fire on recherche aussi
- * les peres dans la hierarchie d'heritage de la classe (Super class et
- * interfaces)
- */
- public CategorisedListenerSet(Class listenerClass, boolean isClassCategory) {
-// this(listenerClass);
- this.isClassCategory = isClassCategory;
- }
-
-
- protected void checkCategory(Object category) {
- if (category == ALL) {
- throw new IllegalArgumentException("ALL category can't be use to add listener or add Category");
- }
- }
-
- /**
- * Ajoute une categorie en indiquant sont pere. Une categorie ne peut
- * avoir qu'un seul pere, si la nouvelle categorie existait deja
- * alors l'appel a cette methode change son pere.
- *
- * @param parent le pere de la categorie, null si on ne souhaite pas de pere
- * @param newCategory la nouvelle caterogie
- */
- public void addCategory(Object parent, Object newCategory) {
- checkCategory(parent);
- checkCategory(newCategory);
- categoryParent.put(newCategory, parent);
- }
-
- /**
- * Ajoute un listener sur une certaine categorie, si la categorie n'existe
- * alors on la crée en ne lui affectant pas de père
- *
- * @param category la categorie dans lequel il faut ajouter le listener
- * @param l le listener a ajouter
- */
- public void add(Object category, Listener l) {
- checkCategory(category);
- ListenerSet<Listener> listeners = getListeners(category);
- listeners.add(l);
- }
-
- /**
- * Supprime un listener d'une categorie, si la categorie ou le listener
- * n'existe pas, rien ne se passe.
- *
- * @param category la categorie dans lequel il faut supprimer le listener
- * @param l le listener a supprimer
- */
- public void remove(Object category, Listener l) {
- ListenerSet<Listener> listeners = getListeners(category);
- listeners.remove(l);
- }
-
- /**
- * Permet de lancer un event dans une categorie, l'event est aussi propagé
- * sur les ancètres de la categorie
- *
- * @param category la categorie a partir duquel il faut lancer l'evenement
- * @param methodName le nom de la méthode de la classe listener
- * @param event l'objet event a passer en paramètre de la methode du
- * listener
- */
- public void fire(Object category, String methodName, Object event)
- throws Exception {
- if (log != null && log.isTraceEnabled()) {
- log.trace("fire category: " + category + " method: " + methodName);
- }
- ListenerSet<Listener> ls = getAllListeners(category);
- ls.fire(methodName, event);
-/* for(Iterator i=iterator(category); i.hasNext();){
- Object o = i.next();
- Log.logDevFinest("org.codelutin.util.CategorisedListenerSet.fire", "fire on: " + o);
- Statement stm = new Statement(o, methodName, new Object[]{event});
- stm.execute();
- }
-*/
- }
-
- /**
- * Permet de lancer un event dans une categorie, l'event est aussi propagé
- * sur les ancètres de la categorie, si un meme objet etait listener
- * dans plusieurs categories alors il ne recevra qu'une seul notification
- *
- * @param category la categorie a partir duquel il faut lancer l'evenement
- * @param methodName le nom de la méthode de la classe listener
- */
- public void fire(Object category, String methodName) throws Exception {
- for (Listener l : getAllListeners(category)) {
- Statement stm = new Statement(l, methodName, null);
- stm.execute();
- }
- }
-
- /**
- * Retourne un Iterator sur tous les listeners qu'il faut prevenir si on
- * souhaite prevenir une certaine categorie. Ceci inclue les ancetre de la
- * categorie
- */
- public Iterator<Listener> iterator(Object category) {
- return getAllListeners(category).iterator();
- }
-
- /**
- * Retourne un ListenerSet contenant tous les listeners c'est à dire les
- * listener de la categorie demandé mais aussi les listeners des ancetres
- */
- protected ListenerSet<Listener> getAllListeners(Object category) {
- ListenerSet<Listener> result = new ListenerSet<Listener>();
- if (category == ALL) {
- for (ListenerSet<Listener> ls : listeners.values()) {
- result.addAll(ls);
- }
- } else {
- Object parentCategory = category;
- while (parentCategory != null) {
- result.addAll(getListeners(parentCategory));
- if (isClassCategory && parentCategory instanceof Class) {
- result.addAll(getListenersClass((Class) parentCategory));
- }
- parentCategory = categoryParent.get(parentCategory);
- }
- }
- if (log != null && log.isTraceEnabled()) {
- log.trace("getAllListeners category: " + category + " result: " + result);
- }
- return result;
- }
-
- protected ListenerSet<Listener> getListenersClass(Class category) {
- ListenerSet<Listener> result = new ListenerSet<Listener>();
- Class superClass = category.getSuperclass();
- if (superClass != null) {
- result.addAll(getAllListeners(superClass));
- }
- for (Class c : category.getInterfaces()) {
- result.addAll(getAllListeners(c));
- }
- return result;
- }
-
- /**
- * Retourne un ListenerSet contenant seulement les listener de la categorie
- * demandé. Si la categorie n'existe pas alors elle est créé.
- */
- protected ListenerSet<Listener> getListeners(Object category) {
- ListenerSet<Listener> result = listeners.get(category);
- if (result == null) {
- listeners.put(category, result = new ListenerSet<Listener>());
- }
- if (log != null && log.isTraceEnabled()) {
- log.trace("getListeners category: " + category + " result: " + result);
- }
- return result;
- }
-
- public String toString() {
- return "Listeners Category: " + categoryParent + "\nListener: " + listeners;
- }
-
-} // CategorisedListenerSet
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ClassLoaderUtil.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ClassLoaderUtil.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ClassLoaderUtil.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,110 +0,0 @@
-package org.codelutin.util;
-
-import org.apache.commons.logging.LogFactory;
-
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Stack;
-
-/**
- * A usefull class with method for ClassLoader
- *
- * @author chemit
- */
-public class ClassLoaderUtil {
-
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- private static final org.apache.commons.logging.Log log = LogFactory.getLog(ClassLoaderUtil.class);
-
- /**
- * Returns the all urls to be used in a {@link java.net.URLClassLoader}.
- * <p/>
- * If classloader has only one url and the url is a jar, try to load in manifest class-path
- *
- * @param loader the classloader (if null will use system one)
- * @return all the url found in the classloader
- */
- static public URL[] getDeepURLs(URLClassLoader loader) {
- Stack<URL> urlToTreate = new Stack<URL>();
- List<URL> urlTreated = new ArrayList<URL>();
-
- // first get the urls from classloader
- URL[] result = getURLs(loader);
-
- urlToTreate.addAll(Arrays.asList(result));
- while (!urlToTreate.isEmpty()) {
- URL currentUrl = urlToTreate.pop();
- // save the url
- urlTreated.add(currentUrl);
- if (Resource.isJar(currentUrl.toString())) {
- // jar invocation
- try {
- URL[] newArrayURLs = Resource.getClassPathURLsFromJarManifest(currentUrl);
- if (newArrayURLs == null) {
- continue;
- }
- List<URL> newURLs = Arrays.asList(newArrayURLs);
- for (URL newURL : newURLs) {
- if (!urlTreated.contains(newURL) && !urlToTreate.contains(newURL)) {
- urlToTreate.add(newURL);
- }
- }
- } catch (Exception e) {
- if (log.isDebugEnabled()) {
- // this is not a such error, but some jar can not be
- log.debug("error with url" + currentUrl + " for reason : " + e.getMessage());
- }
- }
- }
- }
- return urlTreated.toArray(new URL[urlToTreate.size()]);
- }
-
- /**
- * Recupere la liste des urls d'un {@link java.net.URLClassLoader}.
- * <p/>
- * Note : Un cas particulier est positionné pour JBoss qui utilise la method getAllURLs.
- *
- * @param classLoader le class loader a scanner
- * @return les urls du classloade.
- */
- static public URL[] getURLs(URLClassLoader classLoader) {
- if (classLoader == null) {
- classLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
- }
- Method m;
- try {
- // Essai de récupération de la méthode getAllURLs() de RepositoryClassLoader (JBoss)
- m = classLoader.getClass().getMethod("getAllURLs");
- } catch (Exception e) {
- m = null;
- }
- URL[] result;
- if (m == null) {
- result = classLoader.getURLs();
- } else {
- try {
- result = (URL[]) m.invoke(classLoader);
- } catch (Exception e) {
- throw new IllegalStateException(e);
- }
- }
- return result;
- }
-
- static public void printLoader(ClassLoader loader) {
- log.info(loader);
- if (loader instanceof URLClassLoader) {
- URL[] urls = getURLs((URLClassLoader) loader);
- for (URL url : urls) {
- log.info(url);
- }
- }
- }
-
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/CollectionUtil.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/CollectionUtil.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/CollectionUtil.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,153 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * CollectionUtil.java
- *
- * Created: 23 févr. 2006 09:03:39
- *
- * @author poussin
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-
-package org.codelutin.util;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Set;
-
-
-/** @author poussin */
-
-public class CollectionUtil {
-
- /**
- * Ajoute a la collection tous les elements passés en parametre
- *
- * @param col la collection
- * @param e les elements a ajouter
- * @return la collection passé en parametre
- */
- static public <A, E extends Collection<A>> E addAll(E col, A... e) {
- Collections.addAll(col, e);
- return col;
- }
-
- /**
- * Ajoute a la liste tous les elements passés en parametre
- *
- * @param col la liste
- * @param pos le premier index où insérer les données
- * @param e les elements a ajouter
- * @return la liste passé en parametre
- */
- static public <A, E extends List<A>> E addAll(E col, int pos, A... e) {
- col.addAll(pos, Arrays.asList(e));
- return col;
- }
-
- /**
- * Permet de convertir une liste non typée, en une liste typée.
- * <p/>
- * La liste en entrée en juste bien castée.
- * <p/>
- * On effectue une vérification sur le typage des élements de la liste.
- * <p/>
- * Note : <b>Aucune liste n'est créee, ni recopiée</b>
- *
- * @param list la liste à convertir
- * @param type le type des éléments de la liste
- * @return la liste typée
- * @throws IllegalArgumentException si un élément de la liste en entrée n'est
- * pas en adéquation avec le type voulue.
- */
- @SuppressWarnings({"unchecked"})
- static public <O> List<O> toGenericList(List list, Class<O> type) throws IllegalArgumentException {
- if (list.isEmpty()) {
- return list;
- }
- for (Object o : list) {
- if (!(type.isAssignableFrom(o.getClass()))) {
- throw new IllegalArgumentException("can not cast List with object of type " + o.getClass() + " to " + type + " type!");
- }
- }
- return list;
- }
-
- /**
- * Permet de convertir une collection non typée, en une collection typée.
- * <p/>
- * La collection en entrée en juste bien castée.
- * <p/>
- * On effectue une vérification sur le typage des élements de la collection.
- * <p/>
- * Note : <b>Aucune collection n'est créee, ni recopiée</b>
- *
- * @param list la collection à convertir
- * @param type le type des éléments de la collection
- * @return la collection typée
- * @throws IllegalArgumentException si un élément de la collection en entrée n'est
- * pas en adéquation avec le type voulue.
- */
- @SuppressWarnings({"unchecked"})
- static public <O> Collection<O> toGenericCollection(Collection list, Class<O> type) throws IllegalArgumentException {
- if (list.isEmpty()) {
- return list;
- }
- for (Object o : list) {
- if (!(type.isAssignableFrom(o.getClass()))) {
- throw new IllegalArgumentException("can not cast Collection with object of type " + o.getClass() + " to " + type + " type!");
- }
- }
- return list;
- }
-
- /**
- * Permet de convertir un ensemble non typée, en un ensemble typée.
- * <p/>
- * L'ensemble en entrée en juste bien castée.
- * <p/>
- * On effectue une vérification sur le typage des élements de la collection.
- * <p/>
- * Note : <b>Aucun ensemble n'est créee, ni recopiée</b>
- *
- * @param list l'ensemble à convertir
- * @param type le type des éléments de l'ensemble
- * @return l'ensemble typée
- * @throws IllegalArgumentException si un élément de l'ensemble en entrée n'est
- * pas en adéquation avec le type voulue.
- */
- @SuppressWarnings({"unchecked"})
- static public <O> Set<O> toGenericSet(Set list, Class<O> type) throws IllegalArgumentException {
- if (list.isEmpty()) {
- return list;
- }
- for (Object o : list) {
- if (!(type.isAssignableFrom(o.getClass()))) {
- throw new IllegalArgumentException("can not cast Set with object of type " + o.getClass() + " to " + type + " type!");
- }
- }
- return list;
- }
-}
-
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ConverterUtil.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ConverterUtil.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ConverterUtil.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,129 +0,0 @@
-/*
-* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-package org.codelutin.util;
-
-import org.apache.commons.beanutils.ConvertUtils;
-import org.apache.commons.beanutils.Converter;
-
-/**
- * Une classe contenant des méthodes utiles sur les converters et les conversions
- *
- * @author tony
- */
-public class ConverterUtil {
-
- /** le paquetage où chercher les implentations de Converter, si non présents dans le système */
- protected static final String CONVERTER_PACKAGE = "org.codelutin.util";
-
- /**
- * Cherche un converter pour un <code>type</code> donné.
- * <p/>
- * Recherche dans un premier temps dans les converteurs déjà connus.
- * <p/>
- * Si le type est une énum et qu'aucun converter, n'a été trouvé, on
- * enregistre un nouveau convert d'enum.
- * <p/>
- * Sinon on tente d'instancier un converteur dans le paquetage dédié aux
- * converteurs {@link #CONVERTER_PACKAGE}.
- *
- * @param type le type à convertir
- * @return le converter trouvé, ou null si non trouvé
- */
- public static <T> Converter getConverter(Class<T> type) {
- Converter converter = ConvertUtils.lookup(type);
- if (converter != null) {
- return converter;
- }
- if (type.isEnum()) {
- registerEnumConverter(type);
- return ConvertUtils.lookup(type);
- }
- // on essaye de trouver un converter dans le paquetage des converters
- try {
- registerConverter0(type);
- converter = ConvertUtils.lookup(type);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- return converter;
- }
-
- /**
- * Convertir une valeur!
- *
- * @param type le type de donnée recherchée
- * @param toConvert l'object a convertir
- * @return la nouvelle instance de l'objet converti typé ou null
- */
- @SuppressWarnings({"unchecked"})
- public static <T> T convert(Class<T> type, Object toConvert) {
-
- T result = null;
- Converter converter = getConverter(type);
- if (converter != null) {
- return (T) converter.convert(type, toConvert);
- }
- return result;
- }
-
- public static void registerConverter(Class type) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
- if (ConvertUtils.lookup(type) == null) {
- registerConverter0(type);
- }
- }
-
- protected static void registerConverter0(Class type) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
- Class<?> aClass = Class.forName(CONVERTER_PACKAGE + "." + type.getSimpleName() + "Converter");
- Converter converter = (Converter) aClass.newInstance();
- ConvertUtils.register(converter, type);
- }
-
- /**
- * Enregistre un nouveau converter pour un type d'enum donné, avec une
- * valeur par defaut.
- *
- * @param type le type d'enum à convertir
- * @param defaultValue la valeur par defaut.
- */
- public static void registerEnumConverter(Class<?> type, Object defaultValue) {
- if (EnumConverter.isEnabled(type, type) && ConvertUtils.lookup(type) == null) {
- Converter converter = new EnumConverter(type, defaultValue);
- ConvertUtils.register(converter, type);
- }
- }
-
- /**
- * Enregistre un nouveau converter pour un type d'enum donné, sans utiliser
- * de valeur par defaut.
- *
- * @param type le type d'enum à convertir
- */
- public static void registerEnumConverter(Class<?> type) {
- registerEnumConverter(type, null);
- }
-
- public static byte[] convert(char[] chars) {
- byte[] bytes = new byte[chars.length];
- for (int i = 0; i < chars.length; i++) {
- bytes[i] = (byte) (chars[i] & 0xff);
- }
- return bytes;
- }
-
-
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/DigestGenerator.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/DigestGenerator.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/DigestGenerator.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,396 +0,0 @@
-/**
- * *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%*
- */
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-/*
- * Modified by Landais Gabriel, Code Lutin 2008
- *
- * Works with standard org.w3c.dom XML classes
- *
- */
-
-package org.codelutin.util;
-
-import java.io.ByteArrayOutputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.io.UnsupportedEncodingException;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.SortedMap;
-import java.util.TreeMap;
-
-import org.w3c.dom.Attr;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.ProcessingInstruction;
-import org.w3c.dom.Text;
-
-/**
- * Helper class to provide the functionality of the digest value generation. This is an implementation of the DHASH
- * algorithm on .
- */
-public class DigestGenerator {
-
- /**
- * This method is an overloaded method for the digest generation for Document
- *
- * @param document
- * @param digestAlgorithm
- * @return Returns a byte array representing the calculated digest
- * @throws Exception
- */
- public byte[] getDigest(Document document, String digestAlgorithm)
- throws Exception {
- byte[] digest;
- try {
- MessageDigest md = MessageDigest.getInstance(digestAlgorithm);
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- DataOutputStream dos = new DataOutputStream(baos);
- dos.writeInt(9);
- Collection childNodes = getValidElements(document);
- dos.writeInt(childNodes.size());
- for (Object childNode : childNodes) {
- Node node = (Node) childNode;
- if (node.getNodeType() == Node.PROCESSING_INSTRUCTION_NODE) {
- dos.write(getDigest((ProcessingInstruction) node,
- digestAlgorithm));
- }
- else if (node.getNodeType() == Node.ELEMENT_NODE) {
- dos.write(getDigest((Element) node, digestAlgorithm));
- }
- }
- dos.close();
- md.update(baos.toByteArray());
- digest = md.digest();
- } catch (NoSuchAlgorithmException e) {
- throw new Exception(e);
- } catch (IOException e) {
- throw new Exception(e);
- }
- return digest;
- }
-
- /**
- * This method is an overloaded method for the digest generation for Node
- *
- * @param node
- * @param digestAlgorithm
- * @return Returns a byte array representing the calculated digest value
- * @throws Exception
- */
- public byte[] getDigest(Node node, String digestAlgorithm) throws Exception {
- if (node.getNodeType() == Node.ELEMENT_NODE) {
- return getDigest((Element) node, digestAlgorithm);
- }
- if (node.getNodeType() == Node.TEXT_NODE) {
- return getDigest((Text) node, digestAlgorithm);
- }
- if (node.getNodeType() == Node.PROCESSING_INSTRUCTION_NODE) {
- return getDigest((ProcessingInstruction) node, digestAlgorithm);
- }
- return new byte[0];
- }
-
- /**
- * This method is an overloaded method for the digest generation for Element
- *
- * @param element
- * @param digestAlgorithm
- * @return Returns a byte array representing the calculated digest value
- * @throws Exception
- */
- public byte[] getDigest(Element element, String digestAlgorithm)
- throws Exception {
- byte[] digest;
- try {
- MessageDigest md = MessageDigest.getInstance(digestAlgorithm);
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- DataOutputStream dos = new DataOutputStream(baos);
- dos.writeInt(1);
- dos.write(getExpandedName(element).getBytes("UnicodeBigUnmarked"));
- dos.write((byte) 0);
- dos.write((byte) 0);
- Collection attrs = getAttributesWithoutNS(element);
- dos.writeInt(attrs.size());
- for (Object attr : attrs) {
- dos.write(getDigest((Attr) attr, digestAlgorithm));
- }
- Node node = element.getFirstChild();
- // adjoining Texts are merged,
- // there is no 0-length Text, and
- // comment nodes are removed.
- int length = element.getChildNodes().getLength();
- dos.writeInt(length);
- while (node != null) {
- dos.write(getDigest(node, digestAlgorithm));
- node = node.getNextSibling();
- }
- dos.close();
- md.update(baos.toByteArray());
- digest = md.digest();
- } catch (NoSuchAlgorithmException e) {
- throw new Exception(e);
- } catch (IOException e) {
- throw new Exception(e);
- }
- return digest;
- }
-
- /**
- * This method is an overloaded method for the digest generation for ProcessingInstruction
- *
- * @param pi
- * @param digestAlgorithm
- * @return Returns a byte array representing the calculated digest value
- * @throws Exception
- */
- public byte[] getDigest(ProcessingInstruction pi, String digestAlgorithm)
- throws Exception {
- byte[] digest;
- try {
- MessageDigest md = MessageDigest.getInstance(digestAlgorithm);
- md.update((byte) 0);
- md.update((byte) 0);
- md.update((byte) 0);
- md.update((byte) 7);
- md.update(pi.getTarget().getBytes("UnicodeBigUnmarked"));
- md.update((byte) 0);
- md.update((byte) 0);
- md.update(pi.getNodeValue().getBytes("UnicodeBigUnmarked"));
- digest = md.digest();
- } catch (NoSuchAlgorithmException e) {
- throw new Exception(e);
- } catch (UnsupportedEncodingException e) {
- throw new Exception(e);
- }
- return digest;
- }
-
- /**
- * This method is an overloaded method for the digest generation for Attr
- *
- * @param attribute
- * @param digestAlgorithm
- * @return Returns a byte array representing the calculated digest value
- * @throws Exception
- */
- public byte[] getDigest(Attr attribute, String digestAlgorithm)
- throws Exception {
- byte[] digest = new byte[0];
- if (!(attribute.getLocalName().equals("xmlns") || attribute
- .getLocalName().startsWith("xmlns:"))) {
- try {
- MessageDigest md = MessageDigest.getInstance(digestAlgorithm);
- md.update((byte) 0);
- md.update((byte) 0);
- md.update((byte) 0);
- md.update((byte) 2);
- md.update(getExpandedName(attribute).getBytes(
- "UnicodeBigUnmarked"));
- md.update((byte) 0);
- md.update((byte) 0);
- md.update(attribute.getValue().getBytes("UnicodeBigUnmarked"));
- digest = md.digest();
- } catch (NoSuchAlgorithmException e) {
- throw new Exception(e);
- } catch (UnsupportedEncodingException e) {
- throw new Exception(e);
- }
- }
- return digest;
- }
-
- /**
- * This method is an overloaded method for the digest generation for Text
- *
- * @param text
- * @param digestAlgorithm
- * @return Returns a byte array representing the calculated digest value
- * @throws Exception
- */
- public byte[] getDigest(Text text, String digestAlgorithm) throws Exception {
- byte[] digest;
- try {
- MessageDigest md = MessageDigest.getInstance(digestAlgorithm);
- md.update((byte) 0);
- md.update((byte) 0);
- md.update((byte) 0);
- md.update((byte) 3);
- md.update(text.getTextContent().getBytes("UnicodeBigUnmarked"));
- digest = md.digest();
- } catch (NoSuchAlgorithmException e) {
- throw new Exception(e);
- } catch (UnsupportedEncodingException e) {
- throw new Exception(e);
- }
- return digest;
- }
-
- /**
- * This method is an overloaded method for getting the expanded name namespaceURI followed by the local name for
- * Element
- *
- * @param element
- * @return Returns the expanded name of Element
- */
- public String getExpandedName(Element element) {
- return element.getNamespaceURI() + ":" + element.getLocalName();
- }
-
- /**
- * This method is an overloaded method for getting the expanded name namespaceURI followed by the local name for
- * Attr
- *
- * @param attribute
- * @return Returns the expanded name of the Attr
- */
- public String getExpandedName(Attr attribute) {
- return attribute.getNamespaceURI() + ":" + attribute.getLocalName();
- }
-
- /**
- * Gets the collection of attributes which are none namespace declarations for an Element
- *
- * @param element
- * @return Returns the collection of attributes which are none namespace declarations
- */
- public Collection getAttributesWithoutNS(Element element) {
- SortedMap map = new TreeMap();
- for (int i = 0; i < element.getAttributes().getLength(); i++) {
- Attr attribute = (Attr) element.getAttributes().item(i);
- if (!(attribute.getLocalName().equals("xmlns") || attribute
- .getLocalName().startsWith("xmlns:"))) {
- map.put(getExpandedName(attribute), attribute);
- }
- }
- return map.values();
- }
-
- /**
- * Gets the valid element collection of an Document. Element and ProcessingInstruction only
- *
- * @param document
- * @return Returns a collection of ProcessingInstructions and Elements
- */
- public Collection getValidElements(Document document) {
- ArrayList list = new ArrayList();
- NodeList childNodes = document.getChildNodes();
- for (int i = 0; i < childNodes.getLength(); i++) {
- Node node = childNodes.item(i);
- if (node.getNodeType() == Node.ELEMENT_NODE
- || node.getNodeType() == Node.PROCESSING_INSTRUCTION_NODE) {
- list.add(node);
- }
- }
- return list;
- }
-
- /**
- * Gets the String representation of the byte array
- *
- * @param array
- * @return Returns the String of the byte
- */
- public String getStringRepresentation(byte[] array) {
- String str = "";
- for (byte anArray : array) {
- str += anArray;
- }
- return str;
- }
-
- /**
- * Compares two Nodes for the XML equality
- *
- * @param node
- * @param comparingNode
- * @param digestAlgorithm
- * @return Returns true if the Node XML contents are equal
- * @throws Exception
- */
- public boolean compareNode(Node node, Node comparingNode,
- String digestAlgorithm) throws Exception {
- return Arrays.equals(getDigest(node, digestAlgorithm), getDigest(
- comparingNode, digestAlgorithm));
- }
-
- /**
- * Compares two Documents for the XML equality
- *
- * @param document
- * @param comparingDocument
- * @param digestAlgorithm
- * @return Returns true if the Document XML content are equal
- * @throws Exception
- */
- public boolean compareDocument(Document document,
- Document comparingDocument, String digestAlgorithm)
- throws Exception {
- return Arrays.equals(getDigest(document, digestAlgorithm), getDigest(
- comparingDocument, digestAlgorithm));
- }
-
- /**
- * Compares two Attributes for the XML equality
- *
- * @param attribute
- * @param comparingAttribute
- * @param digestAlgorithm
- * @return Returns true if the Document XML content are equal
- * @throws Exception
- */
- public boolean compareAttribute(Attr attribute, Attr comparingAttribute,
- String digestAlgorithm) throws Exception {
- return Arrays.equals(getDigest(attribute, digestAlgorithm), getDigest(
- comparingAttribute, digestAlgorithm));
- }
-
- /** String representing the MD5 digest algorithm */
- public static final String md5DigestAlgorithm = "MD5";
-
- /** String representing the SHA digest algorithm */
- public static final String shaDigestAlgorithm = "SHA";
-
- /** String representing the SHA1 digest algorithm */
- public static final String sha1DigestAlgorithm = "SHA1";
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/EnumConverter.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/EnumConverter.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/EnumConverter.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,136 +0,0 @@
-/*
-* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-package org.codelutin.util;
-
-import org.apache.commons.beanutils.ConversionException;
-import org.apache.commons.beanutils.Converter;
-import static org.apache.commons.logging.LogFactory.getLog;
-import static org.codelutin.i18n.I18n._;
-
-import java.util.EnumSet;
-
-/**
- * classe pour convertir une chaine en un objet Enum type-safe en
- * connaissant le type d'enumération utilisée {@link #enumType}.
- * <p/>
- * Il est possible aussi de convertir une Enum à partir de sa valeur ordinal.
- * <p/>
- * Pour enregister un nouveau convertissemnt pour un type d'Enum utiliser les
- * méthodes * {@link ConverterUtil#registerEnumConverter(Class)},
- * et {@link ConverterUtil#registerEnumConverter(Class,Object)} .
- *
- * @author chemit
- * @see Enum
- * @see Enum#ordinal()
- */
-public class EnumConverter implements Converter {
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static org.apache.commons.logging.Log log = getLog(EnumConverter.class);
-
- /** valeur par default à utiliser, si pas non trouvée et {@link #useDefault} actif. */
- protected Object defaultValue;
-
- /** flag pour utiliser la valeur par defaut {@link #defaultValue} si non trouvé. */
- protected boolean useDefault;
-
- /** le type de l'énumération à convertir */
- protected Class<?> enumType;
-
- public Object convert(Class aClass, Object value) {
- if (value == null) {
- if (useDefault) {
- return defaultValue;
- }
- throw new ConversionException(_("lutinutil.error.convertor.noValue", this));
- }
- if (isEnabled(aClass, enumType)) {
- Object result;
- if (isEnabled(value.getClass(), enumType)) {
- result = value;
- return result;
- }
- if (value instanceof String) {
- try {
- result = valueOf(aClass, value);
- } catch (IllegalArgumentException e) {
- // try an ordinal conversion
- result = convertFromOrdinal(aClass, value);
- }
- return result;
- }
- if (value instanceof Integer) {
- // try a ordinal conversion
- result = convertFromOrdinal(aClass, value);
- return result;
- }
- }
- throw new ConversionException(_("lutinutil.error.no.convertor", aClass.getName(), value));
- }
-
- public EnumConverter(Class<?> enumType, Object defaultValue) {
- this.enumType = enumType;
- this.defaultValue = defaultValue;
- useDefault = defaultValue != null;
- if (log.isDebugEnabled()) {
- log.debug(toString() + '<' + enumType + '>');
- }
- }
-
- public EnumConverter(Class<?> enumType) {
- this(enumType, null);
- }
-
- protected static boolean isEnabled(Class aClass, Class<?> enumType) {
- return aClass != null && aClass.isEnum() && aClass == enumType;
- }
-
- protected Object convertFromOrdinal(Class aClass, Object value) {
- Object result = null;
- try {
- int ordinal = Integer.valueOf(value + "");
- EnumSet<?> vals = allOf(aClass);
- if (ordinal > -1 && ordinal < vals.size()) {
- for (Enum<?> val : vals) {
- if (val.ordinal() == ordinal) {
- result = val;
- break;
- }
- }
- }
- } catch (NumberFormatException e1) {
- // quiet conversion
- result = null;
- }
- return result;
- }
-
- @SuppressWarnings({"unchecked"})
- protected Object valueOf(Class aClass, Object value) {
- Object result;
- result = Enum.valueOf(aClass, (String) value);
- return result;
- }
-
- @SuppressWarnings({"unchecked"})
- protected EnumSet<?> allOf(Class aClass) {
- EnumSet<?> vals;
- vals = EnumSet.allOf(aClass);
- return vals;
- }
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/EnumEditor.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/EnumEditor.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/EnumEditor.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,51 +0,0 @@
-/*
-* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-package org.codelutin.util;
-
-import static org.codelutin.util.CollectionUtil.toGenericSet;
-
-import javax.swing.JComboBox;
-import java.util.EnumSet;
-
-/**
- * Une éditeur d'enum.
- *
- * @author chemit
- */
-public class EnumEditor extends JComboBox {
-
- /** serialVersionUID */
- private static final long serialVersionUID = 2693771553067104538L;
-
- protected Class<? extends Enum<?>> type;
-
- public static EnumEditor newEditor(Class<?> type) {
- return new EnumEditor(type);
- }
-
- public EnumEditor(Class<?> type) {
- super(buildModel(type));
- }
-
- protected static Object[] buildModel(Class<?> type) {
- Class<Enum> enumClass = ReflectUtil.getEnumClass(type);
- EnumSet result = EnumSet.allOf(enumClass);
- return toGenericSet(result, Object.class).toArray(new Object[result.size()]);
- }
-
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ExceptionUtil.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ExceptionUtil.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ExceptionUtil.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,48 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
-* ExceptionUtil.java
-*
-* Created: Thu Aug 29 2002
-*
-* @author <poussin(a)codelutin.com>
-* Copyright Code Lutin
-* @version $Revision$
-*
-* Mise a jour: $Date$
-* par : $Author$
-*/
-
-package org.codelutin.util;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
-public class ExceptionUtil{ // ExceptionUtil
-
- protected ExceptionUtil() {
-
- }
-
- static public String stackTrace(Throwable eee){
- StringWriter result = new StringWriter();
- eee.printStackTrace(new PrintWriter(result));
- return result.toString();
- }
-
-} // ExceptionUtil
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/FileCompletion.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/FileCompletion.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/FileCompletion.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,258 +0,0 @@
-/*
- * *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%*
- */
-
-package org.codelutin.util;
-
-import org.codelutin.i18n.I18n;
-import static org.codelutin.i18n.I18n._;
-
-import java.io.Console;
-import java.io.File;
-import java.io.FilenameFilter;
-import java.io.IOException;
-import java.util.Locale;
-
-/**
- * <p>
- * Class d'aide a la saisie de chemin de fichier
- * </p>
- * <p>
- * Integration :
- * </p>
- * <pre>
- * (le 1er argument definit si l'on peut creer un fichier (ex : pour enregistrer))
- * (le 2eme definit si la sorti est possible sans saisir un fichier)
- * FileCompletion fc = new FileCompletion(true,true);
- * if (fc.consoleAvailable())
- * System.out.print(fc.read());
- * </pre>
- * <p>
- * Utilisation :
- * </p>
- * <p>
- * ".." pour annuler ou pour revenir au repertoire précédent
- * </p>
- * <p>
- * Entrer pour afficher la liste des fichiers, ou pour compléter le chemin
- * </p>
- * <p>
- * Entrer pour afficher la liste des fichiers, ou pour compléter le chemin
- * </p>
- * Saisir "!s" a la fin du nom de fichier pour l'enregistrer (si l'option est active)
- * <p>
- * </p>
- * Saisir "!q" pour quitter et renvoyer null (si l'option est active)
- * <p>
- * Limitation :
- * </p>
- * <p>
- * FIXME: Si l'enregistrement est active, enregistrer un fichier finissant par "!s" est impossible
- * </p>
- * <p>
- * FIXME: Ouvrir un fichier finissant par ".." l'est égualement
- * </p>
- * <p>
- * FIXME: Si la sortie est ecive, un fichier "!q" ne peut pas etre utilise
- * </p>
- *
- * @author Letellier Sylvain
- */
-public class FileCompletion {
- private boolean exit;
- private boolean creation;
- private boolean consoleAvailable;
-
- private Console console;
-
- /**
- * Constructeur
- *
- * @param creation TODO
- * @param exit TODO
- */
- public FileCompletion(boolean creation, boolean exit) {
- this.exit = exit;
- this.creation = creation;
-
- // TODO does this util class init i18n ?
- if (Locale.getDefault().getLanguage().equals("fr")) {
- I18n.init("fr", "FR");
- }
- else {
- I18n.init("en", "US");
- }
-
- console = System.console();
- consoleAvailable = (console != null);
- }
-
- /**
- * demande a l'utilisateur de saisir un chemin
- *
- * @return TODO
- * @throws IOException TODO
- */
- public String read() throws IOException {
- if (creation) {
- System.out.println(_("lutinutil.fileCompletion.save"));
- }
- if (exit) {
- System.out.println(_("lutinutil.fileCompletion.exit"));
- }
- System.out.println(_("lutinutil.fileCompletion.cancel"));
- System.out.println(_("lutinutil.fileCompletion.enter"));
- String line = System.getProperty("user.dir");
- File f;
- line = line + readLine("> " + line + File.separator);
- f = new File(line);
- String moreLastLine = line;
- boolean isDirectory = true;
- do {
- if (f.isDirectory() || !f.exists()) {
- String lastLine = line;
- if (!f.exists() && !f.isDirectory()) {
- File fTmp = f.getParentFile();
- String file = f.getName();
- if (file.matches("^.*\\!s$") && creation)
- return f.getCanonicalPath().substring(0,
- f.getCanonicalPath().length() - 2);
- if (file.matches("^.*\\!q$") && exit)
- return null;
- if (file.matches("^.*\\.\\.$"))
- line = fTmp.getCanonicalPath();
- else {
- Filter filtre = new Filter();
- filtre.setFilter(file);
- String[] listFichier = fTmp.list(filtre);
- if (listFichier.length == 1) {
- if (!(fTmp.getParentFile() == null)) {
- line = fTmp.getCanonicalPath() + File.separator
- + listFichier[0];
- }
- else {
- line = fTmp.getCanonicalPath() + listFichier[0];
- }
- } else if (listFichier.length > 1) {
- afficherListe(listFichier);
- } else {
- line = moreLastLine;
- }
-
- }
- } else if (f.exists() && f.isDirectory()
- && !(f.getParentFile() == null)) {
- Filter filtre = new Filter();
- filtre.setFilter(f.getName());
- String[] listFichier = f.getParentFile().list(filtre);
- if (listFichier.length <= 1
- || line.charAt(line.length() - 1) == File.separatorChar) {
-
- line = f.getCanonicalPath();
- isDirectory = true;
- } else if (listFichier.length > 1) {
- isDirectory = false;
- afficherListe(listFichier);
- }
-
- }
- moreLastLine = line;
- f = new File(line);
- if (f.isDirectory() && isDirectory
- && !(line.charAt(line.length() - 1) == File.separatorChar))
- line = line + File.separator;
- String read = readLine("> " + line);
- line = line + read;
- f = new File(line);
- if (read.equals("") || read.equals(File.separator))
- afficherListe(f.list());
-
- if (line.matches(".* " + File.separator + ".*")
- || line.matches(".*" + File.separator + " .*"))
- line = lastLine;
- f = new File(line);
- }
- } while (!f.exists() || f.isDirectory());
- return line;
- }
-
- /** Filtre les fichiers a afficher */
- class Filter implements FilenameFilter {
- private String filtre;
-
- /**
- * @param dir TODO
- * @param name TODO
- * @return boolean
- */
- public boolean accept(File dir, String name) {
- return name.startsWith(filtre);
- }
-
- /**
- * le parametre est le debut des noms de fichiers a afficher
- *
- * @param s TODO
- */
- public void setFilter(String s) {
- filtre = s;
- }
- }
-
- /**
- * @param path TODO
- * @return String
- */
- private String readLine(String path) {
- String lineNonNull = null;
- while (lineNonNull == null)
- lineNonNull = console.readLine(path);
- return lineNonNull;
- }
-
- /** @return boolean */
- public boolean consoleAvailable() {
- return consoleAvailable;
- }
-
- /** @param listefichiers TODO */
- private void afficherListe(String[] listefichiers) {
- if (listefichiers != null) {
- int i = 0;
- int nomMax = 0;
- for (String l : listefichiers)
- nomMax = Math.max(nomMax, l.length());
- // System.out.println();
- for (String l : listefichiers) {
- String space = "";
- int nbSpace = (nomMax + 1) - l.length();
- for (int j = 0; j < nbSpace; j++) {
- space += " ";
- }
- if (i++ < 2)
- System.out.print(l + space);
- else {
- i = 0;
- System.out.println(l);
- }
- }
- System.out.println();
- }
- }
-}
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/FileUtil.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/FileUtil.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/FileUtil.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,903 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * FileUtil.java
- *
- * Created: 22 nov. 2004
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-
-package org.codelutin.util;
-
-import org.apache.commons.logging.LogFactory;
-
-import javax.swing.JFileChooser;
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.nio.channels.FileChannel;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.LinkedList;
-import java.util.List;
-
-public class FileUtil { // FileUtil
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static private org.apache.commons.logging.Log log = LogFactory.getLog(FileUtil.class);
-
- /** Encoding par defaut utilisé si non spécifié */
- static public String ENCODING = "ISO-8859-1";
- static protected File currentDirectory = new File(".");
-
- static public void setCurrentDirectory(File dir) {
- currentDirectory = dir;
- }
-
- static public File getCurrentDirectory() {
- return currentDirectory;
- }
-
- static public class PatternChooserFilter extends javax.swing.filechooser.FileFilter {
- protected String pattern = null;
- protected String description = null;
-
- public PatternChooserFilter(String pattern, String description) {
- this.pattern = pattern;
- this.description = description;
- }
-
- @Override
- public boolean accept(File f) {
- return f.isDirectory() || f.getAbsolutePath().matches(pattern);
- }
-
- @Override
- public String getDescription() {
- return description;
- }
-
- }
-
-
- /**
- * Retourne le nom du fichier entre dans la boite de dialogue.
- * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne null.
- *
- * @param patternOrDescriptionFilters les filtres a utiliser, les chaines doivent etre données
- * par deux, le pattern du filtre + la description du filtre
- * @return le fichier accepté, ou null si rien n'est chois ou l'utilisateur a annulé
- * @see #getFile(javax.swing.filechooser.FileFilter[])
- */
- static public File getFile(String... patternOrDescriptionFilters) {
- File result;
- result = getFile(null, patternOrDescriptionFilters);
- return result;
- }
-
- /**
- * Retourne le nom du fichier entre dans la boite de dialogue.
- * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne null.
- *
- * @param filters les filtres a ajouter
- * @return le fichier accepté, ou null si rien n'est chois ou l'utilisateur a annulé
- */
- static public File getFile(javax.swing.filechooser.FileFilter... filters) {
- File result = getFile(null, filters);
- return result;
- }
-
- /**
- * Retourne le nom du fichier entre dans la boite de dialogue.
- * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne null.
- *
- * @param parent le component parent du dialog
- * @param patternOrDescriptionFilters les filtres a utiliser, les chaines doivent etre données
- * par deux, le pattern du filtre + la description du filtre
- * @return le fichier accepté, ou null si rien n'est chois ou l'utilisateur a annulé
- * @see #getFile(javax.swing.filechooser.FileFilter[])
- */
- static public File getFile(java.awt.Component parent, String... patternOrDescriptionFilters) {
- File result;
- result = getFile("Ok", "Ok", parent, patternOrDescriptionFilters);
- return result;
- }
-
- /**
- * Retourne le nom du fichier entre dans la boite de dialogue.
- * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne null.
- *
- * @param title le titre de la boite de dialogue
- * @param approvalText le label du boutton d'acceptation
- * @param parent le component parent du dialog
- * @param patternOrDescriptionFilters les filtres a utiliser, les chaines doivent etre données
- * par deux, le pattern du filtre + la description du filtre
- * @return le fichier accepté, ou null si rien n'est chois ou l'utilisateur a annulé
- * @see #getFile(javax.swing.filechooser.FileFilter[])
- */
- static public File getFile(String title, String approvalText,java.awt.Component parent, String... patternOrDescriptionFilters) {
-
- if (patternOrDescriptionFilters.length % 2 != 0) {
- throw new IllegalArgumentException("Arguments must be (pattern, description) couple");
- }
- javax.swing.filechooser.FileFilter[] filters = new javax.swing.filechooser.FileFilter[patternOrDescriptionFilters.length / 2];
- for (int i = 0; i < filters.length; i++) {
- String pattern = patternOrDescriptionFilters[i * 2];
- String description = patternOrDescriptionFilters[i * 2 + 1];
- filters[i] = new PatternChooserFilter(pattern, description);
- }
- File result;
- result = getFile(title, approvalText, parent, filters);
- return result;
- }
-
-
- /**
- * Retourne le nom du fichier entre dans la boite de dialogue.
- * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne null.
- *
- * @param parent le component parent du dialog
- * @param filters les filtres a ajouter
- * @return le fichier accepté, ou null si rien n'est chois ou l'utilisateur a annulé
- */
- static public File getFile(java.awt.Component parent, javax.swing.filechooser.FileFilter... filters) {
- File result = getFile("Ok", "Ok", parent, filters);
- return result;
- }
-
- /**
- * Retourne le nom du fichier entre dans la boite de dialogue.
- * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne null.
- *
- * @param title le titre de la boite de dialogue
- * @param approvalText le label du boutton d'acceptation
- * @param parent le component parent du dialog
- * @param filters les filtres a ajouter
- * @return le fichier accepté, ou null si rien n'est chois ou l'utilisateur a annulé
- */
- static public File getFile(String title, String approvalText, java.awt.Component parent, javax.swing.filechooser.FileFilter... filters) {
- try {
- JFileChooser chooser = new JFileChooser(currentDirectory);
-
- chooser.setDialogType(JFileChooser.CUSTOM_DIALOG);
- if (filters.length > 0) {
- if (filters.length == 1) {
- chooser.setFileFilter(filters[0]);
- } else {
- for (javax.swing.filechooser.FileFilter filter : filters) {
- chooser.addChoosableFileFilter(filter);
- }
- }
- }
- chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
- chooser.setDialogTitle(title);
- int returnVal = chooser.showDialog(parent, approvalText);
- if (returnVal == JFileChooser.APPROVE_OPTION) {
- File theFile = chooser.getSelectedFile();
- if (theFile != null) {
- currentDirectory = theFile;
- return theFile.getAbsoluteFile();
- }
- }
- }
- catch (Exception eee) {
- log.warn("Erreur:", eee);
- }
- return null;
- }
-
- /**
- * @return le nom du repertoire entre dans la boite de dialogue.
- * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne
- * null.
- */
- static public String getDirectory() {
- return getDirectory(null,"Ok", "Ok");
- }
-
- /**
- * @param title le nom de la boite de dialogue
- * @param approvalText le texte de l'action d'acceptation du répertoire dans le file chooser
- * @return le nom du repertoire entre dans la boite de dialogue.
- * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne
- * null.
- */
- static public String getDirectory(String title, String approvalText) {
- String result = getDirectory(null, title, approvalText);
- return result;
- }
-
- /**
- * @param parent le component parent du dialog
- * @param title le nom de la boite de dialogue
- * @param approvalText le texte de l'action d'acceptation du répertoire dans le file chooser
- * @return le nom du repertoire entre dans la boite de dialogue.
- * Si le bouton annuler est utilisé, ou qu'il y a une erreur retourne
- * null.
- */
- static public String getDirectory(java.awt.Component parent, String title, String approvalText) {
- try {
- JFileChooser chooser = new JFileChooser(currentDirectory);
- chooser.setDialogType(JFileChooser.CUSTOM_DIALOG);
- chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
- chooser.setDialogTitle(title);
- int returnVal = chooser.showDialog(parent, approvalText);
- if (returnVal == JFileChooser.APPROVE_OPTION) {
- File theFile = chooser.getSelectedFile();
- if (theFile != null) {
- currentDirectory = theFile;
- if (theFile.isDirectory()) {
- return theFile.getAbsolutePath();
- }
- }
- } else {
- return null;
- }
- } catch (Exception eee) {
- log.warn("Erreur:", eee);
- }
- return null;
- }
-
- /**
- * Permet de convertir un fichier en un tableau de byte
- *
- * @param file le fichier source à convertire
- * @return le contenu du fichier sous la forme d'un tableau de bytes.
- * @throws IOException if any io pb
- */
- static public byte[] fileToByte(File file) throws IOException {
- InputStream in = new BufferedInputStream(new FileInputStream(file));
- ByteArrayOutputStream result = new ByteArrayOutputStream();
- BufferedOutputStream tmp = new BufferedOutputStream(result);
- for (int b = in.read(); b != -1; b = in.read()) {
- tmp.write(b);
- }
- in.close();
- tmp.close();
-
- return result.toByteArray();
- }
-
- /**
- * Permet de recopier un stream dans un fichier
- *
- * @param src the incoming stream to grab
- * @param dst the dst file
- * @return the file filled by incoming input stream
- * @throws IOException if any io pb
- * @throws NullPointerException if src or dst parameter is null
- */
- static public File inputStreamToFile(InputStream src, File dst) throws IOException, NullPointerException {
- if (src == null) {
- throw new NullPointerException("parameter 'src' can not be null");
- }
- if (dst == null) {
- throw new NullPointerException("parameter 'dst' can not be null");
- }
-
- ByteArrayOutputStream result = new ByteArrayOutputStream();
- BufferedOutputStream tmp = new BufferedOutputStream(result);
- for (int b = src.read(); b != -1; b = src.read()) {
- tmp.write(b);
- }
- src.close();
- tmp.close();
- byteToFile(result.toByteArray(), dst);
- return dst;
- }
-
- /**
- * Permet de convertir des bytes en fichier, le fichier sera automatiquement
- * supprimé a la fin de la JVM.
- *
- * @param bytes the array of bytes to copy in dstination file
- * @return le fichier temporaire contenant les bytes
- * @throws IOException if any io pb
- */
- static public File byteToFile(byte[] bytes) throws IOException {
- File file = File.createTempFile("FileUtil-byteToFile", ".tmp");
- byteToFile(bytes, file);
- return file;
- }
-
- /**
- * Permet de convertir des bytes en fichier
- *
- * @param bytes the array of bytes to put in the given destination file
- * @param file le fichier dans lequel il faut ecrire les bytes
- * @return le fichier passé en parametre
- * @throws IOException if any io pb
- */
- static public File byteToFile(byte[] bytes, File file) throws IOException {
- OutputStream out = new BufferedOutputStream(new FileOutputStream(file));
- out.write(bytes);
- out.close();
- return file;
- }
-
- /**
- * Retourne un Reader utilisant l'encoding par defaut {@link #ENCODING}
- *
- * @param file the given reader
- * @return the reader on the given file
- * @throws IOException if any io pb
- */
- static public BufferedReader getReader(File file) throws IOException {
- return getReader(file, ENCODING);
- }
-
- /**
- * Retourne un reader utilisant l'encoding choisi et placé dans un
- * BufferedReader
- *
- * @param file the given file
- * @param encoding (ISO-8859-1, UTF-8, ...)
- * @return the buffered reader in the given encoding
- * @throws IOException if any io pb
- */
- static public BufferedReader getReader(File file, String encoding) throws IOException {
- FileInputStream inf = new FileInputStream(file);
- InputStreamReader in = new InputStreamReader(inf, encoding);
-// FileReader in = new FileReader(file);
- BufferedReader result = new BufferedReader(in);
- return result;
- }
-
- /**
- * Retourne un Writer utilisant l'encoding par defaut {@link #ENCODING}
- *
- * @param file the given file
- * @return the writer on the given file
- * @throws IOException if any io pb
- */
- static public BufferedWriter getWriter(File file) throws IOException {
- return getWriter(file, ENCODING);
- }
-
- /**
- * Retourne un writer utilisant l'encoding choisi et placé dans un
- * BufferedWriter
- *
- * @param file the given file
- * @param encoding (ISO-8859-1, UTF-8, ...)
- * @return the buffered writer on the given file with given encoding
- * @throws IOException if any io pb
- */
- static public BufferedWriter getWriter(File file, String encoding) throws IOException {
- FileOutputStream outf = new FileOutputStream(file);
- OutputStreamWriter out = new OutputStreamWriter(outf, encoding);
-// FileWriter out = new FileWriter(file);
- BufferedWriter result = new BufferedWriter(out);
- return result;
- }
-
-
- /**
- * Permet de creer un nouveu repertoire temporaire, l'effacement du
- * répertoire est a la charge de l'appelant
- *
- * @param prefix le prefix du fichier
- * @param suffix le suffix du fichier
- * @param tmpdir le répertoire temporaire ou il faut creer le repertoire
- * si null on utilise java.io.tmpdir
- * @return le fichier pointant sur le nouveau repertoire
- * @throws java.io.IOException if any io pb
- */
- static public File createTempDirectory(String prefix, String suffix, File tmpdir) throws IOException {
- if (tmpdir == null) {
- tmpdir = new File(System.getProperty("java.io.tmpdir"));
- }
- File result = new File(tmpdir, prefix + System.currentTimeMillis() + suffix);
- while (result.exists()) {
- result = new File(tmpdir, prefix + System.currentTimeMillis() + suffix);
- }
- if (!result.mkdirs()) {
- throw new IOException("Can't create temporary directory: " + result);
- }
- return result;
- }
-
- /**
- * Permet de creer un nouveu repertoire temporaire, l'effacement du
- * répertoire est a la charge de l'appelant
- *
- * @param prefix le prefix du repertoire a creer
- * @param suffix le suffix du repertoire a creer.
- * @return the temprary created file
- * @throws java.io.IOException if any io pb
- */
- static public File createTempDirectory(String prefix, String suffix) throws IOException {
- return createTempDirectory(prefix, suffix, null);
- }
-
- /**
- * Regarde si le fichier f1 est plus recent que le fichier f2
- *
- * @param f1 the first file
- * @param f2 the second file
- * @return vrai si f1 est plus recent que f2
- */
- static public boolean isNewer(File f1, File f2) {
- boolean result = f1.lastModified() > f2.lastModified();
- return result;
- }
-
- /**
- * Permet de lire un fichier et de retourner sont contenu sous forme d'une
- * chaine de carateres
- *
- * @param file le fichier a lire
- * @return le contenu du fichier
- * @throws IOException if any io pb
- */
- static public String readAsString(File file) throws IOException {
- StringBuffer result = new StringBuffer();
- char[] cbuf = new char[2000];
- BufferedReader in = getReader(file);
- int nb = in.read(cbuf);
- while (nb != -1) {
- result.append(cbuf, 0, nb);
- nb = in.read(cbuf);
- }
- in.close();
- return result.toString();
- }
-
- /**
- * Permet de sauver une chaine directement dans un fichier
- *
- * @param file Le fichier dans lequel il faut ecrire la chaine
- * @param content Le texte a ecrire dans le fichier
- * @throws IOException if any pb while writing
- */
- static public void writeString(File file, String content) throws IOException {
- //fixme on doit tester le retour de la méthode, car il se peut que le répertoire
- // ne puisse être crée.
- file.getParentFile().mkdirs();
- BufferedWriter out = getWriter(file);
- out.write(content);
- out.close();
- }
-
- /**
- * Permet de sauver une chaine directement dans un fichier
- *
- * @param file Le fichier dans lequel il faut ecrire la chaine
- * @param content Le texte a ecrire dans le fichier
- * @param encoding encoding to use
- * @throws IOException if any pb while writing
- */
- static public void writeString(File file, String content, String encoding) throws IOException {
- //fixme on doit tester le retour de la méthode, car il se peut que le répertoire
- // ne puisse être crée.
- file.getParentFile().mkdirs();
- BufferedWriter out = getWriter(file, encoding);
- out.write(content);
- out.close();
- }
-
- /**
- * Permet de donner une representation fichier pour une chaine de caractere.
- * Le fichier sera automatiquement effacé à la fin de la JVM.
- *
- * @param content le contenu du fichier temporaire
- * @return le fichier qui contient content
- * @throws IOException if any io pb
- */
- static public File getTempFile(String content) throws IOException {
- return getTempFile(content, "");
- }
-
- /**
- * Permet de donner une representation fichier pour une chaine de caractere.
- * Le fichier sera automatiquement effacé à la fin de la JVM.
- *
- * @param content le contenu du fichier temporaire
- * @param fileSuffix l'extension du fichier créé
- * @return le fichier qui contient content
- * @throws IOException if any io pb
- */
- static public File getTempFile(String content, String fileSuffix) throws IOException {
- File result = File.createTempFile("tmp-" + FileUtil.class.getName(), fileSuffix);
- result.deleteOnExit();
- writeString(result, content);
- return result;
- }
-
- /**
- * Equivalent de la methode basename unix.
- * basename("/tmp/toto.xml", ".xml") -> "toto"
- *
- * @param file le fichier dont on souhaite le nom sans le chemin
- * @param suffixes si present represente le suffixe a eliminer du fichier
- * s'il est trouvé
- * @return le nom du fichier sans le suffixe si trouvé.
- */
- static public String basename(File file, String... suffixes) {
- String result = file.getName();
- for (String suffixe : suffixes) {
- if (result.endsWith(suffixe)) {
- result = result.substring(0, result.length() - suffixe.length());
- break;
- }
- }
- return result;
- }
-
- /**
- * Permet de récupérer l'extension d'un fichier
- *
- * @param file le fichier dont on souhaite l'extension
- * @param extchars la liste des caracteres pouvant former l'extension
- * dans l'ordre de preference. Si vide on utilise ".".
- * @return l'extension ou la chaine vide si le fichier n'a pas d'extension
- * l'extension ne contient pas le chaine de delimitation
- */
- static public String extension(File file, String... extchars) {
- String result = "";
- String name = file.getName();
-
- if (extchars.length == 0) {
- extchars = new String[]{"."};
- }
- for (String extchar : extchars) {
- int pos = name.lastIndexOf(extchar);
- if (pos != -1) {
- result = name.substring(pos + extchar.length());
- break;
- }
- }
- return result;
- }
-
- static public interface FileAction {
- public boolean doAction(File f);
- }
-
- /**
- * Retourne tous les sous répertoires du répertoire passé en argument.
- *
- * @param directory un répertoire
- * @return une liste d'objet {@link File} de répertoires et ceci
- * recursivement à partir de directory, si directory
- * n'est pas un répertoire la liste est vide.
- */
- public static List<File> getSubDirectories(File directory) {
- class DirectoryFilter implements FileFilter {
- public boolean accept(File f) {
- return f.isDirectory();
- }
- }
- return getFilteredElements(directory, new DirectoryFilter(), true);
- }
-
- /**
- * Retourne tous les fichiers du répertoire passé en argument.
- *
- * @param directory un répertoire
- * @return une liste d'objet {@link File} des fichiers et ceci
- * recursivement à partir de directory, si directory n'est pas un
- * répertoire la liste est vide
- */
- public static List<File> getFiles(File directory) {
- class NormalFileFilter implements FileFilter {
- public boolean accept(File f) {
- return f.isFile();
- }
- }
- return getFilteredElements(directory, new NormalFileFilter(), true);
- }
-
- /**
- * Retourne les fichiers d'un répertoire qui s'attisfont un certain pattern.
- * La recherche est faite récursivement dans les sous répertoires
- *
- * @param directory le répertoire à partir duquel il faut faire la recherche
- * @param pattern le pattern que doit respecter le fichier pour être dans la
- * liste résultante
- * @param recursively flag pour indiquer si on doit descendre dans les sous répertoires
- * @return une liste d'objet {@link File} qui ont s'attisfait le
- * pattern.
- */
- public static List<File> find(File directory, final String pattern, boolean recursively) {
- final String root = directory.getAbsolutePath();
- final int rootLength = root.length();
-
- return getFilteredElements(directory, new FileFilter() {
- public boolean accept(File f) {
- String longFilename = f.getAbsolutePath();
- // + 1 to remove the first / or \
- String filename = longFilename.substring(rootLength + 1);
- return filename.matches(pattern);
- }
- }, recursively);
- }
-
- /**
- * Retourne la liste de toutes les fichiers ou répertoire qui s'attisfont
- * le filtre
- *
- * @param directory repertoire à partir duquel il faut faire la recherche
- * @param ff le filtre à appliquer pour savoir si le fichier parcouru doit
- * être conservé dans les résultats, ou null pour tous les fichiers
- * @param recursively un flag pour indiquer si on doit descendre dans les répertoires
- * @return une liste d'objet {@link File}, qui s'attisfont le filtre
- */
- public static List<File> getFilteredElements(File directory, FileFilter ff, boolean recursively) {
- ArrayList<File> result = new ArrayList<File>();
- LinkedList<File> todo = new LinkedList<File>();
- if (directory.isDirectory()) {
- todo.addAll(Arrays.asList(directory.listFiles()));
- }
- while (todo.size() > 0) {
- File file = todo.removeFirst();
- if (recursively && file.isDirectory()) {
- File[] childs = file.listFiles();
- if (childs != null) { // null if we don't have access to directory
- todo.addAll(Arrays.asList(childs));
- }
- }
- if (ff == null || ff.accept(file)) {
- result.add(file);
- }
- }
- return result;
- }
-
- /**
- * Supprime recursivement tout le contenu d'un répertoire.
- *
- * @param directory le chemin du répertoire à supprimer
- * @return vrai si tout se passe bien, false si la suppression d'un élement
- * se passe mal
- */
- public static boolean deleteRecursively(String directory) {
- return deleteRecursively(new File(directory));
- }
-
- /**
- * Supprime recursivement tout le contenu d'un répertoire.
- *
- * @param directory le répertoire à supprimer
- * @return vrai si tout se passe bien, false si la suppression d'un élement
- * se passe mal
- */
- public static boolean deleteRecursively(File directory) {
- return walkBefore(directory, new FileAction() {
- public boolean doAction(File f) {
- return f.delete();
- }
- });
- }
-
- /**
- * Permet de faire une action avant le parcours des fichiers, c-a-d que
- * l'on fera l'action sur les fichiers contenu dans un répertoire
- * après l'action sur le répertoire lui même.
- *
- * @param f le fichier ou répertoire à partir duquel il faut commencer
- * @param fileAction l'action à effectuer sur chaque fichier
- * @return le résultat des fileAction executé sur les fichiers, chaque
- * résultat de FileAction sont assemblé par un ET logique pour donner
- * le résultat final
- */
- public static boolean walkAfter(File f, FileAction fileAction) {
- boolean result = fileAction.doAction(f);
- if (f.isDirectory()) {
- File list[] = f.listFiles();
- for (File aList : list) {
- result = result && walkAfter(aList, fileAction);
- }
- }
- return result;
- }
-
- /**
- * Permet de faire une action apès le parcours des fichiers, c-a-d que
- * l'on fera l'action sur les fichiers contenu dans un répertoire
- * avant l'action sur le répertoire lui même.
- *
- * @param f le fichier ou répertoire à partir duquel il faut commencer
- * @param fileAction l'action à effectuer sur chaque fichier
- * @return le résultat des fileAction executé sur les fichiers, chaque
- * résultat de FileAction sont assemblé par un ET logique pour donner
- * le résultat final
- */
- public static boolean walkBefore(File f, FileAction fileAction) {
- boolean result = true;
- if (f.isDirectory()) {
- File list[] = f.listFiles();
- for (File aList : list) {
- result = result && walkBefore(aList, fileAction);
- }
- }
- return result && fileAction.doAction(f);
- }
-
- /**
- * Permet de copier le fichier source vers le fichier cible.
- *
- * @param source le fichier source
- * @param target le fichier cible
- * @throws IOException Erreur de copie
- */
- public static void copy(File source, File target) throws IOException {
- //fixme on doit tester le retour de la méthode, car il se peut que le répertoire
- // ne puisse être copié.
- target.getParentFile().mkdirs();
- FileChannel sourceChannel = new FileInputStream(source).getChannel();
- FileChannel targetChannel = new FileOutputStream(target).getChannel();
- sourceChannel.transferTo(0, sourceChannel.size(), targetChannel);
- // or
- // targetChannel.transferFrom(sourceChannel, 0, sourceChannel.size());
- sourceChannel.close();
- targetChannel.close();
- }
-
- /**
- * Permet de copier le fichier source vers le fichier cible.
- *
- * @param source le fichier source
- * @param target le fichier cible
- * @throws IOException Erreur de copie
- */
- public static void copy(String source, String target) throws IOException {
- copy(new File(source), new File(target));
- }
-
- /**
- * Copie recursivement le repertoire source dans le repertoire destination
- * <p/>
- * copyRecursively("/truc/titi", "/var/tmp") donnera le repertoire
- * "/var/tmp/titi"
- *
- * @param srcDir le répertoire source à copier
- * @param destDir le répertoire destination où copier
- * @param includePatterns les patterns que doivent resperter les
- * fichiers/repertoires pour etre copié. Si vide alors tout est copié
- * @throws IOException if any io pb
- */
- static public void copyRecursively(File srcDir, File destDir, String... includePatterns) throws IOException {
- copyAndRenameRecursively(srcDir, destDir, null, null, includePatterns);
- }
-
- /**
- * Copie recursivement le repertoire source dans le repertoire destination
- * <p/>
- * copyRecursively("/truc/titi", "/var/tmp", "bidulle") donnera le repertoire
- * "/var/tmp/bidulle", 'bidulle' remplacant 'titi'
- *
- * @param srcDir le répertoire source à copier
- * @param destDir le répertoire destination où copier
- * @param renameFrom pattern to permit rename file before uncompress it
- * @param renameTo new name for file if renameFrom is applicable to it
- * you can use $1, $2, ... if you have '(' ')' in renameFrom
- * @param includePatterns les patterns que doivent resperter les
- * fichiers/repertoires pour etre copié. Si vide alors tout est copié
- * @throws IOException if any io pb
- */
- static public void copyAndRenameRecursively(File srcDir, File destDir,
- String renameFrom, String renameTo, String... includePatterns) throws IOException {
- copyAndRenameRecursively(srcDir, destDir, true, renameFrom, renameTo, false, includePatterns);
- }
-
- /**
- * Copie recursivement le repertoire source dans le repertoire destination
- * <p/>
- * copyRecursively("/truc/titi", "/var/tmp", "bidulle") donnera le repertoire
- * "/var/tmp/bidulle", 'bidulle' remplacant 'titi'
- *
- * @param srcDir le répertoire source à copier
- * @param destDir le répertoire destination où copier
- * @param includeSrcDir si vrai alors le repertoire source est copie dans le
- * repertoire destination et non pas seulement les fichiers qu'il contient
- * @param renameFrom pattern to permit rename file before uncompress it
- * @param renameTo new name for file if renameFrom is applicable to it
- * you can use $1, $2, ... if you have '(' ')' in renameFrom
- * @param exclude inverse include pattern interpretation
- * @param includePatterns les patterns que doivent resperter les
- * fichiers/repertoires pour etre copié. Si vide alors tout est copié
- * @throws IOException if any io pb
- */
- static public void copyAndRenameRecursively(File srcDir, File destDir,
- boolean includeSrcDir, String renameFrom, String renameTo, boolean exclude,
- String... includePatterns) throws IOException {
- String rootSrc;
- if (includeSrcDir) {
- rootSrc = srcDir.getParent();
- } else {
- rootSrc = srcDir.getPath();
- }
- List<File> files = getFilteredElements(srcDir, null, true);
- log.debug("copyRecursively: " + files);
- for (File file : files) {
- boolean doCopy = copyRecursivelyAccept(file, includePatterns);
- if (xor(exclude, doCopy)) {
- String path = file.getPath().substring(rootSrc.length());
- if (renameFrom != null && renameTo != null) {
- String tmp = path.replaceAll(renameFrom, renameTo);
- if (log.isDebugEnabled()) {
- log.debug("rename " + path + " -> " + tmp);
- }
- path = tmp;
- }
-
- File destFile = new File(destDir, path);
- if (file.isDirectory()) {
- log.debug("create directory: " + destFile);
- //fixme on doit tester le retour de la méthode, car il se peut que le répertoire
- // ne puisse être copié.
- destFile.mkdirs();
- } else {
- log.debug("copy " + path + " to " + destFile);
- copy(file, destFile);
- }
- }
- }
- }
-
- /**
- * @param b first operande
- * @param c seconde operande
- * @return b^c
- * @deprecated Y'a un opérateur java qui fait ca très bien :) il s'agit de ^
- */
- static private boolean xor(boolean b, boolean c) {
- if (b) {
- return !c;
- } else {
- return c;
- }
- }
-
- /**
- * @param file le fichier à tester.
- * @param includePatterns les patterns pour accepeter le fichier depuis son nom
- * @return <code>true</code> si le fichier est accepté, <code>false> autrement.
- */
- private static boolean copyRecursivelyAccept(File file, String[] includePatterns) {
- boolean result = includePatterns.length == 0;
- String filename = file.getAbsolutePath();
- for (String pattern : includePatterns) {
- result = filename.matches(pattern);
- if (result) {
- break;
- }
- }
- return result;
- }
-
-} // FileUtil
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/FormatConverter.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/FormatConverter.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/FormatConverter.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,96 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * FormatConverter.java
- *
- * Created: 14 septembre 2005 00:55:19 CEST
- *
- * @author Benjamin POUSSIN <poussin(a)codelutin.com>
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-
-package org.codelutin.util;
-
-import org.codelutin.util.FormatMap.Format;
-
-/**
- * Un converter est un objet qui permet de passé d'une representation d'un
- * objet vers une autre representation. Le mininum que converter doit savoir
- * faire, est de converter une representation Java vers le format qu'il
- * gère et inversement. Pour des raisons d'optimisation, il est possible
- * qu'un converter sache passé d'un autre type que java vers sa representation
- * pour eviter une conversion supplémentaire qui pourrait-etre couteuse.
- *
- * @param <A> le type de l'objet a convertir
- */
-public interface FormatConverter<A> { // FormatConverter
-
- static final public Format FORMAT_JAVA = new Format("Format Java");
-
- /**
- * Convertie une valeur vers la representation FORMAT géré par cette classe
- *
- * @param factory la factory utilisable pour rechercher d'autre converter
- * si la representation Java n'est pas presente dans values et que l'on
- * en a besoin
- * @param format le format souhaité en sortie
- * @param values une map contenant les différentes representation de la
- * meme valeur. Les cles de la map sont les valeurs retournés par la
- * methode getFormat().
- * @param args des arguments qui peuvent-être utile pour la conversion.
- * par exemple si dans une application on a construit son propre
- * converter et que pour la conversion, on a besoin d'un Context applicatif
- * il peut-etre passé dans les args. Si le converter a besoin d'autre
- * converter les memes args lui seront passé.
- * @return l'objet dans la representation demandés par type
- * @throws IllegalArgumentException si auncun moyen n'est trouve pour
- * convertir une des valeurs de values dans le format géré par cette classe.
- * Ou s'il manque dans les args des objets utils pour la conversion.
- */
- public A convert(FormatConverterFactory factory,
- Format format, FormatMap values, Object... args);
-
- /**
- * Convertie une valeur vers le Java
- *
- * @param factory la factory utilisable pour rechercher d'autre converter
- * si la representation Java n'est pas presente dans values et que l'on
- * en a besoin
- * @param format le format à utiliser comme valeur d'entré
- * @param values une map contenant les différentes representation de la
- * meme valeur. La valeur interessante dans la map pour cette methode
- * est celle retournée par values.get(getFormat()) si cet appel, ne
- * retourne pas quelque chose de valid, la methode doit lever une exception
- * @param args des arguments qui peuvent-être utile pour la conversion.
- * par exemple si dans une application on a construit son propre
- * converter et que pour la conversion, on a besoin d'un Context applicatif
- * il peut-etre passé dans les args. Si le converter a besoin d'autre
- * converter les memes args lui seront passé.
- * @return la valeur java
- * @throws IllegalArgumentException si le format géré par cette classe n'est
- * pas trouvé dans les values. Ou s'il manque dans les args des objets utils
- * pour la conversion.
- */
- public Object unconvert(FormatConverterFactory factory,
- Format format, FormatMap values, Object... args);
-
-} // FormatConverter
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/FormatConverterFactory.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/FormatConverterFactory.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/FormatConverterFactory.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,189 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * FormatConverterFactory.java
- *
- * Created: 14 septembre 2005 00:19:51 CEST
- *
- * @author Benjamin POUSSIN <poussin(a)codelutin.com>
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-
-package org.codelutin.util;
-
-import org.apache.commons.collections.map.MultiKeyMap;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.codelutin.util.FormatMap.Format;
-
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.LinkedList;
-
-/**
- * Factory permet d'enregistrer des objets de changement de format, et de
- * les recupérer pour les utiliser.
- * Les objets converter doivent au moins savoir convertir les objets depuis
- * une representation Java. Pour des raisons d'optimisation, il est possible
- * qu'il sache aussi convertir a partir d'autre representation, qui si elle
- * existe sont moins couteuse a convertir.
- * Il faut aussi que les converter sache convertir de leur representation vers
- * un objet Java.
- * par exemple si on enregistre les converiseurs suivant:
- * <pre>
- * addConverter(new MatrixToXMLFormatConverter());
- * addConverter(new MatrixToSQLFormatConverter());
- * FormatConverterFactory.convert(Matrix.class, MatrixToXMLFormatConverter.TYPE,
- * values, AppContext);
- * </pre>
- * Dans ce cas pour des raisons d'optimisation
- */
-public class FormatConverterFactory { // FormatConverterFactory
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static private Log log = LogFactory.getLog(FormatConverterFactory.class);
-
- static protected FormatConverterFactory instance = null;
- /** <Class, from, to -> FormatConverter> */
- protected MultiKeyMap converters = new MultiKeyMap();
-
- synchronized static public FormatConverterFactory getInstance() {
- if (instance == null) {
- instance = new FormatConverterFactory();
- }
- return instance;
- }
-
- /**
- * Permet d'enregitrer un converter pour permettre la convertion d'une
- * certain type Java d'une representation vers une autre.
- * par exemple le type String d'un objet Java vers une chaine XML
- *
- * @param clazz la class de la representation Java de l'objet
- * @param format le format géré par le FormatConverter
- * @param c le converter a enregistrer
- */
- public void addConverter(Class clazz, Format format, FormatConverter c) {
- converters.put(clazz, format, c);
- }
-
- /**
- * permet de recupere le converter pour la classe souhaitée.
- *
- * @param clazz la classe de l'objet dont on souhaite le converter
- * @param format qui doit être géré par le converter
- * @param defaultConverter si aucun converter trouvé, ce converter est
- * retourné
- * @return le converter souhaité ou defaultConverter
- */
- public FormatConverter getConverter(Class clazz, Format format,
- FormatConverter defaultConverter) {
- FormatConverter result = (FormatConverter) converters.get(clazz, format);
- if (result == null) {
- result = defaultConverter;
- }
- return result;
- }
-
- /**
- * @return retourne null si aucun converter trouvé
- * @see #getConverter(Class, FormatMap.Format, FormatConverter)
- */
- public FormatConverter getConverter(Class clazz, Format format) {
- return getConverter(clazz, format, null);
- }
-
- /**
- * Permet de retrouver le meilleur converter disponible pour l'argument
- * clazz
- *
- * @param clazz la classe de l'objet dont on souhaite le converter
- * @param format qui doit être géré par le converter
- * @param defaultConverter si aucun converter trouvé, ce converter est
- * retourné
- * @return le converter souhaité ou defaultConverter
- */
- public FormatConverter findConverter(Class clazz, Format format,
- FormatConverter defaultConverter) {
- FormatConverter result = null;
-
- LinkedList<Class> interfaces = new LinkedList<Class>();
- // On recherche la le transformer le plus spécifique sur les Class
- Class parent = clazz;
- while (result == null && parent != null) {
- Collections.addAll(interfaces, parent.getInterfaces());
- result = getConverter(parent, format);
- parent = parent.getSuperclass();
- }
-
- // Si on a pas encore trouve de transformer on recherche
- // un encodeur/decodeur pour les interfaces
- for (Iterator<Class> i = interfaces.iterator(); result == null && i.hasNext();) {
- result = getConverter(i.next(), format);
- }
-
- if (result == null) {
- log.warn("Aucun converter trouvé pour le type: " + clazz);
- result = defaultConverter;
- }
- log.debug("converter " + result + " utilisé pour le type: " + clazz);
-
- return result;
- }
-
- /**
- * @return retourne null si aucun converter trouvé
- * @see #findConverter(Class, FormatMap.Format, FormatConverter)
- */
- public FormatConverter findConverter(Class clazz, Format format) {
- return findConverter(clazz, format, null);
- }
-
- public Object convert(Format format, FormatMap values, Object... args) {
- FormatConverter c = findConverter(values.getType(), format);
- if (c == null) {
- throw new IllegalArgumentException("Aucun converter utilisable pour les arguments donnés class: " + values.getType().getName() + " format: " + format);
- }
- return c.convert(this, format, values, args);
- }
-
- public Object unconvert(Format format, FormatMap values, Object... args) {
- FormatConverter c = findConverter(values.getType(), format);
- if (c == null) {
- throw new IllegalArgumentException("Aucun converter utilisable pour les arguments donnés");
- }
- return c.unconvert(this, format, values, args);
- }
-
- public Object convert(FormatConverter defaultConverter,
- Format format, FormatMap values, Object... args) {
- FormatConverter c = findConverter(values.getType(), format, defaultConverter);
- return c.convert(this, format, values, args);
- }
-
- public Object unconvert(FormatConverter defaultConverter,
- Format format, FormatMap values, Object... args) {
- FormatConverter c = findConverter(values.getType(), format, defaultConverter);
- return c.unconvert(this, format, values, args);
- }
-
-} // FormatConverterFactory
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/FormatMap.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/FormatMap.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/FormatMap.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,190 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * FormatMap.java
- *
- * Created: 16 septembre 2005 10:41:58 CEST
- *
- * @author Benjamin POUSSIN <poussin(a)codelutin.com>
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-package org.codelutin.util;
-
-import org.codelutin.util.FormatMap.Format;
-
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * Classe servant de conteneur pour les différentes representation d'un objet
- * Les representations doivents être des instances de {@link Format}. Le mieux
- * est lors de l'ecriture des convertisseurs pour un nouveau format est de
- * créer une instance final static de {@link Format} Format pour representer
- * ce format
- * <p/>
- * <h2>Utilisation</h2>
- * <pre>
- * FormatMap values = new FormatMap(MonObject.class);
- * values.put(FormatConverter.FORMAT_JAVA, monInstance);
- * Element xml = (Element)values.convert(XMLConverter.FORMAT_XML);
- * Object sql = values.convert(SQLConverter.FORMAT_SQL);
- * </pre>
- * <pre>
- * FormatMap values = new FormatMap(MonObject.class);
- * values.put(FormatConverter.FORMAT_XML, monInstanceEnXML);
- * Object sql = values.convert(SQLConverter.FORMAT_SQL);
- * </pre>
- * Dans ce second cas, la demande de la version SQL, transforme automatiquement
- * la representation XML qui est la seul presente en Java, puis a partir de
- * cette representation Java, on recupere la representation SQL. Bien sur
- * Si le convertisseur SQL, peut directement convertir le XML en SQL, alors
- * la conversion Java ne sera pas faite.
- * <p/>
- * Il est souvent plus simple de faire une petite classe avec les methodes
- * getSQL() et getXML(), qui retourne les valeurs directement dans le bon type
- * et qui n'ont pas besoin d'argument.
- */
-public class FormatMap extends HashMap<Format, Object> { // FormatMap
-
- /** */
- private static final long serialVersionUID = -3386611811885092898L;
-
- static public class Format {
-
- protected String name = null;
-
- public Format(String name) {
- this.name = name;
- }
-
- @Override
- public String toString() {
- return name;
- }
- }
- protected Class<?> clazz = null;
-
- public FormatMap(Class<?> clazz) {
- this.clazz = clazz;
- }
-
- public Class<?> getType() {
- return clazz;
- }
-
- /**
- * Met a jour la valeur de l'objet. Toutes les autres valeurs calculées
- * sont oubliées et seront recalculé en fonction de cette nouvelle valeur
- *
- * @param format le format a utiliser
- * @param value
- */
- public void setValue(Format format, Object value) {
- clear();
- put(format, value);
- }
-
- /**
- * Utilise le FormatConverterFactory par defaut pour la conversion
- *
- * @param format le format a utiliser
- * @param args les arguments
- * @return l'objet converti
- */
- public Object convert(Format format, Object... args) {
- return convert(FormatConverterFactory.getInstance(), format, args);
- }
-
- /**
- * Recupere la valeur dans le format demandé
- *
- * @param factory la FormatConverterFactory a utiliser
- * @param format le format souhaité
- * @param args des arguments facultatifs en fonction du context d'utilisation
- * @return l'objet converti
- */
- public Object convert(FormatConverterFactory factory, Format format,
- Object... args) {
- Object result = null;
- Map<Format, Object> values = this;
- //if (!values.containsKey(format) ||
- // !format.equals(FormatConverter.FORMAT_JAVA)) {
- // throw new IllegalArgumentException("Aucun valeur disponible");
- //}
-
- if (values.containsKey(format)) {
- result = values.get(format);
- } else if (format.equals(FormatConverter.FORMAT_JAVA)) {
- // on recherche une representation, que l'on convertie en Java
- if (values.isEmpty()) {
- throw new IllegalArgumentException("Aucun valeur disponible");
- }
- Format otherFormat = values.keySet().iterator().next();
- result = unconvert(factory, otherFormat, args);
- values.put(format, result);
- } else {
- result = factory.convert(format, this, args);
- // on stocke la valeur trouver pour les prochaines fois
- values.put(format, result);
- }
-
- return result;
- }
-
- /** Utilise le FormatConverterFactory par defaut pour la conversion
- * @param format le format utilise
- * @param args
- * @return l'objet java
- */
- public Object unconvert(Format format, Object... args) {
- return unconvert(FormatConverterFactory.getInstance(), format, args);
- }
-
- /**
- * Donne la representation Java de l'objet en essayant de partir de la
- * representation passé en parametre.
- *
- * @param factory la factory a utiliser
- * @param format le format de départ souhaité
- * @param args des arguments facultatifs en fonction du context d'utilisation
- * @return l'objet java
- */
- public Object unconvert(FormatConverterFactory factory, Format format,
- Object... args) {
- Object result = null;
- Map<Format, Object> values = this;
- if (!values.containsKey(format) &&
- !values.containsKey(FormatConverter.FORMAT_JAVA)) {
- throw new IllegalArgumentException("Aucun valeur disponible");
- }
-
- // si on a deja la representation Java on la retourne tout de suite
- if (values.containsKey(FormatConverter.FORMAT_JAVA)) {
- result = values.get(FormatConverter.FORMAT_JAVA);
- } else if (values.containsKey(format)) {
- result = factory.unconvert(format, this, args);
- values.put(FormatConverter.FORMAT_JAVA, result);
- }
-
- return result;
- }
-} // FormatMap
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/GZUtil.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/GZUtil.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/GZUtil.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,96 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * GZUtil.java
- *
- * Created: 3 nov. 2004
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-
-package org.codelutin.util;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.BufferedReader;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.Reader;
-import java.io.StringReader;
-import java.util.zip.GZIPInputStream;
-import java.util.zip.GZIPOutputStream;
-
-public class GZUtil { // GZUtil
-
- /** Retourne la string decompressee */
- public static StringBuffer bytesToStringBuffer(byte[] in) {
- try {
- if (in == null || in.length == 0) {
- return new StringBuffer("");
- }
- GZIPInputStream gz = new GZIPInputStream(new BufferedInputStream(new ByteArrayInputStream(in)));
- StringBuffer sb = new StringBuffer();
- int c;
-
- while ((c = gz.read()) != -1) {
- sb.append((char) c);
- }
- gz.close();
- return sb;
- }
- catch (IOException eee) {
- throw new GZUtilException("Probleme dans la decompression", eee);
- }
- }
-
- /** Retourne la string decompressee */
- public static String bytesToString(byte[] in) {
- return bytesToStringBuffer(in).toString();
- }
-
- /** Retourne la string compressee */
- public static byte[] stringBufferToBytes(StringBuffer elem) {
- return stringToBytes(elem.toString());
- }
-
- /** Retourne la string compressee */
- public static byte[] stringToBytes(String elem) {
- try {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- GZIPOutputStream gz = new GZIPOutputStream(new BufferedOutputStream(baos));
- Reader sr = new BufferedReader(new StringReader(elem));
- int c;
- while ((c = sr.read()) != -1) {
- gz.write((char) c);
- }
- gz.close();
-
- return baos.toByteArray();
- }
- catch (IOException eee) {
- throw new GZUtilException("Probleme dans la compression", eee);
- }
- }
-
-} // GZUtil
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/GZUtilException.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/GZUtilException.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/GZUtilException.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,44 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * GZUtilException.java
- *
- * Created: 3 nov. 2004
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-
-package org.codelutin.util;
-
-public class GZUtilException extends RuntimeException { // GZUtilException
- /** */
- private static final long serialVersionUID = -3342417793974741697L;
-
- public GZUtilException(String msg) {
- super(msg);
- }
-
- public GZUtilException(String msg, Throwable eee) {
- super(msg, eee);
- }
-} // GZUtilException
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/H2TypeEnum.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/H2TypeEnum.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/H2TypeEnum.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,30 +0,0 @@
-/*
-* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-package org.codelutin.util;
-
-/**
- * Une énumération pour représenter les différentes types d'implantation dans H2
- *
- * @author chemit
- */
-public enum H2TypeEnum {
- derby,
- h2,
- hsql,
- mckoi
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/HashList.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/HashList.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/HashList.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,148 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * HashList.java
- *
- * Created: 2 nov. 2004
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-
-package org.codelutin.util;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.Iterator;
-
-/**
- * Cette objet permet de gerer l'unicité des objets ajouté.
- * Lorsque l'on appelle la methode add sur cette objet, il verifie
- * en premier que l'objet n'est pas deja dans la liste. S'il y est
- * alors il n'est pas ajouter, sinon il est ajouter.
- * L'utilisation de la methode set n'est pas permise
- * <p/>
- * FIXME: la serialisation n'est pas modifier, c-a-d que seul le tableau est
- * conserve et pas la hashSet, donc apres recuperation, l'uticite n'est plus
- * garantie. Il faut donc surcharger readObject et writeObject pour conserver
- * le HashSet
- */
-public class HashList<E> extends ArrayList<E> { // HashList
-
- /** */
- private static final long serialVersionUID = -334941610313293930L;
-
- protected HashSet<E> set = new HashSet<E>();
-
- public HashList() {
- super();
- }
-
- public HashList(Collection<? extends E> c) {
- addAll(c);
- }
-
- public HashList(int initialCapacity) {
- super(initialCapacity);
- }
-
- @Override
- public E set(int index, E element) {
- throw new UnsupportedOperationException("You can't use set method in HashList");
- }
-
- @Override
- public boolean add(E o) {
- boolean result = !contains(o);
- add(size(), o);
- return result;
- }
-
- @Override
- public void add(int index, E element) {
- if (set.add(element)) {
- super.add(index, element);
- }
- }
-
- /**
- * supprime l'element demandé. Si l'elment n'existe pas alors, null
- * est retrouné.
- */
- @Override
- public E remove(int index) {
- if (set.remove(get(index))) {
- return super.remove(index);
- }
- return null;
- }
-
- @Override
- public void clear() {
- set.clear();
- super.clear();
- }
-
- @Override
- public boolean addAll(Collection<? extends E> c) {
- boolean modified = false;
- Iterator<? extends E> e = c.iterator();
- while (e.hasNext()) {
- if (add(e.next()))
- modified = true;
- }
- return modified;
-
- }
-
- @Override
- public boolean addAll(int index, Collection<? extends E> c) {
- boolean modified = false;
- Iterator<? extends E> e = c.iterator();
- while (e.hasNext()) {
- add(index++, e.next());
- modified = true;
- }
- return modified;
-
- }
-
- @Override
- protected void removeRange(int fromIndex, int toIndex) {
- for (int i = toIndex - 1; i >= fromIndex; i--) {
- remove(i);
- }
- }
-
- @Override
- public boolean contains(Object elem) {
- return set.contains(elem);
- }
-
- @Override
- public Object clone() {
- HashList<E> result = new HashList<E>(this);
- return result;
- }
-
-} // HashList
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/IOUtils.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/IOUtils.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/IOUtils.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,86 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%*
- */
-package org.codelutin.util;
-
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-
-import java.nio.channels.FileChannel;
-
-/**
- * IOUtils.
- *
- * TODO ADD COMMENT HERE !
- *
- * @deprecated use {FileUtil} instead
- */
-public class IOUtils {
-
- /**
- * Copy a file
- */
- public static void copyFile(File in, File out) throws java.io.IOException {
-
- FileChannel sourceChannel = new FileInputStream(in).getChannel();
- FileChannel destinationChannel = new FileOutputStream(out).getChannel();
-
- sourceChannel.transferTo(0, sourceChannel.size(), destinationChannel);
-
- sourceChannel.close();
- destinationChannel.close();
-
- return;
- }
-
- /**
- * Get a temporary file path
- */
- public static String getTemporaryFilePath(String tempFilePrefix,
- File tmpDirectory) throws java.io.IOException {
-
- // Get a File object with given prefix, default suffix is ".tmp"
- File temporaryFile = File.createTempFile(tempFilePrefix, null,
- tmpDirectory);
- String temporaryFilePath = temporaryFile.getPath();
-
- return temporaryFilePath;
- }
-
- /**
- * Get a ByteArrayOutputStream containing all data that could be read from the given InputStream
- */
- public static ByteArrayOutputStream readBytesFrom(InputStream inputStream,
- int defaultBufferSize) throws java.io.IOException {
-
- ByteArrayOutputStream outputStream = new ByteArrayOutputStream(
- defaultBufferSize);
- byte[] buffer = new byte[defaultBufferSize];
-
- int readBytes = inputStream.read(buffer);
- while (readBytes > 0) {
- outputStream.write(buffer, 0, readBytes);
- readBytes = inputStream.read(buffer);
- }
-
- return outputStream;
- }
-
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/LRUMapMultiKey.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/LRUMapMultiKey.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/LRUMapMultiKey.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,230 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * LRUMapMultiKey.java
- *
- * Created: 23 mai 2006 04:08:03
- *
- * @author poussin
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-
-package org.codelutin.util;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Set;
-
-
-/** @author poussin */
-
-public class LRUMapMultiKey extends LinkedHashMap<LRUMapMultiKey.Key, Object> {
-
- private static final long serialVersionUID = 1L;
-
- private static final Log log = LogFactory.getLog(LRUMapMultiKey.class);
-
- /** @author poussin */
- static public class Key extends ArrayList<Object> {
-
- private static final long serialVersionUID = 1L;
-
- // protected LRUMapMultiKey map = null;
- // protected Reference ref = null;
- protected int hash = 0;
-
- public Key(Object... k) {
- Collections.addAll(this, k);
- }
-
- @Override
- public int hashCode() {
- if (hash == 0) {
- hash = super.hashCode();
- }
- return hash;
- }
-
-// /* (non-Javadoc)
-// * @see java.util.AbstractList#equals(java.lang.Object)
-// */
-// @Override
-// public boolean equals(Object o) {
-// if (o != null && o instanceof Reference) {
-// Object ref = ((Reference)o).get();
-// if (ref == null) {
-// boolean result = o.hashCode() == hashCode();
-// return result;
-// }
-// }
-// return super.equals(o);
-// }
-
-// /* (non-Javadoc)
-// * @see java.lang.Object#finalize()
-// */
-// @Override
-// protected void finalize() throws Throwable {
-// if (map != null) {
-// for (Iterator i=iterator(); i.hasNext();) {
-// Object k = i.next();
-// Set<Reference<Key>> list = map.keys.get(k);
-// if (list != null) {
-// Object o = ref;
-// if (o == null) {
-// o = this;
-// }
-// boolean ok = list.remove(o);
-// if (list.size() == 0) {
-// map.keys.remove(k);
-// }
-// }
-// }
-// }
-// }
-
- }
-
-
- protected Map<Object, Set<Key>> keys = new HashMap<Object, Set<Key>>();
- protected int maxSize;
-
- public LRUMapMultiKey(int maxSize) {
- super(maxSize <= 0 ? 1000 : maxSize * 100 / 75, (float) 0.75, true);
- this.maxSize = maxSize;
- }
-
- public Key createKey(Object... k) {
- return new Key(k);
- }
-
- /* (non-Javadoc)
- * @see java.util.WeakHashMap#clear()
- */
- @Override
- public void clear() {
- keys.clear();
- super.clear();
- }
-
- /* (non-Javadoc)
- * @see java.util.WeakHashMap#remove(java.lang.Object)
- */
- @Override
- public Object remove(Object k) {
- if (k instanceof Key) {
- return super.remove(k);
- } else {
- ArrayList<Key> result = new ArrayList<Key>();
- Set<Key> list = keys.remove(k);
- if (list != null) {
- for (Iterator<Key> i = list.iterator(); i.hasNext();) {
- Key key = i.next();
- result.add(key);
- super.remove(key);
- }
- list.clear(); // not necessary but perhaps help the garbage
- }
- return result;
- }
- }
-
- /* (non-Javadoc)
- * @see java.util.WeakHashMap#put(java.lang.Object, java.lang.Object)
- */
- @Override
- public Object put(Key key, Object value) {
-// if (!(akey instanceof Key)) {
-// throw new IllegalArgumentException("key must be Key object");
-// }
-// Key key = (Key)akey;
- for (Iterator i = key.iterator(); i.hasNext();) {
- Object k = i.next();
- Set<Key> list = keys.get(k);
- if (list == null) {
- list = new HashSet<Key>();
- keys.put(k, list);
- }
- list.add(key);
-//System.out.println("+++++++++++++++++++ put key: " + key + " list("+k+") == " + list.size());
- }
-//System.out.println("++++++++++++++++++++++++++++ LRU size = " + size() + " maxSize: " + maxSize);
- Object result = super.put(key, value);
-//System.out.println("+++++++++++++++++ LRU size = " + size());
- return result;
- }
-
- /* (non-Javadoc)
- * @see java.util.LinkedHashMap#removeEldestEntry(java.util.Map.Entry)
- */
- @Override
- protected boolean removeEldestEntry(Map.Entry<Key, Object> eldest) {
- if (this.maxSize > 0 && size() > this.maxSize) {
- Key key = (Key) eldest.getKey();
- for (Iterator i = key.iterator(); i.hasNext();) {
- Object k = i.next();
- Set<Key> list = keys.get(k);
- if (list != null) {
- list.remove(key);
- if (list.size() == 0) {
- keys.remove(k);
- }
- }
- }
-
- if (!containsKey(eldest.getKey())) {
- log.warn("possible memory leak !!! removeEldestEntry (" + eldest.getKey().getClass() + ")" + eldest.getKey() + " size " + size() + " maxSize" + maxSize);
- }
- return true;
- }
- return false;
- }
-
-// /* (non-Javadoc)
-// * @see org.apache.commons.collections.map.LRUMap#removeLRU(org.apache.commons.collections.map.AbstractLinkedMap.LinkEntry)
-// */
-// @Override
-// protected boolean removeLRU(AbstractLinkedMap.LinkEntry entry) {
-// Key key = (Key)entry.getKey();
-// for (Iterator i=key.iterator(); i.hasNext();) {
-// Object k = i.next();
-// Set<Key> list = keys.get(k);
-// if (list != null) {
-// boolean ok = list.remove(key);
-// if (list.size() == 0) {
-// keys.remove(k);
-// }
-// }
-// }
-// return true;
-// }
-
-}
-
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ListenerSet.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ListenerSet.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ListenerSet.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,249 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-/* *
- * ListenerSet.java
- *
- * Created: 10 mai 2004
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * Copyright Code Lutin
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-package org.codelutin.util;
-
-import java.beans.Statement;
-import java.lang.ref.Reference;
-import java.util.HashSet;
-import java.util.Iterator;
-
-/**
- * <p>Cette classe permet de mettre en place facilement le support de listeners.
- * Elle ne permet d'ajouter qu'une seul fois le meme listener. Si elle est
- * la derniere à avoir une référence sur le listener, le listener est supprimé
- * de la liste des listeners.</p>
- * <p>Si on souhaite avoir une vérification sur le type de listener ajouté
- * il faut utiliser le constructeur qui prend une classe en paramètre. Dans ce
- * cas la méthode {@link #add(Object)} vérifie que l'object passé est bien
- * du type ou un enfant du type donné en paramètre du constructeur
- * <p>Il y a deux façon de prévenir les listeners d'un event soit par le
- * mécanisme inclu dans cette classe en utilisant la méthode {@link #fire} soit
- * en utilisant soit même l'Iterateur sur les listeners encore valide.</p>
- * <pre>
- * ListenerSet listeners = new ListenerSet();
- * ...
- * listeners.fire("monEvent", MonObjetEvent);
- * </pre>
- * ou bien
- * <pre>
- * ListenerSet listeners = new ListenerSet();
- * ...
- * for(Iterator i=listeners.iterator(); i.hasNext();){
- * MonListener l = (MonListener)i.next();
- * l.monEvent(MonObjetEvent);
- * }
- * </pre>
- * Cette deuxième façon de faire est plus sûr car elle n'utilise pas
- * l'introspection et donc une vérification est faite sur le nom de la méthode
- * à appeler à la compilation, mais elle est plus verbeuse à écrire.
- *
- * @see org.codelutin.util.CategorisedListenerSet
- */
-public class ListenerSet<Listener> implements Iterable<Listener> { // ListenerSet
-
- /** DOCUMENTME Description of the Field DOCUMENTME Description of the Field DOCUMENTME Description of the Field */
-// protected Class<T> listenerClass = null;
- /** DOCUMENTME Description of the Field */
- protected HashSet<Reference<Listener>> listeners = new HashSet<Reference<Listener>>();
-
- /** DOCUMENTME Constructor for the ListenerSet object */
- public ListenerSet() {
- }
-
-// /**
-// * Constructeur permettant de passer une classe que devra s'attisfaire les
-// * listener que l'on souhaite ajouter
-// *
-// * @param listenerClass DOCUMENTME Description of the Parameter
-// */
-// public ListenerSet(Class<T> listenerClass) {
-// this.listenerClass = listenerClass;
-// }
-
- public int size() {
- return listeners.size();
- }
-
- /**
- * Ajoute un listener dans la liste des listeners.
- *
- * @param l le listener à ajouter. Si l'objet passé est null, rien n'est fait
- * si l'objet n'est pas du type passé en argument du constructeur
- * une IllegalArgumentException est levée.
- */
- public void add(Listener l) {
- if (l == null) {
- return;
- }
-// if (listenerClass == null || listenerClass.isInstance(l)) {
- TransparenteWeakReference<Listener> ref = new TransparenteWeakReference<Listener>(l);
- listeners.add(ref);
-// } else {
-// throw new IllegalArgumentException("Listener object ("
-// + l.getClass().getName() + ") is not compatible with class: "
-// + listenerClass.getName());
-// }
- }
-
- /**
- * ajoute tous les listeners d'un ListenerSet
- *
- * @param ls The feature to be added to the All attribute
- */
- public void addAll(ListenerSet<Listener> ls) {
-// if (listenerClass == null || (ls.listenerClass != null &&
-// listenerClass.isAssignableFrom(ls.listenDOCUMENTME Description of the ExceptionerClass))) {
- listeners.addAll(ls.listeners);
-// } else {
-// throw new IllegalArgumentException("Listener object ("
-// + ls.listenerClass + ") is not compatible with : "
-// + listenerClass);
-// }
- }
-
- /**
- * Appel la méthode du listener en passant l'objet event en paramètre
- * Cette méthode echoue si la methode ou l'objet contenant la methode a
- * appeler n'est pas public
- *
- * @param methodName le nom de la methode a appeler
- * @param event l'event a passer en parametre de la methode a appeler
- * @throws Exception si un des listeners leve une exception lors de l'appel
- */
- public void fire(String methodName, Object event) throws Exception {
- for (Iterator i = iterator(); i.hasNext();) {
- Object o = i.next();
- Statement stm = new Statement(o, methodName, new Object[]{event});
- stm.execute();
- }
- }
-
- /**
- * Appel la méthode du listener sans argument
- * Cette méthode echoue si la methode ou l'objet contenant la methode a
- * appeler n'est pas public
- *
- * @param methodName le nom de la methode a appeler
- * @throws Exception si un des listeners leve une exception lors de l'appel
- */
- public void fire(String methodName) throws Exception {
- for (Iterator i = iterator(); i.hasNext();) {
- Object o = i.next();
- Statement stm = new Statement(o, methodName, null);
- stm.execute();
- }
- }
-
- /**
- * DOCUMENTME Method
- *
- * @return DOCUMENTME Description of the Return Value
- */
- public Iterator<Listener> iterator() {
- return new ReferenceIterator<Listener>(listeners.iterator());
- }
-
- /**
- * DOCUMENTME Method
- *
- * @param l DOCUMENTME Description of the Parameter
- */
- public void remove(Listener l) {
- TransparenteWeakReference<Listener> ref = new TransparenteWeakReference<Listener>(l);
- listeners.remove(ref);
- }
-
- /**
- * DOCUMENTME Method
- *
- * @return DOCUMENTME Description of the Return Value
- */
- public String toString() {
- return "" + listeners;
- }
-
- /** Iterator qui supprime les references vides lors du parcours */
- static class ReferenceIterator<T> implements Iterator<T> {
- /** DOCUMENTME Description of the Field */
- protected Iterator<Reference<T>> iter = null;
- /** DOCUMENTME Description of the Field */
- protected T nextObject = null;
-
- /**
- * Un iterator contenant des References
- *
- * @param iter DOCUMENTME Description of the Parameter
- */
- public ReferenceIterator(Iterator<Reference<T>> iter) {
- this.iter = iter;
- findNext();
- }
-
- /** DOCUMENTME Method */
- protected void findNext() {
- while (iter.hasNext() && nextObject == null) {
- Reference<T> ref = iter.next();
- T o = ref.get();
- if (o != null) {
- nextObject = o;
- } else {
- iter.remove();
- }
- }
- }
-
- /**
- * DOCUMENTME Method
- *
- * @return DOCUMENTME Description of the Return Value
- */
- public boolean hasNext() {
- return nextObject != null;
- }
-
- /**
- * DOCUMENTME Method
- *
- * @return DOCUMENTME Description of the Return Value
- */
- public T next() {
- T result = nextObject;
- nextObject = null;
- findNext();
- return result;
- }
-
- /** DOCUMENTME Method */
- public void remove() {
- iter.remove();
- }
- }
-
-} // ListenerSet
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/Log.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/Log.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/Log.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,284 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * Log.java
- *
- * Created: 12 août 2004
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-
-package org.codelutin.util;
-
-import java.util.EventListener;
-import java.util.EventObject;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Cette classe permet de mettre en place un monitoring d'application simplement.
- * Le développeur a chaque fois qu'il le souhaite ajoute dans son code un
- * Log.logUserInfo("...", "....") qui indique un message que l'utilisateur est
- * suceptible de vouloir, par exemple le résultat de la sauvegarde d'un fichier.
- * Ou bien si l'application effectue un traitement, il peut utiliser
- * Log.logTask("...", "...", max, value) pour indiquer qu'un traitement est
- * en cours.
- * <p/>
- * Il suffit ensuite de creer un objet qui herite de {@link LogListener}, puis
- * de l'enregistrer sur certaine category d'event il recevra alors les
- * evenements de l'utilisateur.
- * <p/>
- * Une utilisation peut-être la bar de status qui afficherait le message.
- * <p/>
- * exemple de code
- * <pre>
- * LogListener l = new StatusBar();
- * Log.addLogListener(l);
- * ...
- * ...
- * ...
- * Log.logTask("SAVE", "Sauvegarde en cours", -1, 0);
- * ... // sauvegarde
- * Log.logUserInfo("SAVE", "Sauvegarde réussie");
- * Log.logTask("SAVE", "Sauvegarde terminée", 0, 0);
- * </pre>
- */
-public class Log { // Log
-
- static private Log LOG_INSTANCE = new Log();
-
- /** L'interface que doivent respecter un listener */
- static public interface LogListener extends EventListener {
- public void logMessage(LogEvent e);
-
- public void logTask(LogEvent e);
- }
-
- /** Les events envoyes aux listeners */
- static public class LogEvent extends EventObject {
- /** */
- private static final long serialVersionUID = 6597052732707368243L;
-
- protected String category;
- protected Level level;
- protected String message;
- protected Throwable exception;
- protected int taskMax = 0;
- protected int taskValue = 0;
-
- public LogEvent(Object source, String category, Level level, String message, Throwable exception) {
- super(source == null ? LOG_INSTANCE : source);
- this.category = category;
- this.level = level;
- this.message = message;
- this.exception = exception;
- }
-
- public LogEvent(Object source, String category, String message, int taskMax, int taskValue) {
- super(source == null ? LOG_INSTANCE : source);
- this.category = category;
- this.message = message;
- this.taskMax = taskMax;
- this.taskValue = taskValue;
- }
-
- public String getCategory() {
- return category;
- }
-
- /** Retourne une valeur que si l'event est un sendMessage, sinon null; */
- public Level getLevel() {
- return level;
- }
-
- public String getMessage() {
- return message;
- }
-
- /**
- * L'exception envoyé dans le log, si le log ne contient pas d'exception
- * alors null est retourne.
- */
- public Throwable getException() {
- return exception;
- }
-
- public int getTaskMax() {
- return taskMax;
- }
-
- public int getTaskValue() {
- return taskValue;
- }
-
- }
-
- /** Le Level pour les log utilisateur */
- static private class UserLevel extends Level {
- /** */
- private static final long serialVersionUID = -9075227788352473733L;
-
- public UserLevel(String name, int value) {
- super(name, value);
- }
- }
-
- /** Tous les listeners */
- static protected CategorisedListenerSet<LogListener> listeners = new CategorisedListenerSet<LogListener>();
-
- /** Level.INFO = 700 Level.FINE=500 * */
- public static final Level USER_INFO = new UserLevel("USERINFO", 600);
-
- /** Ajoute un listener sur tous les logs envoye */
- static public void addLogListener(LogListener l) {
- listeners.add(LOG_INSTANCE, l);
- }
-
- /** enleve un listener sur tous les logs envoye */
- static public void removeLogListener(LogListener l) {
- listeners.remove(LOG_INSTANCE, l);
- }
-
- /** Ajoute un listener sur une certaine category de log */
- static public void addLogListener(LogListener l, String category) {
- listeners.add(category, l);
- }
-
- /** enleve un listener sur une certaine category de log */
- static public void removeLogListener(LogListener l, String category) {
- listeners.remove(category, l);
- }
-
- static protected void fire(String category, Level level, String message, Throwable exception) {
- LogEvent e = new LogEvent(null, category, level, message, exception);
- try {
- logDevFinest("org.codelutin.util.Log.fire", "Category: " + category + " listeners enregistrés: " + listeners);
- listeners.fire(category, "logMessage", e);
- listeners.fire(LOG_INSTANCE, "logMessage", e);
- } catch (Exception eee) {
- Logger.getLogger(Log.class.getName() + ".fire").log(Level.WARNING, "Error during send log event", eee);
- }
- }
-
- static protected void fire(String category, String message, int max, int value) {
- LogEvent e = new LogEvent(null, category, message, max, value);
- try {
- log("org.codelutin.util.Log.fire", Level.FINEST, "Category: " + category + " listeners enregistrés: " + listeners, null);
- listeners.fire(category, "logTask", e);
- listeners.fire(LOG_INSTANCE, "logTask", e);
- } catch (Exception eee) {
- Logger.getLogger(Log.class.getName() + ".fire").log(Level.WARNING, "Error during send log event", eee);
- }
- }
-
- /**
- * Ajoute un message dans le USER_LEVEL.
- *
- * @param category la category du message, souvent un nom de module d'une
- * application.
- * @param message le message a envoyer
- */
- static public void logUserInfo(String category, String message) {
- logUserInfo(category, message, null);
- }
-
- static public void logUserInfo(String category, String message, Throwable e) {
- log(category, USER_INFO, message, e);
- fire(category, USER_INFO, message, e);
- }
-
- /**
- * Permet d'indiquer l'avancement d'une tache. Si l'on ne connait pas la
- * longueur de la tache il suffit d'indiquer -1 dans max, pour indiquer
- * une tache en cours dont on ne connait pas la fin.
- * lorsque la tache est termine, il suffit d'appeler cette methode avec max
- * valant 0.
- *
- * @param category la category de la tache
- * @param message le message a afficher, le message peut-etre null
- * @param max l'entier qui indique la fin de la tache. La tache commence a
- * 0 et fini lorsque l'on arrive a max. Si max vaut -1 cela veut dire
- * que la tache debute mais qu'on ne connait pas sa longueur
- * @param current la valeur courante de la tache.
- */
- static public void logTask(String category, String message, int max, int current) {
- log(category, USER_INFO, "task: " + message + "[" + current + "/" + max + "]", null);
- fire(category, message, max, current);
- }
-
- static public void log(String category, Level level, String message, Throwable e) {
- if (e == null) {
- Logger.getLogger(category).log(level, message);
- } else {
- Logger.getLogger(category).log(level, message, e);
- }
- }
-
- static public void logDevFinest(String category, String message) {
- logDevFinest(category, message, null);
- }
-
- static public void logDevFinest(String category, String message, Throwable e) {
- log(category, Level.FINEST, message, e);
- }
-
- static public void logDevFiner(String category, String message) {
- logDevFiner(category, message, null);
- }
-
- static public void logDevFiner(String category, String message, Throwable e) {
- log(category, Level.FINER, message, e);
- }
-
- static public void logDevFine(String category, String message) {
- logDevFine(category, message, null);
- }
-
- static public void logDevFine(String category, String message, Throwable e) {
- log(category, Level.FINE, message, e);
- }
-
- static public void logDevInfo(String category, String message) {
- logDevInfo(category, message, null);
- }
-
- static public void logDevInfo(String category, String message, Throwable e) {
- log(category, Level.INFO, message, e);
- }
-
- static public void logDevWarn(String category, String message) {
- logDevInfo(category, message, null);
- }
-
- static public void logDevWarn(String category, String message, Throwable e) {
- log(category, Level.WARNING, message, e);
- }
-
- static public void logDevSevere(String category, String message) {
- logDevSevere(category, message, null);
- }
-
- static public void logDevSevere(String category, String message, Throwable e) {
- log(category, Level.SEVERE, message, e);
- }
-
-} // Log
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/LoggingException.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/LoggingException.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/LoggingException.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,46 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/**
- * LogException.java
- *
- * Created: Sat Apr 20 2002
- *
- * @author POUSSIN Benjamin <bpoussin(a)free.fr>
- * Copyright Code Lutin
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-
-package org.codelutin.util;
-
-public class LoggingException extends RuntimeException { // LogException
-
- /** */
- private static final long serialVersionUID = 3495450140612716283L;
-
- public LoggingException(String msg) {
- super(msg);
- }
-
- public LoggingException(String msg, Throwable e) {
- super(msg, e);
- }
-
-} // LogException
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/LoggingPatternFormatter.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/LoggingPatternFormatter.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/LoggingPatternFormatter.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,486 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/**
-* PatternFormatter.java
-*
-* Created: Sat Apr 20 2002
-*
-* @author POUSSIN Benjamin <bpoussin(a)free.fr>
-* Copyright Code Lutin
-* @version $Revision$
-*
-* Mise a jour: $Date$
-* par : $Author$
-*/
-
-package org.codelutin.util;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.logging.Formatter;
-import java.util.logging.LogRecord;
-import java.util.logging.LogManager;
-import java.util.Date;
-import java.text.SimpleDateFormat;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.ArrayList;
-
-/**
-* Classe org.codelutin.logging.PatternFormatter.
-*
-* <ul>
-* <li>n: new line</li>
-* <li>%: %</li>
-* <li>{: {</li>
-* </ul>
-*
-* <ul>
-* <li>d: date</li>
-* </ul>
-*
-* Date follow the same pattern as DateFormat.
-*
-* <ul> Sized
-* <li>o: free memory</li>
-* <li>O: total memory</li>
-* <li>t: thread id</li>
-* <li>p: priority level</li>
-* <li>c: class name</li>
-* <li>m: message</li>
-* <li>a: argument</li>
-* <li>e: exception</li>
-* </ul>
-*
-* Sized element support justify pattern.
-* {[+|-]<size>[:<maxPos>]}.
-* '+' is
-* left justify, '-' rigth justify, size the prefered size for the element if it is not bigger.
-* If maxPos option is present blanc is not add if it go up to maxPos.
-*
-* <ul> SubString
-* <li>M: method name</li>
-* </ul>
-*
-* L'element SubString a les memes possibilites que le pattern justify,
-* et permet en plus de suprimer une sous chaine,
-* cela permet de supprimer le debut du nom d'une classe.
-* Syntaxe :
-* {*<substring>|[+|-]<size>[:<maxPos>]}
-* {<substring>*|[+|-]<size>[:<maxPos>]}
-* L'etoile represente le texte qui restera.
-*/
-public class LoggingPatternFormatter extends Formatter { // PatternFormatter
-
- private static final String DEFAULT_PATTERN = "%d{yyyy-MM-dd HH:mm:ss} [free:%o{-7}|total:%O{-7}][%t][%p{7}] %c{org.codelutin.*|25} %M{15:105}: %m%n%e";
-
- protected HashMap<String, Class<?>> arguments = null;
- protected ArrayList<Argument> compile = null;
- protected String pattern = null;
-
- public LoggingPatternFormatter() {
- try {
- arguments = new HashMap<String, Class<?>>();
- initArguments();
- LogManager manager = LogManager.getLogManager();
- String cname = this.getClass().getName();
- pattern = manager.getProperty(cname + ".pattern");
- if (pattern == null)
- pattern = DEFAULT_PATTERN;
- compilePattern(pattern);
- } catch (Exception eee) {
- System.err.println("Impossible d'utiliser le PatternFormatter");
- eee.printStackTrace();
- throw new LoggingException(
- "Exception durant l'initialisation du PatternFormatter",
- eee);
- }
- }
-
- /**
- * Methode qui formate le record
- */
- public String format(LogRecord record) {
- StringBuffer result = new StringBuffer();
- for (Iterator i = compile.iterator(); i.hasNext();) {
- ((Argument) i.next()).toString(record, result);
- }
- return result.toString();
- }
-
- /**
- * Si vous souhaitez ajouter des type d'argument
- * Surcharger cette methode et a la fin fait un super.initArguments()
- */
- protected void initArguments() {
- arguments.put("d", DateArgument.class);
- arguments.put("o", FreeMemoryArgument.class);
- arguments.put("O", TotalMemoryArgument.class);
- arguments.put("t", ThreadArgument.class);
- arguments.put("p", PriorityLevelArgument.class);
- arguments.put("c", ClassNameArgument.class);
- arguments.put("M", MethodNameArgument.class);
- arguments.put("m", MessageArgument.class);
- arguments.put("e", ExceptionArgument.class);
- }
-
- /**
- * Genere a partir de la chaine la liste des objet Argument.
- */
- protected void compilePattern(String pattern) {
- compile = new ArrayList<Argument>();
- String[] match = findNextPattern(pattern);
- while (!match[1].equals("")) {
- compile.add(new StringArgument(match[0]));
- compile.add(patternToArgument(match[1]));
- match = findNextPattern(match[2]);
- }
- compile.add(new StringArgument(match[0]));
- }
-
- /**
- * Recherche dans la chaine le prochaine pattern.
- * @return un tableau de 3 chaines, [0] ce qu'il y a avant le
- * parttern, [1] le parttern, [2] ce qu'il y a apres le pattern.
- */
- protected String[] findNextPattern(String s) {
- String[] result = new String[] { "", "", "" };
- if (s == null) {
- return result;
- }
-
- int d = s.indexOf("%");
-
- if (d != -1) { // il y a un %
- if (d + 2 < s.length() && s.charAt(d + 2) == '{') {
- int f = s.indexOf("}", d);
- if (f != -1) { // il y a une pattern %c{pattern}
- result[0] = s.substring(0, d);
- result[1] = s.substring(d + 1, f);
- result[2] = s.substring(f + 1);
- } else {
- throw new LoggingException("Error, { at position "
- + (d + 2) + " not terminated in :" + s);
- }
- } else { //pas de pattern
- result[0] = s.substring(0, d);
- result[1] = s.substring(d + 1, d + 2);
- result[2] = s.substring(d + 2);
- }
- } else {
- result[0] = s;
- }
-
- return result;
- }
-
- /**
- * Converti un pattern en un objet Argument
- */
- protected Argument patternToArgument(String s) {
- if (s.charAt(0) == 'n') { // new ligne
- return new StringArgument("\n");
-
- } else if (s.charAt(0) == '%') { // le caractere %
- return new StringArgument("%");
-
- } else if (s.charAt(0) == '{') { // le caractere {
- return new StringArgument("{");
-
- } else {
- String code = s.substring(0, 1);
- Class argumentClass = (Class) arguments.get(code);
- if (argumentClass == null)
- throw new LoggingException("Erreur dans le pattern '" + code
- + "' inconnu");
- Argument argument = null;
- try {
- argument = (Argument) argumentClass.newInstance();
- } catch (InstantiationException eee) {
- throw new LoggingException(
- "Erreur lors de l'instanciation de l'objet Argument: "
- + argumentClass.getName(), eee);
- } catch (IllegalAccessException eee) {
- throw new LoggingException(
- "Erreur lors de l'instanciation de l'objet Argument: "
- + argumentClass.getName(), eee);
- }
- if (s.length() > 1) { // on a un pattern
- argument.setPattern(s.substring(2));
- }
-
- return argument;
- }
- }
-
- ///////////////////////////////////////////////////////////////////////////////
- //////////////////////////// Les Classes Argument /////////////////////////////
- ///////////////////////////////////////////////////////////////////////////////
-
- static protected abstract class Argument {
- protected String pattern;
-
- public Argument() {
- }
-
- public void setPattern(String pattern) {
- this.pattern = pattern;
- }
-
- abstract public StringBuffer toString(LogRecord record,
- StringBuffer toAppendTo);
- }
-
- static protected class StringArgument extends Argument {
- protected String s = null;
-
- public StringArgument(String s) {
- super();
- this.s = s;
- }
-
- public StringBuffer toString(LogRecord record, StringBuffer toAppendTo) {
- toAppendTo.append(s);
- return toAppendTo;
- }
- }
-
- static protected class DateArgument extends Argument {
- protected SimpleDateFormat dateFormat = null;
-
- public DateArgument() {
- super();
- }
-
- public void setPattern(String pattern) {
- super.setPattern(pattern);
- dateFormat = new SimpleDateFormat(pattern);
- }
-
- public StringBuffer toString(LogRecord record, StringBuffer toAppendTo) {
- toAppendTo.append(dateFormat.format(new Date(record.getMillis())));
- return toAppendTo;
- }
- }
-
- static abstract protected class SizedArgument extends Argument {
- protected boolean left = true;
- protected int width = 0;
- protected int maxPos = -1;
-
- public SizedArgument() {
- super();
- }
-
- public void setPattern(String pattern) {
- super.setPattern(pattern);
- if (pattern.length() > 0) {
- String[] subpattern = pattern.split(":");
- pattern = subpattern[0];
- char op = pattern.charAt(0);
- if (pattern.charAt(0) == '+' || pattern.charAt(0) == '-') {
- pattern = pattern.substring(1);
- }
- width = Integer.parseInt(pattern);
- left = op != '-';
- if (subpattern.length > 1) {
- maxPos = Integer.parseInt(subpattern[1]);
- }
- }
- }
-
- protected StringBuffer justify(String s, StringBuffer toAppendTo) {
- int blanc = width - s.length();
- if (left) {
- toAppendTo.append(s);
- while (0 < blanc--
- && (maxPos == -1 || toAppendTo.length() < maxPos)) {
- toAppendTo.append(" ");
- }
- } else {
- while (0 < blanc--
- && (maxPos == -1 || toAppendTo.length() < maxPos)) {
- toAppendTo.append(" ");
- }
- toAppendTo.append(s);
- }
- return toAppendTo;
- }
- }
-
- static abstract protected class SubStringArgument extends SizedArgument {
- /** la chaine qui doit etre supprimee */
- protected String removeString = null;
- /** vrai si la chaine doit etre retiree du debut, faux pour la fin */
- protected boolean atBeginning = true;
-
- public SubStringArgument() {
- super();
- }
-
- public void setPattern(String pattern) {
- String[] subpattern = pattern.split("\\|");
- for (int i = 0; i < subpattern.length; i++) {
- try { //on essai de voir si le pattern convient au SizedArgument
- super.setPattern(subpattern[i]);
- } catch (NumberFormatException eee) {
- // il ne convient pas au SizedArgument
- // c pour le substring
- atBeginning = subpattern[i].charAt(0) != '*';
- if (subpattern[i].charAt(0) == '*') {
- removeString = subpattern[i].substring(1);
- } else if (subpattern[i].endsWith("*")) {
- removeString = subpattern[i].substring(0, subpattern[i]
- .length() - 1);
- }
- }
- }
- }
-
- protected String substring(String s) {
- if (atBeginning) {
- if (s.startsWith(removeString))
- return s.substring(removeString.length());
- } else {
- if (s.endsWith(removeString))
- return s.substring(0, s.length() - removeString.length());
- }
- return s;
- }
- }
-
- static abstract protected class OctetArgument extends SizedArgument {
- protected static final String[] UNITE = { "o", "Ko", "Mo", "Go", "To",
- "Po" };
- protected int diviseur = 1024;
-
- public OctetArgument() {
- super();
- }
-
- /**
- * Methode permettant l'affichage d'un taille avec une representation
- * humainement lisible.
- * @param size la taille rendre lisible
- * @param unit les unites a utiliser (les petits en premier)
- * @param diviseur le diviseur entre unite (ex: 1000 ou 1024)
- * @return la representation
- */
- protected String toReadableSize(long size, String[] unit, int diviseur) {
- int unitIndex = 0;
- while (size > 99999 && unitIndex < unit.length) {
- size /= diviseur;
- unitIndex++;
- }
- String result = size + unit[unitIndex];
- return result;
- }
- }
-
- static protected class FreeMemoryArgument extends OctetArgument {
- public FreeMemoryArgument() {
- super();
- }
-
- public StringBuffer toString(LogRecord record, StringBuffer toAppendTo) {
- return justify(toReadableSize(Runtime.getRuntime().freeMemory(),
- UNITE, diviseur), toAppendTo);
- }
- }
-
- static protected class TotalMemoryArgument extends OctetArgument {
- public TotalMemoryArgument() {
- super();
- }
-
- public StringBuffer toString(LogRecord record, StringBuffer toAppendTo) {
- return justify(toReadableSize(Runtime.getRuntime().totalMemory(),
- UNITE, diviseur), toAppendTo);
- }
- }
-
- static protected class ThreadArgument extends SizedArgument {
- public ThreadArgument() {
- super();
- }
-
- public StringBuffer toString(LogRecord record, StringBuffer toAppendTo) {
- return justify(Thread.currentThread().getName(), toAppendTo);
- }
- }
-
- static protected class PriorityLevelArgument extends SizedArgument {
- public PriorityLevelArgument() {
- super();
- }
-
- public StringBuffer toString(LogRecord record, StringBuffer toAppendTo) {
- return justify(record.getLevel().toString(), toAppendTo);
- }
- }
-
- static protected class ClassNameArgument extends SubStringArgument {
- public ClassNameArgument() {
- super();
- }
-
- public StringBuffer toString(LogRecord record, StringBuffer toAppendTo) {
- return justify(substring(record.getSourceClassName()), toAppendTo);
- }
- }
-
- static protected class MethodNameArgument extends SizedArgument {
- public MethodNameArgument() {
- super();
- }
-
- public StringBuffer toString(LogRecord record, StringBuffer toAppendTo) {
- return justify(record.getSourceMethodName(), toAppendTo);
- }
- }
-
- static protected class MessageArgument extends SizedArgument {
- public MessageArgument() {
- super();
- }
-
- public StringBuffer toString(LogRecord record, StringBuffer toAppendTo) {
- return justify(record.getMessage(), toAppendTo);
- }
- }
-
- static protected class ExceptionArgument extends Argument {
- public ExceptionArgument() {
- super();
- }
-
- public StringBuffer toString(LogRecord record, StringBuffer toAppendTo) {
- Throwable e = record.getThrown();
- if (e != null) {
- toAppendTo.append(e.getMessage());
- toAppendTo.append("\n");
- StringWriter st = new StringWriter();
- e.printStackTrace(new PrintWriter(st));
- toAppendTo.append(st.toString());
- toAppendTo.append("\n");
- }
- return toAppendTo;
- }
- }
-
-} // PatternFormatter
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/MD5.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/MD5.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/MD5.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,826 +0,0 @@
-package org.codelutin.util;
-
-import java.io.*;
-
-/**
- * Fast implementation of RSA's MD5 hash generator in Java JDK Beta-2 or higher.
- * <p>
- * Originally written by Santeri Paavolainen, Helsinki Finland 1996.<br>
- * (c) Santeri Paavolainen, Helsinki Finland 1996<br>
- * Many changes Copyright (c) 2002 - 2008 Timothy W Macinta<br>
- * <p>
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * <p>
- * This library 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
- * Library General Public License for more details.
- * <p>
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- * <p>
- * See http://www.twmacinta.com/myjava/fast_md5.php for more information
- * on this file and the related files.
- * <p>
- * This was originally a rather straight re-implementation of the
- * reference implementation given in RFC1321 by RSA. It passes the MD5
- * test suite as defined in RFC1321.
- * <p>
- * Many optimizations made by Timothy W Macinta. Reduced time to checksum a
- * test file in Java alone to roughly half the time taken compared with
- * java.security.MessageDigest (within an intepretter). Also added an
- * optional native method to reduce the time even further.
- * See http://www.twmacinta.com/myjava/fast_md5.php for further information
- * on the time improvements achieved.
- * <p>
- * Some bug fixes also made by Timothy W Macinta.
- * <p>
- * Please note: I (Timothy Macinta) have put this code in the
- * com.twmacinta.util package only because it came without a package. I
- * was not the the original author of the code, although I did
- * optimize it (substantially) and fix some bugs.
- * <p>
- * This Java class has been derived from the RSA Data Security, Inc. MD5
- * Message-Digest Algorithm and its reference implementation.
- * <p>
- * This class will attempt to use a native method to quickly compute
- * checksums when the appropriate native library is available. On Linux,
- * this library should be named "MD5.so" and on Windows it should be
- * named "MD5.dll". The code will attempt to locate the library in the
- * following locations in the order given:
- *
- * <ol>
- * <li>The path specified by the system property
- * "com.twmacinta.util.MD5.NATIVE_LIB_FILE"
- * (be sure to include "MD5.so" or "MD5.dll"
- * as appropriate at the end of the path).
- * <li>A platform specific directory beneath the "lib/arch/" directory.
- * On Linux for x86, this is "lib/arch/linux_x86/". On Windows for
- * x86, this is "lib/arch/win32_x86/".
- * <li>Within the "lib/" directory.
- * <li>Within the current directory.
- * </ol>
- *
- * <p>
- * If the library is not found, the code will fall back to the default
- * (slower) Java code.
- * <p>
- * As a side effect of having the code search for the native library,
- * SecurityExceptions might be thrown on JVMs that have a restrictive
- * SecurityManager. The initialization code attempts to silently discard
- * these exceptions and continue, but many SecurityManagers will
- * attempt to notify the user directly of all SecurityExceptions thrown.
- * Consequently, the code has provisions for skipping the search for
- * the native library. Any of these provisions may be used to skip the
- * search as long as they are performed <i>before</i> the first
- * instance of a com.twmacinta.util.MD5 object is constructed (note that
- * the convenience stream objects will implicitly create an MD5 object).
- * <p>
- * The first option is to set the system property
- * "com.twmacinta.util.MD5.NO_NATIVE_LIB" to "true" or "1".
- * Unfortunately, SecurityManagers may also choose to disallow system
- * property setting, so this won't be of use in all cases.
- * <p>
- * The second option is to call
- * com.twmacinta.util.MD5.initNativeLibrary(true) before any MD5 objects
- * are constructed.
- *
- * @author Santeri Paavolainen <sjpaavol(a)cc.helsinki.fi>
- * @author Timothy W Macinta (twm(a)alum.mit.edu) (optimizations and bug fixes)
- */
-
-public class MD5 {
-
- /**
- * MD5 state
- **/
- MD5State state;
-
- /**
- * If Final() has been called, finals is set to the current finals
- * state. Any Update() causes this to be set to null.
- **/
- MD5State finals;
-
- /**
- * Padding for Final()
- **/
- static byte padding[] = {
- (byte) 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- };
-
- private static boolean native_lib_loaded = false;
- private static boolean native_lib_init_pending = true;
-
- /**
- * Initialize MD5 internal state (object can be reused just by
- * calling Init() after every Final()
- **/
- public synchronized void Init () {
- state = new MD5State();
- finals = null;
- }
-
- /**
- * Class constructor
- **/
- public MD5 () {
- if (native_lib_init_pending) _initNativeLibrary();
- this.Init();
- }
-
- /**
- * Initialize class, and update hash with ob.toString()
- *
- * @param ob Object, ob.toString() is used to update hash
- * after initialization
- **/
- public MD5 (Object ob) {
- this();
- Update(ob.toString());
- }
-
- private void Decode (byte buffer[], int shift, int[] out) {
- /*len += shift;
- for (int i = 0; shift < len; i++, shift += 4) {
- out[i] = ((int) (buffer[shift] & 0xff)) |
- (((int) (buffer[shift + 1] & 0xff)) << 8) |
- (((int) (buffer[shift + 2] & 0xff)) << 16) |
- (((int) buffer[shift + 3]) << 24);
- }*/
-
- // unrolled loop (original loop shown above)
-
- out[0] = ((int) (buffer[shift] & 0xff)) |
- (((int) (buffer[shift + 1] & 0xff)) << 8) |
- (((int) (buffer[shift + 2] & 0xff)) << 16) |
- (((int) buffer[shift + 3]) << 24);
- out[1] = ((int) (buffer[shift + 4] & 0xff)) |
- (((int) (buffer[shift + 5] & 0xff)) << 8) |
- (((int) (buffer[shift + 6] & 0xff)) << 16) |
- (((int) buffer[shift + 7]) << 24);
- out[2] = ((int) (buffer[shift + 8] & 0xff)) |
- (((int) (buffer[shift + 9] & 0xff)) << 8) |
- (((int) (buffer[shift + 10] & 0xff)) << 16) |
- (((int) buffer[shift + 11]) << 24);
- out[3] = ((int) (buffer[shift + 12] & 0xff)) |
- (((int) (buffer[shift + 13] & 0xff)) << 8) |
- (((int) (buffer[shift + 14] & 0xff)) << 16) |
- (((int) buffer[shift + 15]) << 24);
- out[4] = ((int) (buffer[shift + 16] & 0xff)) |
- (((int) (buffer[shift + 17] & 0xff)) << 8) |
- (((int) (buffer[shift + 18] & 0xff)) << 16) |
- (((int) buffer[shift + 19]) << 24);
- out[5] = ((int) (buffer[shift + 20] & 0xff)) |
- (((int) (buffer[shift + 21] & 0xff)) << 8) |
- (((int) (buffer[shift + 22] & 0xff)) << 16) |
- (((int) buffer[shift + 23]) << 24);
- out[6] = ((int) (buffer[shift + 24] & 0xff)) |
- (((int) (buffer[shift + 25] & 0xff)) << 8) |
- (((int) (buffer[shift + 26] & 0xff)) << 16) |
- (((int) buffer[shift + 27]) << 24);
- out[7] = ((int) (buffer[shift + 28] & 0xff)) |
- (((int) (buffer[shift + 29] & 0xff)) << 8) |
- (((int) (buffer[shift + 30] & 0xff)) << 16) |
- (((int) buffer[shift + 31]) << 24);
- out[8] = ((int) (buffer[shift + 32] & 0xff)) |
- (((int) (buffer[shift + 33] & 0xff)) << 8) |
- (((int) (buffer[shift + 34] & 0xff)) << 16) |
- (((int) buffer[shift + 35]) << 24);
- out[9] = ((int) (buffer[shift + 36] & 0xff)) |
- (((int) (buffer[shift + 37] & 0xff)) << 8) |
- (((int) (buffer[shift + 38] & 0xff)) << 16) |
- (((int) buffer[shift + 39]) << 24);
- out[10] = ((int) (buffer[shift + 40] & 0xff)) |
- (((int) (buffer[shift + 41] & 0xff)) << 8) |
- (((int) (buffer[shift + 42] & 0xff)) << 16) |
- (((int) buffer[shift + 43]) << 24);
- out[11] = ((int) (buffer[shift + 44] & 0xff)) |
- (((int) (buffer[shift + 45] & 0xff)) << 8) |
- (((int) (buffer[shift + 46] & 0xff)) << 16) |
- (((int) buffer[shift + 47]) << 24);
- out[12] = ((int) (buffer[shift + 48] & 0xff)) |
- (((int) (buffer[shift + 49] & 0xff)) << 8) |
- (((int) (buffer[shift + 50] & 0xff)) << 16) |
- (((int) buffer[shift + 51]) << 24);
- out[13] = ((int) (buffer[shift + 52] & 0xff)) |
- (((int) (buffer[shift + 53] & 0xff)) << 8) |
- (((int) (buffer[shift + 54] & 0xff)) << 16) |
- (((int) buffer[shift + 55]) << 24);
- out[14] = ((int) (buffer[shift + 56] & 0xff)) |
- (((int) (buffer[shift + 57] & 0xff)) << 8) |
- (((int) (buffer[shift + 58] & 0xff)) << 16) |
- (((int) buffer[shift + 59]) << 24);
- out[15] = ((int) (buffer[shift + 60] & 0xff)) |
- (((int) (buffer[shift + 61] & 0xff)) << 8) |
- (((int) (buffer[shift + 62] & 0xff)) << 16) |
- (((int) buffer[shift + 63]) << 24);
- }
-
- private native void Transform_native (int[] state, byte buffer[], int shift, int length);
-
- private void Transform (MD5State state, byte buffer[], int shift, int[] decode_buf) {
- int
- a = state.state[0],
- b = state.state[1],
- c = state.state[2],
- d = state.state[3],
- x[] = decode_buf;
-
- Decode(buffer, shift, decode_buf);
-
- /* Round 1 */
- a += ((b & c) | (~b & d)) + x[ 0] + 0xd76aa478; /* 1 */
- a = ((a << 7) | (a >>> 25)) + b;
- d += ((a & b) | (~a & c)) + x[ 1] + 0xe8c7b756; /* 2 */
- d = ((d << 12) | (d >>> 20)) + a;
- c += ((d & a) | (~d & b)) + x[ 2] + 0x242070db; /* 3 */
- c = ((c << 17) | (c >>> 15)) + d;
- b += ((c & d) | (~c & a)) + x[ 3] + 0xc1bdceee; /* 4 */
- b = ((b << 22) | (b >>> 10)) + c;
-
- a += ((b & c) | (~b & d)) + x[ 4] + 0xf57c0faf; /* 5 */
- a = ((a << 7) | (a >>> 25)) + b;
- d += ((a & b) | (~a & c)) + x[ 5] + 0x4787c62a; /* 6 */
- d = ((d << 12) | (d >>> 20)) + a;
- c += ((d & a) | (~d & b)) + x[ 6] + 0xa8304613; /* 7 */
- c = ((c << 17) | (c >>> 15)) + d;
- b += ((c & d) | (~c & a)) + x[ 7] + 0xfd469501; /* 8 */
- b = ((b << 22) | (b >>> 10)) + c;
-
- a += ((b & c) | (~b & d)) + x[ 8] + 0x698098d8; /* 9 */
- a = ((a << 7) | (a >>> 25)) + b;
- d += ((a & b) | (~a & c)) + x[ 9] + 0x8b44f7af; /* 10 */
- d = ((d << 12) | (d >>> 20)) + a;
- c += ((d & a) | (~d & b)) + x[10] + 0xffff5bb1; /* 11 */
- c = ((c << 17) | (c >>> 15)) + d;
- b += ((c & d) | (~c & a)) + x[11] + 0x895cd7be; /* 12 */
- b = ((b << 22) | (b >>> 10)) + c;
-
- a += ((b & c) | (~b & d)) + x[12] + 0x6b901122; /* 13 */
- a = ((a << 7) | (a >>> 25)) + b;
- d += ((a & b) | (~a & c)) + x[13] + 0xfd987193; /* 14 */
- d = ((d << 12) | (d >>> 20)) + a;
- c += ((d & a) | (~d & b)) + x[14] + 0xa679438e; /* 15 */
- c = ((c << 17) | (c >>> 15)) + d;
- b += ((c & d) | (~c & a)) + x[15] + 0x49b40821; /* 16 */
- b = ((b << 22) | (b >>> 10)) + c;
-
-
- /* Round 2 */
- a += ((b & d) | (c & ~d)) + x[ 1] + 0xf61e2562; /* 17 */
- a = ((a << 5) | (a >>> 27)) + b;
- d += ((a & c) | (b & ~c)) + x[ 6] + 0xc040b340; /* 18 */
- d = ((d << 9) | (d >>> 23)) + a;
- c += ((d & b) | (a & ~b)) + x[11] + 0x265e5a51; /* 19 */
- c = ((c << 14) | (c >>> 18)) + d;
- b += ((c & a) | (d & ~a)) + x[ 0] + 0xe9b6c7aa; /* 20 */
- b = ((b << 20) | (b >>> 12)) + c;
-
- a += ((b & d) | (c & ~d)) + x[ 5] + 0xd62f105d; /* 21 */
- a = ((a << 5) | (a >>> 27)) + b;
- d += ((a & c) | (b & ~c)) + x[10] + 0x02441453; /* 22 */
- d = ((d << 9) | (d >>> 23)) + a;
- c += ((d & b) | (a & ~b)) + x[15] + 0xd8a1e681; /* 23 */
- c = ((c << 14) | (c >>> 18)) + d;
- b += ((c & a) | (d & ~a)) + x[ 4] + 0xe7d3fbc8; /* 24 */
- b = ((b << 20) | (b >>> 12)) + c;
-
- a += ((b & d) | (c & ~d)) + x[ 9] + 0x21e1cde6; /* 25 */
- a = ((a << 5) | (a >>> 27)) + b;
- d += ((a & c) | (b & ~c)) + x[14] + 0xc33707d6; /* 26 */
- d = ((d << 9) | (d >>> 23)) + a;
- c += ((d & b) | (a & ~b)) + x[ 3] + 0xf4d50d87; /* 27 */
- c = ((c << 14) | (c >>> 18)) + d;
- b += ((c & a) | (d & ~a)) + x[ 8] + 0x455a14ed; /* 28 */
- b = ((b << 20) | (b >>> 12)) + c;
-
- a += ((b & d) | (c & ~d)) + x[13] + 0xa9e3e905; /* 29 */
- a = ((a << 5) | (a >>> 27)) + b;
- d += ((a & c) | (b & ~c)) + x[ 2] + 0xfcefa3f8; /* 30 */
- d = ((d << 9) | (d >>> 23)) + a;
- c += ((d & b) | (a & ~b)) + x[ 7] + 0x676f02d9; /* 31 */
- c = ((c << 14) | (c >>> 18)) + d;
- b += ((c & a) | (d & ~a)) + x[12] + 0x8d2a4c8a; /* 32 */
- b = ((b << 20) | (b >>> 12)) + c;
-
-
- /* Round 3 */
- a += (b ^ c ^ d) + x[ 5] + 0xfffa3942; /* 33 */
- a = ((a << 4) | (a >>> 28)) + b;
- d += (a ^ b ^ c) + x[ 8] + 0x8771f681; /* 34 */
- d = ((d << 11) | (d >>> 21)) + a;
- c += (d ^ a ^ b) + x[11] + 0x6d9d6122; /* 35 */
- c = ((c << 16) | (c >>> 16)) + d;
- b += (c ^ d ^ a) + x[14] + 0xfde5380c; /* 36 */
- b = ((b << 23) | (b >>> 9)) + c;
-
- a += (b ^ c ^ d) + x[ 1] + 0xa4beea44; /* 37 */
- a = ((a << 4) | (a >>> 28)) + b;
- d += (a ^ b ^ c) + x[ 4] + 0x4bdecfa9; /* 38 */
- d = ((d << 11) | (d >>> 21)) + a;
- c += (d ^ a ^ b) + x[ 7] + 0xf6bb4b60; /* 39 */
- c = ((c << 16) | (c >>> 16)) + d;
- b += (c ^ d ^ a) + x[10] + 0xbebfbc70; /* 40 */
- b = ((b << 23) | (b >>> 9)) + c;
-
- a += (b ^ c ^ d) + x[13] + 0x289b7ec6; /* 41 */
- a = ((a << 4) | (a >>> 28)) + b;
- d += (a ^ b ^ c) + x[ 0] + 0xeaa127fa; /* 42 */
- d = ((d << 11) | (d >>> 21)) + a;
- c += (d ^ a ^ b) + x[ 3] + 0xd4ef3085; /* 43 */
- c = ((c << 16) | (c >>> 16)) + d;
- b += (c ^ d ^ a) + x[ 6] + 0x04881d05; /* 44 */
- b = ((b << 23) | (b >>> 9)) + c;
-
- a += (b ^ c ^ d) + x[ 9] + 0xd9d4d039; /* 33 */
- a = ((a << 4) | (a >>> 28)) + b;
- d += (a ^ b ^ c) + x[12] + 0xe6db99e5; /* 34 */
- d = ((d << 11) | (d >>> 21)) + a;
- c += (d ^ a ^ b) + x[15] + 0x1fa27cf8; /* 35 */
- c = ((c << 16) | (c >>> 16)) + d;
- b += (c ^ d ^ a) + x[ 2] + 0xc4ac5665; /* 36 */
- b = ((b << 23) | (b >>> 9)) + c;
-
-
- /* Round 4 */
- a += (c ^ (b | ~d)) + x[ 0] + 0xf4292244; /* 49 */
- a = ((a << 6) | (a >>> 26)) + b;
- d += (b ^ (a | ~c)) + x[ 7] + 0x432aff97; /* 50 */
- d = ((d << 10) | (d >>> 22)) + a;
- c += (a ^ (d | ~b)) + x[14] + 0xab9423a7; /* 51 */
- c = ((c << 15) | (c >>> 17)) + d;
- b += (d ^ (c | ~a)) + x[ 5] + 0xfc93a039; /* 52 */
- b = ((b << 21) | (b >>> 11)) + c;
-
- a += (c ^ (b | ~d)) + x[12] + 0x655b59c3; /* 53 */
- a = ((a << 6) | (a >>> 26)) + b;
- d += (b ^ (a | ~c)) + x[ 3] + 0x8f0ccc92; /* 54 */
- d = ((d << 10) | (d >>> 22)) + a;
- c += (a ^ (d | ~b)) + x[10] + 0xffeff47d; /* 55 */
- c = ((c << 15) | (c >>> 17)) + d;
- b += (d ^ (c | ~a)) + x[ 1] + 0x85845dd1; /* 56 */
- b = ((b << 21) | (b >>> 11)) + c;
-
- a += (c ^ (b | ~d)) + x[ 8] + 0x6fa87e4f; /* 57 */
- a = ((a << 6) | (a >>> 26)) + b;
- d += (b ^ (a | ~c)) + x[15] + 0xfe2ce6e0; /* 58 */
- d = ((d << 10) | (d >>> 22)) + a;
- c += (a ^ (d | ~b)) + x[ 6] + 0xa3014314; /* 59 */
- c = ((c << 15) | (c >>> 17)) + d;
- b += (d ^ (c | ~a)) + x[13] + 0x4e0811a1; /* 60 */
- b = ((b << 21) | (b >>> 11)) + c;
-
- a += (c ^ (b | ~d)) + x[ 4] + 0xf7537e82; /* 61 */
- a = ((a << 6) | (a >>> 26)) + b;
- d += (b ^ (a | ~c)) + x[11] + 0xbd3af235; /* 62 */
- d = ((d << 10) | (d >>> 22)) + a;
- c += (a ^ (d | ~b)) + x[ 2] + 0x2ad7d2bb; /* 63 */
- c = ((c << 15) | (c >>> 17)) + d;
- b += (d ^ (c | ~a)) + x[ 9] + 0xeb86d391; /* 64 */
- b = ((b << 21) | (b >>> 11)) + c;
-
- state.state[0] += a;
- state.state[1] += b;
- state.state[2] += c;
- state.state[3] += d;
- }
-
- /**
- * Updates hash with the bytebuffer given (using at maximum length bytes from
- * that buffer)
- *
- * @param stat Which state is updated
- * @param buffer Array of bytes to be hashed
- * @param offset Offset to buffer array
- * @param length Use at maximum `length' bytes (absolute
- * maximum is buffer.length)
- */
- public void Update (MD5State stat, byte buffer[], int offset, int length) {
- int index, partlen, i, start;
- finals = null;
-
- /* Length can be told to be shorter, but not inter */
- if ((length - offset)> buffer.length)
- length = buffer.length - offset;
-
- /* compute number of bytes mod 64 */
-
- index = (int) (stat.count & 0x3f);
- stat.count += length;
-
- partlen = 64 - index;
-
- if (length >= partlen) {
-
- // update state (using native method) to reflect input
-
- if (native_lib_loaded) {
- if (partlen == 64) {
- partlen = 0;
- } else {
- for (i = 0; i < partlen; i++)
- stat.buffer[i + index] = buffer[i + offset];
- Transform_native(stat.state, stat.buffer, 0, 64);
- }
- i = partlen + ((length - partlen) / 64) * 64;
-
- // break into chunks to guard against stack overflow in JNI
-
- int transformLength = length - partlen;
- int transformOffset = partlen + offset;
- final int MAX_LENGTH = 65536; // prevent stack overflow in JNI
- while (true) {
- if (transformLength > MAX_LENGTH) {
- Transform_native(stat.state, buffer, transformOffset, MAX_LENGTH);
- transformLength -= MAX_LENGTH;
- transformOffset += MAX_LENGTH;
- } else {
- Transform_native(stat.state, buffer, transformOffset, transformLength);
- break;
- }
- }
- }
-
- // update state (using only Java) to reflect input
-
- else {
- int[] decode_buf = new int[16];
- if (partlen == 64) {
- partlen = 0;
- } else {
- for (i = 0; i < partlen; i++)
- stat.buffer[i + index] = buffer[i + offset];
- Transform(stat, stat.buffer, 0, decode_buf);
- }
- for (i = partlen; (i + 63) < length; i+= 64) {
- Transform(stat, buffer, i + offset, decode_buf);
- }
- }
- index = 0;
- } else {
- i = 0;
- }
-
- /* buffer remaining input */
- if (i < length) {
- start = i;
- for (; i < length; i++) {
- stat.buffer[index + i - start] = buffer[i + offset];
- }
- }
- }
-
- /*
- * Update()s for other datatypes than byte[] also. Update(byte[], int)
- * is only the main driver.
- */
-
- /**
- * Plain update, updates this object
- **/
- public void Update (byte buffer[], int offset, int length) {
- Update(this.state, buffer, offset, length);
- }
-
- public void Update (byte buffer[], int length) {
- Update(this.state, buffer, 0, length);
- }
-
- /**
- * Updates hash with given array of bytes
- *
- * @param buffer Array of bytes to use for updating the hash
- **/
- public void Update (byte buffer[]) {
- Update(buffer, 0, buffer.length);
- }
-
- /**
- * Updates hash with a single byte
- *
- * @param b Single byte to update the hash
- **/
- public void Update (byte b) {
- byte buffer[] = new byte[1];
- buffer[0] = b;
-
- Update(buffer, 1);
- }
-
- /**
- * Update buffer with given string. Note that because the version of
- * the s.getBytes() method without parameters is used to convert the
- * string to a byte array, the results of this method may be different
- * on different platforms. The s.getBytes() method converts the string
- * into a byte array using the current platform's default character set
- * and may therefore have different results on platforms with different
- * default character sets. If a version that works consistently
- * across platforms with different default character sets is desired,
- * use the overloaded version of the Update() method which takes a
- * string and a character encoding.
- *
- * @param s String to be update to hash (is used as s.getBytes())
- **/
- public void Update (String s) {
- byte chars[] = s.getBytes();
- Update(chars, chars.length);
- }
-
- /**
- * Update buffer with given string using the given encoding. If the
- * given encoding is null, the encoding "ISO8859_1" is used.
- *
- * @param s String to be update to hash (is used as
- * s.getBytes(charset_name))
- * @param charset_name The character set to use to convert s to a
- * byte array, or null if the "ISO8859_1"
- * character set is desired.
- * @exception java.io.UnsupportedEncodingException If the named
- * charset is not supported.
- **/
- public void Update (String s, String charset_name) throws java.io.UnsupportedEncodingException {
- if (charset_name == null) charset_name = "ISO8859_1";
- byte chars[] = s.getBytes(charset_name);
- Update(chars, chars.length);
- }
-
- /**
- * Update buffer with a single integer (only & 0xff part is used,
- * as a byte)
- *
- * @param i Integer value, which is then converted to byte as i & 0xff
- **/
- public void Update (int i) {
- Update((byte) (i & 0xff));
- }
-
- private byte[] Encode (int input[], int len) {
- int i, j;
- byte out[];
-
- out = new byte[len];
-
- for (i = j = 0; j < len; i++, j += 4) {
- out[j] = (byte) (input[i] & 0xff);
- out[j + 1] = (byte) ((input[i] >>> 8) & 0xff);
- out[j + 2] = (byte) ((input[i] >>> 16) & 0xff);
- out[j + 3] = (byte) ((input[i] >>> 24) & 0xff);
- }
-
- return out;
- }
-
- /**
- * Returns array of bytes (16 bytes) representing hash as of the
- * current state of this object. Note: getting a hash does not
- * invalidate the hash object, it only creates a copy of the real
- * state which is finalized.
- *
- * @return Array of 16 bytes, the hash of all updated bytes
- **/
- public synchronized byte[] Final () {
- byte bits[];
- int index, padlen;
- MD5State fin;
-
- if (finals == null) {
- fin = new MD5State(state);
-
- int[] count_ints = {(int) (fin.count << 3), (int) (fin.count >> 29)};
- bits = Encode(count_ints, 8);
-
- index = (int) (fin.count & 0x3f);
- padlen = (index < 56) ? (56 - index) : (120 - index);
-
- Update(fin, padding, 0, padlen);
- Update(fin, bits, 0, 8);
-
- /* Update() sets finals to null */
- finals = fin;
- }
-
- return Encode(finals.state, 16);
- }
-
- private static final char[] HEX_CHARS = {'0', '1', '2', '3',
- '4', '5', '6', '7',
- '8', '9', 'a', 'b',
- 'c', 'd', 'e', 'f',};
-
- /**
- * Turns array of bytes into string representing each byte as
- * unsigned hex number.
- *
- * @param hash Array of bytes to convert to hex-string
- * @return Generated hex string
- */
- public static String asHex (byte hash[]) {
- char buf[] = new char[hash.length * 2];
- for (int i = 0, x = 0; i < hash.length; i++) {
- buf[x++] = HEX_CHARS[(hash[i] >>> 4) & 0xf];
- buf[x++] = HEX_CHARS[hash[i] & 0xf];
- }
- return new String(buf);
- }
-
- /**
- * Returns 32-character hex representation of this objects hash
- *
- * @return String of this object's hash
- */
- public String asHex () {
- return asHex(this.Final());
- }
-
- public static synchronized final void initNativeLibrary (boolean disallow_lib_loading) {
- if (disallow_lib_loading) {
- native_lib_init_pending = false;
- } else {
- _initNativeLibrary();
- }
- }
-
- private static synchronized final void _initNativeLibrary () {
- if (!native_lib_init_pending) return;
- native_lib_loaded = _loadNativeLibrary();
- native_lib_init_pending = false;
- }
-
- private static synchronized final boolean _loadNativeLibrary () {
- try {
-
- // don't try to load if the right property is set
-
- String prop = System.getProperty("com.twmacinta.util.MD5.NO_NATIVE_LIB");
- if (prop != null) {
- prop = prop.trim();
- if (prop.equalsIgnoreCase("true") || prop.equals("1")) return false;
- }
-
- // the library to load can be specified as a property
-
- File f;
- prop = System.getProperty("com.twmacinta.util.MD5.NATIVE_LIB_FILE");
- if (prop != null) {
- f = new File(prop);
- if (f.canRead()) {
- System.load(f.getAbsolutePath());
- return true;
- }
- }
-
- // determine the operating system and architecture
-
- String os_name = System.getProperty("os.name");
- String os_arch = System.getProperty("os.arch");
- if (os_name == null || os_arch == null) return false;
- os_name = os_name.toLowerCase();
- os_arch = os_arch.toLowerCase();
-
- // define settings which are OS arch architecture independent
-
- File arch_lib_path = null;
- String arch_libfile_suffix = null;
-
- // fill in settings for Linux on x86
-
- if (os_name.equals("linux") &&
- (os_arch.equals("x86") ||
- os_arch.equals("i386") ||
- os_arch.equals("i486") ||
- os_arch.equals("i586") ||
- os_arch.equals("i686"))) {
- arch_lib_path = new File(new File(new File("lib"), "arch"), "linux_x86");
- arch_libfile_suffix = ".so";
- }
-
- // fill in settings for Windows on x86
-
- else if (os_name.startsWith("windows ") &&
- (os_arch.equals("x86") ||
- os_arch.equals("i386") ||
- os_arch.equals("i486") ||
- os_arch.equals("i586") ||
- os_arch.equals("i686"))) {
- arch_lib_path = new File(new File(new File("lib"), "arch"), "win32_x86");
- arch_libfile_suffix = ".dll";
- }
-
- // fill in settings for Mac OS X on PPC
-
- else if (os_name.startsWith("mac os x") &&
- (os_arch.equals("ppc"))) {
- arch_lib_path = new File(new File(new File("lib"), "arch"), "darwin_ppc");
- arch_libfile_suffix = ".jnilib";
- }
-
- // fill in settings for Mac OS X on x86
-
- else if (os_name.startsWith("mac os x") &&
- (os_arch.equals("x86") ||
- os_arch.equals("i386") ||
- os_arch.equals("i486") ||
- os_arch.equals("i586") ||
- os_arch.equals("i686"))) {
- arch_lib_path = new File(new File(new File("lib"), "arch"), "darwin_x86");
- arch_libfile_suffix = ".jnilib";
- }
-
- // default to .so files with no architecture specific subdirectory
-
- else {
- arch_libfile_suffix = ".so";
- }
-
- // build the required filename
-
- String fname = "MD5" + arch_libfile_suffix;
-
- // try the architecture specific directory
-
- if (arch_lib_path != null) {
- f = new File(arch_lib_path, fname);
- if (f.canRead()) {
- System.load(f.getAbsolutePath());
- return true;
- }
- }
-
- // try the "lib" subdirectory
-
- f = new File(new File("lib"), fname);
- if (f.canRead()) {
- System.load(f.getAbsolutePath());
- return true;
- }
-
- // try the working directory
-
- f = new File(fname);
- if (f.canRead()) {
- System.load(f.getAbsolutePath());
- return true;
- }
- }
-
- // discard SecurityExceptions
-
- catch (SecurityException e) {}
-
- // unable to load
-
- return false;
- }
-
- /**
- * Calculates and returns the hash of the contents of the given file.
- **/
- public static byte[] getHash (File f) throws IOException {
- if (!f.exists()) throw new FileNotFoundException(f.toString());
- InputStream close_me = null;
- try {
- long buf_size = f.length();
- if (buf_size < 512) buf_size = 512;
- if (buf_size > 65536) buf_size = 65536;
- byte[] buf = new byte[(int) buf_size];
- MD5InputStream in = new MD5InputStream(new FileInputStream(f));
- close_me = in;
- while (in.read(buf) != -1);
- in.close();
- return in.hash();
- } catch (IOException e) {
- if (close_me != null) try { close_me.close(); } catch (Exception e2) {}
- throw e;
- }
- }
-
- /**
- * @return true iff the first 16 bytes of both hash1 and hash2 are
- * equal; both hash1 and hash2 are null; or either hash
- * array is less than 16 bytes in length and their lengths and
- * all of their bytes are equal.
- **/
- public static boolean hashesEqual (byte[] hash1, byte[] hash2) {
- if (hash1 == null) return hash2 == null;
- if (hash2 == null) return false;
- int targ = 16;
- if (hash1.length < 16) {
- if (hash2.length != hash1.length) return false;
- targ = hash1.length;
- } else if (hash2.length < 16) {
- return false;
- }
- for (int i = 0; i < targ; i++) {
- if (hash1[i] != hash2[i]) return false;
- }
- return true;
- }
-
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/MD5InputStream.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/MD5InputStream.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/MD5InputStream.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,169 +0,0 @@
-package org.codelutin.util;
-
-import java.io.*;
-
-/**
- * MD5InputStream, a subclass of FilterInputStream implementing MD5
- * functionality on a stream.
- * <p>
- * Originally written by Santeri Paavolainen, Helsinki Finland 1996 <br>
- * (c) Santeri Paavolainen, Helsinki Finland 1996 <br>
- * Some changes Copyright (c) 2002 Timothy W Macinta <br>
- * <p>
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * <p>
- * This library 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
- * Library General Public License for more details.
- * <p>
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- * <p>
- * See http://www.twmacinta.com/myjava/fast_md5.php for more information
- * on this file.
- * <p>
- * Please note: I (Timothy Macinta) have put this code in the
- * com.twmacinta.util package only because it came without a package. I
- * was not the the original author of the code, although I did
- * optimize it (substantially) and fix some bugs.
- *
- * @author Santeri Paavolainen <santtu(a)cs.hut.fi>
- * @author Timothy W Macinta (twm(a)alum.mit.edu) (added main() method)
- **/
-
-
-public class MD5InputStream extends FilterInputStream {
- /**
- * MD5 context
- */
- private MD5 md5;
-
- /**
- * Creates a MD5InputStream
- * @param in The input stream
- */
- public MD5InputStream (InputStream in) {
- super(in);
-
- md5 = new MD5();
- }
-
- /**
- * Read a byte of data.
- * @see java.io.FilterInputStream
- */
- public int read() throws IOException {
- int c = in.read();
-
- if (c == -1)
- return -1;
-
- if ((c & ~0xff) != 0) {
- System.out.println("MD5InputStream.read() got character with (c & ~0xff) != 0)!");
- } else {
- md5.Update(c);
- }
-
- return c;
- }
-
- /**
- * Reads into an array of bytes.
- *
- * @see java.io.FilterInputStream
- */
- public int read (byte bytes[], int offset, int length) throws IOException {
- int r;
-
- if ((r = in.read(bytes, offset, length)) == -1)
- return r;
-
- md5.Update(bytes, offset, r);
-
- return r;
- }
-
- /**
- * Returns array of bytes representing hash of the stream as
- * finalized for the current state.
- * @see MD5#Final
- */
- public byte[] hash () {
- return md5.Final();
- }
-
- public MD5 getMD5() {
- return md5;
- }
-
- /**
- * This method is here for testing purposes only - do not rely
- * on it being here.
- **/
- public static void main(String[] arg) {
- try {
-
- ////////////////////////////////////////////////////////////////
- //
- // usage: java com.twmacinta.util.MD5InputStream [--use-default-md5] [--no-native-lib] filename
- //
- /////////
-
- // determine the filename to use and the MD5 impelementation to use
-
- String filename = arg[arg.length-1];
- boolean use_default_md5 = false;
- boolean use_native_lib = true;
- for (int i = 0; i < arg.length-1; i++) {
- if (arg[i].equals("--use-default-md5")) {
- use_default_md5 = true;
- } else if (arg[i].equals("--no-native-lib")) {
- use_native_lib = false;
- }
- }
-
- // initialize common variables
-
- byte[] buf = new byte[65536];
- int num_read;
-
- // Use the default MD5 implementation that comes with Java
-
- if (use_default_md5) {
- InputStream in = new BufferedInputStream(new FileInputStream(filename));
- java.security.MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
- while ((num_read = in.read(buf)) != -1) {
- digest.update(buf, 0, num_read);
- }
- System.out.println(MD5.asHex(digest.digest())+" "+filename);
- in.close();
-
- // Use the optimized MD5 implementation
-
- } else {
-
- // disable the native library search, if requested
-
- if (!use_native_lib) {
- MD5.initNativeLibrary(true);
- }
-
- // calculate the checksum
-
- MD5InputStream in = new MD5InputStream(new BufferedInputStream(new FileInputStream(filename)));
- while ((num_read = in.read(buf)) != -1);
- System.out.println(MD5.asHex(in.hash())+" "+filename);
- in.close();
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
-}
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/MD5OutputStream.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/MD5OutputStream.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/MD5OutputStream.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,117 +0,0 @@
-package org.codelutin.util;
-
-import java.io.*;
-
-/**
- * MD5OutputStream is a subclass of FilterOutputStream adding MD5
- * hashing of the output.
- * <p>
- * Originally written by Santeri Paavolainen, Helsinki Finland 1996 <br>
- * (c) Santeri Paavolainen, Helsinki Finland 1996 <br>
- * Some changes Copyright (c) 2002 Timothy W Macinta <br>
- * <p>
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * <p>
- * This library 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
- * Library General Public License for more details.
- * <p>
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- * <p>
- * See http://www.twmacinta.com/myjava/fast_md5.php for more information
- * on this file.
- * <p>
- * Please note: I (Timothy Macinta) have put this code in the
- * com.twmacinta.util package only because it came without a package. I
- * was not the the original author of the code, although I did
- * optimize it (substantially) and fix some bugs.
- *
- * @author Santeri Paavolainen <santtu(a)cs.hut.fi>
- * @author Timothy W Macinta (twm(a)alum.mit.edu) (added main() method)
- **/
-
-public class MD5OutputStream extends FilterOutputStream {
- /**
- * MD5 context
- */
- private MD5 md5;
-
- /**
- * Creates MD5OutputStream
- * @param out The output stream
- */
-
- public MD5OutputStream (OutputStream out) {
- super(out);
-
- md5 = new MD5();
- }
-
- /**
- * Writes a byte.
- *
- * @see java.io.FilterOutputStream
- */
-
- public void write (int b) throws IOException {
- out.write(b);
- md5.Update((byte) b);
- }
-
- /**
- * Writes a sub array of bytes.
- *
- * @see java.io.FilterOutputStream
- */
-
- public void write (byte b[], int off, int len) throws IOException {
- out.write(b, off, len);
- md5.Update(b, off, len);
- }
-
- /**
- * Returns array of bytes representing hash of the stream as finalized
- * for the current state.
- * @see MD5#Final
- */
-
- public byte[] hash () {
- return md5.Final();
- }
-
- public MD5 getMD5() {
- return md5;
- }
-
- /*
- * This method is here for testing purposes only - do not rely
- * on it being here.
- *
- public static void main(String[] arg) {
- try {
- MD5OutputStream out = new MD5OutputStream(new com.twmacinta.io.NullOutputStream());
- InputStream in = new BufferedInputStream(new FileInputStream(arg[0]));
- byte[] buf = new byte[65536];
- int num_read;
- long total_read = 0;
- while ((num_read = in.read(buf)) != -1) {
- total_read += num_read;
- out.write(buf, 0, num_read);
- }
- System.out.println(MD5.asHex(out.hash())+" "+arg[0]);
- in.close();
- out.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }*/
-
-
-}
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/MD5State.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/MD5State.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/MD5State.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,79 +0,0 @@
-package org.codelutin.util;
-
-/**
- * Fast implementation of RSA's MD5 hash generator in Java JDK Beta-2 or higher<br>
- * Originally written by Santeri Paavolainen, Helsinki Finland 1996 <br>
- * (c) Santeri Paavolainen, Helsinki Finland 1996 <br>
- * Some changes Copyright (c) 2002 Timothy W Macinta <br>
- * <p>
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- * <p>
- * This library 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
- * Library General Public License for more details.
- * <p>
- * You should have received a copy of the GNU Library General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- * <p>
- * See http://www.twmacinta.com/myjava/fast_md5.php for more information
- * on this file.
- * <p>
- * Contains internal state of the MD5 class
- * <p>
- * Please note: I (Timothy Macinta) have put this code in the
- * com.twmacinta.util package only because it came without a package. I
- * was not the the original author of the code, although I did
- * optimize it (substantially) and fix some bugs.
- *
- * @author Santeri Paavolainen <sjpaavol(a)cc.helsinki.fi>
- * @author Timothy W Macinta (twm(a)alum.mit.edu) (optimizations and bug fixes)
- **/
-
-class MD5State {
- /**
- * 128-bit state
- */
- int state[];
-
- /**
- * 64-bit character count
- */
- long count;
-
- /**
- * 64-byte buffer (512 bits) for storing to-be-hashed characters
- */
- byte buffer[];
-
- public MD5State() {
- buffer = new byte[64];
- count = 0;
- state = new int[4];
-
- state[0] = 0x67452301;
- state[1] = 0xefcdab89;
- state[2] = 0x98badcfe;
- state[3] = 0x10325476;
-
- }
-
- /** Create this State as a copy of another state */
- public MD5State (MD5State from) {
- this();
-
- int i;
-
- for (i = 0; i < buffer.length; i++)
- this.buffer[i] = from.buffer[i];
-
- for (i = 0; i < state.length; i++)
- this.state[i] = from.state[i];
-
- this.count = from.count;
- }
-};
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/MonthEnum.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/MonthEnum.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/MonthEnum.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,70 +0,0 @@
-/*
-* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-package org.codelutin.util;
-
-import static org.codelutin.i18n.I18n._;
-
-/**
- * Une énumération pour représenter les mois d'une année.
- *
- * @author chemit
- */
-
-public enum MonthEnum {
- JANUARY(_("lutinutil.month.january")),
- FEBRUARY(_("lutinutil.month.february")),
- MARCH(_("lutinutil.month.march")),
- APRIL(_("lutinutil.month.april")),
- MAY(_("lutinutil.month.may")),
- JUNE(_("lutinutil.month.june")),
- JULY(_("lutinutil.month.july")),
- AUGUST(_("lutinutil.month.august")),
- SEPTEMBER(_("lutinutil.month.september")),
- OCTOBER(_("lutinutil.month.october")),
- NOVEMBER(_("lutinutil.month.november")),
- DECEMBER(_("lutinutil.month.december"));
-
- private final String libelle;
-
- MonthEnum(String libelle) {
- this.libelle = libelle;
- }
-
- public String getLibelle() {
- return libelle;
- }
-
- public static MonthEnum valueOf(String month, MonthEnum defaultValue) {
- MonthEnum monthEnum = null;
- try {
- monthEnum = MonthEnum.valueOf(month.toUpperCase());
- } catch (IllegalArgumentException e) {
- System.err.println(_("lutinutil.error.unfound.month", month, defaultValue));
- } catch (NullPointerException e) {
- System.err.println(_("lutinutil.error.unfound.month", month, defaultValue));
- }
- return monthEnum == null ? defaultValue : monthEnum;
- }
-
- @Override
- public String toString() {
- // on force la traduction (au cas où i18n n'était pas ini au moment
- // du chargement de l'enum...)
- return _(libelle);
- }
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ObjectUtil.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ObjectUtil.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ObjectUtil.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,402 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * ObjectUtil.java
- *
- * Created: 2 nov. 2004
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-
-package org.codelutin.util;
-
-import java.lang.reflect.Array;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-
-import static org.codelutin.i18n.I18n._;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import org.apache.commons.beanutils.BeanUtils;
-import org.apache.commons.beanutils.ConvertUtils;
-
-public class ObjectUtil { // ObjectUtil
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static private Log log = LogFactory.getLog(ObjectUtil.class);
-
- /**
- * ObjectUtil constructor
- * private because of this class is a static class : nobody
- * can make an instance of this class
- */
- private ObjectUtil() {}
-
- /**
- * Create new object from string like org.codelutin.Toto(name=machine, int=10)
- * where machine and int is properties on org.codelutin.Toto object.
- * Conversion between 10 in string and 10 as integer as automaticaly done
- *
- * For String property you can use ex:
- * <li> name="my string with , in string"
- * <li> name='my string with , in string'
- *
- * @param classnameAndProperties
- * @return the instanciated object
- * @throws ClassNotFoundException
- * @throws IllegalAccessException
- * @throws InstantiationException
- * @throws NoSuchMethodException
- * @throws InvocationTargetException
- */
- public static Object create(String classnameAndProperties) throws ClassNotFoundException, InstantiationException, IllegalAccessException, InvocationTargetException, NoSuchMethodException {
- int p = classnameAndProperties.indexOf('(');
- int l = classnameAndProperties.lastIndexOf(')');
- String [] properties = null;
- String classname = null;
- if (p != -1) {
- String tmp = classnameAndProperties.substring(p + 1, l);
- properties = StringUtil.split(tmp, ",");
- classname = classnameAndProperties.substring(0, p);
- } else {
- classname = classnameAndProperties;
- }
- Class<?> clazz = Thread.currentThread().getContextClassLoader().loadClass(classname);
- Object o = clazz.newInstance();
- if (properties != null) {
- for (String prop : properties) {
- int e = prop.indexOf('=');
- String propName = prop.substring(0, e).trim();
- String propValue = prop.substring(e+1).trim();
- if (propValue.charAt(0) == '"' && propValue.charAt(propValue.length()-1) == '"') {
- propValue = propValue.substring(1, propValue.length()-1);
- } else if (propValue.charAt(0) == '\'' && propValue.charAt(propValue.length()-1) == '\'') {
- propValue = propValue.substring(1, propValue.length()-1);
- }
- BeanUtils.setProperty(o, propName, propValue);
- }
- }
- return o;
- }
-
- static protected Object convert(String v, Class<?> clazz) {
- Object t = ConvertUtils.convert(v, clazz);
-
- if (t != null &&
- !String.class.getName().equals(clazz.getName()) &&
- String.class.getName().equals(t.getClass().getName())) {
- throw new IllegalArgumentException(String.format(
- "Can convert argument to correct type. %s can't be" +
- " converted from String to %s conversion is done to %s",
- v, clazz.getName(), t.getClass().getName()));
- }
- return t;
- }
-
- /**
- * Call method m with params as String. Each param is converted to required type for
- * method with beanutils converter
- * @param o object where method must be call
- * @param m method to call
- * @param params parameters for method call
- * @return returned method's value
- * @throws IllegalAccessException
- * @throws IllegalArgumentException
- * @throws InvocationTargetException
- * @throws InstantiationException
- */
- public static Object call(Object o, Method m, String ... params)
- throws IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException {
- Class<?>[] types = m.getParameterTypes();
- if (!m.isVarArgs() && params.length != types.length) {
- throw new IllegalArgumentException(String.format(
- "Bad number params we have %1$s parameters and waiting %2$s.",
- params.length, types.length));
- }
-
- int last = types.length;
- if (m.isVarArgs()) {
- // on traite le dernier differement
- last--;
- }
-
- Object[] parameters = new Object[types.length];
- for (int i=0; i<last; i++) {
- String v = params[i];
- Class<?> clazz = types[i];
- Object t = convert(v, clazz);
- parameters[i] = t;
- }
-
- if (m.isVarArgs()) {
- Class<?> clazz = types[last]; // get var args type
- clazz = clazz.getComponentType(); // get array component type
- List<Object> tmp = new ArrayList<Object>();
- for (int i=last; i<params.length; i++) {
- String v = params[i];
- Object t = convert(v, clazz);
- tmp.add(t);
- }
- parameters[last] = tmp.toArray((Object[])Array.newInstance(clazz, tmp.size()));
- }
-
- if (log.isDebugEnabled()) {
- log.debug(_("lutinutil.debug.objectutil.invoke", m, Arrays.toString(parameters)));
- }
- Object result = m.invoke(o, parameters);
- return result;
- }
-
- /**
- * Get all methods with name given in argument without check parameters
- * @param clazz
- * @param methodName method name to search
- * @param ignoreCase if true, ignore difference in method name case
- * @return list of detected methods
- */
- public static List<Method> getMethod(Class<?> clazz, String methodName, boolean ignoreCase) {
- List<Method> result = new ArrayList<Method>();
-
- Method[] methods = clazz.getMethods();
- for (Method m : methods) {
- if(ignoreCase && methodName.equalsIgnoreCase(m.getName()) ||
- methodName.equals(m.getName())) {
- result.add(m);
- }
- }
-
- return result;
- }
-
- public static Object newInstance(String constructorWithParams) throws ClassNotFoundException {
- int p = constructorWithParams.indexOf('(');
- int l = constructorWithParams.lastIndexOf(')');
- String [] params = null;
- String classname = null;
- if (p != -1) {
- String tmp = constructorWithParams.substring(p + 1, l);
- params = StringUtil.split(tmp, ",");
- classname = constructorWithParams.substring(0, p);
- } else {
- classname = constructorWithParams;
- }
- Class<?> clazz = Thread.currentThread().getContextClassLoader().loadClass(classname);
- Object result = newInstance(clazz, params);
- return result;
- }
- /**
- * Create new instance of clazz, call constructor with params as String.
- * Each param is converted to required type for
- * constructor with beanutils converter, first constructor that permit
- * instanciation is used
- *
- * @param <T> type to instanciate
- * @param clazz class to instanciate
- * @param params parameters for constructor call
- * @return new instance of clazz
- * @throws IllegalArgumentException
- */
- public static <T> T newInstance(Class<T> clazz, String ... params)
- throws IllegalArgumentException {
- if (params == null) {
- params = new String[0];
- }
- List<Constructor<T>> constructors = getConstructor(clazz, params.length);
-
- for (Constructor<T> c : constructors) {
- try {
- Class<?>[] types = c.getParameterTypes();
-
- int last = types.length;
- if (c.isVarArgs()) {
- // on traite le dernier differement
- last--;
- }
-
- Object[] parameters = new Object[types.length];
- for (int i = 0; i < last; i++) {
- String v = params[i];
- Class<?> argClazz = types[i];
- Object t = convert(v, argClazz);
- parameters[i] = t;
- }
-
- if (c.isVarArgs()) {
- Class<?> argClazz = types[last]; // get var args type
- argClazz = argClazz.getComponentType(); // get array component type
- List<Object> tmp = new ArrayList<Object>();
- for (int i = last; i < params.length; i++) {
- String v = params[i];
- Object t = convert(v, argClazz);
- tmp.add(t);
- }
- parameters[last] = tmp.toArray((Object[]) Array.newInstance(argClazz, tmp.size()));
- }
-
- if (log.isDebugEnabled()) {
- log.debug(_("lutinutil.debug.objectutil.create", clazz, Arrays.toString(parameters)));
- }
- T result = c.newInstance(parameters);
-
- return result;
- } catch(Exception eee) {
- // this constructors don't work, try next
- if (log.isDebugEnabled()) {
- log.debug("Creation failed try with next constructor");
- }
- }
- }
- throw new IllegalArgumentException(_("lutinutil.debug.objectutil.instantiate",
- clazz, Arrays.toString(params)));
- }
-
- /**
- * Get all constructors that support paramNumber as parameters numbers.
- * Varargs is supported
- *
- * @param <T> le type de la classe a inspecter
- * @param clazz la classe sur lequel rechercher le constructeur
- * @param paramNumber le nombre de parametre souhaite pour le constructeur,
- * -1 indique que tous les constructeur sont souhaite.
- * @return list of constructors
- */
- @SuppressWarnings("unchecked")
- public static <T> List<Constructor<T>> getConstructor(Class<T> clazz, int paramNumber) {
- List<Constructor<T>> result = new ArrayList<Constructor<T>>();
- Constructor<T>[] constructors = (Constructor<T>[])clazz.getConstructors();
- for (Constructor<T> c : constructors) {
- if (paramNumber < 0 ||
- (c.isVarArgs() && c.getParameterTypes().length <= paramNumber - 1) ||
- c.getParameterTypes().length == paramNumber) {
- result.add(c);
- }
- }
-
- return result;
- }
-
- /**
- * Method toObject
- *
- * @param o Object to transform
- * @return the same object
- */
- public static Object toObject(Object o){
- return o;
- }
-
- /**
- * Method toObject
- *
- * transform a char to a Character Object
- * @param c the char to transform
- * @return the Charactere object corresponding
- */
- public static Object toObject(char c){
- return new Character(c);
- }
-
- /**
- * Method toObject
- *
- * transform a byte to a Byte Object
- * @param b the byte to transform
- * @return the byte object corresponding
- */
- public static Object toObject(byte b){
- return new Byte(b);
- }
-
- /**
- * Method toObject
- *
- * transform a short to a Short object
- * @param s the short to transform
- * @return the Short object corresponding
- */
- public static Object toObject(short s){
- return new Short(s);
- }
-
- /**
- * Method toObject
- *
- * transform an int to an Integer object
- * @param i the int to transform
- * @return the Integer Object corresponding
- */
- public static Object toObject(int i){
- return new Integer(i);
- }
-
- /**
- * Method toObject
- *
- * transform a long to a Long object
- * @param l the long to transform
- * @return the Long Object corresponding
- */
- public static Object toObject(long l){
- return new Long(l);
- }
-
- /**
- * Method toObject
- *
- * transform a float to a Float Object
- * @param f the float to transform
- * @return the Float Object corresponding
- */
- public static Object toObject(float f){
- return new Float(f);
- }
-
- /**
- * Method toObject
- *
- * transform a double to a Double object
- * @param d the double to transform
- * @return the Double object corresponding
- */
- public static Object toObject(double d){
- return new Double(d);
- }
-
- /**
- * Method toObject
- *
- * transform a boolean to a Boolean object
- * @param b the boolean to transform
- * @return the Boolean object corresponding
- */
- public static Object toObject(boolean b){
- return b?Boolean.TRUE:Boolean.FALSE;
- }
-
-} // ObjectUtil
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/PropertiesDateRemoveFilterStream.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/PropertiesDateRemoveFilterStream.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/PropertiesDateRemoveFilterStream.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,48 +0,0 @@
-/*
-* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-package org.codelutin.util;
-
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
-public class PropertiesDateRemoveFilterStream extends FilterOutputStream {
-
- private boolean firstLineOver;
- char endChar;
-
- public PropertiesDateRemoveFilterStream(OutputStream out) {
- super(out);
- firstLineOver = false;
- String lineSeparator = System.getProperty("line.separator");
- endChar = lineSeparator.charAt(lineSeparator.length() - 1);
- }
-
- @Override
- public void write(int b) throws IOException {
- if (!firstLineOver) {
- char c = (char) b;
- if (c == endChar) {
- firstLineOver = true;
- }
- } else {
- out.write(b);
- }
- }
-
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/RecursiveProperties.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/RecursiveProperties.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/RecursiveProperties.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,95 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * RecursiveProperties.java
- *
- * Created: 28 juil. 2005
- *
- * @author Arnaud Thimel <thimel(a)codelutin.com>
- * Copyright Code Lutin
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-
-package org.codelutin.util;
-
-import java.util.Properties;
-
-/**
- * Surcharge java.util.Properties de manière à aller chercher dans les
- * properties la valeur de la propriété si celle ci est encadrée par "${...}".
- * <p/>
- * Exemple :
- * myFirstName=Arnaud
- * myName=Thimel
- * org.codelutin.topia.userInfo.fullName=${fullName}
- * fullName=${myFirstName} ${myName}
- * namePhrase=My name is ${myName}.
- * instruction=Placez votre texte comme ceci : ${monTexte}
- * <p/>
- * Dans ce cas,
- * getProperty("org.codelutin.topia.userInfo.fullName") renverra "Arnaud Thimel"
- * getProperty("namePhrase") renverra "My name is Thimel."
- * getProperty("instruction") renverra "Placez votre texte comme ceci : ${monTexte}"
- *
- * @author thimel
- */
-public class RecursiveProperties extends Properties {
-
- private static final long serialVersionUID = -5012939272780929116L;
-
- public RecursiveProperties() {
- super();
- }
-
- public RecursiveProperties(Properties defaults) {
- super(defaults);
- }
-
- @Override
- public String getProperty(String key) {
- String result = super.getProperty(key);
- if (result == null)
- return null;
- //Ex : result="My name is ${myName}."
- int pos = result.indexOf("${", 0);
- //Ex : pos=11
- while (pos != -1) {
- int posEnd = result.indexOf("}", pos + 1);
- //Ex : posEnd=19
- if (posEnd != -1) {
- String value = getProperty(result.substring(pos + 2, posEnd));
- // Ex : getProperty("myName");
- if (value != null) {
- // Ex : value="Thimel"
- result = result.substring(0, pos) + value + result.substring(posEnd + 1);
- // Ex : result="My name is " + "Thimel" + "."
- pos = result.indexOf("${", pos + value.length());
- // Ex : pos=-1
- } else
- // Ex : value=null
- pos = result.indexOf("${", posEnd + 1);
- // Ex : pos=-1
- }
- }
- return result;
- }
-
-} //RecursiveProperties
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ReflectUtil.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ReflectUtil.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ReflectUtil.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,113 +0,0 @@
-/*
-* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-package org.codelutin.util;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.Modifier;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Des méthodes utiles d'introspection
- *
- * @author tony
- */
-public class ReflectUtil {
- /**
- * Pour déterminer si un champ d'une classe est une constante
- * (modifiers sont static, final et public)
- *
- * @param field le champs à tester
- * @return <code>true</code> si les modifiers sont final, static et public
- */
- public static boolean isConstantField(Field field) {
- int modifiers = field.getModifiers();
- return Modifier.isPublic(modifiers) && Modifier.isStatic(modifiers) && Modifier.isFinal(modifiers);
- }
-
- /**
- * Recherche dans une classe donnée <code>klazz</code>, les constantes d'un
- * certain type <code>searchingClass</code> et les retourne.
- * <p/>
- * L'algorithme parcourt aussi les superclasses.
- *
- * @param klass la classe contenant les constantes
- * @param searchingClass le type des champs constants à récupérer
- * @return la liste des champs du type requis dans
- * @throws RuntimeException si problème lors de la récupération
- */
- @SuppressWarnings({"unchecked"})
- public static <T> List<T> getConstants(Class<?> klass, Class<T> searchingClass) {
- List<T> result = new ArrayList<T>();
- for (Field field : klass.getDeclaredFields()) {
- if (!field.isAccessible()) {
- field.setAccessible(true);
- }
- if (searchingClass.isAssignableFrom(field.getType()) && isConstantField(field)) {
- try {
- result.add((T) field.get(null));
- } catch (IllegalAccessException e) {
- throw new RuntimeException(e);
- }
- }
- }
- Class<?> superClass = klass.getSuperclass();
- if (superClass != null) {
- result.addAll(getConstants(superClass, searchingClass));
- }
- return result;
- }
-
- /**
- * @param klass the required class
- * @param fieldName the required constant name
- * @return the constant value
- */
- @SuppressWarnings({"unchecked"})
- public static <T> T getConstant(Class<?> klass, String fieldName) {
- try {
- T result = null;
- Field f = klass.getDeclaredField(fieldName);
- if (isConstantField(f)) {
- f.setAccessible(true);
- result = (T) f.get(null);
- }
- return result;
- } catch (NoSuchFieldException e) {
- throw new RuntimeException(e);
- } catch (IllegalAccessException e) {
- throw new RuntimeException(e);
- }
- }
-
- /**
- * Convertit une classe non typée, en une classe d'enum
- *
- * @param type la classe à type
- * @return la classe typée
- * @throws IllegalArgumentException si le type est null ou non une extension
- * de la classe Enum.
- */
- @SuppressWarnings({"unchecked"})
- protected static <T extends Enum<T>> Class<T> getEnumClass(Class<?> type) throws IllegalArgumentException {
- if (type == null || !type.isEnum()) {
- throw new IllegalArgumentException(type + " should not be null, nor a non Enum ");
- }
- return (Class<T>) type;
- }
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/Resource.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/Resource.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/Resource.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,668 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/**
- * 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;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import static org.codelutin.i18n.I18n._;
-
-import javax.swing.ImageIcon;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.lang.reflect.Method;
-import java.net.MalformedURLException;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-import java.util.jar.Attributes;
-import java.util.jar.JarFile;
-import java.util.jar.Manifest;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-import java.util.zip.ZipInputStream;
-
-/**
- * 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);
-
- protected Resource() {
-
- }
-
- /**
- * 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) {
- ClassLoader classLoader = ClassLoader.getSystemClassLoader();
- addClassLoader(classLoader, url);
- }
-
- /**
- * Permet d'ajouter dans un classloader une nouvelle URL dans
- * lequel il faut rechercher les fichiers.
- *
- * @param classLoader le classloader a modifier
- * @param url l'url a ajouter
- */
- static public void addClassLoader(ClassLoader classLoader, URL url) {
- try {
- Method method = URLClassLoader.class.getDeclaredMethod("addURL",
- new Class[]{URL.class});
- method.setAccessible(true);
- method.invoke(classLoader, url);
- } catch (Exception eee) {
- throw new RuntimeException(_("lutinutil.error.add.url.in.classloader", classLoader, eee));
- //throw new RuntimeException("Can't add url in classloader " + 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
- */
- static public URL getURL(String name) {
- URL url = getURLOrNull(name);
- if (url != null) {
- return url;
- }
-
- throw new ResourceNotFoundException(_("lutinutil.error.resource.not.found", name));
- }
-
- /**
- * 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 {
- return file.toURI().toURL();
- } catch (MalformedURLException eee) {
- log.warn(_("lutinutil.error.convert.file.to.url", file, eee.getMessage()));
- }
- }
-
- // 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("/")) {
- name = name.substring(1);
- }
- URL url = ClassLoader.getSystemClassLoader().getResource(name);
- if (url != null) {
- return url;
- }
-
- ClassLoader cl = Resource.class.getClassLoader();
- url = cl.getResource(name);
- return url;
- }
-
- /**
- * 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 {
- return new ImageIcon(getURL(name));
- } catch (Exception eee) {
- log.warn("Can't find icon: " + name, eee);
- return null;
- }
- }
-
- /**
- * Recherche et retourne l'objet properties de configuration à utiliser.
- * <p/>
- * 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;
- }
-
- /**
- * Recherche et retourne l'objet properties de configuration à utiliser.
- * <p/>
- * 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);
- } else {
- result = new Properties();
- }
-
- URL inClasspath = ClassLoader.getSystemClassLoader().getResource(
- filename);
- if (inClasspath == null) {
- inClasspath = Resource.class.getResource(filename);
- }
- if (inClasspath == null) {
- inClasspath = getURLOrNull(filename);
- }
- 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()) {
- 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()) {
- log.info("Chargement du fichier de config: " + config);
- result.load(config.toURI().toURL().openStream());
- result = new Properties(result);
- }
-
- return result;
- }
-
- /**
- * 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);
- }
-
- /**
- * Recupere la liste des urls d'un {@link java.net.URLClassLoader}.
- * <p/>
- * Note : Un cas particulier est positionné pour JBoss qui utilise la method getAllURLs.
- *
- * @param classLoader le class loader a scanner
- * @return les urls du classloade.
- * @deprecated should use now {@link org.codelutin.util.ClassLoaderUtil#getURLs(java.net.URLClassLoader)}
- */
- static public URL[] getURLs(URLClassLoader classLoader) {
- return ClassLoaderUtil.getURLs(classLoader);
- }
-
- /**
- * 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();
- }
- URL[] arrayURL = ClassLoaderUtil.getURLs(classLoader);
- return getURLs(pattern, 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>();
-
- if (arrayURL.length == 1) {
- URL jarURL = arrayURL[0];
- if (isJar(jarURL.toString())) {
- // jar invocation
- try {
- arrayURL = getClassPathURLsFromJarManifest(jarURL);
- } catch (Exception e) {
- log.warn(e);
- arrayURL = new URL[]{jarURL};
- }
- }
- }
- if (log.isDebugEnabled()) {
- for (URL url : arrayURL) {
- log.debug("found url " + url);
- }
- }
-
- 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", " "));
- if (!file.exists()) {
- // this case should not appear
- continue;
- }
- if (isJar(fileName)) {
- // cas ou le ichier du classLoader est un fichier jar
- if (log.isDebugEnabled()) {
- log.debug("jar to search " + file);
- }
- urlList.addAll(Resource.getURLsFromJar(file, pattern));
- continue;
- }
- if (file.isDirectory()) {
- // cas ou le ichier du classLoader est un repertoire
- if (log.isDebugEnabled()) {
- log.debug("directory to search " + file);
- }
- // on traite le cas ou il peut y avoir des repertoire dans ce
- // repertoire
- urlList.addAll(Resource.getURLsFromDirectory(file, pattern));
- continue;
- }
-
- if (isZip(fileName)) {
- // cas ou le ichier du classLoader est un fichier zip
- if (log.isDebugEnabled()) {
- log.debug("zip to search " + file);
- }
- urlList.addAll(Resource.getURLsFromZip(file, pattern));
- }
-
- }
- if (log.isInfoEnabled()) {
- 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;
- URL[] result;
- try {
- String jarPath = jarURL.toURI().getPath();
- File jarFile = new File(jarPath);
- if (log.isDebugEnabled()) {
- log.debug("class-path jar to scan " + jarPath);
- }
- jar = new JarFile(jarFile);
- File container = jarFile.getParentFile();
- Manifest mf = jar.getManifest();
- String classPath = null;
- if (mf != null && mf.getMainAttributes() != null) {
- classPath = mf.getMainAttributes().getValue(Attributes.Name.CLASS_PATH);
- }
- String[] paths;
- if (classPath != null) {
- paths = classPath.split(" ");
- } else {
- paths = new String[0];
- }
- result = new URL[paths.length + 1];
- result[0] = jarURL;
- File path;
- for (int i = 0; i < paths.length; i++) {
- String s = paths[i];
- // test de l'existence d'un protocole dans le path (genre file:...)
- if (s.indexOf(':') != -1) {
- result[i + 1] = new URL(s);
- continue;
- }
-
- if (s.startsWith(".") || !s.startsWith("/")) {
- // relative url
- path = new File(container, s);
- } else {
- path = new File(s);
- }
- if (log.isDebugEnabled()) {
- log.debug(path);
- }
- result[i + 1] = path.toURI().toURL();
- }
- jar.close();
- } finally {
- if (jar != null) {
- jar.close();
- }
- }
- return result;
- }
-
- static public List<URL> getURLsFromZip(File zipFile, String pattern) {
- try {
- if (log.isTraceEnabled()) {
- log.trace("search '" + pattern + "' in " + zipFile);
- }
-
- ArrayList<URL> result = new ArrayList<URL>();
- InputStream in = new FileInputStream(zipFile);
- ZipInputStream zis = new ZipInputStream(in);
- while (zis.available() != 0) {
- ZipEntry entry = zis.getNextEntry();
-
- if (entry == null) {
- break;
- }
-
- String name = entry.getName();
- if (log.isTraceEnabled()) {
- log.trace("zipFile: " + zipFile + " name: " + name);
- }
- if (pattern == null || name.matches(pattern)) {
- // 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()) {
- log.trace("zipFile: " + zipFile + " url: " + url);
- }
- result.add(url);
- }
- }
- if (log.isTraceEnabled()) {
- log.trace("found with pattern '" + pattern + "' : " + result);
- }
- return result;
- } catch (IOException eee) {
- throw new ResourceException(_("lutinutil.error.get.url.from.zip", zipFile.getAbsolutePath(), eee.getMessage()));
- }
- }
-
- static public List<URL> getURLsFromJar(File jarfile, String pattern) {
- try {
- if (log.isTraceEnabled()) {
- log.trace("search '" + pattern + "' in " + jarfile);
- }
-
- ArrayList<URL> result = new ArrayList<URL>();
- InputStream in = new FileInputStream(jarfile);
- ZipInputStream zis = new ZipInputStream(in);
- while (zis.available() != 0) {
- ZipEntry entry = zis.getNextEntry();
-
- if (entry == null) {
- break;
- }
-
- String name = entry.getName();
- 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
- URL url = Resource.getURL(name);
- // 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()) {
- log.trace("found with pattern '" + pattern + "' : " + result);
- }
- return result;
- } catch (IOException eee) {
- throw new ResourceException(_("lutinutil.error.get.url.from.zip", jarfile.getAbsolutePath(), eee.getMessage()));
- }
- }
-
- /**
- * 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()) {
- log.trace("search '" + pattern + "' in " + repository);
- }
-
- HashList<URL> urlList = new HashList<URL>();
- File[] filesList = repository.listFiles();
-
- if (filesList != null) {
-
- for (File file : filesList) {
-
- String name = file.getAbsolutePath();
-
- if (log.isTraceEnabled()) {
- 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
- } else if (pattern == null || name.matches(pattern)) {
- URL url = file.toURI().toURL();
- if (log.isTraceEnabled()) {
- log.trace("directory: " + repository + " url: "
- + url);
- }
- urlList.add(url);
- }
- }
- }
- if (log.isTraceEnabled()) {
- log.trace("found with pattern '" + pattern + "' : " + urlList);
- }
- return urlList;
- } catch (MalformedURLException eee) {
- throw new ResourceException(_("lutinutil.error.convert.file.to.url", repository + " (pattern " + pattern + ") ", eee.getMessage()));
- //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) {
- if (name != null && name.length() > 4) {
- String ext = name.substring(name.length() - 4, name.length());
- return ".jar".equalsIgnoreCase(ext);
- }
- return false;
- }
-
- /**
- * 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);
- }
- return false;
- }
-
- /**
- * 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é.
- */
- 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;
- }
- return null;
- }
-
-
- /**
- * Test if an url contains the given directory with no recurse seeking.
- *
- * @param url the url to seek
- * @param directory the directory to find
- * @return <code>true</code> if directory was found, <code>false</code> otherwise.
- * @throws java.io.IOException if any io pb
- */
- public static boolean containsDirectDirectory(URL url, String directory) throws IOException {
- String fileName = url.getFile();
- // TODO deal with encoding in windows, this is very durty, but it works...
- File file = new File(fileName.replaceAll("%20", " "));
- if (!file.exists()) {
- return false;
- }
- if (isJar(fileName) || isZip(fileName)) {
- // cas ou le fichier du classLoader est un fichier jar ou zip
- if (log.isTraceEnabled()) {
- log.trace("zip to search " + file);
- }
- return new ZipFile(file).getEntry(directory + "/") != null;
- }
- if (file.isDirectory()) {
- // cas ou le ichier du classLoader est un repertoire
- if (log.isTraceEnabled()) {
- log.trace("directory to search " + file);
- }
- return new File(file, directory).exists();
- }
-
- if (log.isWarnEnabled()) {
- log.warn(_("lutinutil.error.unknown.url.type", url));
- }
- return false;
- }
-} // Resource
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ResourceException.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ResourceException.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ResourceException.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,46 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * ResourceException.java
- *
- * Created: 6 nov. 2004
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-
-package org.codelutin.util;
-
-public class ResourceException extends RuntimeException { // ResourceException
-
- /** */
- private static final long serialVersionUID = -5490688835958083084L;
-
- public ResourceException(String msg) {
- super(msg);
- }
-
- public ResourceException(String msg, Throwable e) {
- super(msg, e);
- }
-
-} // ResourceException
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ResourceNotFoundException.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ResourceNotFoundException.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ResourceNotFoundException.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,46 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/**
- * ResourceNotFoundException.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;
-
-public class ResourceNotFoundException extends ResourceException { // ResourceNotFoundException
-
- /** */
- private static final long serialVersionUID = 623160949107461992L;
-
- public ResourceNotFoundException(String msg) {
- super(msg);
- }
-
- public ResourceNotFoundException(String msg, Throwable e) {
- super(msg, e);
- }
-
-} // ResourceNotFoundException
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/SimplePaginationEnum.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/SimplePaginationEnum.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/SimplePaginationEnum.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,47 +0,0 @@
-/*
-* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-package org.codelutin.util;
-
-/**
- * Une enumration pour definir les tailles de liste
- *
- * @author chemit
- */
-public enum SimplePaginationEnum {
- _5,
- _10,
- _20,
- _50,
- _100;
-
- int intValue;
-
- SimplePaginationEnum() {
- intValue = Integer.valueOf(toString());
- }
-
- @Override
- public String toString() {
- return super.toString().substring(1);
- }
-
- public int intValue() {
- return intValue;
- }
-
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/SortedProperties.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/SortedProperties.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/SortedProperties.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,60 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-package org.codelutin.util;
-
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Properties;
-import java.util.Vector;
-
-/**
- * Permet d'avoir les fichiers de propriétés triés.
- *
- * @author julien
- */
-public class SortedProperties extends Properties {
-
- private static final long serialVersionUID = -1147150444452577558L;
-
-
- public SortedProperties() {
- super();
- }
-
- public SortedProperties(Properties defaults) {
- super(defaults);
- }
-
- @Override
- public synchronized Enumeration<Object> keys() {
- List<Object> objects = Collections.list(super.keys());
- Vector<Object> result;
- try {
- // Attention, si les clef ne sont pas des string, ca ne marchera pas
- List<String> list = CollectionUtil.toGenericList(objects, String.class);
- Collections.sort(list);
- result = new Vector<Object>(list);
- } catch (IllegalArgumentException e) {
- // keys are not string !!!
- // can not sort keys
- result = new Vector<Object>(objects);
- }
- return result.elements();
- }
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/StreamKeywordTokenizer.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/StreamKeywordTokenizer.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/StreamKeywordTokenizer.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,88 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * StreamKeywordTokenizer.java
- *
- * Created: 27 mai 2004
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * Copyright Code Lutin
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-
-package org.codelutin.util;
-
-import java.io.StreamTokenizer;
-import java.util.HashSet;
-import java.io.IOException;
-import java.io.Reader;
-
-public class StreamKeywordTokenizer extends StreamTokenizer { // StreamKeywordTokenizer
-
- public static final int TT_KEYWORD = -101;
- public static final int TT_VARIABLE = -102;
- protected HashSet<String> keywords = new HashSet<String>();
- protected boolean lowerCaseKeyword = false;
- protected int quoteCharVariable = -1;
-
- public StreamKeywordTokenizer(Reader in){
- super(in);
- }
-
- public int nextToken() throws IOException {
- super.nextToken();
- if(ttype == TT_WORD){
- String keyword = sval;
- if(lowerCaseKeyword){
- keyword = keyword.toLowerCase();
- }
- if(keywords.contains(keyword)){
- sval = keyword;
- ttype = TT_KEYWORD;
- }
- }else if(ttype == quoteCharVariable){
- ttype = TT_VARIABLE;
- }
- return ttype;
- }
-
- public void addKeyword(String keyword){
- if(lowerCaseKeyword){
- keywords.add(keyword.toLowerCase());
- }else{
- keywords.add(keyword);
- }
- }
-
- /**
- * This method must be call before addKeyword.
- */
- public void lowerCaseKeyword(boolean fl){
- lowerCaseKeyword = fl;
- }
-
- public void quoteCharVariable(int c){
- quoteChar(c);
- this.quoteCharVariable = c;
- }
-
-} // StreamKeywordTokenizer
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/StringUtil.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/StringUtil.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/StringUtil.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,576 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-/* *
- * StringUtil.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;
-
-import java.awt.Color;
-import java.lang.reflect.Field;
-import java.text.DateFormat;
-import java.text.MessageFormat;
-import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-
-/**
- * Classe contenant un ensemle de methode static utiles pour la manipulation des
- * chaine de caractere mais qui ne sont pas defini dans la classe String de
- * Java.
- *
- * @author poussin
- * created 21 octobre 2003
- */
-public class StringUtil { // StringUtil
-
- /** Constructor for the StringUtil object */
- protected StringUtil() {
- }
-
- /**
- * Cette methode retire les accents. Quand le caractere est connu, elle le
- * remplace par une version sans accent sinon, elle le supprime.
- * Les caracteres non-alphanumeriques sont supprimes.
- *
- * @param s la chaine a unaccentuer
- * @return la chaine sans accent
- */
- static public String unaccent(String s) {
- String result = "";
- for (char c : s.toCharArray()) {
- if ("éèêë".indexOf(c) != -1) {
- result += "e";
- } else if ("àäâ".indexOf(c) != -1) {
- result += "a";
- } else if ("ç".indexOf(c) != -1) {
- result += "c";
- } else if ("îï".indexOf(c) != -1) {
- result += "i";
- } else if ("ôö".indexOf(c) != -1) {
- result += "o";
- } else if ("ùûü".indexOf(c) != -1) {
- result += "u";
- } else if ("ÉÈÊË".indexOf(c) != -1) {
- result += "E";
- } else if ("ÀÂÄ".indexOf(c) != -1) {
- result += "A";
- } else if ("Ç".indexOf(c) != -1) {
- result += "C";
- } else if ("ÎÏ".indexOf(c) != -1) {
- result += "I";
- } else if ("ÔÖ".indexOf(c) != -1) {
- result += "O";
- } else if ("ÙÛÜ".indexOf(c) != -1) {
- result += "U";
- } else if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z')
- || ('0' <= c && c <= '9') || ('.' == c) || ('-' == c)
- || ('_' == c)) {
- result += c;
- } else {
- // on ne l'ajoute pas a result donc on supprime le caractere
- // result += encodeUTF(c);
- }
- }
- return result;
- }
-
- static public String substring(String s, int begin) {
- String result;
- result = substring(s, begin, s.length());
- return result;
- }
-
- static public String substring(String s, int begin, int end) {
- if (begin < 0) {
- begin = s.length() + begin;
- }
- if (end < 0) {
- end = s.length() + end;
- }
- if (end < begin) {
- end = begin;
- }
-
- String result;
- result = s.substring(begin, end);
- return result;
- }
-
- /**
- * Met en majuscule le premier caractere de la chaine passee en parametre
- *
- * @param word La chaine a capitaliser
- * @return La chaine capitalisee
- * @deprecated you must use
- * org.apache.commons.lang.StringUtils.capitalise(String)
- */
- public static String capitalize(String word) {
- return word.substring(0, 1).toUpperCase() + word.substring(1);
- }
-
- /**
- * Met en minuscule le premier caractere de la chaine passe en parametre
- *
- * @param word La chaine a decapitaliser
- * @return La chaine decapitalisee
- * @deprecated you must use
- * org.apache.commons.lang.StringUtils.uncapitalise(String)
- */
- public static String uncapitalize(String word) {
- return word.substring(0, 1).toLowerCase() + word.substring(1);
- }
-
- /**
- * Concatène un tableau de chaine de caracteres en une seul chaine.
- *
- * @param s le tableau de chaines
- * @param sep le separateur a utiliser pour separer chaque chaine.
- * @return la chaine resultante de la concatenation. Si le tableau est null
- * ou vide, la chaine resultante est une chaine vide.
- * @deprecated you must use org.apache.commons.lang.StringUtils.join
- */
- public static String unsplit(String[] s, String sep) {
- if (s == null || s.length <= 0) {
- return "";
- }
-
- StringBuffer result = new StringBuffer(s[0]);
- for (int i = 1; i < s.length; i++) {
- result.append(sep).append(s[i]);
- }
- return result.toString();
- }
-
- private static final Character[] openingChars = {'(', '{', '['};
-
- private static final Character[] closingChars = {')', '}', ']'};
-
- /**
- * Split string use 'separator' as separator. If String contains "'()[]{}
- * this method count the number of open char end close char to split
- * correctly argument
- *
- * @param args string to split
- * @param separator separator use to split string
- * @return array of string
- */
- static public String[] split(String args, String separator) {
- return split(openingChars, closingChars, args, separator);
- }
-
-
- /**
- * Use to split string array representation in array according with swixat
- * seperator list
- *
- * @param stringList string that represent array
- * @return array with length > 0 if listAsString != null or null
- */
- static public String[] split(String stringList) {
- String[] result;
- result = split(stringList, ",");
- return result;
- }
-
- /**
- * Split string use 'separator' as separator. If String contains "'
- * and <code>openingChar</code> <code>closingChars</code>
- * <p/>
- * this method count the number of open char end close char to split correctly
- * argument
- *
- * @param openingChars list of opening caracteres
- * @param closingChars list of closing caracteres
- * @param args string to split
- * @param separator separator use to split string
- * @return array of string
- */
- static public String[] split(Character[] openingChars,
- Character[] closingChars,
- String args, String separator) {
- if (args == null) {
- return new String[0];
- }
-
- List<String> result = new ArrayList<String>();
-
- int start = 0;
- int end;
- StringBuffer op = new StringBuffer(); // stack of {([< currently open
- char last = '\0'; // contains " or ' if string is openned
-
- List<Character> opening = Arrays.asList(openingChars);
-
- List<Character> closing = Arrays.asList(closingChars);
-
- for (int i = 0; i < args.length(); i++) {
- char c = args.charAt(i);
- if (c == '\\') {
- // pass next char
- i++;
- } else if (last != '"' && last != '\'') {
- if (opening.contains(c)) {
- op.append(c);
- } else if (closing.contains(c)) {
- op.deleteCharAt(op.length() - 1);
- } else if (c == '"' || c == '\'') {
- // open string " or '
- last = c;
- } else if (op.length() == 0 &&
- args.regionMatches(i, separator, 0, separator.length())) {
- // end of one arguement
- end = i;
- // pass separator
- i += separator.length() - 1;
-
- String a = args.substring(start, end);
- result.add(a);
- // start of next argument
- start = end + separator.length();
- }
- } else if (c == last) {
- // close string " or '
- last = '\0';
- }
- }
-
- if (start < args.length()) {
- String a = args.substring(start, args.length());
- result.add(a);
- }
-
- return result.toArray(new String[result.size()]);
- }
-
- public static boolean toBoolean(String s) {
- return "true".equalsIgnoreCase(s);
- }
-
- public static byte toByte(String s) {
- return Byte.parseByte(s);
- }
-
- public static double toDouble(String s) {
- return Double.parseDouble(s);
- }
-
- public static float toFloat(String s) {
- return Float.parseFloat(s);
- }
-
- public static long toLong(String s) {
- return Long.parseLong(s);
- }
-
- public static short toShort(String s) {
- return Short.parseShort(s);
- }
-
- public static int toInt(String s) {
- return Integer.parseInt(s);
- }
-
- public static char toChar(String s) {
- // fixme a revoir
- return s.charAt(0);
- }
-
- public static boolean[] toArrayBoolean(String... s) {
- boolean[] result = new boolean[s.length];
- for (int i = 0; i < result.length; i++) {
- result[i] = toBoolean(s[i]);
- }
- return result;
- }
-
- public static byte[] toArrayByte(String... s) {
- byte[] result = new byte[s.length];
- for (int i = 0; i < result.length; i++) {
- result[i] = toByte(s[i]);
- }
- return result;
- }
-
- public static double[] toArrayDouble(String... s) {
- double[] result = new double[s.length];
- for (int i = 0; i < result.length; i++) {
- result[i] = toDouble(s[i]);
- }
- return result;
- }
-
- public static float[] toArrayFloat(String... s) {
- float[] result = new float[s.length];
- for (int i = 0; i < result.length; i++) {
- result[i] = toFloat(s[i]);
- }
- return result;
- }
-
- public static long[] toArrayLong(String... s) {
- long[] result = new long[s.length];
- for (int i = 0; i < result.length; i++) {
- result[i] = toLong(s[i]);
- }
- return result;
- }
-
- public static short[] toArrayShort(String... s) {
- short[] result = new short[s.length];
- for (int i = 0; i < result.length; i++) {
- result[i] = toShort(s[i]);
- }
- return result;
- }
-
- public static int[] toArrayInt(String... s) {
- int[] result = new int[s.length];
- for (int i = 0; i < result.length; i++) {
- result[i] = toInt(s[i]);
- }
- return result;
- }
-
- public static char[] toArrayChar(String... s) {
- char[] result = new char[s.length];
- for (int i = 0; i < result.length; i++) {
- result[i] = toChar(s[i]);
- }
- // fixme a revoir
- return result;
- }
-
- /**
- * Essai de convertir une chaine de caractere en une couleur si possible si
- * ce n'est pas possible retourne null.
- *
- * @param s la couleur sous la forme de string, par exemple "red",
- * "yellow" ou bien en RGB "#FFAA99", et avec un canal alpha
- * "#FFAA3366"
- * @return la couleur demandé si possible sinon null
- * @throws IllegalArgumentException
- * @throws StringUtilException if any problem while conversion
- */
- public static Color toColor(String s) throws StringUtilException {
- try {
- if (s.startsWith("#")) {
- // récuperation des valeurs hexa
- String hr = s.substring(1, 3);
- String hg = s.substring(3, 5);
- String hb = s.substring(5, 7);
-
- // conversion en entier
- int r = Integer.parseInt(hr, 16);
- int g = Integer.parseInt(hg, 16);
- int b = Integer.parseInt(hb, 16);
-
- if (s.length() == 9) {
- // s'il y a un canal alpha on l'utilise
- String ha = s.substring(7, 9);
- int a = Integer.parseInt(ha, 16);
- return new Color(r, g, b, a);
- } else {
- return new Color(r, g, b);
- }
- } else {
- Field f;
- f = Color.class.getField(s);
- return (Color) f.get(Color.class);
- }
- } catch (NumberFormatException e) {
- throw new StringUtilException(
- "Error during conversion from string to color", e);
- } catch (SecurityException e) {
- throw new StringUtilException(
- "Error during conversion from string to color", e);
- } catch (NoSuchFieldException e) {
- throw new StringUtilException(
- "Error during conversion from string to color", e);
- } catch (IllegalArgumentException e) {
- throw new StringUtilException(
- "Error during conversion from string to color", e);
- } catch (IllegalAccessException e) {
- throw new StringUtilException(
- "Error during conversion from string to color", e);
- }
- }
-
- public static Date toDate(String s) throws ParseException {
- return DateFormat.getDateInstance().parse(s);
- }
-
- static final protected double[] timeFactors = {1000000, 1000, 60, 60, 24};
-
- static final protected String[] timeUnites = {"ns", "ms", "s", "m", "h",
- "d"};
-
- /**
- * @param value
- * @return the memory representation of the given value
- * @see #convert(long, double[], String[])
- */
- static public String convertTime(long value) {
- return convert(value, timeFactors, timeUnites);
- }
-
- /**
- * @param value
- * @param value2
- * @return the time representation of the given value
- * @see #convert(long, double[], String[])
- */
- static public String convertTime(long value, long value2) {
- return convertTime(value2 - value);
- }
-
- static final protected double[] memoryFactors = {1024, 1024, 1024, 1024};
-
- static final protected String[] memoryUnites = {"o", "Ko", "Mo", "Go",
- "To"};
-
- /**
- * @param value
- * @return the memory representation of the given value
- * @see #convert(long, double[], String[])
- */
- static public String convertMemory(long value) {
- return convert(value, memoryFactors, memoryUnites);
- }
-
- /**
- * Note: this method use the current locale (the {@link java.util.Locale#getDefault()}) in
- * the method {@link MessageFormat#MessageFormat(String)}.
- *
- * @param value
- * @param factors
- * @param unites
- * @return the converted representation of the given value
- */
- static public String convert(long value, double[] factors, String[] unites) {
- long sign = value == 0 ? 1 : value / Math.abs(value);
- int i = 0;
- double tmp = Math.abs(value);
- while (i < factors.length && i < unites.length && tmp > factors[i]) {
- tmp = tmp / factors[i++];
- }
-
- tmp *= sign;
- String result;
- result = MessageFormat.format("{0,number,0.###}{1}", tmp,
- unites[i]);
- return result;
- }
-
- /**
- * Vérifie q'une chaine de caractère est valid pour les bloc openner closer, ie.
- * <p/>
- * que les blocs définit par les deux caractères s'entrechevauchent pas.
- * <p/>
- * Exemple avec '(' ')' :
- * <p/>
- * (a(b)) est valide, par contre ((aaa))) n'est pas valide
- *
- * @param txt txte a verifier
- * @param opener le caractère ouvrant
- * @param closer le caractère fermant
- * @return <code>true</code> is la chaine est valide
- */
- public static boolean checkEnclosure(String txt, final char opener, char closer) {
- if (txt.indexOf(opener) == -1 && txt.indexOf(closer) == -1) {
- // ok pas de block détectés
- return true;
- }
- List<Integer> opens = new ArrayList<Integer>();
- for (int i = 0; i < txt.length(); i++) {
- char c = txt.charAt(i);
- if (c == opener) {
- // add a open block
- opens.add(i);
- continue;
- }
- if (c == closer) {
- if (opens.isEmpty()) {
- // problem no block left
- return false;
- }
- // on supprime le dernier bloc
- opens.remove(opens.size() - 1);
- }
- }
- return opens.isEmpty();
- }
-
- /**
- * Convertir un nom en une constante Java
- * <p/>
- * Les seuls caractères autorisés sont les alpha numériques, ains
- * que l'underscore. tous les autres caractères seront ignorés.
- *
- * @param name le nom à convertir
- * @return la constante générée
- */
- public static String convertToConstantName(String name) {
- StringBuilder sb = new StringBuilder();
- char lastChar = 0;
- for (int i = 0, j = name.length(); i < j; i++) {
- char c = name.charAt(i);
- if (Character.isDigit(c)) {
- sb.append(c);
- lastChar = c;
- continue;
- }
- if (!Character.isLetter(c)) {
- if (lastChar != '_') {
- sb.append('_');
- }
- lastChar = '_';
- continue;
- }
- if (Character.isUpperCase(c)) {
- if (!Character.isUpperCase(lastChar) && lastChar != '_') {
- sb.append('_');
- }
- sb.append(c);
- } else {
- sb.append(Character.toUpperCase(c));
- }
- lastChar = c;
- }
- String result = sb.toString();
- // clean tail
- while (!result.isEmpty() && result.endsWith("_")) {
- result = result.substring(0, result.length() - 1);
- }
- // clean head
- while (!result.isEmpty() && result.startsWith("_")) {
- result = result.substring(1);
- }
- return result;
- }
-
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/StringUtilException.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/StringUtilException.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/StringUtilException.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,33 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%*
- */
-
-package org.codelutin.util;
-
-/**
- * @author pineau
- */
-public class StringUtilException extends RuntimeException {
-
- /** */
- private static final long serialVersionUID = 6148795384335489591L;
-
- public StringUtilException(String message, Exception e) {
- super(message, e);
- }
-
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/Tbz2Util.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/Tbz2Util.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/Tbz2Util.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,332 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2009 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-package org.codelutin.util;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import org.apache.commons.compress.archivers.ArchiveEntry;
-import org.apache.commons.compress.archivers.ArchiveException;
-import org.apache.commons.compress.archivers.ArchiveInputStream;
-import org.apache.commons.compress.archivers.ArchiveStreamFactory;
-import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
-import org.apache.commons.compress.archivers.tar.TarArchiveOutputStream;
-import org.apache.commons.compress.compressors.CompressorException;
-import org.apache.commons.compress.compressors.CompressorInputStream;
-import org.apache.commons.compress.compressors.CompressorStreamFactory;
-import org.apache.commons.compress.utils.IOUtils;
-import org.apache.commons.logging.LogFactory;
-
-/**
- * Utility class for tar.bzip2 compression and md5 creation.
- *
- * @author chatellier
- * @version $Revision: 1456 $
- *
- * Last update: $Date: 2009-04-30 14:26:16 +0200 (jeu. 30 avril 2009) $
- * by : $Author: chatellier $
- *
- * @since 1.0.5
- */
-public class Tbz2Util {
-
- /** Class logger. */
- private static org.apache.commons.logging.Log log = LogFactory
- .getLog(Tbz2Util.class);
-
- /** Le séparateur de fichier en local. */
- private static final String LOCAL_SEP = File.separator;
-
- private static final String LOCAL_SEP_PATTERN = "\\".equals(LOCAL_SEP) ? LOCAL_SEP
- + LOCAL_SEP
- : LOCAL_SEP;
-
- /** Le séparateur zip. */
- private static final String TBZ2_SEP = "/";
-
- private static final String TBZ2_SEP_PATTERN = "/";
-
- /** Accept all file pattern. */
- protected static FileFilter ALL_FILE_FILTER = new FileFilter() {
- public boolean accept(File pathname) {
- return true;
- }
- };
-
- /**
- * Uncompress tbz2 file in targetDir.
- *
- * @param tbz2File the tbz2 source file
- * @param targetDir the destination directory
- * @return return last entry name
- * @throws IOException if any problem while uncompressing
- */
- public static String uncompress(File tbz2File, File targetDir)
- throws IOException {
- String result = uncompressAndRename(tbz2File, targetDir, null, null);
- return result;
- }
-
- /**
- * Uncompress tbz2 file in targetDir, and rename uncompressed file if
- * necessary. If renameFrom or renameTo is null no renaming is done
- * <p/>
- * file in tbz2 use / to separate directory and not begin with /
- * each directory ended with /
- *
- * @param tbz2File the tbz2 source file
- * @param targetDir the destination directory
- * @param renameFrom pattern to permit rename file before uncompress it
- * @param renameTo new name for file if renameFrom is applicable to it
- * you can use $1, $2, ... if you have '(' ')' in renameFrom
- * @return return last entry name
- * @throws IOException if any problem while uncompressing
- */
- public static String uncompressAndRename(File tbz2File, File targetDir,
- String renameFrom, String renameTo) throws IOException {
- String result = null;
- try {
- InputStream is = new FileInputStream(tbz2File);
- CompressorInputStream cis = new CompressorStreamFactory()
- .createCompressorInputStream("bzip2", is);
- ArchiveInputStream in = new ArchiveStreamFactory()
- .createArchiveInputStream("tar", cis);
- TarArchiveEntry entry;
- while ((entry = (TarArchiveEntry) in.getNextEntry()) != null) {
- String name = entry.getName();
- if (renameFrom != null && renameTo != null) {
- name = name.replaceAll(renameFrom, renameTo);
- if (log.isDebugEnabled()) {
- log.debug("rename " + entry.getName() + " -> " + name);
- }
- }
- result = name;
- File target = new File(targetDir, name);
- if (entry.isDirectory()) {
- target.mkdirs();
- } else {
- target.getParentFile().mkdirs();
- OutputStream out = new FileOutputStream(target);
- try {
- IOUtils.copy(in, out);
- } finally {
- out.close();
- }
- }
- }
- in.close();
- } catch (CompressorException e) {
- throw new IOException("Compression exception (not a bzip2 file ?)",
- e);
- } catch (ArchiveException e) {
- throw new IOException("Archive exception (not a tar file ?)", e);
- }
- return result;
- }
-
- /**
- * Compress 'includes' files in tbz2 file. If file in includes is directory
- * only the directory is put in tbz2 file, not the file contained in directory
- *
- * @param tbz2File the destination tbz2 file
- * @param root for all file in includes that is in this directory, then we
- * remove this directory in tar entry name (aka -C for tar), can be null;
- * @param includes the files to include in tbz2File
- * @throws IOException if any problem while compressing
- */
- public static void compressFiles(File tbz2File, File root,
- Collection<File> includes) throws IOException {
- compressFiles(tbz2File, root, includes, false);
- }
-
- /**
- * Compress 'includes' files in tbz2. If file in includes is directory
- * only the directory is put in tbz2, not the file contained in directory
- *
- * @param tbz2File the destination tbz2 file
- * @param root for all file in includes that is in this directory, then we
- * remove this directory in tar entry name (aka -C for tar), can be null;
- * @param includes the files to include in tbz2File
- * @param createMD5 also create a MD5 file (tbz2 name + .md5). MD5 file is created after tbz2File.
- * @throws IOException if any problem while compressing
- */
- public static void compressFiles(File tbz2File, File root,
- Collection<File> includes, boolean createMD5) throws IOException {
- OutputStream tbz2os = new FileOutputStream(tbz2File);
-
- try {
-
- // if md5 creation flag
- if (createMD5) {
- tbz2os = new MD5OutputStream(tbz2os);
- }
-
- OutputStream cos = new CompressorStreamFactory().createCompressorOutputStream("bzip2", tbz2os);
-
- TarArchiveOutputStream os = (TarArchiveOutputStream)new ArchiveStreamFactory()
- .createArchiveOutputStream("tar", cos);
- // fix error file name 'xxx' is too long ( > 100 bytes)
- os.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);
-
- for (File file : includes) {
- if (file.isFile() && file.canRead()) {
- String entryName = toArchiveEntryName(root, file);
- ArchiveEntry entry = os.createArchiveEntry(file, entryName);
- os.putArchiveEntry(entry);
- InputStream is = new FileInputStream(file);
- try {
- IOUtils.copy(is, os);
- } finally {
- is.close();
- }
- os.closeArchiveEntry();
- }
-
- }
- os.finish();
- os.close();
- cos.close();
-
- // if md5 creation flag
- if (createMD5) {
- String md5hash = MD5.asHex(((MD5OutputStream) tbz2os).hash());
- File md5File = new File(tbz2File.getAbsoluteFile() + ".md5");
- FileUtil.writeString(md5File, md5hash);
- }
-
- } catch (ArchiveException e) {
- throw new IOException("Can't archive as tar", e);
- } catch (CompressorException e) {
- throw new IOException("Can't compress as bzip2", e);
- }
- finally {
- tbz2os.close();
- }
- }
-
- /**
- * If fileOrDirectory is directory Compress recursively all file in this
- * directory, else if is just file compress one file.
- * <p/>
- * Entry result name in tbz2 start at fileOrDirectory.
- * example: if we compress /etc/apache, entry will be apache/http.conf, ...
- *
- * @param tbz2File the source tbz2 file
- * @param fileOrDirectory the file or directory to compress
- * @throws IOException if any problem while compressing
- */
- public static void compress(File tbz2File, File fileOrDirectory)
- throws IOException {
- compress(tbz2File, fileOrDirectory, null, false);
- }
-
- /**
- * If fileOrDirectory is directory Compress recursively all file in this
- * directory, else if is just file compress one file.
- * <p/>
- * Entry result name in tbz2 start at fileOrDirectory.
- * example: if we compress /etc/apache, entry will be apache/http.conf, ...
- *
- * @param tbz2File the source tbz2 file
- * @param fileOrDirectory the file or directory to compress
- * @param filter used to accept file, if null, all file is accepted
- * @throws IOException if any problem while compressing
- */
- public static void compress(File tbz2File, File fileOrDirectory,
- FileFilter filter) throws IOException {
- compress(tbz2File, fileOrDirectory, filter, false);
- }
-
- /**
- * If fileOrDirectory is directory Compress recursively all file in this
- * directory, else if is just file compress one file.
- * <p/>
- * Entry result name in tbz2 start at fileOrDirectory.
- * example: if we compress /etc/apache, entry will be apache/http.conf, ...
- *
- * @param tbz2File the source tbz2 file
- * @param fileOrDirectory the file or directory to compress
- * @param filter used to accept file, if null, all file is accepted
- * @param createMD5 also create a MD5 file (zip name + .md5). MD5 file is created after zip.
- * @throws IOException if any problem while compressing
- */
- public static void compress(File tbz2File, File fileOrDirectory,
- FileFilter filter, boolean createMD5) throws IOException {
- FileFilter localFilter = filter;
- if (localFilter == null) {
- localFilter = ALL_FILE_FILTER;
- }
- List<File> files = new ArrayList<File>();
- if (fileOrDirectory.isDirectory()) {
- files = FileUtil.getFilteredElements(fileOrDirectory, localFilter,
- true);
- } else if (localFilter.accept(fileOrDirectory)) {
- files.add(fileOrDirectory);
- }
-
- compressFiles(tbz2File, fileOrDirectory.getParentFile(), files,
- createMD5);
- }
-
- /**
- * <li> supprime le root du fichier
- * <li> Converti les '\' en '/' car les archives entry utilise des '/'
- * <li> ajoute un '/' a la fin pour les repertoires
- * <li> supprime le premier '/' si la chaine commence par un '/'
- *
- * @param root the root directory
- * @param file the file to treate
- * @return the archive entry name corresponding to the given <code>file</code>
- * from <code>root</code> dir.
- */
- protected static String toArchiveEntryName(File root, File file) {
- String result = file.getPath();
-
- if (root != null) {
- String rootPath = root.getPath();
- if (result.startsWith(rootPath)) {
- result = result.substring(rootPath.length());
- }
- }
-
- result = result.replace('\\', '/');
- if (file.isDirectory()) {
- result += '/';
- }
- while (result.startsWith("/")) {
- result = result.substring(1);
- }
- return result;
- }
-
- protected static String convertToLocalEntryName(String txt) {
- String s = txt.replaceAll(TBZ2_SEP_PATTERN, LOCAL_SEP_PATTERN);
- if (s.endsWith(TBZ2_SEP)) {
- s = s.substring(0, s.length() - 1);
- }
- return s;
- }
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/TransformedList.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/TransformedList.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/TransformedList.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,105 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * TransformedList.java
- *
- * Created: 2 août 2005 02:12:42 CEST
- *
- * @author Benjamin POUSSIN <poussin(a)codelutin.com>
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-
-package org.codelutin.util;
-
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.Serializable;
-import java.util.AbstractList;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-public class TransformedList<E> extends AbstractList<E> implements Serializable { // TransformedList
-
- /** */
- private static final long serialVersionUID = 2354881761407900789L;
-
- protected Transformer<E, Object> transformer = null;
- protected List<Object> inner = null;
-
- public TransformedList(Transformer<E, Object> transformer) {
- if (transformer == null) {
- throw new IllegalArgumentException("Transformer must not be null");
- } else {
- this.transformer = transformer;
- this.inner = new ArrayList<Object>();
- }
- }
-
- public TransformedList(Transformer<E, Object> transformer, Collection<? extends E> c) {
- this(transformer);
- addAll(c);
- }
-
- public int size() {
- return inner.size();
- }
-
- public E get(int index) {
- Object f = inner.get(index);
- E result = transformer.untransform(f);
- return result;
- }
-
- public E set(int index, E element) {
- Object f = transformer.transform(element);
- f = inner.set(index, f);
- E result = transformer.untransform(f);
- return result;
- }
-
- public void add(int index, E element) {
- Object f = transformer.transform(element);
- inner.add(index, f);
- }
-
- public E remove(int index) {
- Object f = inner.remove(index);
- E result = transformer.untransform(f);
- return result;
- }
-
- private void writeObject(ObjectOutputStream out) throws IOException {
- out.defaultWriteObject();
- out.writeObject(transformer);
- out.writeObject(inner);
- }
-
- @SuppressWarnings("unchecked")
- private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
- in.defaultReadObject();
- transformer = (Transformer<E, Object>) in.readObject();
- inner = (List<Object>) in.readObject();
- }
-
-} // TransformedList
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/Transformer.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/Transformer.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/Transformer.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,42 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * Transformer.java
- *
- * Created: 2 août 2005 02:55:41 CEST
- *
- * @author Benjamin POUSSIN <poussin(a)codelutin.com>
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-
-package org.codelutin.util;
-
-import java.io.Serializable;
-
-/** Permet de transformer un objet en un autre et inversement */
-public interface Transformer<E, F> extends Serializable { // Transformer
-
- public F transform(E e);
-
- public E untransform(F f);
-
-} // Transformer
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/TransparenteSoftReference.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/TransparenteSoftReference.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/TransparenteSoftReference.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,126 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-/* *
-* TransparenteSoftReference.java
-*
-* Created: 10 mai 2004
-*
-* @author Benjamin Poussin <poussin(a)codelutin.com>
-* Copyright Code Lutin
-* @version $Revision$
-*
-* Mise a jour: $Date$
-* par : $Author$
-*/
-package org.codelutin.util;
-
-import java.lang.ref.Reference;
-import java.lang.ref.ReferenceQueue;
-import java.lang.ref.SoftReference;
-
-/**
- * Cette classe etant SoftReference et surcharge les méthodes equals et
- * hashCode pour que ces méthodes retournes les mêmes résultat que les objets
- * contenu.
- */
-public class TransparenteSoftReference<T> extends SoftReference<T> {
-
- protected int hash = 0;
- protected String toString = null;
-
- /**
- * DOCUMENTME Constructor for the TransparenteSoftReference object
- *
- * @param o DOCUMENTME Description of the Parameter
- */
- public TransparenteSoftReference(T o) {
- this(o, true);
- }
-
- public TransparenteSoftReference(T o, ReferenceQueue<? super T> queue) {
- this(o, queue, true);
- }
-
- public TransparenteSoftReference(T o, boolean objectToStringUsed) {
- super(o);
- init(o, objectToStringUsed);
- }
-
- public TransparenteSoftReference(T o, ReferenceQueue<? super T> queue, boolean objectToStringUsed) {
- super(o, queue);
- init(o, objectToStringUsed);
- }
-
- /**
- * On conserve le hash pour que la Reference puisse encore se faire
- * passer pour l'objet alors que celui-ci a disparu de la memoire
- */
- protected void init(T o, boolean objectToStringUsed) {
- if (o == null) {
- hash = 0;
- } else {
- hash = o.hashCode();
- if (objectToStringUsed) {
- toString = o.toString();
- }
- if (toString == null) {
- toString = o.getClass().getName() + '@' + Integer.toHexString(hash);
- }
- if (toString.length() > 100) {
- toString = toString.substring(0, 100) + "...";
- }
- }
- }
-
- /**
- * DOCUMENTME Method
- *
- * @param o DOCUMENTME Description of the Parameter
- * @return DOCUMENTME Description of the Return Value
- */
- public boolean equals(Object o) {
- if (o == this) {
- return true;
- }
- // on travail avec un variable local pour ne pas etre obligé de
- // synchroniser la méthode
- Object local = get();
- if (o instanceof Reference) {
- o = ((Reference) o).get();
- }
-
- boolean result =
- (o == null && local == null)
- || (o != null && o.equals(local));
-
- return result;
- }
-
- /**
- * DOCUMENTME Method
- *
- * @return DOCUMENTME Description of the Return Value
- */
- public int hashCode() {
- return hash;
- }
-
- public String toString() {
- return toString;
- }
-
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/TransparenteWeakReference.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/TransparenteWeakReference.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/TransparenteWeakReference.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,119 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-/* *
-* TransparenteWeakReference.java
-*
-* Created: 10 mai 2004
-*
-* @author Benjamin Poussin <poussin(a)codelutin.com>
-* Copyright Code Lutin
-* @version $Revision$
-*
-* Mise a jour: $Date$
-* par : $Author$
-*/
-package org.codelutin.util;
-
-import java.lang.ref.Reference;
-import java.lang.ref.ReferenceQueue;
-import java.lang.ref.WeakReference;
-
-/**
- * Cette classe etant WeakReference et surcharge les méthodes equals et
- * hashCode pour que ces méthodes retournes les mêmes résultat que les objets
- * contenu.
- */
-public class TransparenteWeakReference<T> extends WeakReference<T> {
-
- protected int hash = 0;
- protected String toString = null;
- protected boolean objectToStringUsed = true;
-
- public TransparenteWeakReference(T o) {
- this(o, true);
- }
-
- public TransparenteWeakReference(T o, ReferenceQueue<? super T> queue) {
- this(o, queue, true);
- }
-
- /**
- * @param objectToStringUsed if true, this ref used toString method of
- * encapsulated object otherwize used default Object toString
- */
- public TransparenteWeakReference(T o, boolean objectToStringUsed) {
- super(o);
- init(o, objectToStringUsed);
- }
-
- public TransparenteWeakReference(T o, ReferenceQueue<? super T> queue, boolean objectToStringUsed) {
- super(o, queue);
- init(o, objectToStringUsed);
- }
-
- /**
- * On conserve le hash pour que la Reference puisse encore se faire
- * passer pour l'objet alors que celui-ci a disparu de la memoire
- */
- protected void init(T o, boolean objectToStringUsed) {
- if (o == null) {
- hash = 0;
- } else {
- hash = o.hashCode();
- if (objectToStringUsed) {
- toString = o.toString();
- }
- if (toString == null) {
- toString = o.getClass().getName() + '@' + Integer.toHexString(hash);
- }
- if (toString.length() > 100) {
- toString = toString.substring(0, 100) + "...";
- }
- }
- }
-
- /** Equals si meme reference memoire on les objets references sont egauxs */
- public boolean equals(Object o) {
- if (o == this) {
- return true;
- }
- // on travail avec un variable local pour ne pas etre obligé de
- // synchroniser la méthode
- Object local = get();
- Object other = o;
- if (o instanceof Reference) {
- other = ((Reference) o).get();
-
- if (other == null) {
- // on fait l'egalite sur les hash car on a perdu les objets
- return o.hashCode() == hashCode();
- }
- }
-
- return (other == null && local == null) ||
- (other != null && other.equals(local));
- }
-
- public int hashCode() {
- return hash;
- }
-
- public String toString() {
- return toString;
- }
-
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/URIConverter.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/URIConverter.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/URIConverter.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,76 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-package org.codelutin.util;
-
-import org.apache.commons.beanutils.ConversionException;
-import org.apache.commons.beanutils.Converter;
-import static org.apache.commons.logging.LogFactory.getLog;
-import static org.codelutin.i18n.I18n._;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-
-/**
- * classe pour convertir une chaine en un objet URI.
- *
- * @author chemit
- */
-public class URIConverter implements Converter {
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static org.apache.commons.logging.Log log = getLog(URIConverter.class);
-
- public Object convert(Class aClass, Object value) {
- if (value == null) {
- throw new ConversionException(_("lutinutil.error.convertor.noValue", this));
- }
- if (isEnabled(aClass)) {
- Object result;
- if (isEnabled(value.getClass())) {
- result = value;
- return result;
- }
- if (value instanceof String) {
- result = valueOf((String) value);
- return result;
- }
- }
- throw new ConversionException(_("lutinutil.error.no.convertor", aClass.getName(), value));
- }
-
- protected URI valueOf(String value) {
- try {
- URI result;
- result = new URI(value);
- return result;
- } catch (URISyntaxException e) {
- throw new ConversionException(_("lutinutil.error.url.convertor", value, this, e.getMessage()));
- }
- }
-
- public URIConverter() {
- if (log.isDebugEnabled()) {
- log.debug(this);
- }
- }
-
- protected boolean isEnabled(Class aClass) {
- return aClass == URI.class;
- }
-
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/URLConverter.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/URLConverter.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/URLConverter.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,75 +0,0 @@
-/*
-* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-package org.codelutin.util;
-
-import org.apache.commons.beanutils.ConversionException;
-import org.apache.commons.beanutils.Converter;
-import static org.apache.commons.logging.LogFactory.getLog;
-import static org.codelutin.i18n.I18n._;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-
-/**
- * classe pour convertir une chaine en un objet URL.
- *
- * @author chemit
- */
-
-public class URLConverter implements Converter {
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static org.apache.commons.logging.Log log = getLog(URLConverter.class);
-
- public Object convert(Class aClass, Object value) {
- if (value == null) {
- throw new ConversionException(_("lutinutil.error.convertor.noValue", this));
- }
- if (isEnabled(aClass)) {
- Object result;
- if (isEnabled(value.getClass())) {
- result = value;
- return result;
- }
- if (value instanceof String) {
- result = valueOf((String) value);
- return result;
- }
- }
- throw new ConversionException(_("lutinutil.error.no.convertor", aClass.getName(), value));
- }
-
- protected URL valueOf(String value) {
- try {
- URL result;
- result = new URL(value);
- return result;
- } catch (MalformedURLException e) {
- throw new ConversionException(_("lutinutil.error.url.convertor", value, this, e.getMessage()));
- }
- }
-
- public URLConverter() {
- log.info(this);
- }
-
- protected boolean isEnabled(Class aClass) {
- return aClass == URL.class;
- }
-
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/VersionNumber.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/VersionNumber.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/VersionNumber.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,85 +0,0 @@
-/*
-* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-package org.codelutin.util;
-
-import java.util.Arrays;
-
-/**
- * A class to represent an application version
- *
- * @author chemit
- */
-public class VersionNumber implements Comparable<VersionNumber> {
- protected int[] numbers;
-
- public VersionNumber() {
- this.numbers = new int[]{0};
- }
-
- public VersionNumber(int... numbers) {
- this.numbers = numbers;
- }
-
- public int[] getNumbers() {
- return numbers;
- }
-
- public int getNumber(int level) {
- if (level<0 || level>=numbers.length) {
- throw new IllegalArgumentException("not a valid level "+level+ " for the VersionNumber "+this);
- }
- return numbers[level];
- }
-
- public int getNbComponents() {
- return numbers.length;
- }
-
- @Override
- public String toString() {
- StringBuilder sb = new StringBuilder();
- for (int number : numbers) {
- sb.append('.').append(number);
- }
- return sb.toString().substring(1);
- }
-
- public int compareTo(VersionNumber o) {
- String str = toString();
- String ostr = o.toString();
- if (str.equals(ostr)) {
- return 0;
- }
- return VersionNumberUtil.greaterThan(str, ostr) ? 1 : -1;
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (!(o instanceof VersionNumber)) return false;
-
- VersionNumber that = (VersionNumber) o;
- return Arrays.equals(numbers, that.numbers);
-
- }
-
- @Override
- public int hashCode() {
- return Arrays.hashCode(numbers);
- }
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/VersionNumberConverter.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/VersionNumberConverter.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/VersionNumberConverter.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,84 +0,0 @@
-/*
-* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-package org.codelutin.util;
-
-import org.apache.commons.beanutils.ConversionException;
-import org.apache.commons.beanutils.Converter;
-import static org.apache.commons.logging.LogFactory.getLog;
-import static org.codelutin.i18n.I18n._;
-
-/**
- * classe pour convertir une chaine en un objet VersionNumber.
- *
- * @author chemit
- * @see VersionNumber
- */
-
-public class VersionNumberConverter implements Converter {
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static org.apache.commons.logging.Log log = getLog(VersionNumberConverter.class);
-
- public Object convert(Class aClass, Object value) {
- if (value == null) {
- throw new ConversionException(_("lutinutil.error.convertor.noValue", this));
- }
- if (isEnabled(aClass)) {
- Object result;
- if (isEnabled(value.getClass())) {
- result = value;
- return result;
- }
- if (value instanceof String) {
- result = valueOf((String) value);
- return result;
- }
- }
- throw new ConversionException(_("lutinutil.error.no.convertor", aClass.getName(), value));
- }
-
- public VersionNumberConverter() {
- if (log.isDebugEnabled()) {
- log.debug(this);
- }
- }
-
- protected VersionNumber valueOf(String value) {
- try {
- VersionNumber result;
- String[] str = value.split("\\.");
- if (str.length == 0) {
- return new VersionNumber();
- }
- int[] numbers = new int[str.length];
- for (int i = 0; i < str.length; i++) {
- String number = str[i];
- numbers[i] = Integer.valueOf(number);
- }
- result = new VersionNumber(numbers);
- return result;
- } catch (IllegalArgumentException e) {
- throw new ConversionException(_("lutinutil.error.url.convertor", value, this, e.getMessage()));
- }
- }
-
- protected boolean isEnabled(Class aClass) {
- return aClass == VersionNumber.class;
- }
-
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/VersionNumberUtil.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/VersionNumberUtil.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/VersionNumberUtil.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,99 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * NumberVersionUtil.java
- *
- * Created: 4 déc. 2003
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * Copyright Code Lutin
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-
-package org.codelutin.util;
-
-public class VersionNumberUtil { // VersionNumberUtil
-
- protected static String normalize(String version) {
- if (version == null) {
- version = "0";
- }
- return version;
- }
-
- public static boolean greaterThan(String v1, String v2) {
- String[] v1s = normalize(v1).split("\\.");
- String[] v2s = normalize(v2).split("\\.");
- int minlen = Math.min(v1s.length, v2s.length);
- for (int i = 0; i < minlen; i++) {
- if (!v1s[i].equals(v2s[i]))
- return Integer.parseInt(v1s[i]) > Integer.parseInt(v2s[i]);
- }
- // si on est ici c que tout les nombres sont v1[i] = v2[i]
- return v1s.length > v2s.length;
- }
-
- /**
- * Regarde l'egalité entre 2 numeros de version
- * 1.2.0 et 1.2 ne sont pas egaux
- */
- public static boolean equals(String v1, String v2) {
- return normalize(v1).equals(normalize(v2));
- }
-
- public static boolean smallerThan(String v1, String v2) {
- String[] v1s = normalize(v1).split("\\.");
- String[] v2s = normalize(v2).split("\\.");
- int minlen = Math.min(v1s.length, v2s.length);
- for (int i = 0; i < minlen; i++) {
- if (!v1s[i].equals(v2s[i]))
- return Integer.parseInt(v1s[i]) < Integer.parseInt(v2s[i]);
- }
- // si on est ici c que tout les nombres sont v1[i] = v2[i]
- return v1s.length < v2s.length;
- }
-
- /**
- * Incremente le numero de version, seul le dernier constituant est
- * incremente: 1.2.3.4 -> 1.2.3.5; null -> 1; 0 -> 1
- */
- public static String inc(String v) {
- if (v == null) {
- return "1";
- } else {
- v = v.trim();
- }
-
- String result = null;
- int i = v.lastIndexOf('.');
- if (i == -1) {
- int n = Integer.parseInt(v) + 1;
- result = "" + n;
- } else {
- String num = v.substring(i + 1);
- int n = Integer.parseInt(num) + 1;
- result = v.substring(0, i + 1) + n;
- }
- return result;
- }
-
-} // VersionNumberUtil
-
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ZipStreamEncoder.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ZipStreamEncoder.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ZipStreamEncoder.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,97 +0,0 @@
-/*
-* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-package org.codelutin.util;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Map;
-import java.util.zip.Deflater;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipOutputStream;
-
-import org.apache.commons.logging.LogFactory;
-
-/**
- * The Class ZipStreamEncoder.
- */
-public class ZipStreamEncoder extends Thread {
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static private org.apache.commons.logging.Log log = LogFactory.getLog(ZipStreamEncoder.class);
-
- /** The Constant BUFFER. */
- static final int BUFFER = 2048;
-
- /** The files. */
- private Map<String, InputStream> files;
-
- /** The zos. */
- private ZipOutputStream zos;
-
- /**
- * Instantiates a new zip stream encoder.
- *
- * @param files
- * the files
- * @param os
- * the os
- */
- public ZipStreamEncoder(Map<String, InputStream> files, OutputStream os) {
- super();
- this.files = files;
-
- zos = new ZipOutputStream(os);
- zos.setMethod(ZipOutputStream.DEFLATED);
- zos.setLevel(Deflater.BEST_COMPRESSION);
- }
-
- /* (non-Javadoc)
- * @see java.lang.Thread#run()
- */
- @Override
- public void run() {
- byte data[] = new byte[BUFFER];
- try {
- for (Map.Entry<String, InputStream> kv : files.entrySet()) {
- ZipEntry entry = new ZipEntry(kv.getKey());
- InputStream origin = kv.getValue();
- zos.putNextEntry(entry);
- int count;
- while ((count = origin.read(data, 0, BUFFER)) != -1) {
- zos.write(data, 0, count);
- }
- origin.close();
- }
-
- zos.close();
- } catch (IOException e) {
- for (Map.Entry<String, InputStream> kv : files.entrySet()) {
- InputStream origin = kv.getValue();
- try {
- origin.close();
- } catch (IOException ioe) {
- log.error("Impossible to close " + kv.getKey());
- }
- }
- log.error("Impossible to compress in stream");
- throw new RuntimeException("Impossible to compress in stream");
- }
- }
-
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ZipUtil.java
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ZipUtil.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/ZipUtil.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,445 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2009 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-package org.codelutin.util;
-
-import org.apache.commons.logging.LogFactory;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileFilter;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipFile;
-import java.util.zip.ZipInputStream;
-import java.util.zip.ZipOutputStream;
-
-/**
- * ZipUtil.java
- *
- * Created: 24 août 2006 10:13:35
- *
- * @author poussin
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-public class ZipUtil {
-
- /** Class logger. */
- private static org.apache.commons.logging.Log log = LogFactory.getLog(ZipUtil.class);
-
- /** Taille du buffer pour les lectures/écritures. */
- private static final int BUFFER_SIZE = 8 * 1024;
-
- /** Le séparateur de fichier en local. */
- private static final String LOCAL_SEP = File.separator;
-
- private static final String LOCAL_SEP_PATTERN = "\\".equals(LOCAL_SEP) ?
- LOCAL_SEP + LOCAL_SEP : LOCAL_SEP;
-
- /** Le séparateur zip. */
- private static final String ZIP_SEP = "/";
-
- private static final String ZIP_SEP_PATTERN = "/";
-
- /** Accept all file pattern. */
- protected static FileFilter ALL_FILE_FILTER = new FileFilter() {
- public boolean accept(File pathname) {
- return true;
- }
- };
-
- /**
- * Uncompress zipped file in targetDir.
- *
- * @param file the zip source file
- * @param targetDir the destination directory
- * @return return last entry name
- * @throws IOException if any problem while uncompressing
- */
- public static String uncompress(File file, File targetDir) throws IOException {
- String result;
- result = uncompressAndRename(file, targetDir, null, null);
- return result;
- }
-
- /**
- * Uncompress zipped file in targetDir, and rename uncompressed file if
- * necessary. If renameFrom or renameTo is null no renaming is done
- * <p/>
- * file in zip use / to separate directory and not begin with /
- * each directory ended with /
- *
- * @param file the zip source file
- * @param targetDir the destination directory
- * @param renameFrom pattern to permit rename file before uncompress it
- * @param renameTo new name for file if renameFrom is applicable to it
- * you can use $1, $2, ... if you have '(' ')' in renameFrom
- * @return return last entry name
- * @throws IOException if any problem while uncompressing
- */
- public static String uncompressAndRename(File file, File targetDir, String renameFrom, String renameTo) throws IOException {
- String result = "";
- ZipInputStream in = new ZipInputStream(new FileInputStream(file));
- ZipEntry entry;
- while ((entry = in.getNextEntry()) != null) {
- String name = entry.getName();
- if (renameFrom != null && renameTo != null) {
- name = name.replaceAll(renameFrom, renameTo);
- if (log.isDebugEnabled()) {
- log.debug("rename " + entry.getName() + " -> " + name);
- }
- }
- result = name;
- File target = new File(targetDir, name);
- if (entry.isDirectory()) {
- target.mkdirs();
- } else {
- target.getParentFile().mkdirs();
- OutputStream out = new BufferedOutputStream(new FileOutputStream(target));
- byte[] buffer = new byte[BUFFER_SIZE];
- int len;
- while ((len = in.read(buffer, 0, BUFFER_SIZE)) != -1) {
- out.write(buffer, 0, len);
- }
- out.close();
- }
- }
- in.close();
- return result;
- }
-
- /**
- * Compress 'includes' files in zipFile. If file in includes is directory
- * only the directory is put in zipFile, not the file contained in directory
- *
- * @param zipFile the destination zip file
- * @param root for all file in includes that is in this directory, then we
- * remove this directory in zip entry name (aka -C for tar), can be null;
- * @param includes the files to include in zip
- * @throws java.io.IOException if any problem while compressing
- */
- public static void compressFiles(File zipFile, File root, Collection<File> includes) throws IOException {
- compressFiles(zipFile, root, includes, false);
- }
-
- /**
- * Compress 'includes' files in zipFile. If file in includes is directory
- * only the directory is put in zipFile, not the file contained in directory
- *
- * @param zipFile the destination zip file
- * @param root for all file in includes that is in this directory, then we
- * remove this directory in zip entry name (aka -C for tar), can be null;
- * @param includes the files to include in zip
- * @param createMD5 also create a MD5 file (zip name + .md5). MD5 file is created after zip.
- * @throws IOException if any problem while compressing
- */
- public static void compressFiles(File zipFile, File root, Collection<File> includes, boolean createMD5) throws IOException {
- OutputStream oStream = new FileOutputStream(zipFile);
-
- // if md5 creation flag
- if (createMD5) {
- oStream = new MD5OutputStream(oStream);
- }
- try {
- ZipOutputStream zipOStream = new ZipOutputStream(oStream);
-
- for (File file : includes) {
- String entryName = toZipEntryName(root, file);
-
- // Création d'une nouvelle entrée dans le zip
- ZipEntry entry = new ZipEntry(entryName);
- entry.setTime(file.lastModified());
- zipOStream.putNextEntry(entry);
-
- if (file.isFile() && file.canRead()) {
- byte[] readBuffer = new byte[BUFFER_SIZE];
- int bytesIn;
- BufferedInputStream bis = new BufferedInputStream(
- new FileInputStream(file), BUFFER_SIZE);
- while ((bytesIn = bis.read(readBuffer, 0, BUFFER_SIZE)) != -1) {
- zipOStream.write(readBuffer, 0, bytesIn);
- }
- bis.close();
- }
- zipOStream.closeEntry();
- }
- zipOStream.close();
-
- // if md5 creation flag
- if (createMD5) {
- String md5hash = MD5.asHex(((MD5OutputStream)oStream).hash());
- File md5File = new File(zipFile.getAbsoluteFile() + ".md5");
- FileUtil.writeString(md5File, md5hash);
- }
- } finally {
- oStream.close();
- }
- }
-
- /**
- * If fileOrDirectory is directory Compress recursively all file in this
- * directory, else if is just file compress one file.
- * <p/>
- * Entry result name in zip start at fileOrDirectory.
- * example: if we compress /etc/apache, entry will be apache/http.conf, ...
- *
- * @param zipFile the source zip file
- * @param fileOrDirectory the file or directory to compress
- * @throws IOException if any problem while compressing
- */
- public static void compress(File zipFile, File fileOrDirectory) throws IOException {
- compress(zipFile, fileOrDirectory, null, false);
- }
-
- /**
- * If fileOrDirectory is directory Compress recursively all file in this
- * directory, else if is just file compress one file.
- * <p/>
- * Entry result name in zip start at fileOrDirectory.
- * example: if we compress /etc/apache, entry will be apache/http.conf, ...
- *
- * @param zipFile the source zip file
- * @param fileOrDirectory the file or directory to compress
- * @param filter used to accept file, if null, all file is accepted
- * @throws IOException if any problem while compressing
- */
- public static void compress(File zipFile, File fileOrDirectory, FileFilter filter) throws IOException {
- compress(zipFile, fileOrDirectory, filter, false);
- }
-
- /**
- * If fileOrDirectory is directory Compress recursively all file in this
- * directory, else if is just file compress one file.
- * <p/>
- * Entry result name in zip start at fileOrDirectory.
- * example: if we compress /etc/apache, entry will be apache/http.conf, ...
- *
- * @param zipFile the source zip file
- * @param fileOrDirectory the file or directory to compress
- * @param filter used to accept file, if null, all file is accepted
- * @param createMD5 also create a MD5 file (zip name + .md5). MD5 file is created after zip.
- * @throws IOException if any problem while compressing
- */
- public static void compress(File zipFile, File fileOrDirectory, FileFilter filter, boolean createMD5) throws IOException {
- if (filter == null) {
- filter = ALL_FILE_FILTER;
- }
- List<File> files = new ArrayList<File>();
- if (fileOrDirectory.isDirectory()) {
- files = FileUtil.getFilteredElements(fileOrDirectory, filter, true);
- } else if (filter.accept(fileOrDirectory)) {
- files.add(fileOrDirectory);
- }
-
- compressFiles(zipFile, fileOrDirectory.getParentFile(), files, createMD5);
- }
-
- /**
- * <li> supprime le root du fichier
- * <li> Converti les '\' en '/' car les zip entry utilise des '/'
- * <li> ajoute un '/' a la fin pour les repertoires
- * <li> supprime le premier '/' si la chaine commence par un '/'
- *
- * @param root the root directory
- * @param file the file to treate
- * @return the zip entry name corresponding to the given <code>file</code>
- * from <code>root</code> dir.
- */
- private static String toZipEntryName(File root, File file) {
- String result = file.getPath();
-
- if (root != null) {
- String rootPath = root.getPath();
- if (result.startsWith(rootPath)) {
- result = result.substring(rootPath.length());
- }
- }
-
- result = result.replace('\\', '/');
- if (file.isDirectory()) {
- result += '/';
- }
- while (result.startsWith("/")) {
- result = result.substring(1);
- }
- return result;
- }
-
- /**
- * Scan a zipFile, and fill two lists of relative paths corresponding of
- * zip entries.
- * First list contains all entries to be added while a uncompress operation
- * on the destination directory </code>targetDir</code>.
- * Second list contains all entries to be overwritten while a uncompress
- * operation on the destination directory <code>targetDir</code>.
- * <br>
- * If <code>targetDir</code> is <code>null</code> we don't fill
- * <cide>existingFiles<code/> list.
- *
- * @param zipFile location of the zip to scanZip
- * @param targetDir location of destination for a uncompress operation.
- * If <code>null</code> we don't test to
- * find overwritten files.
- * @param newFiles list of files to be added while a uncompress
- * @param existingFiles list of files to be overwritten while a uncompress
- * if the <code>targetDir</code>,
- * (only use if <code>targetDir</code> is not
- * <code>null</code>)
- * @param excludeFilter used to exclude some files
- * @param renameFrom {@link #uncompressAndRename(java.io.File, java.io.File, String, String)}
- * @param renameTo {@link #uncompressAndRename(java.io.File, java.io.File, String, String)}
- * @throws IOException if any exception while dealing with zipfile
- */
- public static void scan(File zipFile, File targetDir, List<String> newFiles,
- List<String> existingFiles, FileFilter excludeFilter, String renameFrom, String renameTo)
- throws IOException {
- ZipFile zip = null;
- try {
- zip = new ZipFile(zipFile);
- boolean findExisting = targetDir != null && targetDir.exists();
- boolean filter = findExisting && excludeFilter != null;
- boolean rename = renameFrom != null && renameTo != null;
- Enumeration<? extends ZipEntry> entries = zip.entries();
- while (entries.hasMoreElements()) {
- String entryName = entries.nextElement().getName();
- if (rename) {
- entryName = entryName.replaceAll(renameFrom, renameTo);
- }
- String name = convertToLocalEntryName(entryName);
- if (findExisting || filter) {
- File file = new File(targetDir, name);
- if (filter && excludeFilter.accept(file)) continue;
- if (file.exists()) {
- existingFiles.add(name);
- continue;
- }
- }
- newFiles.add(name);
- }
- } finally {
- if (zip != null) {
- zip.close();
- }
- }
- }
-
- @SuppressWarnings({"unchecked"})
- public static List<String>[] scanAndExplodeZip(File source, File root, FileFilter excludeFilter) throws IOException {
-
- List<String> overwrittenFiles = new ArrayList<String>();
- List<String> newFiles = new ArrayList<String>();
-
- // obtain list of relative paths (to add or overwrite)
- scan(source, root, newFiles, overwrittenFiles, excludeFilter, null, null);
-
- return new List[]{newFiles, overwrittenFiles};
- }
-
- /**
- * uncompress zipped file in targetDir.
- * <p/>
- * If <code>toTreate</code> if not null nor empty, we use it to filter
- * entries to uncompress : it contains a list of relative local path of
- * files to uncompress.
- * Otherwise just delegate to {@link ZipUtil#uncompress(File,File)}.
- *
- * @param file location of zip file
- * @param targetDir destination directory
- * @param toTreate list of relative local path of entries to treate
- * @param renameFrom {@link #uncompressAndRename(File, File, String, String)}
- * @param renameTo {@link #uncompressAndRename(File, File, String, String)}
- * @return return last entry name
- * @throws IOException if nay exception while operation
- */
- public static String uncompress(File file, File targetDir, List<String> toTreate, String renameFrom, String renameTo) throws IOException {
- String result = "";
- ZipInputStream in = new ZipInputStream(new FileInputStream(file));
- ZipEntry entry;
- if (toTreate == null || toTreate.isEmpty()) {
- return ZipUtil.uncompressAndRename(file, targetDir, renameFrom, renameTo);
- }
-
- boolean rename = renameFrom != null && renameTo != null;
-
- while ((entry = in.getNextEntry()) != null) {
- String name = entry.getName();
- if (rename) {
- result = convertToLocalEntryName(name.replaceAll(renameFrom, renameTo));
- } else {
- result = convertToLocalEntryName(name);
- }
-
- if (log.isDebugEnabled()) {
- log.debug("open [" + name + "] : " + result);
- }
- if (!toTreate.contains(result)) {
- continue;
- }
-
- if (log.isDebugEnabled()) {
- log.debug("copy [" + name + "] : " + result);
- }
- File target = new File(targetDir, result);
- if (entry.isDirectory()) {
- target.mkdirs();
- } else {
- target.getParentFile().mkdirs();
- OutputStream out =
- new BufferedOutputStream(new FileOutputStream(target));
- byte[] buffer = new byte[BUFFER_SIZE];
- int len;
- while ((len = in.read(buffer, 0, BUFFER_SIZE)) != -1) {
- out.write(buffer, 0, len);
- }
- out.close();
- }
- }
- in.close();
- return result;
- }
-
- /**
- * @deprecated unused/undocumented function
- */
- public static String convertToZipEntryName(String txt, boolean isDir) {
- String s = txt.replaceAll(LOCAL_SEP_PATTERN, ZIP_SEP);
- while (s.startsWith(ZIP_SEP)) {
- s = s.substring(1);
- }
- return s + (isDir ? ZIP_SEP : "");
- }
-
-
- protected static String convertToLocalEntryName(String txt) {
- String s = txt.replaceAll(ZIP_SEP_PATTERN, LOCAL_SEP_PATTERN);
- if (s.endsWith(ZIP_SEP)) {
- s = s.substring(0, s.length() - 1);
- }
- return s;
- }
-}
Deleted: nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/package.html
===================================================================
--- nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/package.html 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/package.html 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,11 +0,0 @@
-<html>
- <body>
- <h1>Lutin util</h1>
-Ensemble de classe Java permettant de simplifier le développement en
-factorisant des besoins que l'on retrouve dans tous les développement.
-On y trouve de fontion de travail sur les chaînes de caractères. Des
-fonctions de parsage des arguements de la ligne de commande. Des fonctions
-permettant très simplement de rechercher une resource (images, fichier de
-propriétés, ...)
- </body>
-</html>
\ No newline at end of file
Deleted: nuiton-i18n-api/trunk/src/site/rst/CommandLineArgumentApplication.rst
===================================================================
--- nuiton-i18n-api/trunk/src/site/rst/CommandLineArgumentApplication.rst 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/site/rst/CommandLineArgumentApplication.rst 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,124 +0,0 @@
-======================
-Argument d'application
-======================
-
-Il y a deux type d'argument d'application:
-- les arguments permettant de modifier la configuration qui peuvent aussi
- être dans un fichier de configuration ou en variable d'environnement.
-- les arguments permettant d'indiquer des actions a faire a l'application
-
-Les options de configuration
-============================
-
-Les options de configuration peuvent être décrit directement par un POJO
-avec des annotations::
-
- @OptionConfigOrder("resource MonApp.properties", "file /etc/MonApp.properties",
- "optionfile configFile", "env", "line")
- public class MonAppConfig extends OptionConfig {
-
- @Option
- @OptionSaveFile
- public File configFile = new File("$HOME/.MonApp");
-
- @Option(pattern [^\s]+)
- public String username = "anonyous";
-
- @Option(pattern ..)
- public String lang = "fr";
-
- @Option(pattern ..)
- public String country = "FR";
-
- @Option
- public boolean showGui = true;
-
- @Option(min=10, max=10)
- public List<Integer> value;
-
- @Unparsed
- public List<String> other;
- }
-
-La classe OptionConfig
-----------------------
-
-La classe OptionConfig contient plusieurs méthodes:
-
-- load sans argument qui permet de charger le POJO en fonction de
- OptionConfigOrder
-- load(File) qui permet de charger le POJO seulement en fonction d'un
- fichier. Il bien sur possible d'appeler load() puis load(File).
-- save qui permet de sauver les informations du POJO, le fichier ou sauver
- les options est indiqué par l'annotation @OptionSaveFile
-
-Annotation OptionConfigOrder
-----------------------------
-
-OptionConfigOrder permet de déterminer l'ordre de recherche de la bonne
-valeur des options. Le dernier indiqué sera le dernier lu et donc celui qui
-aura raison.
-
-resource
- indique un fichier resource a rechercher dans le classpath
-
-file
- indique un fichier sur le systeme de fichier
-
-optionfile
- indique un fichier dont le chemin est indiqué par une option
-
-env
- indique les variables d'environnement du processus
-
-line
- indique les options sur la ligne de commande
-
-Implantation
-~~~~~~~~~~~~
-
-# On charge dans un objet **Properties** chaque entre de
- **OptionConfigOrder** sauf **optionfile** s'il y en a.
-# On chaine tous les fichiers de proprietes pour pouvoir demander
- l'information au dernier qui recherchera lui meme dans son pere s'il n'a pas
- l'informaiton.
-# Pour chaque **optionfile** on demande sa valeur, on crée le fichier de
- propriété et on l'ajoute dans la chaine à la bonne place
-# Pour chaque option trouvé dans le POJO on met a jour sa valeur avec la
- valeur trouvé dans les propriétés.
-
-Annotation Option
------------------
-
-Indique une option possible. Elle peut contenir:
-
-- description
-- pattern
-- alias
-- min
-- max
-
-Par defaut l'option sur la ligne de commande sera le nom de la variable precedé de --
-
-Annotation Unparsed
--------------------
-
-Indique que toutes les options de la ligne de commande non reconnu finisse dans ce champs
-Il est possible de type la collection autrement que par String.
-
-Annotation OptionSaveFile
--------------------------
-
-Indique le fichier a utiliser pour sauver les options
-
-Les actions
-===========
-
-TODO: comment différencier les actions des options ? comment reutiliser le travail de tony ?
-
-Amélioration possible
-=====================
-
-- Générer automatiquement par un plugin maven les methodes get/set sur les options
-- Gérer les options read/write et read
-- un plugin maven qui verifie la coherence des options
Deleted: nuiton-i18n-api/trunk/src/site/rst/LutinUtil.rst
===================================================================
--- nuiton-i18n-api/trunk/src/site/rst/LutinUtil.rst 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/site/rst/LutinUtil.rst 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,255 +0,0 @@
-=========================
-Documentation - LutinUtil
-=========================
-
-:Authors: Benjamin POUSSIN, Nolwenn RANNOU
-:Contact: poussin(a)codelutin.com
-:Revision: $Revision$
-:Date: $Date$
-
-.. sectnum::
-
-.. contents::
-
-
-LutinUtil contient un ensemble de librairies trop petites pour avoir
-leur propre projet. Elles sont aussi utile à la plupart des projets de
-Code Lutin.
-
-
-Resource
-========
-
-Cette librairie permet de rechercher une ressource dans le maximum
-d'endroit possible et si elle est trouvée l'url de la ressource est
-retournée.
-
-::
-
- import org.codelutin.util.Resource;
- import java.net.URL;
- ...
- URL image = Resource.getURL("/images/bidulle.png");
- ...
-
-Dans cet exemple l'image est recherchée sur le système de fichier
-local, si elle n'est pas trouvée, elle est recherché dans le
-classpath, et si elle n'est toujours pas trouvée une exception est
-alors levée.
-
-
-ArgumentsParser
-===============
-
-Cette librairie permet de traiter les arguments de la ligne de commande de
-façon simple mais évoluable. Son principe de fonctionnement est que l'on
-déclare les arguements que l'on attend sur la ligne de commande avec le nombre
-de paramètre qu'ils prennent et une petite description de l'option. Ensuite
-on dispose de toutes les fonctions utiles pour le traitement de la ligne de
-commande.
-
-Voici un exemple d'utilisation::
-
- import org.codelutin.util.ArgumentsParser;
- ...
- ArgumentsParser parser = new ArgumentsParser("ToPIA");
-
- parser.addOption("version", "affiche le numéro de version", new String[]{"--version", "-v"}, 0).setRepetitionMax(1);
-
- parser.addOption("help", "affiche l'aide de topia", new String[]{"--help", "-h"}, 0).setRepetitionMax(1);
-
- parser.addOption("start", "Lancement d'une application", new
- String[]{"--start", "-s"}, 1).setRepetitionMax(1);
-
- System.out.println(parser.checkCoherence());
- parser.parse(args);
-
- if(parser.hasParsedOption("help")){
- System.out.println(parser.usage());
- }else if (parser.hasParsedOption("start")){
- System.out.println ("--> Executing application: ");
- String arg = parser.getParsedOption("start")
- new Application(arg);
- }else if (parser.hasParsedOption("version")){
- System.out.println( "- Topia version 0.01 - " +
- "Get new release at http://www.codelutin.com/ -" );
- }
-
-Cette librairie permet d'afficher l'aide de la ligne de commande::
-
- System.out.println(parser.usage());
-
-Elle permet aussi de vérifier le nombre de fois qu'une option de la ligne de
-commande est présente et que ce nombre est bien compris dans l'ensemble des
-valeurs acceptées, grâce au méthode *setRepetitionMax*, et *setRepetitionMin*.
-
-Si l'implantation par défaut du parseur d'option ne convient pas pour une de vos
-option, par exemple si le nombre de paramètre de l'option varie suivant la valeur
-du premier paramètre vous pouvez alors écrire votre propre Parser pour cette
-Option et l'utilisée avec les autres.
-
-
-Log
-===
-
-Cette objet permet de suivre ce que fait une application simplement. Le
-développeur indique grâce à cette classe l'état dans lequel l'application est.
-
-Ensuite, il peut mettre des listeners sur cette classe qui afficheront
-les messages qui ont été envoyés. Ou afficheront l'état d'une tâche en train
-de s'exécuter.
-
-
-Liste des librairies
-====================
-
-Cette liste répertorie l'ensemble des librairies de LutinUtil.
-
-
-Configuration
--------------
-Gestion de la configuration d'une l'application, de l'internationalisation,
-des numéros de versions, des ressources...
-
-ApplicationConfig
- Gestion des fichiers de configuration, des variables d'environnement
- et des arguments de la ligne de commande.
-Resource
- Recherche d'un fichier dans le système de fichiers et dans le classpath
- (.jar, .zip).
-ClassLoaderUtil
- Récupération des urls d'un URLClassLoader.
-LocaleConverter
- Conversion d'une chaîne en Locale.
-SortedProperties
- Fichier de propriétés trié par ordre alphabétique.
-RecursiveProperties
- Fichier de propriétés contenant des références à des propriétés de ce
- même fichier.
-VersionNumber
- Représentation d'un numéro de version pour une application.
-VersionNumberConverter
- Conversion d'une chaine en VersionNumber.
-VersionNumberUtil
- Manipulation de numéros de version sous forme de chaînes
- (comparaison, incrémentation...).
-
-
-Fichiers
---------
-Gestion de fichiers.
-
-FileUtil
- Opérations sur des fichiers. Copie, suppression, renommage,
- recherche, fichiers d'un répertoire, sous-répertoires d'un répertoire,
- récupération du basename ou de l'extension, création d'un fichier
- temporaire, comparaison de dates de création, récupération d'une chaîne,
- d'un Reader ou d'un Writer à partir d'un fichier, récupération du fichier
- saisi dans une boîte de dialogue, conversions en byte[], en Stream...
-IOUtils
- Copie d'un fichier, chemin temporaire...
-ZipUtil
- Opérations sur des fichiers Zip. Compression et décompression avec ou
- sans filtres, scan des fichiers créés ou écrasés lors de la décompression...
-ZipStreamEncoder
- Encodage de fichiers Zip dans des threads.
-
-
-Collections
------------
-Gestion de collections et de tableaux.
-
-CollectionUtil
- Manipulation des collections. Ajout de plusieurs éléments à une
- collection, conversion d'une collection non typée en collection typée.
-ArrayUtil
- Opérations sur des tableaux. Concaténation, somme, recherche,
- conversion d'une liste en tableau, d'un String[] en int[].
-BoundedList
- ArrayList avec un nombre d'élément minimum et maximum.
-HashList
- Liste d'objets uniques.
-TransformedList
- Liste d'objets transformables (interface Transformer).
-
-
-Chaînes de caractères
----------------------
-Gestion des chaînes de caractères.
-
-StringUtil
- Manipulation de chaînes de caractères. Découpage, suppression
- d'accents, vérification de parenthésage, conversions vers un nombre,
- un tableau, une couleur, une date...
-URIConverter
- Conversion d'une chaîne en URI.
-URLConverter
- Conversion d'une chaîne en URL.
-GZUtil
- Compression et décompression de chaînes de caractères.
-
-
-Analyse
--------
-Analyse du code et monitoring.
-
-CallAnalyse
- Analyse sur des appels de méthodes. Temps d'éxecution, mémoire
- utilisée et nombre d'appels.
-Log
- Mise en place de logs dans une application.
-LoggingPatternFormatter
- Formattage des logs.
-
-
-Énumérations
-------------
-Gestion des énumérations et énumérations utiles.
-
-EnumConverter
- Conversion d'une chaîne en Enum.
-EnumEditor
- Editeur d'Enum en Swing.
-H2TypeEnum
- Énumération pour représenter les différents types d'implantation dans H2.
-MonthEnum
- Énumération pour représenter les mois d'une année.
-SimplePaginationEnum
- Énumération pour définir les tailles de liste.
-
-
-Introspection
--------------
-Introspection et manipulations sur des objets et des classes.
-
-ObjectUtil
- Outils pour manipuler des objets. Création d'un objet à partir d'une chaîne
- le décrivant, conversion d'un objet en Object, récupération de méthodes
- à partir de leur nom, de constructeurs à partir de leurs paramètres...
-ReflectUtil
- Introspection sur une classe. Détermine si un attribut est constant,
- recherche de constantes d'un type donné, conversion d'une classe en
- Enum...
-FormatConverter
- Conversion d'une représentation d'un objet à une autre représentation.
- (Java, SQL, XML...).
-
-
-Divers
-------
-Autres librairies utiles n'appartenant à aucune des catégories précédentes.
-
-CardinalityHelper
- Méthodes pour tester des cardinalités.
-ListenerSet
- Mise en place de listeners.
-CategorisedListenerSet
- Gestion des catégories de listeners.
-ConverterUtil
- Méthodes sur des converters.
-DigestGenerator
- Fonctionnalités de Digest XML.
-MD5
- Implémentation des MD5 hash.
-MD5InputStream
- MD5 dans un flux.
Deleted: nuiton-i18n-api/trunk/src/site/rst/Todo.rst
===================================================================
--- nuiton-i18n-api/trunk/src/site/rst/Todo.rst 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/site/rst/Todo.rst 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,80 +0,0 @@
-Un nouveau parser d'argument
-============================
-
-L'idée est d'avoir une description simple des arguments et de leur type et
-que soit généré une classe à partir de cette description. Dans le
-programme il suffirat de demander à la classe généré les inforamtions.
-
-Les options sont chargées par leur valeur par defaut, puis sont surchargées
-par les valeurs des fichiers de configurations, puis surchargé
-par les valeurs des variables d'environnement, et enfin surchargé par les
-valeurs de la ligne de commande.
-
-Les fichiers de configuraiton sont lu dans l'ordre suivant: /etc/ + chemin
-indiqué, puis $HOME/. + chemin indiqué.
-
-si le chemin indiqué est titi/toto.conf et que l'on est sur un système Linux
-les fichiers de configuration seront: /etc/titi/toto.conf et
-~/.titi/toto.conf
-
-exemple de description
-----------------------
-
-Par exemple on pourrait avoir le fichier Toto.java.conf dans les sources du
-projet qui fournirait le fichier Toto.java::
-
- configfile: titi/toto.conf
-
- outFile: le fichier de sortie
- short: o
- long: outfile
- default: -
- type: File
- environment: toto
-
- number: Le nombre de fichier à produire
- required: 1
- short: n
- default: 1
- long: number
- condition: 0<Number && Number<10
- type: int
-
-La description commence l'option non obligatoire *configfile* qui donne le
-nom du fichier de configuration à utiliser pour l'application. Puis on
-trouve les options. Une option commence par un nom, puis sa description
-ensuite l'option peut avoir plusieurs options:
-
-- short: l'option courte sur la ligne de commande. Si absente pas d'option
- courte
-- long: l'option longue sur la ligne de commande, si pas d'option, on
- reprend le nom de l'option
-- type: le type de l'option (int, Float, String, char, File, ...)
-- default: la valeur par default, si elle n'est pas specifier sur la ligne
- de commande, ni dans les variables d'environnement ni dans le fichier de
- configuration. Pour une option de type File si default faut -, alors
- le fichier est la sortie standard.
-- condition: la condition que doit respecter l'option pour être valide
- la condition est une expression java contenant le nom de l'option comme
- valeur de variable.
-- environment: le nom de la variable d'environnement qu'il faut utiliser
- si l'option n'est pas retrouve sur la ligne de commande. Si cette option
- n'est pas indiqué alors, la variable d'environnement recherchée est le nom
- du fichier de description suivi d'un point, suivi du nom de l'option.
- par exemple toto.outfile
-
-
-L'objet résultat sera Toto placé dans le fichier Toto.java. L'extension
-java.conf est obligatoire pour détecter un fichier de configuration à
-parser. Cet objet aurai les méthodes getOutputFile():File et getNumber():int
-
-Librairies utilisé
-------------------
-
-Sans doute utilisé, le parser redwood pour le fichier de configuration
-http://www.isellrenohomes.com/parser/. Il lit directement des EBNF.
-
-projet de parsage d'argument
-----------------------------
-
-http://www.martiansoftware.com/jsap/
Modified: nuiton-i18n-api/trunk/src/site/rst/index.rst
===================================================================
(Binary files differ)
Modified: nuiton-i18n-api/trunk/src/site/site.xml
===================================================================
--- nuiton-i18n-api/trunk/src/site/site.xml 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/site/site.xml 2009-05-14 04:43:24 UTC (rev 1541)
@@ -34,27 +34,21 @@
<menu name="Utilisateur">
<item name="Accueil" href="index.html"/>
- <item name="Documentation" href="/LutinUtil.html"/>
</menu>
<menu name="Téléchargement">
- <item href="${labs.builder.url}/org/codelutin/${project.artifactId}/${project.version}/${project.build.finalName}.jar"
+ <item href="${repository.home.url}/org/nuiton/${project.artifactId}/${project.version}/${project.build.finalName}.jar"
name="Librairie (jar)"/>
- <item href="${labs.builder.url}/org/codelutin/${project.artifactId}/${project.version}/${project.build.finalName}-javadoc.jar"
+ <item href="${repository.home.url}/org/nuiton/${project.artifactId}/${project.version}/${project.build.finalName}-javadoc.jar"
name="Javadoc (jar)"/>
- <item href="${labs.builder.url}/org/codelutin/${project.artifactId}/${project.version}/${project.build.finalName}-sources.jar"
+ <item href="${repository.home.url}/org/nuiton/${project.artifactId}/${project.version}/${project.build.finalName}-sources.jar"
name="Sources (jar)"/>
- <item href="${labs.builder.url}/org/codelutin/${project.artifactId}/${project.version}/${project.build.finalName}-deps.zip"
+ <item href="${repository.home.url}/org/nuiton/${project.artifactId}/${project.version}/${project.build.finalName}-deps.zip"
name="Bundle sans sources (zip)"/>
- <item href="${labs.builder.url}/org/codelutin/${project.artifactId}/${project.version}/${project.build.finalName}-full.zip"
+ <item href="${repository.home.url}/org/nuiton/${project.artifactId}/${project.version}/${project.build.finalName}-full.zip"
name="Bundle complêt (zip)"/>
</menu>
- <menu name="Développeur">
- <item name="A faire" href="Todo.html"/>
- <!--item name="CommandLineArgumentApplication" href="/CommandLineArgumentApplication.html"/-->
- </menu>
-
<menu ref="reports"/>
</body>
Deleted: nuiton-i18n-api/trunk/src/test/java/org/codelutin/i18n/I18nLoaderTest.java
===================================================================
--- nuiton-i18n-api/trunk/src/test/java/org/codelutin/i18n/I18nLoaderTest.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/test/java/org/codelutin/i18n/I18nLoaderTest.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,120 +0,0 @@
-/**
- * *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%*
- */
-package org.codelutin.i18n;
-
-import org.junit.AfterClass;
-import org.junit.Assert;
-import org.junit.Test;
-
-import java.util.Locale;
-
-/**
- * LanguageManager Tester.
- *
- * @author chemit
- * @version 1.0
- * @since <pre>02/10/2008</pre>
- */
-public class I18nLoaderTest {
-
- String encoding;
- Locale locale;
- Language language;
- I18nLoader loader;
-
- @AfterClass
- public static void afterClass() throws Exception {
- I18n.close();
- }
-
- @Test
- public void testGetLoader() throws Exception {
-
- Assert.assertNull(I18n.loader);
-
- loader = I18n.getLoader();
- Assert.assertNotNull(loader);
- //assertEquals(I18n.DEFAULT_ENCODING, loader.getEncoding());
- Assert.assertNull(loader.getLanguage());
- }
-
- @Test
- public void testChangeLocale() throws Exception {
-
- locale = I18n.newLocale("fr_FR");
- encoding = I18n.ISO_8859_1_ENCONDING;
- updateLanguage();
- assertNbLanguages(1);
- updateLanguage();
- assertNbLanguages(1);
-
- locale = I18n.newLocale("en_GB");
- updateLanguage();
- assertLanguageChanged();
- assertNbLanguages(2);
-
- locale = I18n.newLocale("en_US");
- updateLanguage();
- assertLanguageChanged();
- assertNbLanguages(3);
-
- locale = I18n.newLocale("en");
- updateLanguage();
- assertLanguageChanged();
- assertNbLanguages(4);
- }
-
- protected void assertLanguageChanged() {
- Assert.assertNotSame(language, loader.getLanguage());
- }
-
- /*public void testChangeEncoding() throws Exception {
- locale = I18n.newLocale("fr_FR");
- encoding = I18n.ISO_8859_1_ENCONDING;
- updateLanguage();
-
- locale = I18n.newLocale("en_GB");
- updateLanguage();
-
- // language change (from his encoding)
- assertLanguageChanged();
- // 2 language in cache
- assertNbLanguages(2);
-
- encoding = I18n.UTF_8_ENCONDING;
- updateLanguage();
- // language change (from his encoding)
- assertLanguageChanged();
- // one language in cache
- assertNbLanguages(1);
-
- }*/
-
- protected void assertNbLanguages(int i) {
- Assert.assertEquals(i, loader.getLanguages().size());
- }
-
- protected void updateLanguage() {
- language = loader == null ? null : loader.getLanguage();
- loader = I18n.getLoader();
- loader.setLanguage(locale);
- }
-
-}
-
Deleted: nuiton-i18n-api/trunk/src/test/java/org/codelutin/i18n/bundle/I18nBundleManagerTest.java
===================================================================
--- nuiton-i18n-api/trunk/src/test/java/org/codelutin/i18n/bundle/I18nBundleManagerTest.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/test/java/org/codelutin/i18n/bundle/I18nBundleManagerTest.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,279 +0,0 @@
-/**
- * *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%*
- */
-package org.codelutin.i18n.bundle;
-
-import org.codelutin.i18n.*;
-import org.apache.commons.logging.LogFactory;
-import org.junit.After;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
-import java.io.File;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.Locale;
-import org.junit.Assert;
-
-/**
- * I18nBundleFinder Tester.
- * <p/>
- * For this tests, we assume we have the correspondant bundles :
- * <p/>
- * verydummy
- * dummy
- * dummyOnlyfr
- * dummyOnlyen
- * <p/>
- * dummy-fr
- * dummyOnlyfr-fr
- * dummyOnlyfr2-fr
- * dummy-en
- * dummyOnlyen-en
- * <p/>
- * dummy-fr_FR
- * lutinutil-fr_FR
- * dummy-en_GB
- * lutinutil-en_GB
- * dummy-en_US
- * <p/>
- *
- * @author chemit
- * @version 1.0
- * @since <pre>03/02/2008</pre>
- *
- * Redo tests for new i18n system
- */
-public class I18nBundleManagerTest {
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static private org.apache.commons.logging.Log log = LogFactory.getLog(I18nBundleManagerTest.class);
- Locale locale;
- static URLClassLoader loader;
- Integer nbURLs = null;
-
- static enum BundleTest {
-
- veryDummy(true, false, false, false, false, false),
- dummy(true, true, true, true, true, true),
- lutinutil(false, false, true, false, false, true),
- onlyfr(true, true, false, false, false, false),
- onylfr2(false, true, false, false, false, false),
- onlyen(true, false, false, true, false, false);
- boolean hasGene;
- boolean hasFr;
- boolean hasFrFR;
- boolean hasEn;
- boolean hasEnUS;
- boolean hasEnUK;
-
- BundleTest(boolean hasGene, boolean hasFr, boolean hasFrFR, boolean hasEn, boolean hasEnUS, boolean hasEnUK) {
- this.hasGene = hasGene;
- this.hasFr = hasFr;
- this.hasFrFR = hasFrFR;
- this.hasEn = hasEn;
- this.hasEnUS = hasEnUS;
- this.hasEnUK = hasEnUK;
- }
-
- static int getNbGeneralBundles() {
- int result = 0;
- for (BundleTest bundleTest : values()) {
- if (bundleTest.hasGene) {
- result++;
- }
- }
- return result;
- }
-
- static int getNbLanguageBundles(boolean fr, boolean en) {
- int result = 0;
- for (BundleTest bundleTest : values()) {
- if (bundleTest.hasGene) {
- continue;
- }
- if (fr && bundleTest.hasFr) {
- result++;
- }
- if (en && bundleTest.hasEn) {
- result++;
- }
- }
- return result;
- }
-
- static int gerNbFullBundles(boolean fr, boolean us, boolean uk) {
- int result = 0;
- for (BundleTest bundleTest : values()) {
- if (bundleTest.hasGene || ((uk || us) && bundleTest.hasEn) || (fr && bundleTest.hasFr)) {
- continue;
- }
- if (fr && bundleTest.hasFrFR) {
- result++;
- }
- if (us && bundleTest.hasEnUS) {
- result++;
- }
- if (uk && bundleTest.hasEnUK) {
- result++;
- }
- }
- return result;
- }
-
- static int getNbLanguageEntries(boolean fr, boolean en) {
- int result = 0;
- for (BundleTest bundleTest : values()) {
- if (bundleTest.hasGene) {
- result++;
- }
- if (fr && bundleTest.hasFr) {
- result++;
- }
- if (en && bundleTest.hasEn) {
- result++;
- }
- }
- return result;
- }
-
- static int gerNbFullEntries(boolean fr, boolean us, boolean uk) {
- int result = 0;
- for (BundleTest bundleTest : values()) {
- if (bundleTest.hasGene) {
- result++;
- }
- if (((uk || us) && bundleTest.hasEn)) {
- result++;
- }
-
- if ((fr && bundleTest.hasFr)) {
- result++;
- }
-
- if (fr && bundleTest.hasFrFR) {
- result++;
- }
- if (us && bundleTest.hasEnUS) {
- result++;
- }
- if (uk && bundleTest.hasEnUK) {
- result++;
- }
- }
- return result;
- }
- }
-
- @BeforeClass
- public static void beforeClass() throws MalformedURLException {
-
- loader = (URLClassLoader) I18nBundleManagerTest.class.getClassLoader();
-
- URL[] urls = new URL[loader.getURLs().length + 2];
-
- urls[0] = new File("target" + File.separator + "test-classes" + File.separator + "i18n").toURI().toURL();
- urls[1] = new File("target" + File.separator + "classes" + File.separator + "i18n").toURI().toURL();
-
- int i = 2;
- for (URL url : loader.getURLs()) {
- urls[i++] = url;
- }
- loader = new URLClassLoader(urls, loader);
-
- log.info("use loader " + loader + " (nb urls : " + loader.getURLs().length + ")");
- for (URL url : loader.getURLs()) {
- log.info("url found in classloader : " + url);
- }
- }
-
- @After
- public void after() throws Exception {
- locale = null;
- }
-
- @Test
- public void testGetURLs() throws Exception {
- Assert.assertEquals(getNbURLs(), I18nBundleFactory.getURLs(loader).length);
- }
-
- @Test
- public void testDetectBundles() throws Exception {
- URL[] urls = I18nBundleFactory.getURLs(loader);
- Assert.assertEquals(BundleTest.values().length, I18nBundleFactory.detectBundles(urls).size());
- }
-
- @Test
- public void testGetBundles() throws Exception {
- updateLanguage(null);
- updateLanguage(Locale.FRENCH);
- updateLanguage(Locale.ENGLISH);
- updateLanguage(Locale.FRANCE);
- updateLanguage(Locale.US);
- updateLanguage(Locale.UK);
- }
-
- protected int getNbURLs() {
- if (nbURLs == null) {
- File f;
- f = new File("target" + File.separator + "test-classes" + File.separator + "i18n");
- nbURLs = f.listFiles().length;
- f = new File("target" + File.separator + "classes" + File.separator + "i18n");
- nbURLs += f.listFiles().length;
- }
- return nbURLs;
- }
-
- protected void updateLanguage(Locale newLocale) {
- locale = newLocale;
- I18n.init(locale);
- assertBundlesEntries();
- }
-
- protected void assertBundlesEntries() {
- int nbGene = BundleTest.getNbGeneralBundles();
- boolean isFr = locale != null && "fr".equals(locale.getLanguage());
- boolean isEn = locale != null && "en".equals(locale.getLanguage());
- boolean isFrFR = isFr && locale != null && "FR".equals(locale.getCountry());
- boolean isEnUS = isEn && locale != null && "US".equals(locale.getCountry());
- boolean isEnGB = isEn && locale != null && "GB".equals(locale.getCountry());
-
- int nbLang = BundleTest.getNbLanguageBundles(isFr, isEn);
- int nbFull = BundleTest.gerNbFullBundles(isFrFR, isEnUS, isEnGB);
-
- int nbEntries = 0;
-
- if (locale == null) {
- nbEntries = nbGene;
- }
-
- if (isFrFR) {
- }
-
- if (isFrFR || isEnUS || isEnGB) {
- nbEntries += BundleTest.gerNbFullEntries(isFrFR, isEnUS, isEnGB);
- } else if (isFr || isEn) {
- nbEntries += BundleTest.getNbLanguageEntries(isFr, isEn);
- }
- I18nLoader i18nLoader = I18n.getLoader();
- Assert.assertEquals(nbGene + nbLang + nbFull, i18nLoader.getBundles(locale).length);
-// //TODO make eact match with promute logic !
- Assert.assertTrue(nbEntries <= i18nLoader.getBundleEntries(locale).length);
- }
-}
Deleted: nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ApplicationConfigTest.java
===================================================================
--- nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ApplicationConfigTest.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ApplicationConfigTest.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,247 +0,0 @@
-/**
- * *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%*
- */
-/*
- * Copyright (C) 2002-2008 Code Lutin, 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.
- */
-
-package org.codelutin.util;
-
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-import junit.framework.TestCase;
-import org.codelutin.util.ApplicationConfig.Action;
-
-/**
- *
- * @author poussin
- */
-public class ApplicationConfigTest extends TestCase {
-
- static int dummyActionCall = 0;
- static public class DummyAction {
- @Action.Step(1)
- public void dummyAction(String s, int step) {
- dummyActionCall++;
- System.out.println(s + ":" + step);
- }
- }
-
- public ApplicationConfigTest(String testName) {
- super(testName);
- }
-
- /**
- * Test of getUnparsed method, of class ApplicationConfig.
- */
- public void testGetUnparsed() throws Exception {
- System.out.println("getUnparsed");
- ApplicationConfig instance = new ApplicationConfig();
- List<String> expResult = new ArrayList<String>();
- List<String> result = instance.getUnparsed();
- assertEquals(expResult, result);
-
- expResult.add("toto");
- expResult.add("titi");
- expResult.add("tata");
-
- instance.parse(new String[]{"toto", "titi", "tata"});
- result = instance.getUnparsed();
- assertEquals(expResult, result);
- }
-
- /**
- * Test of addAction method, of class ApplicationConfig.
- */
- public void testAddAction() throws Exception {
- System.out.println("addAction");
- Action action = null;
- ApplicationConfig instance = new ApplicationConfig();
-
- // test add null Action
- instance.addAction(action);
-
- action = new Action(1, new DummyAction(), DummyAction.class.getMethod("dummyAction", String.class, Integer.TYPE), "coucou", "12");
- instance.addAction(action);
- }
-
- /**
- * Test of doAction method, of class ApplicationConfig.
- */
- public void testDoAction() throws Exception {
- System.out.println("doAction");
- ApplicationConfig instance = new ApplicationConfig();
-
- Action action = new Action(1, new DummyAction(), DummyAction.class.getMethod("dummyAction", String.class, Integer.TYPE), "coucou", "12");
- instance.addAction(action);
-
- dummyActionCall = 0;
- assertEquals(0, dummyActionCall);
- instance.doAction(0);
- assertEquals(0, dummyActionCall);
- instance.doAction(1);
- assertEquals(1, dummyActionCall);
- instance.doAction(2);
- assertEquals(1, dummyActionCall);
- }
-
- /**
- * Test of setUseOnlyAliases method, of class ApplicationConfig.
- */
- public void testSetUseOnlyAliases() {
- System.out.println("setUseOnlyAliases");
- ApplicationConfig instance = new ApplicationConfig();
- assertEquals(false, instance.isUseOnlyAliases());
- instance.setUseOnlyAliases(false);
- assertEquals(false, instance.isUseOnlyAliases());
- instance.setUseOnlyAliases(true);
- assertEquals(true, instance.isUseOnlyAliases());
- }
-
- /**
- * Test of addAlias method, of class ApplicationConfig.
- */
- public void testAddAlias() throws Exception {
- System.out.println("addAlias");
- ApplicationConfig instance = new ApplicationConfig();
- instance.addAlias("toto", "totochange");
- instance.addAlias("titi", "titichange");
-
- List<String> expResult = new ArrayList<String>();
- List<String> result = instance.getUnparsed();
- assertEquals(expResult, result);
-
- expResult.add("totochange");
- expResult.add("titichange");
- expResult.add("tata");
-
- instance.parse(new String[]{"toto", "titi", "tata"});
- result = instance.getUnparsed();
- assertEquals(expResult, result);
- }
-
- /**
- * Test of setConfigFileName method, of class ApplicationConfig.
- */
- public void testSetConfigFileName() {
- System.out.println("setConfigFileName");
- ApplicationConfig instance = new ApplicationConfig();
- instance.setConfigFileName("bidulle");
- assertEquals("bidulle", instance.getConfigFileName());
- }
-
- /**
- * Test of setOption method, of class ApplicationConfig.
- */
- public void testSetOption() {
- System.out.println("setOption");
- ApplicationConfig instance = new ApplicationConfig();
- assertEquals(null, instance.getOption("truc"));
- instance.setOption("truc", "bidulle");
- assertEquals("bidulle", instance.getOption("truc"));
- }
-
- /**
- * Test of getMethods method, of class ApplicationConfig.
- */
- public void testGetMethods() {
- System.out.println("getMethods");
- ApplicationConfig instance = new ApplicationConfig();
- Map<String, Method> result = instance.getMethods();
- assertTrue(result.containsKey("option"));
- }
-
- /**
- * Test of getParams method, of class ApplicationConfig.
- */
- public void testGetParams() throws Exception {
- System.out.println("getParams");
- Method m = DummyAction.class.getMethod("dummyAction", String.class, Integer.TYPE);
- List<String> list = new ArrayList<String>(Arrays.asList("toto", "10", "/tmp", "9"));
- ListIterator<String> args = list.listIterator();
-
- ApplicationConfig instance = new ApplicationConfig();
- String[] expResult = new String[]{"toto", "10"};
- String[] result = instance.getParams(m, args);
- assertEquals(Arrays.asList(expResult), Arrays.asList(result));
- assertEquals(2, list.size());
- }
-
- /**
- * Test of createAction method, of class ApplicationConfig.
- */
- public void testCreateAction() throws Exception {
- System.out.println("createAction");
- List<String> list = new ArrayList<String>(Arrays.asList("dummy", "toto", "10", "/tmp", "9"));
- ListIterator<String> args = list.listIterator();
- args.next();
- ApplicationConfig instance = new ApplicationConfig();
-
- Action result = instance.createAction(
- DummyAction.class.getName() + "#dummyAction", args);
- assertEquals(1, result.step);
- dummyActionCall = 0;
- result.doAction();
- assertEquals(1, dummyActionCall);
-}
-
- /**
- * Test of parse method, of class ApplicationConfig.
- */
- public void testParse() throws Exception {
- System.out.println("parse");
- String[] args = "-f file -v -d -o /tmp/file -m coucou 10 others args".split(" ");
- ApplicationConfig instance = new ApplicationConfig();
- instance.addAlias("-f", "--option", "file");
- instance.addAlias("-v", "--option", "verbose", "true");
- instance.addAlias("-d", "--option", "debug", "true");
- instance.addAlias("-o", "--option", "output");
- instance.addAlias("-m", "--" + DummyAction.class.getName() + "#dummyAction");
- instance.parse(args);
-
- dummyActionCall = 0;
- assertEquals("file", instance.getOption("file"));
- assertEquals("true", instance.getOption("verbose"));
- assertEquals("true", instance.getOption("debug"));
- assertEquals("/tmp/file", instance.getOption("output"));
- assertEquals(Arrays.asList("others", "args"), instance.getUnparsed());
-
- instance.doAction(1);
- assertEquals(1, dummyActionCall);
- }
-
-}
Deleted: nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/CallAnalyseTest.java
===================================================================
--- nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/CallAnalyseTest.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/CallAnalyseTest.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,84 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * CallAnalyseTest.java
- *
- * Created: 25 août 2005 21:03:50 CEST
- *
- * @author Benjamin POUSSIN <poussin(a)codelutin.com>
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-
-package org.codelutin.util;
-
-import junit.framework.TestCase;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class CallAnalyseTest extends TestCase { // CallAnalyseTest
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- static private Log log = LogFactory.getLog(CallAnalyseTest.class);
-
- protected List<List> memoryConsume = new ArrayList<List>();
-
- public void testCall() throws Exception {
- CallAnalyse.activate();
- for (int i = 0; i < 10; i++) {
- eatMemory();
- freeMemory();
- }
-
- assertEquals(10, CallAnalyse.getThreadStatistics().get("eatMemory").getCalls());
- assertEquals(10, CallAnalyse.getThreadStatistics().get("freeMemory").getCalls());
-
- log.debug(CallAnalyse.getThreadStatistics());
- }
-
- protected void eatMemory() {
- CallAnalyse.enter("eatMemory");
- try {
- for (int i = 0; i < 100; i++) {
- memoryConsume.add(new ArrayList(100));
- }
- } catch (Exception eee) {
- // do nothing
- } finally {
- CallAnalyse.exit("eatMemory");
- }
- }
-
- protected void freeMemory() {
- CallAnalyse.enter("freeMemory");
- try {
- memoryConsume.clear();
- } catch (Exception eee) {
- // do nothing
- } finally {
- CallAnalyse.exit("freeMemory");
- }
- }
-
-} // CallAnalyseTest
-
Deleted: nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/CardinalityHelperTest.java
===================================================================
--- nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/CardinalityHelperTest.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/CardinalityHelperTest.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,175 +0,0 @@
-/*
-* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-package org.codelutin.util;
-
-import junit.framework.TestCase;
-
-/**
- * CardinalityHelper Tester.
- *
- * @author chemit
- * @version 1.0
- * @since <pre>12/17/2007</pre>
- */
-public class CardinalityHelperTest extends TestCase {
-
- String txt;
- Object[] result;
- StringBuilder sb;
-
- public void testNoMaxParsing() {
- txt = "*";
- result = CardinalityHelper.parseCardinalite(txt, false);
- assertCardinalite(result, "", 0, -1);
-
- txt = "yo*";
- result = CardinalityHelper.parseCardinalite(txt, false);
- assertCardinalite(result, "yo", 0, -1);
-
- txt = "yo+";
- result = CardinalityHelper.parseCardinalite(txt, false);
- assertCardinalite(result, "yo", 1, -1);
-
- txt = "yo *";
- result = CardinalityHelper.parseCardinalite(txt, false);
- assertCardinalite(result, "yo", 0, -1);
-
- txt = "yo +";
- result = CardinalityHelper.parseCardinalite(txt, false);
- assertCardinalite(result, "yo", 1, -1);
- }
-
- public void testExactlyParsing() {
- txt = "{5}";
- result = CardinalityHelper.parseCardinalite(txt, false);
- assertCardinalite(result, "", 5, 5);
-
- txt = "yo{1}";
- result = CardinalityHelper.parseCardinalite(txt, false);
- assertCardinalite(result, "yo", 1, 1);
-
- txt = "yo {2}";
- result = CardinalityHelper.parseCardinalite(txt, false);
- assertCardinalite(result, "yo", 2, 2);
-
- txt = "yo {12}";
- result = CardinalityHelper.parseCardinalite(txt, false);
- assertCardinalite(result, "yo", 12, 12);
- }
-
- public void testBoundedParsing() {
- txt = "{1,2}";
- result = CardinalityHelper.parseCardinalite(txt, false);
- assertCardinalite(result, "", 1, 2);
-
- txt = "{2,*}";
- result = CardinalityHelper.parseCardinalite(txt, false);
- assertCardinalite(result, "", 2, -1);
-
- txt = "yo{1,2}";
- result = CardinalityHelper.parseCardinalite(txt, false);
- assertCardinalite(result, "yo", 1, 2);
-
- txt = "yo {10,20}";
- result = CardinalityHelper.parseCardinalite(txt, false);
- assertCardinalite(result, "yo", 10, 20);
-
- txt = "yo {10,*}";
- result = CardinalityHelper.parseCardinalite(txt, false);
- assertCardinalite(result, "yo", 10, -1);
- }
-
- public void testDefaultParsing() {
- txt = "yo {a}";
- result = CardinalityHelper.parseCardinalite(txt, false);
- assertCardinalite(result, "yo {a}", 0, 1);
-
- txt = "yo {a}";
- result = CardinalityHelper.parseCardinalite(txt, true);
- assertCardinalite(result, "yo {a}", 1, 1);
- }
-
- public void testPrintCardinality() {
-
- CardinalityHelper.printCardinalite(sb = new StringBuilder(),"yo",0,1,true,"<",">","[","]");
- assertPrint(sb,"[yo]");
-
- CardinalityHelper.printCardinalite(sb = new StringBuilder(),"yo",0,5,false,"<",">","[","]");
- assertPrint(sb,"[yo]{0,5}");
-
- CardinalityHelper.printCardinalite(sb = new StringBuilder(),"yo",0,-1,false,"<",">","[","]");
- assertPrint(sb,"[yo]*");
-
- CardinalityHelper.printCardinalite(sb = new StringBuilder(),"yo",0,1,true,"<",">","","");
- assertPrint(sb,"yo{0,1}");
-
- CardinalityHelper.printCardinalite(sb = new StringBuilder(),"yo",0,1,false,"<",">","","");
- assertPrint(sb,"yo");
-
- CardinalityHelper.printCardinalite(sb = new StringBuilder(),"yo",0,5,false,"<",">","","");
- assertPrint(sb,"yo{0,5}");
-
- CardinalityHelper.printCardinalite(sb = new StringBuilder(),"yo",0,-1,false,"<",">","","");
- assertPrint(sb,"yo*");
-
-
- CardinalityHelper.printCardinalite(sb = new StringBuilder(),"yo",1,1,false,"<",">","[","]");
- assertPrint(sb,"<yo>");
-
- CardinalityHelper.printCardinalite(sb = new StringBuilder(),"yo",5,5,true,"<",">","[","]");
- assertPrint(sb,"<yo>{5}");
-
- CardinalityHelper.printCardinalite(sb = new StringBuilder(),"yo",1,5,true,"<",">","[","]");
- assertPrint(sb,"<yo>{1,5}");
-
- CardinalityHelper.printCardinalite(sb = new StringBuilder(),"yo",1,-1,true,"<",">","[","]");
- assertPrint(sb,"<yo>+");
-
- CardinalityHelper.printCardinalite(sb = new StringBuilder(),"yo",3,-1,true,"<",">","[","]");
- assertPrint(sb,"<yo>{3,*}");
-
- CardinalityHelper.printCardinalite(sb = new StringBuilder(),"yo",1,1,false,"","","[","]");
- assertPrint(sb,"yo{1}");
-
- CardinalityHelper.printCardinalite(sb = new StringBuilder(),"yo",1,1,true,"","","[","]");
- assertPrint(sb,"yo");
-
- CardinalityHelper.printCardinalite(sb = new StringBuilder(),"yo",5,5,true,"","","[","]");
- assertPrint(sb,"yo{5}");
-
- CardinalityHelper.printCardinalite(sb = new StringBuilder(),"yo",1,5,true,"","","[","]");
- assertPrint(sb,"yo{1,5}");
-
- CardinalityHelper.printCardinalite(sb = new StringBuilder(),"yo",1,-1,true,"","","[","]");
- assertPrint(sb,"yo+");
-
- CardinalityHelper.printCardinalite(sb = new StringBuilder(),"yo",3,-1,true,"","","[","]");
- assertPrint(sb,"yo{3,*}");
- }
-
- private void assertPrint(StringBuilder sb, String expectedResult) {
- assertEquals(expectedResult,sb.toString());
- }
-
- private void assertCardinalite(Object[] result, String key, Integer min, Integer max) {
- assertEquals(key, (String) result[0]);
- assertEquals(min, result[1]);
- assertEquals(max, result[2]);
- }
-
-}
Deleted: nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/CategorisedListenerSetTest.java
===================================================================
--- nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/CategorisedListenerSetTest.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/CategorisedListenerSetTest.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,107 +0,0 @@
-/*
- * *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%*
- */
-
-/*******************************************************************************
- * CategorisedListenerSetTest.java
- *
- * Created: 3 janv. 2006 23:27:42
- *
- * @author poussin
- *
- * @version $Revision$
- *
- * Last update: $Date$ by : $Author$
- */
-
-package org.codelutin.util;
-
-import junit.framework.TestCase;
-
-/** @author poussin */
-
-public class CategorisedListenerSetTest extends TestCase {
-
- /*
- * Test method for
- * 'org.codelutin.util.CategorisedListenerSet.getAllListeners(Object)'
- */
- public void testGetAllListeners() {
-
- {
- CategorisedListenerSet<Object> cls = new CategorisedListenerSet<Object>();
-
- String[] ls = new String[]{"Double", "Long", "Number", "Object",
- "LoggingException", "Throwable"};
-
- cls.add(Double.class, ls[0]);
- cls.add(Long.class, ls[1]);
- cls.add(Number.class, ls[2]);
- cls.add(Object.class, ls[3]);
-
- assertEquals(3, cls.getAllListeners(Double.class).size());
- assertEquals(3, cls.getAllListeners(Long.class).size());
- assertEquals(2, cls.getAllListeners(Number.class).size());
- assertEquals(1, cls.getAllListeners(Object.class).size());
-
- cls.addCategory(LoggingException.class, Number.class);
-
- cls.add(LoggingException.class, ls[4]);
- cls.add(Throwable.class, ls[5]);
-
- assertEquals(5, cls.getAllListeners(Double.class).size());
- assertEquals(5, cls.getAllListeners(Long.class).size());
- assertEquals(4, cls.getAllListeners(Number.class).size());
- assertEquals(1, cls.getAllListeners(Object.class).size());
-
- assertEquals(3, cls.getAllListeners(LoggingException.class).size());
- assertEquals(2, cls.getAllListeners(Throwable.class).size());
-
- }
- {
- CategorisedListenerSet<Object> cls = new CategorisedListenerSet<Object>(null, false);
-
- String[] ls = new String[]{"Double", "Long", "Number", "Object",
- "LoggingException", "Throwable"};
-
- cls.add(Double.class, ls[0]);
- cls.add(Long.class, ls[1]);
- cls.add(Number.class, ls[2]);
- cls.add(Object.class, ls[3]);
-
- assertEquals(1, cls.getAllListeners(Double.class).size());
- assertEquals(1, cls.getAllListeners(Long.class).size());
- assertEquals(1, cls.getAllListeners(Number.class).size());
- assertEquals(1, cls.getAllListeners(Object.class).size());
-
- cls.addCategory(LoggingException.class, Number.class);
-
- cls.add(LoggingException.class, ls[4]);
- cls.add(Throwable.class, ls[5]);
-
- assertEquals(1, cls.getAllListeners(Double.class).size());
- assertEquals(1, cls.getAllListeners(Long.class).size());
- assertEquals(2, cls.getAllListeners(Number.class).size());
- assertEquals(1, cls.getAllListeners(Object.class).size());
-
- assertEquals(1, cls.getAllListeners(LoggingException.class).size());
- assertEquals(1, cls.getAllListeners(Throwable.class).size());
- }
- }
-
-}
Deleted: nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/CollectionUtilTest.java
===================================================================
--- nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/CollectionUtilTest.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/CollectionUtilTest.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,56 +0,0 @@
-/**
- * *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%*
- */
-package org.codelutin.util;
-
-import junit.framework.TestCase;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * CollectionUtil Tester.
- *
- * @author chemit
- * @version 1.0
- * @since <pre>02/04/2008</pre>
- */
-public class CollectionUtilTest extends TestCase {
- public CollectionUtilTest(String name) {
- super(name);
- }
-
- public void testToGenericList() throws Exception {
- List<String> list = new ArrayList<String>();
- list.add("a");
- list.add("b");
- list.add("c");
-
- assertEquals(CollectionUtil.toGenericList(list, String.class), list);
- assertEquals(CollectionUtil.toGenericList(list, Object.class), list);
-
- try {
- CollectionUtil.toGenericList(list, Integer.class);
- fail();
- } catch (IllegalArgumentException e) {
- assertTrue(true);
- }
-
- }
-
-}
Deleted: nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ConverterUtilTest.java
===================================================================
--- nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ConverterUtilTest.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ConverterUtilTest.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,56 +0,0 @@
-/**
- * *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%*
- */
-package org.codelutin.util;
-
-import junit.framework.TestCase;
-
-/**
- * ConverterUtil Tester.
- *
- * @author chemit
- * @version 1.0
- * @since <pre>02/13/2008</pre>
- */
-public class ConverterUtilTest extends TestCase {
-
- public ConverterUtilTest(String name) {
- super(name);
- }
-
- public void testConvert() throws Exception {
- String s;
- s = "";
- assertEquals(new String(s.getBytes()), new String(ConverterUtil.convert(s.toCharArray())));
-
- s = "a";
- assertEquals(new String(s.getBytes()), new String(ConverterUtil.convert(s.toCharArray())));
-
- s = "kZZFIOFEIOFEfdskdfmldsfjklsfjldfldfjdsfiosabcd4567'''`~teAZEst";
- assertEquals(new String(s.getBytes()), new String(ConverterUtil.convert(s.toCharArray())));
-
- s = "]{}{}{{[#{[{#[#]{][{^#][^]#{^[]{#][#]{]@[{#][^#{][^]#{teAZEst";
- assertEquals(new String(s.getBytes()), new String(ConverterUtil.convert(s.toCharArray())));
-
- // FIXME following test won't pass
- //s = "éééééé]{}{}{{[#{[{#[#]{][{^#][^]#{^[]{#][#]{]@[{#][^#{][^]#{teAZEst";
- //assertEquals(new String(s.getBytes()), new String(ConverterUtil.convert(s.toCharArray())));
-
- }
-
-}
Deleted: nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/FileCompletionTest.java
===================================================================
--- nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/FileCompletionTest.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/FileCompletionTest.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,60 +0,0 @@
-/**
- * *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%*
- */
-package org.codelutin.util;
-
-import org.junit.Ignore;
-import org.junit.Test;
-
-/**
- * FileCompletionTest.
- *
- * @author chatellier
- * @version $Revision$
- *
- * Last update : $Date$
- * By : $Author$
- */
-@Ignore
-public class FileCompletionTest {
-
- /**
- * FIXME test is keyboard interactive.
- *
- * @throws Exception
- */
- @Test
- public void testMe() throws Exception {
- FileCompletion fc = new FileCompletion(true, true);
- if (fc.consoleAvailable()) {
- new Thread(new Runnable() {
-
- public void run() {
- try {
- Thread.sleep(100);
- } catch (InterruptedException e) {
- // do not care...
- } finally {
- System.console().readLine("!q");
- }
- }
- }).start();
- System.out.println(fc.read());
- }
- }
-}
Deleted: nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/FileUtilTest.java
===================================================================
--- nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/FileUtilTest.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/FileUtilTest.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,100 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2009 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-package org.codelutin.util;
-
-import java.io.File;
-import java.util.List;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-/**
- * FileUtilTest.
- *
- * Created: 22 nov. 2004
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-public class FileUtilTest { // FileUtilTest
-
- @Test
- public void testFind() throws Exception {
- List result = FileUtil.find(new File("."), ".*FileUtil.*", true);
- Assert.assertTrue(result.size() != 0);
- }
-
- @Test
- public void testBasename() throws Exception {
- String result = FileUtil.basename(new File("/tmp/toto.xml"), ".xml");
- Assert.assertEquals("toto", result);
- }
-
- @Test
- public void testExtension() throws Exception {
- String result = FileUtil.extension(new File("/tmp/toto.xml"));
- Assert.assertEquals("xml", result);
- result = FileUtil.extension(new File("/tmp/toto.xml"), ".", "o");
- Assert.assertEquals("xml", result);
- result = FileUtil.extension(new File("/tmp/toto.xml"), "t", ".");
- Assert.assertEquals("o.xml", result);
- }
-
- @Test
- public void testCopyRecursively() throws Exception {
- File srcDir = FileUtil.createTempDirectory("test-copyRecursively", "");
- File destDir1 = FileUtil.createTempDirectory("test-copyRecursively", "");
- File destDir2 = FileUtil.createTempDirectory("test-copyRecursively", "");
-
- new File(srcDir, "toto").createNewFile();
- new File(srcDir, "titi").createNewFile();
- new File(srcDir, "tutu").createNewFile();
- new File(srcDir, "tata").createNewFile();
- File subdir = new File(srcDir, "subdir");
- subdir.mkdirs();
- new File(subdir, "tyty").createNewFile();
- new File(subdir, "titi").createNewFile();
-
- FileUtil.copyRecursively(srcDir, destDir1);
- FileUtil.copyRecursively(srcDir, destDir2, ".*titi$");
-
- // remove created temp dirs :
- FileUtil.deleteRecursively(srcDir);
- FileUtil.deleteRecursively(destDir1);
- FileUtil.deleteRecursively(destDir2);
- }
-
- @Test
- public void testFileToByteToFile() throws Exception {
- String content = "testFileToByteToFile";
- File file = FileUtil.getTempFile(content);
-
- byte[] bytes = FileUtil.fileToByte(file);
- File dest = File.createTempFile("testFileToByteToFile", ".txt");
- dest.deleteOnExit();
- FileUtil.byteToFile(bytes, dest);
-
- Assert.assertEquals(file.length(), dest.length());
- Assert.assertEquals(content, FileUtil.readAsString(dest));
- }
-
-} // FileUtilTest
-
Deleted: nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/LRUMapMultiKeyTest.java
===================================================================
--- nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/LRUMapMultiKeyTest.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/LRUMapMultiKeyTest.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,112 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * LRUMapMultiKeyTest.java
- *
- * Created: 23 mai 2006 04:57:50
- *
- * @author poussin
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-
-package org.codelutin.util;
-
-import junit.framework.TestCase;
-
-import java.util.List;
-
-
-/** @author poussin */
-
-public class LRUMapMultiKeyTest extends TestCase {
-
-
- /*
- * Test method for 'org.codelutin.util.LRUMapMultiKey.clear()'
- */
- public void testClear() {
- System.out.println("testClear");
- LRUMapMultiKey map = new LRUMapMultiKey(10);
- LRUMapMultiKey.Key key1 = map.createKey("testClear", "toto", "tyty", "tutu");
- LRUMapMultiKey.Key key2 = map.createKey("toto", "titi", "tutu");
- LRUMapMultiKey.Key key3 = map.createKey("toto", "titi", "tata");
-
- map.put(key1, "value");
- map.put(key2, "value");
- map.put(key3, "value");
-
- map.clear();
-
- assertEquals(0, map.size());
- assertEquals(0, map.keys.size());
- }
-
- /*
- * Test method for 'java.util.WeakHashMap.get(Object)'
- */
- public void testGet() throws Exception {
- System.out.println("testGet");
- LRUMapMultiKey map = new LRUMapMultiKey(1);
-
- LRUMapMultiKey.Key key1 = map.createKey("toto", "titi", "tutu");
- map.put(key1, "value1");
-
- assertEquals("value1", map.get(map.createKey("toto", "titi", "tutu")));
-
-
- LRUMapMultiKey.Key key2 = map.createKey("tyty");
- map.put(key2, "value2");
-
- assertEquals(null, map.get(key1));
- assertEquals("value2", map.get(key2));
-
- assertEquals(1, map.size());
- assertEquals(1, map.keys.size());
- }
-
- /*
- * Test method for 'java.util.WeakHashMap.remove(Object)'
- */
- public void testRemoveObject() {
- System.out.println("testRemoveObject");
- LRUMapMultiKey map = new LRUMapMultiKey(10);
- LRUMapMultiKey.Key key1 = map.createKey("testRemoveObject", "toto", "tyty", "tutu");
- LRUMapMultiKey.Key key2 = map.createKey("toto", "titi", "tutu");
- LRUMapMultiKey.Key key3 = map.createKey("toto", "titi", "tata");
-
- map.put(key1, "value");
- map.put(key2, "value");
- map.put(key3, "value");
-
- Object l = map.remove("titi");
-
- assertTrue(l instanceof List);
- assertEquals(2, ((List) l).size());
- assertEquals(1, map.size());
-
- map.remove(key1);
-
- assertEquals(0, map.size());
- }
-
-}
-
-
Deleted: nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ListenerSetTest.java
===================================================================
--- nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ListenerSetTest.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ListenerSetTest.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,156 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * ListenerSetTest.java
- *
- * Created: 10 mai 2004
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * Copyright Code Lutin
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-
-package org.codelutin.util;
-
-import junit.framework.TestCase;
-
-public class ListenerSetTest extends TestCase { // ListenerSetTest
-
- int callCount;
-
- /** si la class n'est pas public fire ne retrouve pas les méthodes :( */
- public class Listener {
- public void event1() {
- callCount++;
- }
-
- public void event2(Object o) {
- callCount++;
- }
- }
-
- class PrivateListener {
- public void event1() {
- callCount++;
- }
-
- public void event2(Object o) {
- callCount++;
- }
- }
-
- public void testAdd() throws Exception {
- ListenerSet<Object> set = new ListenerSet<Object>();
- Listener l = new Listener();
-
- // ajout d'un listener
- set.add(l);
-
- callCount = 0;
- set.fire("event1");
- assertEquals(1, callCount);
-
- // ajout du meme listener
- set.add(l);
- callCount = 0;
- set.fire("event1");
- assertEquals(1, callCount);
-
- // destruction de la reference sur le listener
- l = null;
- System.gc();
-
- callCount = 0;
- set.fire("event1");
- assertEquals(0, callCount);
- }
-
- public void testAddContrained() throws Exception {
- ListenerSet<Listener> set = new ListenerSet<Listener>();
- Listener l = new Listener();
-
- // ajout d'un listener
- set.add(l);
-
- callCount = 0;
- set.fire("event1");
- assertEquals(1, callCount);
- }
-
- public void testRemove() throws Exception {
- ListenerSet<Object> set = new ListenerSet<Object>();
- Listener l = new Listener();
- set.add(l);
-
- callCount = 0;
- set.fire("event1");
- assertEquals(1, callCount);
-
- set.remove(l);
-
- callCount = 0;
- set.fire("event1");
- assertEquals(0, callCount);
- }
-
- public void testFire() throws Exception {
- ////////////////////////////////////////////////:
- // avec le listener public
- //
- {
- ListenerSet<Object> set = new ListenerSet<Object>();
- Listener l = new Listener();
- set.add(l);
-
- callCount = 0;
- set.fire("event1");
- assertEquals(1, callCount);
-
- callCount = 0;
- set.fire("event2", null);
- assertEquals(1, callCount);
- }
- ////////////////////////////////////////////////:
- // avec le listener privé
- //
- {
- ListenerSet<Object> set = new ListenerSet<Object>();
- PrivateListener li = new PrivateListener();
- set.add(li);
-
- callCount = 0;
- for (Object aSet : set) {
- PrivateListener l = (PrivateListener) aSet;
- l.event1();
- }
- assertEquals(1, callCount);
-
- callCount = 0;
- for (Object aSet : set) {
- PrivateListener l = (PrivateListener) aSet;
- l.event2(null);
- }
- assertEquals(1, callCount);
- }
- }
-
-} // ListenerSetTest
-
Modified: nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/LocaleConverterTest.java
===================================================================
--- nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/LocaleConverterTest.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/LocaleConverterTest.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -33,7 +33,7 @@
@Override
protected void setUp() throws Exception {
super.setUp();
- converter = ConverterUtil.getConverter(Locale.class);
+ converter = new LocaleConverter();
}
public void testConvertFull() throws Exception {
Deleted: nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/LogTest.java
===================================================================
--- nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/LogTest.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/LogTest.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,125 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * LogTest.java
- *
- * Created: 12 août 2004
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-
-package org.codelutin.util;
-
-import junit.framework.TestCase;
-
-public class LogTest extends TestCase { // LogTest
-
- protected int callTest = 0;
- protected int callAll = 0;
- protected int taskMax = 0;
- protected int taskValue = 0;
-
- public class LogListenerTest implements Log.LogListener {
- boolean all = false;
-
- public LogListenerTest(boolean all) {
- this.all = all;
- }
-
- public void logMessage(Log.LogEvent e) {
- if (all) callAll++;
- else callTest++;
- }
-
- public void logTask(Log.LogEvent e) {
- taskMax = e.getTaskMax();
- taskValue = e.getTaskValue();
- }
- }
-
- public void testLog() throws Exception {
- LogListenerTest ltest = new LogListenerTest(false);
- LogListenerTest lall = new LogListenerTest(true);
-
- Log.addLogListener(lall);
- Log.addLogListener(ltest, "TEST");
-
- assertEquals(callTest, 0);
- assertEquals(callAll, 0);
-
- Log.logUserInfo("TEST", "coucou");
-
- assertEquals(callTest, 1);
- assertEquals(callAll, 1);
-
- Log.logUserInfo("OTHERTEST", "coucou");
-
- assertEquals(callTest, 1);
- assertEquals(callAll, 2);
-
- Log.removeLogListener(lall);
- Log.logUserInfo("TEST", "coucou");
-
- assertEquals(callTest, 2);
- assertEquals(callAll, 2);
-
- Log.logUserInfo("OTHERTEST", "coucou");
-
- assertEquals(callTest, 2);
- assertEquals(callAll, 2);
-
- Log.removeLogListener(ltest, "TEST");
- Log.logUserInfo("TEST", "coucou");
-
- assertEquals(callTest, 2);
- assertEquals(callAll, 2);
-
- Log.addLogListener(lall);
- Log.logUserInfo("TEST", "coucou");
-
- assertEquals(callTest, 2);
- assertEquals(callAll, 3);
-
- // test des task
-
- assertEquals(0, taskMax);
- assertEquals(0, taskValue);
-
- Log.logTask("TEST", "on avance", -1, 0);
- assertEquals(-1, taskMax);
- assertEquals(0, taskValue);
-
- Log.logTask("TEST", "on avance", 0, 0);
- assertEquals(0, taskMax);
- assertEquals(0, taskValue);
-
- Log.logTask("TEST", "on avance", 10, 5);
- assertEquals(10, taskMax);
- assertEquals(5, taskValue);
-
- Log.logTask("TEST", "on avance", 10, 10);
- assertEquals(10, taskMax);
- assertEquals(10, taskValue);
- }
-
-} // LogTest
-
Deleted: nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ObjectUtilTest.java
===================================================================
--- nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ObjectUtilTest.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ObjectUtilTest.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,140 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * ObjectUtilTest.java
- *
- * Created: 19 nov. 07 12:39:28
- *
- * @author poussin
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-
-package org.codelutin.util;
-
-import java.io.File;
-
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import junit.framework.TestCase;
-
-
-/**
- * @author poussin
- *
- */
-public class ObjectUtilTest extends TestCase {
-
- public void testCall() throws Exception {
- Dummy dummy = new Dummy();
-
- List<Method> methods = ObjectUtil.getMethod(Dummy.class, "setfile", true);
- assertEquals(1, methods.size());
- ObjectUtil.call(dummy, methods.get(0), "/tmp");
- assertEquals(new File("/tmp"), dummy.getFile());
-
- methods = ObjectUtil.getMethod(Dummy.class, "setAllFile", true);
- assertEquals(1, methods.size());
- ObjectUtil.call(dummy, methods.get(0), "toto", "/tmp", "/tmp/titi");
- assertEquals("toto", dummy.getName());
- assertEquals(Arrays.asList(new File("/tmp"), new File("/tmp/titi")),
- Arrays.asList(dummy.getAllFile()));
-
- ObjectUtil.call(dummy, methods.get(0), "toto");
- assertEquals("toto", dummy.getName());
- assertEquals(new ArrayList<File>(),
- Arrays.asList(dummy.getAllFile()));
-}
-
- public void testCreate() throws Exception {
- Object o = ObjectUtil.create("java.lang.StringBuffer");
- assertTrue(o != null);
- assertTrue(o instanceof StringBuffer);
-
- Dummy dummy = (Dummy)ObjectUtil.create(
- "org.codelutin.util.ObjectUtilTest$Dummy(name=\"coucou le monde\", file=/tmp/fileTest, integer=50)");
- assertTrue(dummy != null);
- assertEquals("coucou le monde", dummy.getName());
- assertEquals(50, dummy.getInteger());
- assertEquals(new File("/tmp/fileTest"), dummy.getFile());
- }
-
-
- static public class Dummy {
-
- String name;
- int integer;
- File file;
- File[] allFile;
-
- public File[] getAllFile() {
- return allFile;
- }
-
- public void setAllFile(String name, File ... allFile) {
- this.name = name;
- this.allFile = allFile;
- }
-
- /**
- * @return the file
- */
- public File getFile() {
- return this.file;
- }
-
- /**
- * @return the integer
- */
- public int getInteger() {
- return this.integer;
- }
-
- /**
- * @return the name
- */
- public String getName() {
- return this.name;
- }
-
- /**
- * @param file the file to set
- */
- public void setFile(File file) {
- this.file = file;
- }
-
- /**
- * @param integer the integer to set
- */
- public void setInteger(int integer) {
- this.integer = integer;
- }
-
- /**
- * @param name the name to set
- */
- public void setName(String name) {
- this.name = name;
- }
- }
-}
Deleted: nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/RecursivePropertiesTest.java
===================================================================
--- nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/RecursivePropertiesTest.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/RecursivePropertiesTest.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,64 +0,0 @@
-/* *##%
- * Copyright (C) 2009 Code Lutin
- *
- * 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.
- *##%*/
-
-package org.codelutin.util;
-
-import java.io.FileInputStream;
-import java.io.IOException;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-/**
- * Test recursives properties class.
- *
- * @author chatellier
- * @version $Revision: 1.0 $
- *
- * Last update : $Date: 24 avr. 2009 $
- * By : $Author: chatellier $
- */
-public class RecursivePropertiesTest {
-
- /**
- * Test string by \\ in value.
- *
- * @throws IOException
- */
- @Test
- public void testWindowsFile() throws IOException {
- RecursiveProperties props = new RecursiveProperties();
- props.load(new FileInputStream("src/test/resources/properties/windows.properties"));
-
- Assert.assertEquals("C:\\Documents and Settings\\guest\\.ssh\\id_rsa", props.getProperty("vcs.ssh.keyFile"));
- }
-
- /**
- * Test with recursive properties.
- *
- * @throws IOException
- */
- @Test
- public void testRecursive() throws IOException {
- RecursiveProperties props = new RecursiveProperties();
- props.load(new FileInputStream("src/test/resources/properties/recursive.properties"));
-
- Assert.assertEquals("World", props.getProperty("username"));
- Assert.assertEquals("Hello World !", props.getProperty("helloWorld"));
- }
-}
Deleted: nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ResourceTest.java
===================================================================
--- nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ResourceTest.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ResourceTest.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,129 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
-* ResourceTest.java
-*
-* Created: Jul 29, 2004
-*
-* @author Benjamin Poussin <poussin(a)codelutin.com>
-* Copyright Code Lutin
-* @version $Revision$
-*
-* Mise a jour: $Date$
-* par : $Author$
-*/
-
-package org.codelutin.util;
-
-import java.io.File;
-import java.net.URL;
-import java.net.URLClassLoader;
-import java.util.ArrayList;
-import java.util.List;
-
-import junit.framework.Assert;
-
-import org.junit.Test;
-
-public class ResourceTest { // ResourceTest
-
- @Test
- public void testaddDefaultClassLoader() throws Exception {
- Assert.assertNull(ResourceTest.class.getResource("/bin/java"));
-
- File repository = new File(System.getProperty("java.home"));
- Resource.addDefaultClassLoader(repository.toURI().toURL());
-
- File result = new File(repository, "bin" + File.separator + "java");
- Assert.assertTrue(result.exists());
-
- URL resultURL = Resource.getURL("bin/java");
- Assert.assertEquals(result.toURI().toURL(),resultURL);
- }
-
- @Test
- public void testGetURL()throws Exception {
- URL url;
-
- url = Resource.getURL("README.txt");
- Assert.assertNotNull(url);
-
- url = Resource.getURL("bin/java");
- Assert.assertNotNull(url);
- }
-
- @Test
- public void testGetURLsFromDirectory() throws Exception {
- List<URL> list = new ArrayList<URL>();
- File repository = new File(System.getProperty("java.home"));
-
- // test lorsqu'aucun fichier du repertoire ne correspond au pattern
- Assert.assertEquals(list, Resource.getURLsFromDirectory(repository, ".*.aucunFichierTrouve"));
-
- File file = new File(repository, "bin" + File.separator + "java");
- list.add(file.toURI().toURL());
-
- // test qui prouve que la methode retourne le bon fichier
- Assert.assertEquals(list, Resource.getURLsFromDirectory(new File(repository, "bin"), ".*" + File.separator + ".a.a$"));
-
- // test qui prouve la recursivite (va chercher en profondeur les fichiers)
- Assert.assertEquals(list, Resource.getURLsFromDirectory(repository, ".*" + File.separator + "j.v.$"));
- }
-
- @Test
- public void testGetURLsFromJar() throws Exception {
- File repository = new File(System.getProperty("java.home"));
- File file = new File(repository, "lib" + File.separator + "rt.jar");
-
- List<URL> result = Resource.getURLsFromJar(file, ".*OutOfMemoryError.*");
- Assert.assertEquals(1, result.size());
- }
-
- @Test
- public void testGetURLs() throws Exception {
- System.out.println(java.util.Arrays.asList(((URLClassLoader)ClassLoader.getSystemClassLoader()).getURLs()));
-
- List<URL> result;
-
- result = Resource.getURLs(".*bin/java");
- System.out.println(result);
-
- result = Resource.getURLs("META-INF/MANIFEST.MF");
- System.out.println(result);
- }
-
- @Test
- public void testIsJar() throws Exception {
- Assert.assertTrue(Resource.isJar("toto.jar"));
- Assert.assertTrue(Resource.isJar("toto.JaR"));
- Assert.assertFalse(Resource.isJar("totojar"));
- Assert.assertFalse(Resource.isJar(""));
- Assert.assertFalse(Resource.isJar(null));
- }
-
- @Test
- public void testIsZip() throws Exception {
- Assert.assertTrue(Resource.isZip("toto.zip"));
- Assert.assertTrue(Resource.isZip("toto.zIp"));
- Assert.assertFalse(Resource.isZip("totojarzip"));
- Assert.assertFalse(Resource.isZip(""));
- Assert.assertFalse(Resource.isZip(null));
- }
-
-} // ResourceTest
-
Deleted: nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/StreamKeywordTokenizerTest.java
===================================================================
--- nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/StreamKeywordTokenizerTest.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/StreamKeywordTokenizerTest.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,104 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * StreamKeywordTokenizer.java
- *
- * Created: 27 mai 2004
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * Copyright Code Lutin
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-
-package org.codelutin.util;
-
-import junit.framework.TestCase;
-import java.io.StringReader;
-
-public class StreamKeywordTokenizerTest extends TestCase { // StreamKeywordTokenizer
-
- public void testKeywordLower() throws Exception {
- StringReader in = new StringReader("Coucou tOUt TouT lE MONDE");
- StreamKeywordTokenizer parser = new StreamKeywordTokenizer(in);
- parser.resetSyntax();
- parser.commentChar('#');
- parser.eolIsSignificant(false);
- parser.lowerCaseMode(false);
- parser.parseNumbers();
- parser.quoteChar('"');
- parser.slashSlashComments(true);
- parser.slashStarComments(true);
- parser.whitespaceChars(0, ' ');
- parser.wordChars('A', 'Z');
- parser.wordChars('a', 'z');
-
- parser.lowerCaseKeyword(true);
- parser.addKeyword("Coucou");
- parser.addKeyword("TouT");
- parser.addKeyword("mondE");
-
- assertTrue(StreamKeywordTokenizer.TT_KEYWORD == parser.nextToken()
- && parser.sval.equals("coucou"));
- assertTrue(StreamKeywordTokenizer.TT_KEYWORD == parser.nextToken()
- && parser.sval.equals("tout"));
- assertTrue(StreamKeywordTokenizer.TT_KEYWORD == parser.nextToken()
- && parser.sval.equals("tout"));
- assertTrue(StreamKeywordTokenizer.TT_WORD == parser.nextToken()
- && parser.sval.equals("lE"));
- assertTrue(StreamKeywordTokenizer.TT_KEYWORD == parser.nextToken()
- && parser.sval.equals("monde"));
-
- }
-
- public void testKeyword() throws Exception {
- StringReader in = new StringReader("Coucou tOUt TouT lE MONDE");
- StreamKeywordTokenizer parser = new StreamKeywordTokenizer(in);
- parser.resetSyntax();
- parser.commentChar('#');
- parser.eolIsSignificant(false);
- parser.lowerCaseMode(false);
- parser.parseNumbers();
- parser.quoteChar('"');
- parser.slashSlashComments(true);
- parser.slashStarComments(true);
- parser.whitespaceChars(0, ' ');
- parser.wordChars('A', 'Z');
- parser.wordChars('a', 'z');
-
- parser.lowerCaseKeyword(false);
- parser.addKeyword("Coucou");
- parser.addKeyword("TouT");
- parser.addKeyword("mondE");
-
- assertTrue(StreamKeywordTokenizer.TT_KEYWORD == parser.nextToken()
- && parser.sval.equals("Coucou"));
- assertTrue(StreamKeywordTokenizer.TT_WORD == parser.nextToken()
- && parser.sval.equals("tOUt"));
- assertTrue(StreamKeywordTokenizer.TT_KEYWORD == parser.nextToken()
- && parser.sval.equals("TouT"));
- assertTrue(StreamKeywordTokenizer.TT_WORD == parser.nextToken()
- && parser.sval.equals("lE"));
- assertTrue(StreamKeywordTokenizer.TT_WORD == parser.nextToken()
- && parser.sval.equals("MONDE"));
- }
-
-} // StreamKeywordTokenizer
-
Deleted: nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/StringUtilTest.java
===================================================================
--- nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/StringUtilTest.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/StringUtilTest.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,183 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/*******************************************************************************
- * StringUtilTest.java
- *
- * Created: 7 oct. 2004
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-
-package org.codelutin.util;
-
-import java.awt.Color;
-import java.util.Arrays;
-import java.util.Locale;
-
-import org.junit.Test;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNull;
-
-public class StringUtilTest { // StringUtilTest
-
- @Test
- public void testSubstring() throws Exception {
- String s = "Bonjour le monde";
- String r = StringUtil.substring(s, -5);
- assertEquals("monde", r);
-
- r = StringUtil.substring(s, 7, -5);
- assertEquals(" le ", r);
-
- r = StringUtil.substring(s, 0, s.length());
- assertEquals(s, r);
-
- r = StringUtil.substring(s, -5, s.length());
- assertEquals("monde", r);
-
- r = StringUtil.substring("a", 1, -1);
- assertEquals("", r);
-
- r = StringUtil.substring("", 0, -1);
- assertEquals("", r);
-
- }
-
- @Test
- public void testToColor() throws Exception {
- Color c;
-
- c = StringUtil.toColor("#FF55AA");
- assertEquals(c, new Color(255, 85, 170));
-
- c = StringUtil.toColor("#FF55AA55");
- assertEquals(c, new Color(255, 85, 170, 85));
-
- try {
- c = null;
- c = StringUtil.toColor("toto");
- assertFalse(true);
- } catch (StringUtilException eee) {
- assertNull(c);
- }
-
- try {
- c = null;
- c = StringUtil.toColor("#ZRETJ4040R");
- assertFalse(true);
- } catch (StringUtilException eee) {
- assertNull(c);
- }
- }
-
- @Test
- public void testSplit() {
- assertTrue(Arrays.equals(StringUtil.split("toto,titi,tutu"), new String[]{"toto", "titi", "tutu"}));
- assertTrue(Arrays.equals(StringUtil.split("toto"), new String[]{"toto"}));
- assertTrue(Arrays.equals(StringUtil.split(""), new String[0]));
- assertTrue(Arrays.equals(StringUtil.split(null), new String[0]));
-
- String argTest = "toto, titi, titi($tru('roer'), erke), \"t|u(t{u\\\"ti[ti'\", fin";
- String[] arg = StringUtil.split(argTest);
- assertEquals(5, arg.length);
-
- argTest = "";
- arg = StringUtil.split(argTest);
- assertEquals(0, arg.length);
-
- argTest = "tptp";
- arg = StringUtil.split(argTest);
- assertEquals(1, arg.length);
-
- argTest = ",ooo|ooo|o|,ooo'ooo(',ooo-";
- arg = StringUtil.split(argTest, "ooo");
- assertEquals(5, arg.length);
-
- }
-
- @Test
- public void testConvert() throws Exception {
- assertEquals("365d", StringUtil.convertTime(31536000000000000L));
- assertEquals("2d", StringUtil.convertTime(172800000000000L));
- assertEquals("2h", StringUtil.convertTime(7200000000000L));
- assertEquals("2m", StringUtil.convertTime(120000000000L));
-
- assertEquals("2s", StringUtil.convertTime(2000000002L));
- assertEquals("2s", StringUtil.convertTime(2000000000L));
- assertEquals("2ms", StringUtil.convertTime(2000000L));
- assertEquals("2ns", StringUtil.convertTime(2L));
- assertEquals("0ns", StringUtil.convertTime(0L));
-
- assertEquals("0o", StringUtil.convertMemory(0L));
- assertEquals("2o", StringUtil.convertMemory(2L));
- assertEquals("2Ko", StringUtil.convertMemory(2048L));
- assertEquals("2Mo", StringUtil.convertMemory(2097152L));
- assertEquals("2Mo", StringUtil.convertMemory(2097154L));
-
- assertEquals("2Go", StringUtil.convertMemory(2147483648L));
- assertEquals("2To", StringUtil.convertMemory(2199023255552L));
- assertEquals("2000To", StringUtil.convertMemory(2199023255552000L));
-
- assertEquals("-2Mo", StringUtil.convertMemory(-2097152L));
- assertEquals("-2Mo", StringUtil.convertMemory(-2097154L));
-
- Locale oldLocale = Locale.getDefault();
- // test in french locale
- Locale.setDefault(Locale.FRENCH);
- assertEquals("2,02s", StringUtil.convertTime(2020000002L));
- assertEquals("2,094Mo", StringUtil.convertMemory(2196152L));
- assertEquals("-2,094Mo", StringUtil.convertMemory(-2196152L));
-
- // test in english locale
- Locale.setDefault(Locale.ENGLISH);
- assertEquals("2.02s", StringUtil.convertTime(2020000002L));
- assertEquals("2.094Mo", StringUtil.convertMemory(2196152L));
- assertEquals("-2.094Mo", StringUtil.convertMemory(-2196152L));
-
- // push back previous locale
- Locale.setDefault(oldLocale);
- }
-
- @Test
- public void testUnaccent() throws Exception {
- assertEquals("-aaaeeeeiioouuuc0123456789AAAEEEEIIOOUUUC._",
- StringUtil.unaccent("-àâäéèêëîïôöùûüç 0123456789 ÀÂÄÉÈÊËÎÏÔÖÙÛÜÇ._"));
- }
-
- @Test
- public void testConvertToConstantName() throws Exception {
- assertEquals("YES", StringUtil.convertToConstantName("yes"));
- assertEquals("YES", StringUtil.convertToConstantName("*$$?YEs"));
- assertEquals("YES", StringUtil.convertToConstantName("_yes!$*_"));
- assertEquals("YES", StringUtil.convertToConstantName("_Yes____"));
-
- assertEquals("YES_OR_NO", StringUtil.convertToConstantName("__yesOrNo_"));
- assertEquals("YES_OR_NO", StringUtil.convertToConstantName("Yes-or-!*=No"));
- assertEquals("YES_OR_NO", StringUtil.convertToConstantName("_yes__or__no"));
- assertEquals("YES_OR_NO", StringUtil.convertToConstantName("_YesOR___No"));
-
- }
-
-} // StringUtilTest
-
Deleted: nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/Tbz2UtilTest.java
===================================================================
--- nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/Tbz2UtilTest.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/Tbz2UtilTest.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,214 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2009 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-package org.codelutin.util;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.io.IOException;
-import java.util.List;
-
-import org.apache.commons.logging.LogFactory;
-import org.junit.Assert;
-import org.junit.Test;
-
-/**
- * Tbz2UtilTest.java
- *
- * @author chatellier
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-public class Tbz2UtilTest {
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- private static org.apache.commons.logging.Log log = LogFactory
- .getLog(Tbz2UtilTest.class);
-
- public static File I18N_DIR = new File("src" + File.separator + "test"
- + File.separator + "resources" + File.separator + "i18n");
-
- /**
- * Test de decompression d'une archive.
- *
- * @throws IOException
- */
- @Test
- public void testUncompress() throws IOException {
-
- File tbz2File = new File("src" + File.separator + "test"
- + File.separator + "resources" + File.separator + "compress",
- "i18n.tbz2");
-
- Assert.assertTrue(tbz2File.isFile());
-
- File uctbz2 = FileUtil.createTempDirectory("testUncompressTbz2", "");
- log.info("uncompress tbz2 " + tbz2File + " in " + uctbz2);
-
- Tbz2Util.uncompress(tbz2File, uctbz2);
-
- List<File> dest = FileUtil.getFilteredElements(uctbz2, null, true);
-
- Assert.assertEquals(13, dest.size());
-
- // remove created temp dirs :
- FileUtil.deleteRecursively(uctbz2);
- }
-
- /**
- * Test de decompression d'une archive.
- *
- * @throws IOException
- */
- @Test
- public void testUncompress2() throws IOException {
-
- File tbz2File = new File("src" + File.separator + "test"
- + File.separator + "resources" + File.separator + "compress",
- "simulation2.tbz2");
-
- Assert.assertTrue(tbz2File.isFile());
-
- File uctbz2 = FileUtil.createTempDirectory("testUncompressTbz2", "");
- log.info("uncompress tbz2 " + tbz2File + " in " + uctbz2);
-
- Tbz2Util.uncompress(tbz2File, uctbz2);
-
- List<File> dest = FileUtil.getFilteredElements(uctbz2, null, true);
-
- Assert.assertEquals(254, dest.size());
-
- // remove created temp dirs :
- FileUtil.deleteRecursively(uctbz2);
- }
-
- /*
- * Test to compress directory and uncompress it.
- */
- @Test
- public void testCompressUncompress() throws IOException {
-
- File rootDir = new File("src" + File.separator + "test"
- + File.separator + "resources" + File.separator + "compress",
- "simulation");
- File tbz2File = File.createTempFile("testCompressTbz2-", ".tbz2");
- tbz2File.deleteOnExit();
- log.info("Compress " + rootDir + " in tbz2 file = " + tbz2File);
-
- Tbz2Util.compress(tbz2File, rootDir);
-
- Assert.assertTrue(tbz2File.exists());
- Assert.assertTrue(tbz2File.length() > 0);
-
- // uncompress
- File uctbz2 = FileUtil.createTempDirectory("testUncompressTbz2", "");
- Tbz2Util.uncompress(tbz2File, uctbz2);
- FileUtil.deleteRecursively(uctbz2);
- }
-
- /*
- * Test method for 'org.codelutin.util.ZipUtil.compress(File, File, FileFilter)'
- */
- @Test
- public void testCompress() throws IOException {
-
- File tbz2File = File.createTempFile("testCompressTbz2-", ".tbz2");
- tbz2File.deleteOnExit();
- log.info("Compress " + I18N_DIR + " in tbz2 file = " + tbz2File);
-
- Tbz2Util.compress(tbz2File, I18N_DIR);
-
- Assert.assertTrue(tbz2File.exists());
- Assert.assertTrue(tbz2File.length() > 0);
- }
-
- @Test
- public void testCompressFilter() throws IOException {
-
- File tbz2File = File.createTempFile("testCompressTbz2Filter-", ".tbz2");
- tbz2File.deleteOnExit();
- log.info("Compress " + I18N_DIR + " in tbz2 file = " + tbz2File);
-
- FileFilter filter = new FileFilter() {
- public boolean accept(File pathname) {
- boolean result;
- result = !pathname.getPath().contains("fr");
- return result;
- }
-
- };
-
- Tbz2Util.compress(tbz2File, I18N_DIR, filter);
-
- Assert.assertTrue(tbz2File.exists());
- Assert.assertTrue(tbz2File.length() > 0);
- }
-
- /**
- * Compress a single file.
- *
- * @throws IOException
- */
- @Test
- public void testCompressFile() throws IOException {
- File dir = new File(I18N_DIR, "dummy-fr.properties");
- File tbz2File = File.createTempFile("testCompressTbz2File-", ".tbz2");
- tbz2File.deleteOnExit();
- log.info("Compress " + dir + " in tbz2 file = " + tbz2File);
-
- Tbz2Util.compress(tbz2File, dir);
-
- Assert.assertTrue(tbz2File.exists());
- Assert.assertTrue(tbz2File.length() > 0);
- }
-
- /**
- * Compress a directory and check md5 sum.
- * @throws IOException
- */
- @Test
- public void testCompressMD5() throws IOException {
- File tbz2File = File.createTempFile("testCompressTbz2Md5", ".tbz2");
- tbz2File.deleteOnExit();
- log.info("Compress " + I18N_DIR + " in tbz2 file = " + tbz2File);
-
- FileFilter filter = new FileFilter() {
- public boolean accept(File pathname) {
- boolean result;
- result = !pathname.getPath().contains("svn");
- return result;
- }
-
- };
-
- Tbz2Util.compress(tbz2File, I18N_DIR, filter, true);
-
- Assert.assertTrue(tbz2File.exists());
- Assert.assertTrue(tbz2File.length() > 0);
- File md5File = new File(tbz2File.getAbsoluteFile() + ".md5");
- md5File.deleteOnExit();
- Assert.assertTrue(md5File.exists());
- String md5sum = FileUtil.readAsString(md5File);
-
- // MD5 disabled, files are not same throw svn
- // due to svn keywords
- //Assert.assertEquals("566f3f4b280eddf8637fe9e4336980a9", md5sum);
- }
-
-}
Deleted: nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/TransparenteReferenceTest.java
===================================================================
--- nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/TransparenteReferenceTest.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/TransparenteReferenceTest.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,66 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * TransparenteReferenceTest.java
- *
- * Created: 22 mai 2006 15:41:49
- *
- * @author poussin
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-
-package org.codelutin.util;
-
-import junit.framework.TestCase;
-
-import java.util.HashMap;
-import java.util.Map;
-
-
-/** @author poussin */
-
-public class TransparenteReferenceTest extends TestCase {
-
- public void testHash() {
- Map<TransparenteSoftReference, TransparenteSoftReference> map = new HashMap<TransparenteSoftReference, TransparenteSoftReference>();
-
- String key = "key";
- TransparenteSoftReference keyRef = new TransparenteSoftReference<String>(key);
-
- String value = "value";
- TransparenteSoftReference valueRef = new TransparenteSoftReference<String>(value);
-
- map.put(keyRef, valueRef);
-
-
- assertEquals(valueRef, map.get(keyRef));
- assertEquals(valueRef.get(), map.get(keyRef).get());
- key = null;
- value = null;
-
- System.gc();
- Thread.yield();
-
- assertEquals("value".hashCode(), map.get(keyRef).hashCode());
- }
-}
-
-
Deleted: nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/VersionNumberUtilTest.java
===================================================================
--- nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/VersionNumberUtilTest.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/VersionNumberUtilTest.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,88 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2008 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-/* *
- * VersionNumberUtilTest.java
- *
- * Created: 13 juil. 2004
- *
- * @author Benjamin Poussin <poussin(a)codelutin.com>
- * Copyright Code Lutin
- * @version $Revision$
- *
- * Mise a jour: $Date$
- * par : $Author$
- */
-
-package org.codelutin.util;
-
-import junit.framework.TestCase;
-
-public class VersionNumberUtilTest extends TestCase { // VersionNumberUtilTest
-
- public void testSmaller(){
- assertTrue(VersionNumberUtil.smallerThan("1", "2"));
- assertFalse(VersionNumberUtil.smallerThan("3", "1"));
-
- assertFalse(VersionNumberUtil.smallerThan("1.2.3", "1.2.3"));
- assertTrue(VersionNumberUtil.smallerThan("1.2.3", "1.2.3.1"));
- assertTrue(VersionNumberUtil.smallerThan("1.2.3", "1.3.3.1"));
- assertFalse(VersionNumberUtil.smallerThan("1.3.3", "1.2.3.1"));
-
- assertFalse(VersionNumberUtil.smallerThan("1.2.3", "1.2.3"));
- assertFalse(VersionNumberUtil.smallerThan("1.2.3.1", "1.2.3"));
- assertFalse(VersionNumberUtil.smallerThan("1.2.3.1", "1.2.3"));
- assertTrue(VersionNumberUtil.smallerThan("1.2.3.1", "1.3.3"));
- }
-
- public void testEquals(){
- assertTrue(VersionNumberUtil.equals("10", "10"));
- assertFalse(VersionNumberUtil.equals("3", "1"));
-
- assertTrue(VersionNumberUtil.equals("1.2.3", "1.2.3"));
- assertFalse(VersionNumberUtil.equals("1.2.3", "1.2.3.0"));
- assertFalse(VersionNumberUtil.equals("1.2.3.0", "1.2.3"));
- assertFalse(VersionNumberUtil.equals("1.2.3", "1.2.3.1"));
- assertFalse(VersionNumberUtil.equals("1.2.3", "1.3.3.1"));
- assertFalse(VersionNumberUtil.equals("1.3.3", "1.2.3.1"));
- }
-
- public void testGreater(){
- assertFalse(VersionNumberUtil.greaterThan("1", "2"));
- assertTrue(VersionNumberUtil.greaterThan("3", "1"));
-
- assertFalse(VersionNumberUtil.greaterThan("1.2.3", "1.2.3"));
- assertFalse(VersionNumberUtil.greaterThan("1.2.3", "1.2.3.1"));
- assertFalse(VersionNumberUtil.greaterThan("1.2.3", "1.3.3.1"));
- assertTrue(VersionNumberUtil.greaterThan("1.3.3", "1.2.3.1"));
-
- assertFalse(VersionNumberUtil.greaterThan("1.2.3", "1.2.3"));
- assertTrue(VersionNumberUtil.greaterThan("1.2.3.1", "1.2.3"));
- assertTrue(VersionNumberUtil.greaterThan("1.3.3.1", "1.2.3"));
- assertFalse(VersionNumberUtil.greaterThan("1.2.3.1", "1.3.3"));
- }
-
- public void testInc(){
- assertTrue(VersionNumberUtil.equals("1", VersionNumberUtil.inc(null)));
- assertTrue(VersionNumberUtil.equals("4", VersionNumberUtil.inc("3")));
- assertTrue(VersionNumberUtil.equals("10", VersionNumberUtil.inc("9")));
- assertTrue(VersionNumberUtil.equals("1.2.4", VersionNumberUtil.inc("1.2.3")));
- assertTrue(VersionNumberUtil.equals("1.2.10", VersionNumberUtil.inc("1.2.9")));
- }
-
-} // VersionNumberUtilTest
-
Deleted: nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ZipUtilTest.java
===================================================================
--- nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ZipUtilTest.java 2009-05-14 04:43:02 UTC (rev 1540)
+++ nuiton-i18n-api/trunk/src/test/java/org/codelutin/util/ZipUtilTest.java 2009-05-14 04:43:24 UTC (rev 1541)
@@ -1,146 +0,0 @@
-/* *##% Lutin utilities library
- * Copyright (C) 2004 - 2009 CodeLutin
- *
- * This program 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 (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 Lesser Public License for more details.
- *
- * You should have received a copy of the GNU General Lesser Public
- * License along with this program. If not, see
- * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* */
-
-package org.codelutin.util;
-
-import java.io.File;
-import java.io.FileFilter;
-import java.io.IOException;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import org.apache.commons.logging.LogFactory;
-import org.junit.Assert;
-import org.junit.Test;
-
-/**
- * ZipUtilTest.java
- *
- * Created: 24 août 2006 10:47:21
- *
- * @author poussin
- * @version $Revision$
- *
- * Last update: $Date$
- * by : $Author$
- */
-public class ZipUtilTest {
-
- /** to use log facility, just put in your code: log.info(\"...\"); */
- private static org.apache.commons.logging.Log log = LogFactory
- .getLog(ZipUtilTest.class);
-
- protected static final File DIR = new File(System.getProperty("java.home"),
- "bin");
-
- @Test
- public void testUncompress() throws IOException {
- //File dir = new File(System.getProperty("user.dir"));
- File zipFile = File.createTempFile("testCompressZip", ".zip");
- zipFile.deleteOnExit();
- log.info("Compress " + DIR + " in zip file = " + zipFile);
-
- ZipUtil.compress(zipFile, DIR, null);
-
- File ucz = FileUtil.createTempDirectory("testUncompressZip", "");
- log.info("uncompress zip " + zipFile + " in " + ucz);
-
- ZipUtil.uncompress(zipFile, ucz);
-
- List<File> src = FileUtil.getFilteredElements(DIR, null, true);
- List<File> dest = FileUtil.getFilteredElements(ucz, null, true);
-
- Assert.assertEquals(src.size() + 1, dest.size()); // +1 car il y a le rep lui meme dans dest
-
- // remove created temp dirs :
- FileUtil.deleteRecursively(ucz);
- Assert.assertFalse(ucz.isDirectory());
- }
-
- /*
- * Test method for 'org.codelutin.util.ZipUtil.compress(File, File, FileFilter)'
- */
- @Test
- public void testCompress() throws IOException {
- //File dir = new File(System.getProperty("user.dir"));
- File zipFile = File.createTempFile("testCompressZip", ".zip");
- zipFile.deleteOnExit();
- log.info("Compress " + DIR + " in zip file = " + zipFile);
-
- ZipUtil.compress(zipFile, DIR, null);
-
- Assert.assertTrue(zipFile.exists());
- Assert.assertTrue(0 != zipFile.length());
- }
-
- @Test
- public void testCompressFilter() throws IOException {
- //File dir = new File(System.getProperty("user.dir"));
- File zipFile = File.createTempFile("testCompressZip", ".zip");
- zipFile.deleteOnExit();
- log.info("Compress " + DIR + " in zip file = " + zipFile);
-
- FileFilter filter = new FileFilter() {
- public boolean accept(File pathname) {
- boolean result;
- result = !pathname.getPath().contains("/target");
- return result;
- }
-
- };
-
- ZipUtil.compress(zipFile, DIR, filter);
-
- Assert.assertTrue(zipFile.exists());
- Assert.assertTrue(0 != zipFile.length());
- }
-
- @Test
- public void testCompressFile() throws IOException {
- File dir = new File(System.getProperty("java.home"), "bin"
- + File.separator + "java");
- File zipFile = File.createTempFile("testCompressZip", ".zip");
- zipFile.deleteOnExit();
- log.info("Compress " + dir + " in zip file = " + zipFile);
-
- ZipUtil.compress(zipFile, dir, null);
-
- Assert.assertTrue(zipFile.exists());
- Assert.assertTrue(0 != zipFile.length());
- }
-
- @Test
- public void testCompressFileMD5() throws IOException {
- File dir = new File(System.getProperty("java.home"), "bin"
- + File.separator + "java");
- File zipFile = File.createTempFile("testCompressZip", ".zip");
- zipFile.deleteOnExit();
- log.info("Compress " + dir + " in zip file = " + zipFile);
-
- Collection<File> files = Collections.singleton(dir);
- ZipUtil.compressFiles(zipFile, dir, files, true);
-
- Assert.assertTrue(zipFile.exists());
- Assert.assertTrue(zipFile.length() > 0);
- File md5File = new File(zipFile.getAbsoluteFile() + ".md5");
- md5File.deleteOnExit();
- Assert.assertTrue(md5File.exists());
- Assert.assertTrue(md5File.length() > 0);
- }
-
-}
1
0
[Lutinutil-commits] r1540 - in nuiton-i18n-api/trunk/src: main/java/org/codelutin main/java/org/codelutin/util main/resources test/java/org/codelutin test/resources
by tchemit@users.labs.libre-entreprise.org 14 May '09
by tchemit@users.labs.libre-entreprise.org 14 May '09
14 May '09
Author: tchemit
Date: 2009-05-14 04:43:02 +0000 (Thu, 14 May 2009)
New Revision: 1540
Removed:
nuiton-i18n-api/trunk/src/main/java/org/codelutin/log/
nuiton-i18n-api/trunk/src/main/java/org/codelutin/util/config/
nuiton-i18n-api/trunk/src/main/resources/META-INF/
nuiton-i18n-api/trunk/src/main/resources/i18n/
nuiton-i18n-api/trunk/src/test/java/org/codelutin/log/
nuiton-i18n-api/trunk/src/test/resources/compress/
nuiton-i18n-api/trunk/src/test/resources/properties/
Log:
juste keep i18n stuff neutral from nuiton-util
1
0
14 May '09
Author: tchemit
Date: 2009-05-14 02:44:45 +0000 (Thu, 14 May 2009)
New Revision: 1539
Added:
nuiton-i18n-api/trunk/
Log:
create nuiton-i18n-api project
Copied: nuiton-i18n-api/trunk (from rev 1538, nuitonutil/trunk)
1
0
Author: tchemit
Date: 2009-05-14 02:44:33 +0000 (Thu, 14 May 2009)
New Revision: 1538
Added:
nuiton-i18n-api/
Log:
create nuiton-i18n-api project
1
0