Author: tfmorris
Date: 2010-04-17 13:07:16-0700
New Revision: 18280

Modified:
   trunk/src/argouml-app/src/org/argouml/ui/SettingsTabProfile.java
   
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/XmiReferenceResolverImpl.java
   
trunk/src/argouml-core-model-mdr/tests/org/argouml/model/mdr/TestReadCompressedFilesAndHref.java

Log:
RESOLVED - task 5946: Move recursive profile subdirectory search from MDR to 
GUI 
http://argouml.tigris.org/issues/show_bug.cgi?id=5946

Modified: trunk/src/argouml-app/src/org/argouml/ui/SettingsTabProfile.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/ui/SettingsTabProfile.java?view=diff&pathrev=18280&r1=18279&r2=18280
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/ui/SettingsTabProfile.java    
(original)
+++ trunk/src/argouml-app/src/org/argouml/ui/SettingsTabProfile.java    
2010-04-17 13:07:16-0700
@@ -49,6 +49,7 @@
 import java.awt.event.ItemListener;
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
 import javax.swing.BoxLayout;
@@ -389,10 +390,12 @@
             }
 
         } else if (arg0.getSource() == removeDirectory) {
-            if (directoryList.getSelectedIndex() != -1) {
-                int idx = directoryList.getSelectedIndex();
-                ((MutableComboBoxModel) directoryList.getModel())
-                        .removeElementAt(idx);
+            MutableComboBoxModel model = 
+                ((MutableComboBoxModel) directoryList.getModel()); 
+            int[] indices = directoryList.getSelectedIndices(); 
+            for (int i = indices.length-1; i >=0; i--) {
+                int idx = indices[i];
+                model.removeElementAt(idx);
             }
         } else if (arg0.getSource() == refreshProfiles) {
             boolean refresh = JOptionPane.showConfirmDialog(this, Translator
@@ -424,18 +427,34 @@
             if (ret == JFileChooser.APPROVE_OPTION) {
                 File file = fileChooser.getSelectedFile();
 
-                String path = file.getAbsolutePath();
-
-                ((MutableComboBoxModel) directoryList.getModel())
-                        .addElement(path);
+                // find and add all subdirectories
+                Collection<File> dirs = new ArrayList<File>();
+                collectSubdirs(file, dirs);
+                
+                MutableComboBoxModel cbModel = 
+                    ((MutableComboBoxModel) directoryList.getModel());
+                for (File dir : dirs) {
+                    cbModel.addElement(dir.getAbsolutePath());
+                }
             }
-
         }
 
         availableList.validate();
         defaultList.validate();
     }
 
+    private void collectSubdirs(File file, Collection<File> subdirs) {
+        subdirs.add(file);
+        File[] files = file.listFiles();
+        if (files != null) {
+            for (File f : files) {
+                if (f.isDirectory() & !f.isHidden()) {
+                    collectSubdirs(f, subdirs);
+                }
+            }
+        }
+    }
+
     /**
      * @return the internationalization key that containing the name of this 
tab
      * @see org.argouml.application.api.GUISettingsTabInterface#getTabKey()
@@ -452,9 +471,6 @@
         return this;
     }
 
-
-
-
     public void handleResetToDefault() {
         if (!initialized) {
             buildPanel();
@@ -463,7 +479,6 @@
     }
 
     public void handleSettingsTabCancel() {
-
     }
 
     public void handleSettingsTabRefresh() {

Modified: 
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/XmiReferenceResolverImpl.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/XmiReferenceResolverImpl.java?view=diff&pathrev=18280&r1=18279&r2=18280
==============================================================================
--- 
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/XmiReferenceResolverImpl.java
    (original)
+++ 
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/XmiReferenceResolverImpl.java
    2010-04-17 13:07:16-0700
@@ -47,7 +47,6 @@
 import java.net.URISyntaxException;
 import java.net.URL;
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
@@ -464,22 +463,20 @@
                     + modulesPath.size());
         }
         for (String moduleDirectory : modulesPath) {
-            Collection<File> candidates = findAllCandidateModulePaths(
-                moduleDirectory, moduleName);
-            for (File candidate : candidates) {
-                if (LOG.isDebugEnabled()) {
-                    LOG.debug("candidate '" + candidate.toString()
-                            + "' exists=" + candidate.exists());
-                }
-                if (candidate.exists()) {
-                    String urlString;
-                    try {
-                        urlString = candidate.toURI().toURL().toExternalForm();
-                    } catch (MalformedURLException e) {
-                        return null;
-                    }
-                    return fixupURL(urlString);
+            File candidate = new File(moduleDirectory, moduleName);
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("candidate '" + candidate.toString() + "' exists="
+                        + candidate.exists());
+            }
+            if (candidate.exists()) {
+                String urlString;
+                try {
+                    urlString = candidate.toURI().toURL().toExternalForm();
+                } catch (MalformedURLException e) {
+                    return null;
                 }
+
+                return fixupURL(urlString);
             }
         }
         if (public2SystemIds.containsKey(moduleName)) {
@@ -493,40 +490,6 @@
         return null;
     }
 
-    private static Collection<File> findAllCandidateModulePaths(
-            String basePath, String fileName) {
-        Collection<File> candidates = new ArrayList<File>();
-        if (basePath != null && basePath.length() > 0) {
-            Collection<File> dirs = new ArrayList<File>();
-            // TODO: This should be done (if desired/needed) by the calling
-            // code, not here.  It's not always the case that searching all
-            // subdirectories is desirable.
-            dirs = findAllInternalDirectories(new File(basePath));
-            for (File dir : dirs) {
-                candidates.add(new File(dir, fileName));
-            }
-        } else {
-            candidates.add(new File(fileName));
-        }
-        return candidates;
-    }
-
-    private static Collection<File> findAllInternalDirectories(File baseDir) {
-        List<File> dirs = new ArrayList<File>();
-        if (baseDir.exists() && baseDir.isDirectory()) {
-            dirs.add(baseDir);
-            File[] files = baseDir.listFiles();
-            if (files != null) { // API says not possible, but it happens
-                for (File file : files) {
-                    if (file.isDirectory()) {
-                        dirs.add(file);
-                        dirs.addAll(findAllInternalDirectories(file));
-                    }
-                }
-            }
-        }
-        return dirs;
-    }
 
     /**
      * Gets the suffix of the <code>systemId</code>.

Modified: 
trunk/src/argouml-core-model-mdr/tests/org/argouml/model/mdr/TestReadCompressedFilesAndHref.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-mdr/tests/org/argouml/model/mdr/TestReadCompressedFilesAndHref.java?view=diff&pathrev=18280&r1=18279&r2=18280
==============================================================================
--- 
trunk/src/argouml-core-model-mdr/tests/org/argouml/model/mdr/TestReadCompressedFilesAndHref.java
    (original)
+++ 
trunk/src/argouml-core-model-mdr/tests/org/argouml/model/mdr/TestReadCompressedFilesAndHref.java
    2010-04-17 13:07:16-0700
@@ -40,6 +40,8 @@
 package org.argouml.model.mdr;
 
 import java.io.File;
+import java.util.ArrayList;
+import java.util.Collection;
 
 import org.apache.log4j.Logger;
 import org.xml.sax.InputSource;
@@ -97,8 +99,9 @@
         LOG.info("Begin " + testName + "()");
         XmiReaderImpl reader = new XmiReaderImpl(modelImplementation);
         if (profilesPath != null) {
-            String file = getClass().getResource(profilesPath).getFile();
-            reader.addSearchPath(file);
+            String path = getClass().getResource(profilesPath).getPath();
+            File file = new File(path);
+            setProfilePathSubdirs(reader, file);
         }
         try {
             InputSource inputSource = new InputSource(
@@ -111,4 +114,25 @@
         }
         assertTrue(modelPath + " model is loaded", true);
     }
+    
+    private void setProfilePathSubdirs(XmiReaderImpl reader, File directory) {
+        Collection<File> dirs = new ArrayList<File>();
+        collectSubdirs(directory, dirs);
+
+        for (File dir : dirs) {
+            reader.addSearchPath(dir.getAbsolutePath());
+        }
+    }
+    
+    private void collectSubdirs(File file, Collection<File> subdirs) {
+        subdirs.add(file);
+        File[] files = file.listFiles();
+        if (files != null) {
+            for (File f : files) {
+                if (f.isDirectory() & !f.isHidden()) {
+                    collectSubdirs(f, subdirs);
+                }
+            }
+        }
+    }
 }

------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2587035

To unsubscribe from this discussion, e-mail: 
[[email protected]].

Reply via email to