[cai18n-dev] [GIT] Compiler assisted internalization library branch, master, updated. b522d133160c1fa486bfc3021b856ec088e57a9f

added by portage for gitosis-gentoo git-noreply at pixie.qos.ch
Wed Aug 26 17:33:19 CEST 2009


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Compiler assisted internalization library".

The branch, master has been updated
       via  b522d133160c1fa486bfc3021b856ec088e57a9f (commit)
      from  c0d26e1af985ee4212fc38b341dd624ced42b7b3 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.qos.ch/gitweb/?p=cai18n.git;a=commit;h=b522d133160c1fa486bfc3021b856ec088e57a9f
http://github.com/ceki/cai18n/commit/b522d133160c1fa486bfc3021b856ec088e57a9f

commit b522d133160c1fa486bfc3021b856ec088e57a9f
Author: Ceki Gulcu <ceki at qos.ch>
Date:   Wed Aug 26 17:30:52 2009 +0200

    ongoing work on the mojo

diff --git a/cai18n-api/src/main/java/ch/qos/cai18n/IMessageConveyor.java b/cai18n-api/src/main/java/ch/qos/cai18n/IMessageConveyor.java
index 7a98e2e..521bfe4 100644
--- a/cai18n-api/src/main/java/ch/qos/cai18n/IMessageConveyor.java
+++ b/cai18n-api/src/main/java/ch/qos/cai18n/IMessageConveyor.java
@@ -22,11 +22,43 @@
 
 package ch.qos.cai18n;
 
+import java.text.MessageFormat;
 
 // note that the getMessage method does not take a Locale.
 // It is supposed that the MessageConveyor instance knows
 // which locale to use.
 
+/**
+ * Retrieve a message by its code as specified by an enum.
+ * 
+ * <p>
+ * The strategy in retrieving messages may vary from implementation to
+ * implementation.
+ * 
+ * @author Ceki G&uuml;lc&uuml;
+ */
 public interface IMessageConveyor {
-	<E extends Enum<?>> String getMessage(E e, Object... args);
+
+  /**
+   * Retrieve a message by its code as specified by an enum.
+   * 
+   * <p>
+   * Note that any further arguments passed in 'args' will be interpolated using
+   * the translated message. The interpolation will be done according to
+   * conventions of {@link MessageFormat}.
+   * 
+   * @param <E>
+   *          an enum type
+   * @param e
+   *          an enum instance
+   * @param args
+   *          optional arguments
+   * @return
+   * 
+   * @param <E>
+   * @param e
+   * @param args
+   * @return
+   */
+  <E extends Enum<?>> String getMessage(E e, Object... args);
 }
diff --git a/cai18n-api/src/main/java/ch/qos/cai18n/util/AnnotationExtractor.java b/cai18n-api/src/main/java/ch/qos/cai18n/util/AnnotationExtractor.java
index 28763c7..e8bff49 100644
--- a/cai18n-api/src/main/java/ch/qos/cai18n/util/AnnotationExtractor.java
+++ b/cai18n-api/src/main/java/ch/qos/cai18n/util/AnnotationExtractor.java
@@ -24,20 +24,27 @@ package ch.qos.cai18n.util;
 import ch.qos.cai18n.LocaleNames;
 import ch.qos.cai18n.ResourceBundleName;
 
