Author: thn
Date: 2008-05-31 08:18:53-0700
New Revision: 14850
Added:
trunk/src/argouml-app/src/org/argouml/uml/reveng/ui/ImportClasspathDialog.java (contents, props changed)
Modified:
trunk/src/argouml-app/src/org/argouml/uml/reveng/Import.java
trunk/src/argouml-app/src/org/argouml/uml/reveng/ImportInterface.java
trunk/src/argouml-app/src/org/argouml/uml/reveng/java/JavaImport.java
Log:
Give all import modules to decide if they want the import be invoked or not, not just hardcoded for the built-in Java import.
The interface ImportInterface had to be extended for this, which all import modules must be aware of! (see Javadoc)
Modified: trunk/src/argouml-app/src/org/argouml/uml/reveng/Import.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/reveng/Import.java?view=diff&rev=14850&p1=trunk/src/argouml-app/src/org/argouml/uml/reveng/Import.java&p2=trunk/src/argouml-app/src/org/argouml/uml/reveng/Import.java&r1=14849&r2=14850
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/reveng/Import.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/reveng/Import.java 2008-05-31 08:18:53-0700
@@ -425,7 +425,7 @@
/**
* Parse all selected files. It calls the actual
- * parser methods depending on the type of the file.<p>
+ * parser methods depending on the type of the file.
*/
public void doFile() {
iss = new ImportStatusScreen(myFrame, "Importing", "Splash");
@@ -630,11 +630,7 @@
Globals.setLastDirectory(dir.getPath());
theImport.disposeDialog();
- if (theImport.getCurrentModule() instanceof JavaImport) {
- // The OK button of this
- // dialog transfers to Import.doFile
- new ImportClasspathDialog(theImport);
- } else {
+ if (theImport.getCurrentModule().isApprovedImport(theImport)) {
theImport.doFile();
}
}
@@ -656,208 +652,3 @@
return myFrame;
}
}
-
-/**
- * dialog to setup the import classpath.
- */
-class ImportClasspathDialog extends JDialog {
-
- /**
- * Logger.
- */
- private static final Logger LOG =
- Logger.getLogger(ImportClasspathDialog.class);
-
- private JDialog importClasspathDialog;
- private JList paths;
- private DefaultListModel pathsModel;
-
- private JButton addFile;
-
- private JButton removeFile;
-
- private JButton ok;
-
- private Import importProcess;
-
- /**
- * Construct a dialog to allow the user to set up the classpath for the
- * import.
- *
- * @param importProcess1
- */
- public ImportClasspathDialog(Import importProcess1) {
-
- super();
- importClasspathDialog = this;
- setTitle(Translator.localize("dialog.import.classpath.title"));
- importProcess = importProcess1;
-
- Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();
- getContentPane().setLayout(new BorderLayout(0, 0));
-
- // Explanatory text
- JTextArea ta =
- new JTextArea(Translator
- .localize("dialog.import.classpath.text"));
- ta.setLineWrap(true);
- ta.setWrapStyleWord(true);
- ta.setFocusable(false);
- getContentPane().add(ta, BorderLayout.NORTH);
-
- // paths list
- pathsModel = new DefaultListModel();
- paths = new JList(pathsModel);
- paths.setVisibleRowCount(5);
- JScrollPane listScroller = new JScrollPane(paths);
- listScroller.setPreferredSize(new Dimension(300, 100));
- getContentPane().add(listScroller, BorderLayout.CENTER);
-
- initList();
-
- // controls
- JPanel controlsPanel = new JPanel();
- controlsPanel.setLayout(new GridLayout(0, 3));
- addFile = new JButton(Translator.localize("button.add"));
- removeFile = new JButton(Translator.localize("button.remove"));
- ok = new JButton(Translator.localize("button.ok"));
- controlsPanel.add(addFile);
- controlsPanel.add(removeFile);
- controlsPanel.add(ok);
- getContentPane().add(controlsPanel, BorderLayout.SOUTH);
-
- addFile.addActionListener(new AddListener());
- removeFile.addActionListener(new RemoveListener());
- ok.addActionListener(new OkListener());
-
- //Display the window.
- Dimension contentPaneSize = getContentPane().getPreferredSize();
- setLocation(scrSize.width / 2 - contentPaneSize.width / 2,
- scrSize.height / 2 - contentPaneSize.height / 2);
- pack();
- ok.requestFocusInWindow();
- setVisible(true);
- this.setModal(true); //MVW Issue 2539.
- }
-
- private void initList() {
-
- URL[] urls =
- ImportClassLoader.getURLs(Configuration.getString(
- Argo.KEY_USER_IMPORT_CLASSPATH, ""));
-
- for (int i = 0; i < urls.length; i++) {
- pathsModel.addElement(urls[i].getFile());
- }
-
- paths.setSelectedIndex(0);
- }
-
-
- class OkListener implements ActionListener {
- /*
- * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
- */
- public void actionPerformed(ActionEvent e) {
- try {
- URL[] urls = new URL[pathsModel.size()];
- for (int i = 0; i < urls.length; i++) {
- try {
- urls[i] = new File((String) pathsModel.get(i)).toURI()
- .toURL();
- } catch (Exception e1) {
- LOG.warn("could not do ok: could not make"
- + "url " + pathsModel.get(i) + ", " + e1,
- e1);
- }
- }
-
- try {
- ImportClassLoader.getInstance(urls);
- ImportClassLoader.getInstance().saveUserPath();
- } catch (Exception e1) {
- LOG.warn("could not do ok", e1);
- }
- setVisible(false);
- setModal(false);
- dispose();
- importProcess.doFile();
- } finally {
- setVisible(false);
- setModal(false);
- dispose();
- }
- }
- }
-
- class RemoveListener implements ActionListener {
- /*
- * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
- */
- public void actionPerformed(ActionEvent e) {
- //This method can be called only if
- //there's a valid selection
- //so go ahead and remove whatever's selected.
- int index = paths.getSelectedIndex();
- pathsModel.remove(index);
-
- int size = pathsModel.getSize();
-
- if (size == 0) { //nothings left, disable firing.
- removeFile.setEnabled(false);
-
- } else { //Select an index.
- if (index == pathsModel.getSize()) {
- //removed item in last position
- index--;
- }
-
- paths.setSelectedIndex(index);
- paths.ensureIndexIsVisible(index);
- }
- }
- }
-
-
- class AddListener implements ActionListener {
- /*
- * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
- */
- public void actionPerformed(ActionEvent e) {
-
- String directory = Globals.getLastDirectory();
- JFileChooser ch = new JFileChooser(directory);
- if (ch == null) {
- ch = new JFileChooser();
- }
-
- final JFileChooser chooser = ch;
-
- chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
-
- chooser.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e1) {
- if (e1.getActionCommand().equals(
- JFileChooser.APPROVE_SELECTION)) {
- File theFile = chooser.getSelectedFile();
- if (theFile != null) {
- pathsModel.addElement(theFile.toString());
- }
- } else if (e1.getActionCommand().equals(
- JFileChooser.CANCEL_SELECTION)) {
- // TODO: What shall we do here?
- }
- // bring the import classpath dialog to the front
- importClasspathDialog.setVisible(true);
- }
- });
-
- chooser.showOpenDialog(importProcess.getFrame());
- }
- }
-
- /**
- * The UID.
- */
- private static final long serialVersionUID = -8684620532717336574L;
-}
Modified: trunk/src/argouml-app/src/org/argouml/uml/reveng/ImportInterface.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/reveng/ImportInterface.java?view=diff&rev=14850&p1=trunk/src/argouml-app/src/org/argouml/uml/reveng/ImportInterface.java&p2=trunk/src/argouml-app/src/org/argouml/uml/reveng/ImportInterface.java&r1=14849&r2=14850
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/reveng/ImportInterface.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/reveng/ImportInterface.java 2008-05-31 08:18:53-0700
@@ -37,7 +37,7 @@
* An interface which identifies an ArgoUML plug-in which imports
* source language modules and creates UML model elements in our model.
*
- * @author Tom Morris
+ * @author Tom Morris, Thomas Neustupny
* @since 0.23.2
*/
@@ -66,6 +66,20 @@
SuffixFilter[] getSuffixFilters();
/**
+ * Allows for a check of the import facility before actually doing the
+ * import. If true is returned, then the import will be invoked by calling
+ * the public doFile() method of the Import class, otherwise no import is
+ * invoked. The import module normally returns true, but it could return
+ * false and call the doFile() method on it's own, which is done e.g. by
+ * the JavaImport after displaying a classpath dialog.
+ *
+ * @param importer the Import instance
+ *
+ * @return whether Import.doFile() should be invoked or not
+ */
+ boolean isApprovedImport(Import importer);
+
+ /**
* Tells if the object is parseable or not. It's is up to the module
* to decide whether it does something simple like verify that the file
* has the correct extension, or something more complicated.
Modified: trunk/src/argouml-app/src/org/argouml/uml/reveng/java/JavaImport.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/reveng/java/JavaImport.java?view=diff&rev=14850&p1=trunk/src/argouml-app/src/org/argouml/uml/reveng/java/JavaImport.java&p2=trunk/src/argouml-app/src/org/argouml/uml/reveng/java/JavaImport.java&r1=14849&r2=14850
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/reveng/java/JavaImport.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/reveng/java/JavaImport.java 2008-05-31 08:18:53-0700
@@ -42,9 +42,11 @@
import org.argouml.kernel.Project;
import org.argouml.taskmgmt.ProgressMonitor;
import org.argouml.uml.reveng.FileImportUtils;
+import org.argouml.uml.reveng.Import;
import org.argouml.uml.reveng.ImportInterface;
import org.argouml.uml.reveng.ImportSettings;
import org.argouml.uml.reveng.ImporterManager;
+import org.argouml.uml.reveng.ui.ImportClasspathDialog;
import org.argouml.util.FileFilters;
import org.argouml.util.SuffixFilter;
@@ -52,7 +54,7 @@
* This is the main class for Java reverse engineering. It's based
* on the Antlr Java example.
*
- * @author Andreas Rueckert <[email protected]>
+ * @author Andreas Rueckert, Thomas Neustupny
*/
public class JavaImport implements ImportInterface {
@@ -232,6 +234,14 @@
}
/*
+ * @see org.argouml.uml.reveng.ImportInterface#isApprovedImport(Import)
+ */
+ public boolean isApprovedImport(Import importer) {
+ new ImportClasspathDialog(importer);
+ return false;
+ }
+
+ /*
* @see org.argouml.uml.reveng.ImportInterface#isParseable(java.io.File)
*/
public boolean isParseable(File file) {
Added: trunk/src/argouml-app/src/org/argouml/uml/reveng/ui/ImportClasspathDialog.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/reveng/ui/ImportClasspathDialog.java?view=auto&rev=14850
==============================================================================
--- (empty file)
+++ trunk/src/argouml-app/src/org/argouml/uml/reveng/ui/ImportClasspathDialog.java 2008-05-31 08:18:53-0700
@@ -0,0 +1,232 @@
+package org.argouml.uml.reveng.ui;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.GridLayout;
+import java.awt.Toolkit;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.net.URL;
+
+import javax.swing.DefaultListModel;
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JFileChooser;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JTextArea;
+
+import org.apache.log4j.Logger;
+import org.argouml.application.api.Argo;
+import org.argouml.configuration.Configuration;
+import org.argouml.i18n.Translator;
+import org.argouml.uml.reveng.Import;
+import org.argouml.uml.reveng.ImportClassLoader;
+import org.tigris.gef.base.Globals;
+
+/**
+ * dialog to setup the import classpath.
+ */
+public class ImportClasspathDialog extends JDialog {
+
+ /**
+ * Logger.
+ */
+ private static final Logger LOG =
+ Logger.getLogger(ImportClasspathDialog.class);
+
+ private JDialog importClasspathDialog;
+ private JList paths;
+ private DefaultListModel pathsModel;
+
+ private JButton addFile;
+
+ private JButton removeFile;
+
+ private JButton ok;
+
+ private Import importer;
+
+ /**
+ * Construct a dialog to allow the user to set up the classpath for the
+ * import.
+ *
+ * @param importProcess1
+ */
+ public ImportClasspathDialog(Import imp) {
+
+ super();
+ importClasspathDialog = this;
+ setTitle(Translator.localize("dialog.import.classpath.title"));
+ importer = imp;
+
+ Dimension scrSize = Toolkit.getDefaultToolkit().getScreenSize();
+ getContentPane().setLayout(new BorderLayout(0, 0));
+
+ // Explanatory text
+ JTextArea ta =
+ new JTextArea(Translator
+ .localize("dialog.import.classpath.text"));
+ ta.setLineWrap(true);
+ ta.setWrapStyleWord(true);
+ ta.setFocusable(false);
+ getContentPane().add(ta, BorderLayout.NORTH);
+
+ // paths list
+ pathsModel = new DefaultListModel();
+ paths = new JList(pathsModel);
+ paths.setVisibleRowCount(5);
+ JScrollPane listScroller = new JScrollPane(paths);
+ listScroller.setPreferredSize(new Dimension(300, 100));
+ getContentPane().add(listScroller, BorderLayout.CENTER);
+
+ initList();
+
+ // controls
+ JPanel controlsPanel = new JPanel();
+ controlsPanel.setLayout(new GridLayout(0, 3));
+ addFile = new JButton(Translator.localize("button.add"));
+ removeFile = new JButton(Translator.localize("button.remove"));
+ ok = new JButton(Translator.localize("button.ok"));
+ controlsPanel.add(addFile);
+ controlsPanel.add(removeFile);
+ controlsPanel.add(ok);
+ getContentPane().add(controlsPanel, BorderLayout.SOUTH);
+
+ addFile.addActionListener(new AddListener());
+ removeFile.addActionListener(new RemoveListener());
+ ok.addActionListener(new OkListener());
+
+ //Display the window.
+ Dimension contentPaneSize = getContentPane().getPreferredSize();
+ setLocation(scrSize.width / 2 - contentPaneSize.width / 2,
+ scrSize.height / 2 - contentPaneSize.height / 2);
+ pack();
+ ok.requestFocusInWindow();
+ setVisible(true);
+ this.setModal(true); //MVW Issue 2539.
+ }
+
+ private void initList() {
+
+ URL[] urls =
+ ImportClassLoader.getURLs(Configuration.getString(
+ Argo.KEY_USER_IMPORT_CLASSPATH, ""));
+
+ for (int i = 0; i < urls.length; i++) {
+ pathsModel.addElement(urls[i].getFile());
+ }
+
+ paths.setSelectedIndex(0);
+ }
+
+
+ class OkListener implements ActionListener {
+ /*
+ * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+ */
+ public void actionPerformed(ActionEvent e) {
+ try {
+ URL[] urls = new URL[pathsModel.size()];
+ for (int i = 0; i < urls.length; i++) {
+ try {
+ urls[i] = new File((String) pathsModel.get(i)).toURI()
+ .toURL();
+ } catch (Exception e1) {
+ LOG.warn("could not do ok: could not make"
+ + "url " + pathsModel.get(i) + ", " + e1,
+ e1);
+ }
+ }
+
+ try {
+ ImportClassLoader.getInstance(urls);
+ ImportClassLoader.getInstance().saveUserPath();
+ } catch (Exception e1) {
+ LOG.warn("could not do ok", e1);
+ }
+ setVisible(false);
+ setModal(false);
+ dispose();
+ importer.doFile();
+ } finally {
+ setVisible(false);
+ setModal(false);
+ dispose();
+ }
+ }
+ }
+
+ class RemoveListener implements ActionListener {
+ /*
+ * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+ */
+ public void actionPerformed(ActionEvent e) {
+ //This method can be called only if
+ //there's a valid selection
+ //so go ahead and remove whatever's selected.
+ int index = paths.getSelectedIndex();
+ pathsModel.remove(index);
+
+ int size = pathsModel.getSize();
+
+ if (size == 0) { //nothings left, disable firing.
+ removeFile.setEnabled(false);
+
+ } else { //Select an index.
+ if (index == pathsModel.getSize()) {
+ //removed item in last position
+ index--;
+ }
+
+ paths.setSelectedIndex(index);
+ paths.ensureIndexIsVisible(index);
+ }
+ }
+ }
+
+
+ class AddListener implements ActionListener {
+ /*
+ * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
+ */
+ public void actionPerformed(ActionEvent e) {
+
+ String directory = Globals.getLastDirectory();
+ JFileChooser ch = new JFileChooser(directory);
+ if (ch == null) {
+ ch = new JFileChooser();
+ }
+
+ final JFileChooser chooser = ch;
+
+ chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
+
+ chooser.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e1) {
+ if (e1.getActionCommand().equals(
+ JFileChooser.APPROVE_SELECTION)) {
+ File theFile = chooser.getSelectedFile();
+ if (theFile != null) {
+ pathsModel.addElement(theFile.toString());
+ }
+ } else if (e1.getActionCommand().equals(
+ JFileChooser.CANCEL_SELECTION)) {
+ // TODO: What shall we do here?
+ }
+ // bring the import classpath dialog to the front
+ importClasspathDialog.setVisible(true);
+ }
+ });
+
+ chooser.showOpenDialog(importer.getFrame());
+ }
+ }
+
+ /**
+ * The UID.
+ */
+ private static final long serialVersionUID = -8684620532717336574L;
+}
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.