Author: tfmorris
Date: 2008-09-05 12:37:28-0700
New Revision: 15676

Modified:
   trunk/src/argouml-app/src/org/argouml/moduleloader/ModuleLoader2.java

Log:
RESOLVED - task 5369: Errors logged for I18N files at startup 
http://argouml.tigris.org/issues/show_bug.cgi?id=5369

Modified: trunk/src/argouml-app/src/org/argouml/moduleloader/ModuleLoader2.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/moduleloader/ModuleLoader2.java?view=diff&rev=15676&p1=trunk/src/argouml-app/src/org/argouml/moduleloader/ModuleLoader2.java&p2=trunk/src/argouml-app/src/org/argouml/moduleloader/ModuleLoader2.java&r1=15675&r2=15676
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/moduleloader/ModuleLoader2.java       
(original)
+++ trunk/src/argouml-app/src/org/argouml/moduleloader/ModuleLoader2.java       
2008-09-05 12:37:28-0700
@@ -468,6 +468,7 @@
      */
     private void computeExtensionLocations() {
         // Use a little trick to find out where Argo is being loaded from.
+        // TODO: Use a different resource here. ARGOINI is unused and 
deprecated
         String extForm = getClass().getResource(Argo.ARGOINI).toExternalForm();
         String argoRoot =
             extForm.substring(0,
@@ -570,7 +571,8 @@
     /**
      * Check a jar file for an ArgoUML extension/module.<p>
      *
-     * If there isn't a manifest or it isn't readable, we fail silently.
+     * If there isn't a manifest or it isn't readable, we fall back to using
+     * the raw JAR entries.
      *
      * @param classloader The classloader to use.
      * @param file The file to process.
@@ -593,12 +595,20 @@
         try {
             manifest = jarfile.getManifest();
             if (manifest == null) {
-                LOG.debug(file + " does not have a manifest");
+                // We expect all extensions to have a manifest even though we
+                // can operate without one if necessary.
+                LOG.warn(file + " does not have a manifest");
             }
         } catch (IOException e) {
             LOG.error("Unable to read manifest of " + file, e);
             return;
         }
+        
+        // TODO: It is a performance drain to load all classes at startup time.
+        // They should be lazy loaded when needed.  Instead of scanning all
+        // classes for ones which implement our loadable module interface, we 
+        // should use a manifest entry or a special name/name pattern that we
+        // look for to find the single main module class to load here.  - tfm
        
         boolean loadedClass = false;
         if (manifest == null) {
@@ -618,11 +628,15 @@
                             | processEntry(classloader, key);
             }
         }
+
+        // Add this to search list for I18N properties
+        // (Done for both modules & localized property file sets)
+        Translator.addClassLoader(classloader);
         
-        if (loadedClass) {
-            // Add this to search list for I18N properties
-            Translator.addClassLoader(classloader);
-        } else {
+        // If it didn't have a loadable module class and it doesn't look like
+        // a localized property set, warn the user that something funny is in
+        // their extension directory
+        if (!loadedClass && !file.getName().contains("argouml-i18n-")) {
             LOG.error("Failed to find any loadable ArgoUML modules in jar "
                     + file);
         }

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to