+/**
+ * 
+ * @author Ceki G&uuml;lc&uuml;
+ *
+ */
 public class AnnotationExtractor {
-  
-  static public <E extends Enum<?>> String getResourceBundleName(Class<E> someClass) {
-    ResourceBundleName rbnAnnotation = (ResourceBundleName) someClass.getAnnotation(ResourceBundleName.class);
-    if(rbnAnnotation == null) {
+
+  static public <E extends Enum<?>> String getResourceBundleName(
+      Class<E> enumClass) {
+    ResourceBundleName rbnAnnotation = (ResourceBundleName) enumClass
+        .getAnnotation(ResourceBundleName.class);
+    if (rbnAnnotation == null) {
       return null;
     }
     return rbnAnnotation.value();
   }
 
-  
-  static public <E extends Enum<?>> String[] getLocaleNames(Class<E> someClass) {
-    LocaleNames localeNamesAnnotation = (LocaleNames) someClass.getAnnotation(LocaleNames.class);
-    if(localeNamesAnnotation == null) {
+  static public <E extends Enum<?>> String[] getLocaleNames(Class<E> enumClass) {
+    LocaleNames localeNamesAnnotation = (LocaleNames) enumClass
+        .getAnnotation(LocaleNames.class);
+    if (localeNamesAnnotation == null) {
       return null;
     }
     return localeNamesAnnotation.value();
diff --git a/cai18n-api/src/main/java/ch/qos/cai18n/verifier/Cai18nError.java b/cai18n-api/src/main/java/ch/qos/cai18n/verifier/Cai18nError.java
index 3243345..f75420b 100644
--- a/cai18n-api/src/main/java/ch/qos/cai18n/verifier/Cai18nError.java
+++ b/cai18n-api/src/main/java/ch/qos/cai18n/verifier/Cai18nError.java
@@ -23,9 +23,18 @@ package ch.qos.cai18n.verifier;
 
 import java.util.Locale;
 
+/**
+ * 
+ * Aggregates various parameters of a verification error in a single place
+ * (class).
+ * 
+ * @author Ceki G&uuml;lc&uuml;
+ */
 public class Cai18nError {
 
   enum ErrorType {
+    // MISSING_LOCALE_NAMES_ANNOTATION
+
     MISSING_RBN_ANNOTATION, FAILED_TO_FIND_RB, EMPTY_RB, EMPTY_ENUM, ABSENT_IN_RB, ABSENT_IN_ENUM;
   }
 
@@ -66,8 +75,12 @@ public class Cai18nError {
   public String toString() {
     switch (errorType) {
     case MISSING_RBN_ANNOTATION:
-      return "Missing @ResourceBundleName annotation in enun class ["
+      return "Missing @ResourceBundleName annotation in enum class ["
           + enumClassName + "]";
+      // case MISSING_LOCALE_NAMES_ANNOTATION:
+      // return "Missing @LocaleNames annotation in enum class [" +
+      // enumClassName
+      // + "]";
     case FAILED_TO_FIND_RB:
       return "Failed to locate resource bundle [" + resouceBundleName
           + "]for locale [" + locale + "] for enum class [" + enumClassName
@@ -83,7 +96,8 @@ public class Cai18nError {
           + "] but absent in enum class [" + enumClassName + "]";
     case ABSENT_IN_RB:
       return "Code [" + code + "] present in enum class [" + enumClassName
-          + "] but absent in resource bundle named ["+resouceBundleName+"] for locale [" + locale + "]";
+          + "] but absent in resource bundle named [" + resouceBundleName
+          + "] for locale [" + locale + "]";
     default:
       throw new IllegalStateException("Impossible to reach here");
     }
diff --git a/cai18n-api/src/main/java/ch/qos/cai18n/verifier/MessageCodeVerifier.java b/cai18n-api/src/main/java/ch/qos/cai18n/verifier/MessageCodeVerifier.java
index 8fb2d2f..d7907ff 100644
--- a/cai18n-api/src/main/java/ch/qos/cai18n/verifier/MessageCodeVerifier.java
+++ b/cai18n-api/src/main/java/ch/qos/cai18n/verifier/MessageCodeVerifier.java
@@ -32,8 +32,8 @@ import ch.qos.cai18n.util.AnnotationExtractor;
 import ch.qos.cai18n.verifier.Cai18nError.ErrorType;
 
 /**
- * Given an enum class, verify that the corresponding resource bundles contain
- * the correct codes.
+ * Given an enum class, verify that the resource bundles corresponding to a
+ * given locale contains the correct codes.
  * 
  * @author Ceki Gulcu
  */
diff --git a/cai18n-api/src/test/java/ch/qos/cai18n/sample/MessageCodeVerifierTest.java b/cai18n-api/src/test/java/ch/qos/cai18n/sample/MessageCodeVerifierTest.java
index 99dc4bd..346f66a 100644
--- a/cai18n-api/src/test/java/ch/qos/cai18n/sample/MessageCodeVerifierTest.java
+++ b/cai18n-api/src/test/java/ch/qos/cai18n/sample/MessageCodeVerifierTest.java
@@ -32,7 +32,10 @@ import org.junit.Test;
 import ch.qos.cai18n.verifier.Cai18nError;
 import ch.qos.cai18n.verifier.MessageCodeVerifier;
 
-
+/**
+ * 
+ * @author Ceki G&uuml;lc&uuml;
+ */
 public class MessageCodeVerifierTest {
 
   
diff --git a/maven-cai18n-plugin-smoke/pom.xml b/maven-cai18n-plugin-smoke/pom.xml
index e795081..3c7acf4 100644
--- a/maven-cai18n-plugin-smoke/pom.xml
+++ b/maven-cai18n-plugin-smoke/pom.xml
@@ -35,13 +35,10 @@
 							<goal>verify</goal>
 						</goals>
 						<configuration>
-							<enumClass>ch.qos.cai18n.smoke.Countries</enumClass>
-              <locales>
-                <locale>en</locale>
-                <locale>fr</locale>
-                <locale>de</locale>
-              </locales>
-            </configuration>
+							<enumClasses>
+								<enumClass>ch.qos.cai18n.smoke.Countries</enumClass>
+							</enumClasses>
+						</configuration>
 					</execution>
 				</executions>
 			</plugin>
diff --git a/maven-cai18n-plugin/src/main/java/ch/qos/cai18n/VerifyMojo.java b/maven-cai18n-plugin/src/main/java/ch/qos/cai18n/VerifyMojo.java
index 15db43f..a685f6f 100644
--- a/maven-cai18n-plugin/src/main/java/ch/qos/cai18n/VerifyMojo.java
+++ b/maven-cai18n-plugin/src/main/java/ch/qos/cai18n/VerifyMojo.java
@@ -33,6 +33,7 @@ import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugin.MojoFailureException;
 
+import ch.qos.cai18n.util.AnnotationExtractor;
 import ch.qos.cai18n.verifier.Cai18nError;
 import ch.qos.cai18n.verifier.MessageCodeVerifier;
 
@@ -45,19 +46,17 @@ import ch.qos.cai18n.verifier.MessageCodeVerifier;
  */
 public class VerifyMojo extends AbstractMojo {
 
-  final static String MISSING_LOCALE = Cai18nConstants.CODE_URL_PREFIX+"#missingLocale";
-  final static String MISSING_ENUM_CLASS = Cai18nConstants.CODE_URL_PREFIX+"#missingEnumClass";
+  final static String MISSING_LOCALE = Cai18nConstants.CODE_URL_PREFIX
+      + "#missingLocale";
+  final static String MISSING_ENUM_CLASS = Cai18nConstants.CODE_URL_PREFIX
+      + "#missingEnumClass";
 
   /**
    * @parameter alias="enumClass"
    * @required
    */
-  private String enumClassAsStr;
+  private String[] enumClassStrArray;
 
-  /**
-   * @parameter A set of locales to check.
-   */
-  private String[] locales;
 
   /**
    * The directory for compiled classes.
@@ -68,47 +67,64 @@ public class VerifyMojo extends AbstractMojo {
    */
   private File outputDirectory;
 
-  
   ClassLoader classLoader;
-  
+
   public void execute() throws MojoExecutionException, MojoFailureException {
 
     System.out.println("outputDir=" + outputDirectory);
-    if (enumClassAsStr == null) {
+    if (enumClassStrArray == null) {
       throw new MojoFailureException(
           "<enumClass> must be specified. Please see " + MISSING_ENUM_CLASS);
     }
+    for(String enumClassAsStr: enumClassStrArray) {
+      Class<? extends Enum<?>> enumClass = loadEnumClass(enumClassAsStr);  
+      getLog().info("Checking codes for enum class ["+enumClassAsStr+"]");
+      checkAllLocales(enumClass);
+    }
+  }
 
-    Class<? extends Enum<?>> enumClass = loadEnumClass(enumClassAsStr);
+  public void checkAllLocales(Class<? extends Enum<?>> enumClass)
+      throws MojoFailureException {
+    String enumClassAsStr = enumClass.getName();
+    
+    String[] localeNameArray = AnnotationExtractor.getLocaleNames(enumClass);
+    if (localeNameArray == null || localeNameArray.length == 0) {
+      String errMsg = "Missing @LocaleNames annotation in enum ["
+          + enumClass.getClass().getName() + "]";
+      getLog().error(errMsg);
+      throw new MojoFailureException(errMsg);
+    }
 
-    if (locales == null) {
-      throw new MojoFailureException("<locales> cannot be empty. Please see "
-          + MISSING_LOCALE);
-    } else {
-      for (String l : locales) {
-        getLog().info("Checking locale " + l);
-        check(enumClass, l);
+    boolean failure = false;
+    for (String localeName : localeNameArray) {
+      Locale locale = new Locale(localeName);
+      List<Cai18nError> errorList = check(enumClass, locale);
+      if (errorList.size() == 0) {
+        String resouceBundleName = AnnotationExtractor
+            .getResourceBundleName(enumClass);
+        getLog().info(
+            "SUCCESSFUL verification for resource bundle [" + resouceBundleName
+                + "] for locale [" + locale + "]");
+      } else {
+        failure = true;
+        getLog().error("FAILURE during verification of resource bundle for locale ["+locale+"] enum class ["+enumClassAsStr+"]");
+        for (Cai18nError s : errorList) {
+          getLog().error(s.toString());
+        }
       }
     }
-    getLog().info("enumClass= " + enumClassAsStr);
+    if(failure) {
+      throw new MojoFailureException("FAIL Verification of ["+enumClassAsStr+"] codes.");
+    }
   }
 
-  public void check(Class<? extends Enum<?>> enumClass, String localeAsStr)
-      throws MojoFailureException {
-    Locale locale = new Locale(localeAsStr);
-    MessageCodeVerifier mcv = new MessageCodeVerifier(enumClass, getClassLoader());
+  public List<Cai18nError> check(Class<? extends Enum<?>> enumClass,
+      Locale locale) throws MojoFailureException {
+
+    MessageCodeVerifier mcv = new MessageCodeVerifier(enumClass,
+        getClassLoader());
     List<Cai18nError> errorList = mcv.verify(locale);
-    if (errorList.size() == 0) {
-      getLog().info("Verification succeeded for locale [" + locale + "]");
-    } else {
-      getLog().error(" Verification errors occurred");
-      for (Cai18nError s : errorList) {
-        getLog().error(s.toString());
-      }
-      getLog().error(" ");
-      throw new MojoFailureException("Verification failures for locale ["
-          + locale + "]");
-    }
+    return errorList;
   }
 
   @SuppressWarnings("unchecked")
@@ -126,24 +142,24 @@ public class VerifyMojo extends AbstractMojo {
   }
 
   ClassLoader getClassLoader() {
-    if(classLoader == null) {
+    if (classLoader == null) {
       classLoader = buildClassLoader();
     }
     return classLoader;
   }
-  
-  ClassLoader buildClassLoader()  {
+
+  ClassLoader buildClassLoader() {
     ArrayList<URL> classpathURLArray = new ArrayList<URL>();
     classpathURLArray.add(toURL(outputDirectory));
     return new URLClassLoader(classpathURLArray.toArray(new URL[] {}));
   }
 
-  URL toURL(File file)  {
+  URL toURL(File file) {
     try {
       return file.toURI().toURL();
     } catch (MalformedURLException e) {
       // this should never happen
-      getLog().error("Failed to convert file ["+file+"] to a URL", e);
+      getLog().error("Failed to convert file [" + file + "] to a URL", e);
       return null;
     }
   }

-----------------------------------------------------------------------

Summary of changes:
 .../main/java/ch/qos/cai18n/IMessageConveyor.java  |   34 +++++++-
 .../ch/qos/cai18n/util/AnnotationExtractor.java    |   23 +++--
 .../java/ch/qos/cai18n/verifier/Cai18nError.java   |   18 ++++-
 .../qos/cai18n/verifier/MessageCodeVerifier.java   |    4 +-
 .../qos/cai18n/sample/MessageCodeVerifierTest.java |    5 +-
 maven-cai18n-plugin-smoke/pom.xml                  |   11 +--
 .../src/main/java/ch/qos/cai18n/VerifyMojo.java    |   94 ++++++++++++--------
 7 files changed, 129 insertions(+), 60 deletions(-)


hooks/post-receive
-- 
Compiler assisted internalization library



More information about the cal10n-dev mailing list