svn commit: r16941 - trunk/src/argouml-app/src/org/argouml/uml/generator/ui/ClassGenerationDialog.java

Thomas Neustupny <[email protected]>
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
Author: thn
Date: 2009-03-24 11:30:00-0700
New Revision: 16941

Modified:
   trunk/src/argouml-app/src/org/argouml/uml/generator/ui/ClassGenerationDialog.java

Log:
the patch from Christian Heinrich for issue 5743:
Patch for ordering language names alphabetically in "generate all classes" window

Modified: trunk/src/argouml-app/src/org/argouml/uml/generator/ui/ClassGenerationDialog.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/generator/ui/ClassGenerationDialog.java?view=diff&pathrev=16941&r1=16940&r2=16941
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/generator/ui/ClassGenerationDialog.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/generator/ui/ClassGenerationDialog.java	2009-03-24 11:30:00-0700
@@ -66,35 +66,35 @@
 /**
  * The dialog that starts the generation of classes.
  */
-public class ClassGenerationDialog
-    extends ArgoDialog
-    implements ActionListener {
+public class ClassGenerationDialog extends ArgoDialog implements ActionListener {
 
     private static final String SOURCE_LANGUAGE_TAG = "src_lang";
-    
+
     /**
      * Logger.
      */
-    private static final Logger LOG =
-        Logger.getLogger(ClassGenerationDialog.class);
+    private static final Logger LOG = Logger
+            .getLogger(ClassGenerationDialog.class);
 
     private TableModelClassChecks classTableModel;
+
     private boolean isPathInModel;
+
     private List<Language> languages;
 
     private JTable classTable;
+
     private JComboBox outputDirectoryComboBox;
 
     /**
-     * Used to select the next language column in case
-     * the "Select All" button is pressed.
+     * Used to select the next language column in case the "Select All" button
+     * is pressed.
      */
     private int languageHistory;
 
-
     /**
      * Constructor.
-     *
+     * 
      * @param nodes The UML elements, typically classifiers, to generate.
      */
     public ClassGenerationDialog(List<Object> nodes) {
@@ -103,16 +103,14 @@
 
     /**
      * Constructor.
-     *
+     * 
      * @param nodes The UML elements, typically classifiers, to generate.
-     * @param inModel <code>true</code> if the path is in the model.
-     *        TODO: Correct?
+     * @param inModel <code>true</code> if the path is in the model. TODO:
+     *            Correct?
      */
     public ClassGenerationDialog(List<Object> nodes, boolean inModel) {
-        super(
-            Translator.localize("dialog.title.generate-classes"),
-            Dialog.OK_CANCEL_OPTION,
-            true);
+        super(Translator.localize("dialog.title.generate-classes"),
+                Dialog.OK_CANCEL_OPTION, true);
         isPathInModel = inModel;
 
         buildLanguages();
@@ -138,7 +136,9 @@
         nameButton(selectAllButton, "button.select-all");
         selectAllButton.addActionListener(new ActionListener() {
             /*
-             * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+             * @see
+             * java.awt.event.ActionListener#actionPerformed(java.awt.event.
+             * ActionEvent)
              */
             public void actionPerformed(ActionEvent e) {
                 classTableModel.setAllChecks(true);
@@ -149,7 +149,9 @@
         nameButton(selectNoneButton, "button.select-none");
         selectNoneButton.addActionListener(new ActionListener() {
             /*
-             * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+             * @see
+             * java.awt.event.ActionListener#actionPerformed(java.awt.event.
+             * ActionEvent)
              */
             public void actionPerformed(ActionEvent e) {
                 classTableModel.setAllChecks(false);
@@ -165,22 +167,23 @@
         selectPanel.add(selectButtons);
 
         JPanel centerPanel = new JPanel(new BorderLayout(0, 2));
-        centerPanel.add(new JLabel(Translator.localize(
-            "label.available-classes")), BorderLayout.NORTH);
+        centerPanel.add(new JLabel(Translator
+                .localize("label.available-classes")), BorderLayout.NORTH);
         centerPanel.add(new JScrollPane(classTable), BorderLayout.CENTER);
         centerPanel.add(selectPanel, BorderLayout.SOUTH);
         contentPanel.add(centerPanel, BorderLayout.CENTER);
 
         // Output Directory
-        outputDirectoryComboBox =
-                new JComboBox(getClasspathEntries().toArray());
+        outputDirectoryComboBox = new JComboBox(getClasspathEntries().toArray());
 
         JButton browseButton = new JButton();
         nameButton(browseButton, "button.browse");
         browseButton.setText(browseButton.getText() + "...");
         browseButton.addActionListener(new ActionListener() {
             /*
-             * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+             * @see
+             * java.awt.event.ActionListener#actionPerformed(java.awt.event.
+             * ActionEvent)
              */
             public void actionPerformed(ActionEvent e) {
                 doBrowse();
@@ -192,11 +195,10 @@
         if (!inModel) {
             outputDirectoryComboBox.setEditable(true);
             JPanel outputPanel = new JPanel(new BorderLayout(5, 0));
-            outputPanel.setBorder(
-                BorderFactory.createCompoundBorder(
-                    BorderFactory.createTitledBorder(
-			Translator.localize("label.output-directory")),
-                    BorderFactory.createEmptyBorder(2, 5, 5, 5)));
+            outputPanel.setBorder(BorderFactory.createCompoundBorder(
+                    BorderFactory.createTitledBorder(Translator
+                            .localize("label.output-directory")), BorderFactory
+                            .createEmptyBorder(2, 5, 5, 5)));
             outputPanel.add(outputDirectoryComboBox, BorderLayout.CENTER);
             outputPanel.add(browseButton, BorderLayout.EAST);
             southPanel.add(outputPanel, BorderLayout.NORTH);
@@ -204,18 +206,18 @@
 
         // Compile Checkbox
 
-        //_compileCheckBox = new JCheckBox();
-        //nameButton(_compileCheckBox, "checkbox.compile-generated-source");
+        // _compileCheckBox = new JCheckBox();
+        // nameButton(_compileCheckBox, "checkbox.compile-generated-source");
         // TODO: Implement the compile feature. For now, disable the checkbox.
-        //_compileCheckBox.setEnabled(false);
-        //southPanel.add(_compileCheckBox, BorderLayout.SOUTH);
+        // _compileCheckBox.setEnabled(false);
+        // southPanel.add(_compileCheckBox, BorderLayout.SOUTH);
 
         contentPanel.add(southPanel, BorderLayout.SOUTH);
 
         setContent(contentPanel);
 
         // TODO: Get saved default directory
-//        outputDirectoryComboBox.getModel().setSelectedItem(savedDir);
+        // outputDirectoryComboBox.getModel().setSelectedItem(savedDir);
     }
 
     /*
@@ -238,14 +240,9 @@
 
             JTableHeader header = classTable.getTableHeader();
             if (header != null) {
-                c =
-		    header.getDefaultRenderer().getTableCellRendererComponent(
-			    classTable,
-			    column.getHeaderValue(),
-			    false,
-			    false,
-			    0,
-			    0);
+                c = header.getDefaultRenderer()
+                        .getTableCellRendererComponent(classTable,
+                                column.getHeaderValue(), false, false, 0, 0);
                 width = Math.max(c.getPreferredSize().width + 8, width);
             }
 
@@ -257,8 +254,24 @@
     }
 
     private void buildLanguages() {
-        languages = new ArrayList<Language>(
-                GeneratorManager.getInstance().getLanguages());
+        ArrayList<Language> tmp = new ArrayList<Language>(GeneratorManager
+                .getInstance().getLanguages());
+
+        languages = new ArrayList<Language>();
+
+        for (int i = 0, length = tmp.size(); i < length; i++) {
+            Language current = tmp.get(i);
+            int index = languages.size();
+
+            for (int j = 0, length_j = languages.size(); j < length_j; j++) {
+                if (current.getName().compareToIgnoreCase(
+                        languages.get(j).getName()) < 0) {
+                    index = j;
+                    break;
+                }
+            }
+            languages.add(index, current);
+        }
     }
 
     private static Collection<String> getClasspathEntries() {
@@ -266,15 +279,15 @@
         Collection<String> entries = new TreeSet<String>();
 
         // TODO: What does the output directory have to do with the class path?
-//        Project p = ProjectManager.getManager().getCurrentProject();
-//        entries.add(p.getProjectSettings().getGenerationOutputDir());
+        // Project p = ProjectManager.getManager().getCurrentProject();
+        // entries.add(p.getProjectSettings().getGenerationOutputDir());
 
         final String pathSep = System.getProperty("path.separator");
         StringTokenizer allEntries = new StringTokenizer(classpath, pathSep);
         while (allEntries.hasMoreElements()) {
             String entry = allEntries.nextToken();
             if (!entry.toLowerCase().endsWith(".jar")
-                && !entry.toLowerCase().endsWith(".zip")) {
+                    && !entry.toLowerCase().endsWith(".zip")) {
                 entries.add(entry);
             }
         }
@@ -282,7 +295,8 @@
     }
 
     /*
-     * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+     * @see
+     * java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
      */
     @Override
     public void actionPerformed(ActionEvent e) {
@@ -303,47 +317,43 @@
                 Set nodes = classTableModel.getChecked(language);
 
                 if (!isPathInModel) {
-                    path =
-                        ((String) outputDirectoryComboBox.getModel()
-                                .getSelectedItem());
+                    path = ((String) outputDirectoryComboBox.getModel()
+                            .getSelectedItem());
                     if (path != null) {
                         path = path.trim();
                         if (path.length() > 0) {
-                            Collection<String> files =
-                                generator.generateFiles(nodes, path, false);
+                            Collection<String> files = generator.generateFiles(
+                                    nodes, path, false);
                             for (String filename : files) {
-                                fileNames[i].add(
-                                    path + CodeGenerator.FILE_SEPARATOR
+                                fileNames[i].add(path
+                                        + CodeGenerator.FILE_SEPARATOR
                                         + filename);
                             }
                         }
                     }
                 } else {
                     // classify nodes by base path
-                    Map<String, Set<Object>> nodesPerPath =
-                            new HashMap<String, Set<Object>>();
+                    Map<String, Set<Object>> nodesPerPath = new HashMap<String, Set<Object>>();
                     for (Object node : nodes) {
                         if (!Model.getFacade().isAClassifier(node)) {
                             continue;
                         }
                         path = GeneratorManager.getCodePath(node);
                         if (path == null) {
-                            Object parent =
-                                Model.getFacade().getNamespace(node);
+                            Object parent = Model.getFacade()
+                                    .getNamespace(node);
                             while (parent != null) {
                                 path = GeneratorManager.getCodePath(parent);
                                 if (path != null) {
                                     break;
                                 }
-                                parent =
-                                    Model.getFacade().getNamespace(parent);
+                                parent = Model.getFacade().getNamespace(parent);
                             }
                         }
                         if (path != null) {
                             final String fileSep = CodeGenerator.FILE_SEPARATOR;
                             if (path.endsWith(fileSep)) { // remove trailing /
-                                path =
-                                    path.substring(0, path.length()
+                                path = path.substring(0, path.length()
                                         - fileSep.length());
                             }
                             Set<Object> np = nodesPerPath.get(path);
@@ -362,12 +372,11 @@
                         Set nodeColl = (Set) entry.getValue();
                         // TODO: the last argument (recursive flag) should be a
                         // selectable option
-                        Collection<String> files =
-                            generator.generateFiles(nodeColl, basepath, false);
+                        Collection<String> files = generator.generateFiles(
+                                nodeColl, basepath, false);
                         for (String filename : files) {
                             fileNames[i].add(basepath
-                                    + CodeGenerator.FILE_SEPARATOR
-                                    + filename);
+                                    + CodeGenerator.FILE_SEPARATOR + filename);
                         }
                     }
                 } // end if (!isPathInModel) .. else
@@ -380,26 +389,25 @@
     /**
      * Save the source language in the model.
      * 
-     * TODO: Support multiple languages now that we have UML 1.4
-     * tagged values.
+     * TODO: Support multiple languages now that we have UML 1.4 tagged values.
+     * 
      * @param node
      * @param language
      */
     private void saveLanguage(Object node, Language language) {
-        Object taggedValue =
-                Model.getFacade().getTaggedValue(node, SOURCE_LANGUAGE_TAG);
+        Object taggedValue = Model.getFacade().getTaggedValue(node,
+                SOURCE_LANGUAGE_TAG);
         if (taggedValue != null) {
             String savedLang = Model.getFacade().getValueOfTag(taggedValue);
             if (!language.getName().equals(savedLang)) {
-                Model.getExtensionMechanismsHelper().setValueOfTag(
-                        taggedValue, language.getName());
+                Model.getExtensionMechanismsHelper().setValueOfTag(taggedValue,
+                        language.getName());
             }
         } else {
-            taggedValue =
-                    Model.getExtensionMechanismsFactory().buildTaggedValue(
-                            SOURCE_LANGUAGE_TAG, language.getName());
-            Model.getExtensionMechanismsHelper().addTaggedValue(
-                    node, taggedValue);
+            taggedValue = Model.getExtensionMechanismsFactory()
+                    .buildTaggedValue(SOURCE_LANGUAGE_TAG, language.getName());
+            Model.getExtensionMechanismsHelper().addTaggedValue(node,
+                    taggedValue);
 
         }
     }
@@ -407,11 +415,9 @@
     private void doBrowse() {
         try {
             // Show Filechooser to select OutputDirectory
-            JFileChooser chooser =
-                new JFileChooser(
-                    (String) outputDirectoryComboBox
-                        .getModel()
-                        .getSelectedItem());
+            JFileChooser chooser = new JFileChooser(
+                    (String) outputDirectoryComboBox.getModel()
+                            .getSelectedItem());
 
             if (chooser == null) {
                 chooser = new JFileChooser();
@@ -420,10 +426,10 @@
             chooser.setFileHidingEnabled(true);
             chooser.setMultiSelectionEnabled(false);
             chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
-            chooser.setDialogTitle(Translator.localize(
-                    "dialog.generation.chooser.choose-output-dir"));
-            chooser.showDialog(this, Translator.localize(
-                    "dialog.generation.chooser.approve-button-text"));
+            chooser.setDialogTitle(Translator
+                    .localize("dialog.generation.chooser.choose-output-dir"));
+            chooser.showDialog(this, Translator
+                    .localize("dialog.generation.chooser.approve-button-text"));
 
             if (!"".equals(chooser.getSelectedFile().getPath())) {
                 String path = chooser.getSelectedFile().getPath();
@@ -446,9 +452,9 @@
         private List<Object> classes;
 
         /**
-         * Array of sets of UML elements that the user has selected.  One set
-         * per language.  The Object typed objects are actually UML Elements,
-         * but we don't have a visible type for that.
+         * Array of sets of UML elements that the user has selected. One set per
+         * language. The Object typed objects are actually UML Elements, but we
+         * don't have a visible type for that.
          */
         private Set<Object>[] checked;
 
@@ -458,7 +464,6 @@
         public TableModelClassChecks() {
         }
 
-
         /**
          * Set the target.
          * 
@@ -474,8 +479,7 @@
 
             for (Object cls : classes) {
                 for (int j = 0; j < getLanguagesCount(); j++) {
-                    if (isSupposedToBeGeneratedAsLanguage(
-                            languages.get(j), cls)) {
+                    if (isSupposedToBeGeneratedAsLanguage(languages.get(j), cls)) {
                         checked[j].add(cls);
                     } else if ((languages.get(j)).getName().equals(
                             Notation.getConfiguredNotation()
@@ -486,19 +490,18 @@
             }
             fireTableStructureChanged();
 
-            getOkButton().setEnabled(classes.size() > 0
-				     && getChecked().size() > 0);
+            getOkButton().setEnabled(
+                    classes.size() > 0 && getChecked().size() > 0);
         }
 
-        private boolean isSupposedToBeGeneratedAsLanguage(
-            Language lang,
-            Object cls) {
+        private boolean isSupposedToBeGeneratedAsLanguage(Language lang,
+                Object cls) {
             if (lang == null || cls == null) {
                 return false;
             }
 
-            Object taggedValue =
-                Model.getFacade().getTaggedValue(cls, SOURCE_LANGUAGE_TAG);
+            Object taggedValue = Model.getFacade().getTaggedValue(cls,
+                    SOURCE_LANGUAGE_TAG);
             if (taggedValue == null) {
                 return false;
             }
@@ -515,6 +518,7 @@
 
         /**
          * Return the set of elements which are selected for the given language.
+         * 
          * @param lang the language
          * @return a set of UML elements
          */
@@ -528,7 +532,7 @@
 
         /**
          * All checked classes.
-         *
+         * 
          * @return The union of all languages as a {@link Set}.
          */
         public Set<Object> getChecked() {
@@ -539,9 +543,9 @@
             return union;
         }
 
-        ////////////////
+        // //////////////
         // TableModel implementation
-        
+
         /*
          * @see javax.swing.table.TableModel#getColumnCount()
          */
@@ -624,20 +628,20 @@
         }
 
         /*
-         * @see javax.swing.table.TableModel#setValueAt(
-         *          java.lang.Object, int, int)
+         * @see javax.swing.table.TableModel#setValueAt( java.lang.Object, int,
+         * int)
          */
         @Override
         public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
             if (columnIndex == getLanguagesCount()) {
                 return;
-	    }
+            }
             if (columnIndex >= getColumnCount()) {
                 return;
-	    }
+            }
             if (!(aValue instanceof Boolean)) {
                 return;
-	    }
+            }
             boolean val = ((Boolean) aValue).booleanValue();
             Object cls = classes.get(rowIndex);
 
@@ -652,19 +656,18 @@
             if (val && !getOkButton().isEnabled()) {
                 getOkButton().setEnabled(true);
             } else if (!val && getOkButton().isEnabled()
-                && getChecked().size() == 0) {
+                    && getChecked().size() == 0) {
                 getOkButton().setEnabled(false);
             }
         }
 
         /**
-         * Sets or clears all checkmarks for the (next) language for
-         * all classes.
-         *
+         * Sets or clears all checkmarks for the (next) language for all
+         * classes.
+         * 
          * @param value If false then all checkmarks are cleared for all
-         * languages.
-         * If true then all are cleared, except for one language column,
-         * these are all set.
+         *            languages. If true then all are cleared, except for one
+         *            language column, these are all set.
          */
         public void setAllChecks(boolean value) {
             int rows = getRowCount();
@@ -686,10 +689,10 @@
                 }
             }
             if (value) {
-		if (++languageHistory >= checks) {
-		    languageHistory = 0;
-		}
-	    }
+                if (++languageHistory >= checks) {
+                    languageHistory = 0;
+                }
+            }
             getOkButton().setEnabled(value);
         }
 
@@ -704,4 +707,3 @@
      */
     private static final long serialVersionUID = -8897965616334156746L;
 } /* end class ClassGenerationDialog */
-

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

To unsubscribe from this discussion, e-mail: [[email protected]].
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.