]> source.dussan.org Git - aspectj.git/commitdiff
148190#32
authoraclement <aclement>
Mon, 15 Jan 2007 08:43:25 +0000 (08:43 +0000)
committeraclement <aclement>
Mon, 15 Jan 2007 08:43:25 +0000 (08:43 +0000)
22 files changed:
ajbrowser/src/org/aspectj/tools/ajbrowser/BasicEditor.java [deleted file]
ajbrowser/src/org/aspectj/tools/ajbrowser/BrowserManager.java
ajbrowser/src/org/aspectj/tools/ajbrowser/BrowserOptionsPanel.java [deleted file]
ajbrowser/src/org/aspectj/tools/ajbrowser/BrowserProperties.java [deleted file]
ajbrowser/src/org/aspectj/tools/ajbrowser/BrowserUIAdapter.java [deleted file]
ajbrowser/src/org/aspectj/tools/ajbrowser/CompilerMessagesPanel.java [deleted file]
ajbrowser/src/org/aspectj/tools/ajbrowser/EditorManager.java [deleted file]
ajbrowser/src/org/aspectj/tools/ajbrowser/TopFrame.java [deleted file]
ajbrowser/src/org/aspectj/tools/ajbrowser/core/BrowserBuildProgressMonitor.java [new file with mode: 0644]
ajbrowser/src/org/aspectj/tools/ajbrowser/core/BrowserCompilerConfiguration.java [new file with mode: 0644]
ajbrowser/src/org/aspectj/tools/ajbrowser/core/BrowserErrorHandler.java [new file with mode: 0644]
ajbrowser/src/org/aspectj/tools/ajbrowser/core/BrowserOutputLocationManager.java [new file with mode: 0644]
ajbrowser/src/org/aspectj/tools/ajbrowser/core/PreferenceStoreConstants.java [new file with mode: 0644]
ajbrowser/src/org/aspectj/tools/ajbrowser/ui/BasicEditor.java [new file with mode: 0644]
ajbrowser/src/org/aspectj/tools/ajbrowser/ui/BrowserMessageHandler.java [new file with mode: 0644]
ajbrowser/src/org/aspectj/tools/ajbrowser/ui/BrowserRuntimeProperties.java [new file with mode: 0644]
ajbrowser/src/org/aspectj/tools/ajbrowser/ui/BrowserUIAdapter.java [new file with mode: 0644]
ajbrowser/src/org/aspectj/tools/ajbrowser/ui/EditorManager.java [new file with mode: 0644]
ajbrowser/src/org/aspectj/tools/ajbrowser/ui/swing/BrowserOptionsPanel.java [new file with mode: 0644]
ajbrowser/src/org/aspectj/tools/ajbrowser/ui/swing/MessageHandlerPanel.java [new file with mode: 0644]
ajbrowser/src/org/aspectj/tools/ajbrowser/ui/swing/TopFrame.java [new file with mode: 0644]
ajbrowser/testsrc/org/aspectj/tools/ajbrowser/InteractiveBrowserTest.java [deleted file]

diff --git a/ajbrowser/src/org/aspectj/tools/ajbrowser/BasicEditor.java b/ajbrowser/src/org/aspectj/tools/ajbrowser/BasicEditor.java
deleted file mode 100644 (file)
index e54d5c1..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-/* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
- *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/epl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
- * ******************************************************************/
-
-
-package org.aspectj.tools.ajbrowser;
-
-import java.awt.BorderLayout;
-import java.awt.Font;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-//import java.net.URL;
-
-import javax.swing.JEditorPane;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.DefaultHighlighter;
-
-import org.aspectj.ajde.Ajde;
-import org.aspectj.ajde.EditorAdapter;
-import org.aspectj.bridge.ISourceLocation;
-
-/**
- * Bare-bones editor implementation used when the framework is being used
- * standalone.
- *
- * @author Mik Kersten
- */
-public class BasicEditor implements EditorAdapter {
-
-       private String NO_FILE = "<no file selected>";
-    private String filePath = NO_FILE;
-    private JPanel editor_panel = new JPanel();
-
-    // @todo    get rid of these
-    private int currHighlightStart = 0;
-    private int currHighlightEnd = 0;
-
-    private BorderLayout borderLayout1 = new BorderLayout();
-    private JScrollPane jScrollPane1 = new JScrollPane();
-    private JEditorPane editorPane = new JEditorPane();
-
-    public BasicEditor() {
-        try {
-            editorPane.setEditable(true);
-            editorPane.setContentType("text/plain");
-            editorPane.setFont(new Font("Monospaced", 0, 11));
-            editor_panel.add(editorPane);
-            jbInit();
-        }
-        catch(Exception e) {
-            Ajde.getDefault().getErrorHandler().handleError("Could not initialize GUI.", e);
-        }
-    }
-
-    public String getCurrFile() {
-               return filePath;
-    }
-
-    public void showSourceLine(ISourceLocation sourceLocation, boolean highlight) {
-       try {
-               showSourceLine(sourceLocation.getSourceFile().getAbsolutePath(), sourceLocation.getLine(), highlight);
-       } catch (NullPointerException npe) {
-               Ajde.getDefault().getIdeUIAdapter().displayStatusInformation(" no corresponding source line to seek to");
-       }
-    }
-       
-    public void showSourceLine(int lineNumber, boolean highlight) {
-        showSourceLine(filePath, lineNumber, highlight);
-    }
-
-    public void pasteToCaretPos(String text) {
-        if (currHighlightEnd < 1) return;
-        String contents = editorPane.getText();
-        String pasted = contents.substring(0, currHighlightEnd) +
-            text + contents.substring(currHighlightEnd, contents.length());
-        editorPane.setText(pasted);
-    }
-
-    public void showSourceLine(String filePath, int lineNumber, boolean highlight) {
-       //AjdeUIManager.getDefault().getIdeUIAdapter().resetEditor();
-        
-        this.filePath = filePath;
-//        if (oldPath != filePath && !Ajde.INSTANCE.BROWSER_MANAGER.isGlobalMode()) {
-//            Ajde.INSTANCE.BROWSER_MANAGER.updateView();
-//        }
-
-//        Ajde.IDE_MANAGER.setEditorStatusText(filePath);
-
-        currHighlightStart = 0;
-        currHighlightEnd = 0;
-        editorPane.setText(readFile(filePath, lineNumber));
-        try {
-            editorPane.getHighlighter().addHighlight(currHighlightStart, currHighlightEnd, DefaultHighlighter.DefaultPainter);
-            editorPane.setCaretPosition(currHighlightStart);
-        } catch (BadLocationException ble) {
-            Ajde.getDefault().getErrorHandler().handleError("Could not highlight location.", ble);
-        }
-        BrowserManager.getDefault().getEditorManager().notifyCurrentFileChanged(filePath);
-    }
-
-    /**
-     * Not implemented.
-     */
-    public void showSourcelineAnnotation(String filePath, int lineNumber, java.util.List items) { }
-
-       public void addEditorViewForSourceLine(String filePath, int lineNumber) {
-               
-       }
-
-    public void saveContents() throws IOException {
-        if (!filePath.equals(NO_FILE) && !filePath.equals("") && !editorPane.getText().equals("")) {
-            BufferedWriter writer = new BufferedWriter(new FileWriter(filePath));
-            writer.write(editorPane.getText());
-            writer.close();
-        }
-    }
-
-    public JPanel getPanel() {
-        return editor_panel;
-    }
-
-    public void showSourceForFile(String filePath) { }
-
-    public void showSourceForLine(int lineNumber, boolean highlight) { }
-
-    public void showSourceForSourceLine(String filePath, int lineNumber, boolean highlight) { }
-
-    public String getCurrSourceFilePath() { return null; }
-
-    public void setBreakpointRequest(String filePath, int lineNumber, boolean isDeferred) { }
-
-    public void clearBreakpointRequest(String filePath, int lineNumber) { }
-
-    private String readFile(String filePath, int lineNumber) {
-        try {
-//            URL url = ClassLoader.getSystemResource(filePath);
-            File file = new File(filePath);
-            if (!file.exists()) {
-                return "ERROR: file \"" + filePath + "\" does not exist.";
-            }
-            BufferedReader reader = new BufferedReader(new FileReader(file));
-            StringBuffer contents = new StringBuffer();
-            String line = reader.readLine();
-            int numLines = 0;
-            while (line != null) {
-                numLines++;
-                if (numLines < lineNumber) {
-                    currHighlightStart += line.length()+1;
-                }
-                if (numLines == lineNumber) {
-                    currHighlightEnd = currHighlightStart + line.length();
-                }
-                contents.append(line);
-                contents.append('\n');
-                line = reader.readLine();
-            }
-            reader.close();
-            return contents.toString();
-        } catch (IOException ioe) {
-            return "ERROR: could not read file \"" + filePath + "\", make sure that you have mounted /project/aop on X:\\";
-        }
-    }
-
-    private void jbInit() throws Exception {
-        editor_panel.setFont(new java.awt.Font("DialogInput", 1, 12));
-        editor_panel.setLayout(borderLayout1);
-        editor_panel.add(jScrollPane1, BorderLayout.CENTER);
-        jScrollPane1.getViewport().add(editorPane, null);
-    }
-}
index 069a56536e45adb5a37ae9f0c81f310c906adabd..a0ca37479d550bfebdd421d7d56081ab7d84ccaa 100644 (file)
@@ -8,45 +8,66 @@
  * http://www.eclipse.org/legal/epl-v10.html 
  *  
  * Contributors: 
- *     Xerox/PARC     initial implementation 
+ *     Xerox/PARC     initial implementation
+ *     Helen Hawkins  Converted to new interface (bug 148190)
  * ******************************************************************/
-
-
 package org.aspectj.tools.ajbrowser;
 
 import java.io.IOException;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
 
 import javax.swing.JFrame;
 
-import org.aspectj.ajde.*;
-import org.aspectj.ajde.ui.*;
+import org.aspectj.ajde.Ajde;
+import org.aspectj.ajde.IconRegistry;
+import org.aspectj.ajde.internal.BuildConfigManager;
+import org.aspectj.ajde.ui.FileStructureView;
+import org.aspectj.ajde.ui.InvalidResourceException;
+import org.aspectj.ajde.ui.UserPreferencesAdapter;
 import org.aspectj.ajde.ui.internal.UserPreferencesStore;
-import org.aspectj.ajde.ui.swing.*;
-import org.aspectj.asm.*;
+import org.aspectj.ajde.ui.javaoptions.JavaBuildOptions;
+import org.aspectj.ajde.ui.javaoptions.JavaCompilerWarningsOptionsPanel;
+import org.aspectj.ajde.ui.javaoptions.JavaComplianceOptionsPanel;
+import org.aspectj.ajde.ui.javaoptions.JavaDebugOptionsPanel;
+import org.aspectj.ajde.ui.javaoptions.JavaOtherOptionsPanel;
+import org.aspectj.ajde.ui.swing.MultiStructureViewPanel;
+import org.aspectj.asm.AsmManager;
+import org.aspectj.asm.IHierarchy;
+import org.aspectj.asm.IHierarchyListener;
+import org.aspectj.tools.ajbrowser.core.BrowserBuildProgressMonitor;
+import org.aspectj.tools.ajbrowser.core.BrowserCompilerConfiguration;
+import org.aspectj.tools.ajbrowser.core.BrowserErrorHandler;
+import org.aspectj.tools.ajbrowser.ui.BasicEditor;
+import org.aspectj.tools.ajbrowser.ui.BrowserMessageHandler;
+import org.aspectj.tools.ajbrowser.ui.BrowserRuntimeProperties;
+import org.aspectj.tools.ajbrowser.ui.BrowserUIAdapter;
+import org.aspectj.tools.ajbrowser.ui.EditorManager;
+import org.aspectj.tools.ajbrowser.ui.swing.BrowserOptionsPanel;
+import org.aspectj.tools.ajbrowser.ui.swing.MessageHandlerPanel;
+import org.aspectj.tools.ajbrowser.ui.swing.TopFrame;
 import org.aspectj.util.FileUtil;
-//import org.aspectj.asm.internal.*;
 
 /**
  * IDE manager for standalone AJDE application.
- *
- * @author  Mik Kersten
+ * 
+ * @author Mik Kersten
  */
 public class BrowserManager {
-       
+
+       public static final String TITLE = "AspectJ Browser";
+
        private static final BrowserManager INSTANCE = new BrowserManager();
-       private BrowserProperties browserProjectProperties;
        private EditorManager editorManager;
+       private UserPreferencesAdapter preferencesAdapter;
+    private static TopFrame topFrame = null;
+
+    private List configFiles = new ArrayList();
+       private JavaBuildOptions javaBuildOptions;
        
        public static BrowserManager getDefault() {
                return INSTANCE;
        }
-       
-       private List configFiles = new ArrayList();
-       
-       public static final String TITLE = "AspectJ Browser";
-    
-    private static TopFrame topFrame = null;
     
        public final IHierarchyListener VIEW_LISTENER = new IHierarchyListener() {
                public void elementsUpdated(IHierarchy model) {         
@@ -55,73 +76,75 @@ public class BrowserManager {
                                fsv.setSourceFile(BrowserManager.getDefault().getEditorManager().getCurrFile());
                        }
                }
-       }; 
-    
+       };
+
        public void init(String[] configFilesArgs, boolean visible) {
                try {
-                       UserPreferencesAdapter preferencesAdapter = new UserPreferencesStore(true);
-                       browserProjectProperties = new BrowserProperties(preferencesAdapter);
-                       TaskListManager taskListManager = new CompilerMessagesPanel();
+                       javaBuildOptions = new JavaBuildOptions();
+                       preferencesAdapter = new UserPreferencesStore(true);
+                       topFrame = new TopFrame();
+
                        BasicEditor ajdeEditor = new BasicEditor();
-                       BrowserUIAdapter browserUIAdapter = new BrowserUIAdapter();
-                       topFrame = new TopFrame(); 
-                       configFiles = getConfigFilesList(configFilesArgs);      
-
-                       AjdeUIManager.getDefault().init(
-                               ajdeEditor,
-                               taskListManager,
-                               browserProjectProperties,
-                               preferencesAdapter,
-                               browserUIAdapter,
-                               new IconRegistry(),
-                               topFrame,
-                               true);  
-                       
                        editorManager = new EditorManager(ajdeEditor);
                        
-                       Ajde.getDefault().getBuildManager().addListener(BUILD_MESSAGES_LISTENER);
-                       
-                       MultiStructureViewPanel multiViewPanel = new MultiStructureViewPanel(
-                               AjdeUIManager.getDefault().getViewManager().getBrowserPanel(),
-                               AjdeUIManager.getDefault().getFileStructurePanel()
-                       );
+                       BrowserMessageHandler messageHandler = new BrowserMessageHandler();
                        
-                       topFrame.init(
-                               multiViewPanel,
-                               (CompilerMessagesPanel)taskListManager,
-                               editorManager.getEditorPanel()
-                       );
-                               
-                       if (visible) topFrame.setVisible(true);
-                         
-                       if (configFiles.size() == 0) {
-                               Ajde.getDefault().getErrorHandler().handleWarning(
-                                       "No build configuration selected. "
-                                               + "Select a \".lst\" build configuration file in order to compile and navigate structure.");
-                       } else {
-                               //UiManager.getDefault().getViewManager().updateConfigsList();
-                       }
-               
-                       AjdeUIManager.getDefault().getOptionsFrame().addOptionsPanel(new BrowserOptionsPanel());
-               
-                       AsmManager.getDefault().addListener(VIEW_LISTENER);     
-               
-                       //String lastOpenFilePath = browserProjectProperties.getLastOpenSourceFilePath();
-                       //editorManager.showSourceLine(lastOpenFilePath, 1, false);     
-                       //Ajde.getDefault().getStructureViewManager().fireNavigationAction(lastOpenFilePath, 6);
-                       //Ajde.getDefault().enableLogging(System.out); 
-               
-                       if (configFilesArgs.length > 0 && configFilesArgs[0] != null) {
-                               Ajde.getDefault().getConfigurationManager().setActiveConfigFile(configFilesArgs[0]);    
-                       }
+                       Ajde.getDefault().init(
+                                       new BrowserCompilerConfiguration(preferencesAdapter),
+                                       messageHandler,
+                                       new BrowserBuildProgressMonitor(messageHandler),
+                                       ajdeEditor, 
+                                       new BrowserUIAdapter(), 
+                                       new IconRegistry(), 
+                                       topFrame,
+                                       new BrowserRuntimeProperties(preferencesAdapter),
+                                       true);
+
+                       setUpTopFrame(visible);
+                       addOptionsPanels();
+
+                       setUpConfigFiles(configFilesArgs);
+
+                       AsmManager.getDefault().addListener(VIEW_LISTENER);
+
                } catch (Throwable t) {
                        t.printStackTrace();
-                       Ajde.getDefault().getErrorHandler().handleError(
-                               "AJDE failed to initialize.",
-                               t);
+                       BrowserErrorHandler.handleError("AJDE failed to initialize.", t);
                }
        }
 
+       /**
+        * Find and create the set of build configuration files
+        * @param configFilesArgs
+        */
+       private void setUpConfigFiles(String[] configFilesArgs) {
+               configFiles = getConfigFilesList(configFilesArgs);
+               if (configFiles.size() == 0) {
+                       BrowserErrorHandler
+                                       .handleWarning("No build configuration selected. "
+                                                       + "Select a \".lst\" build configuration file in order to compile and navigate structure.");
+               } else {
+                       Ajde.getDefault().getBuildConfigManager().setActiveConfigFile(
+                                       (String)configFiles.get(0));
+               }       
+       }
+
+       /**
+        * Create the top frame of the browser
+        */
+       private void setUpTopFrame(boolean visible) {
+               MultiStructureViewPanel multiViewPanel = new MultiStructureViewPanel(
+                               Ajde.getDefault().getViewManager()
+                                               .getBrowserPanel(), Ajde.getDefault()
+                                               .getFileStructurePanel());
+
+               topFrame.init(multiViewPanel, new MessageHandlerPanel(), 
+                               editorManager.getEditorPanel());
+
+               if (visible)
+                       topFrame.setVisible(true);
+       }
+
     public void resetEditorFrame() {
         topFrame.resetSourceEditorPanel();
     }
@@ -144,36 +167,29 @@ public class BrowserManager {
         editorManager.saveContents();
     }
 
-    public void showMessages() {
-        topFrame.showMessagesPanel();
-    }
-
-    public void hideMessages() {
-        topFrame.hideMessagesPanel();
-    }
-
-    public JFrame getRootFrame() {
-        return topFrame;
-    }
+       public JFrame getRootFrame() {
+               return topFrame;
+       }
 
        public void openFile(String filePath) {
                try {
                        if (filePath.endsWith(".lst")) {
-                               AjdeUIManager.getDefault().getBuildConfigEditor().openFile(filePath);
-                               topFrame.setEditorPanel(AjdeUIManager.getDefault().getBuildConfigEditor());
+                               Ajde.getDefault().getBuildConfigEditor().openFile(filePath);
+                               topFrame.setEditorPanel(Ajde.getDefault().getBuildConfigEditor());
                        } else if (FileUtil.hasSourceSuffix(filePath)){
                                editorManager.showSourceLine(filePath, 0, false);               
                        } else {
-                               Ajde.getDefault().getErrorHandler().handleError("File: " + filePath 
-                                       + " could not be opened because the extension was not recoginzed.");    
+                               BrowserErrorHandler
+                                               .handleError("File: "
+                                                               + filePath
+                                                               + " could not be opened because the extension was not recoginzed.");
                        }
                } catch (IOException ioe) {
-                       Ajde.getDefault().getErrorHandler().handleError("Could not open file: " + filePath, ioe);
+                       BrowserErrorHandler.handleError("Could not open file: "
+                                       + filePath, ioe);
                } catch (InvalidResourceException ire) {
-                       Ajde.getDefault().getErrorHandler().handleError("Invalid file: " + filePath, ire);
-               } 
-               
-               browserProjectProperties.setLastOpenSourceFilePath(filePath);
+                       BrowserErrorHandler.handleError("Invalid file: " + filePath, ire);
+               }
        }
 
        private List getConfigFilesList(String[] configFiles) {
@@ -185,60 +201,45 @@ public class BrowserManager {
         }
         return configs;
        }
-
-//    private static class Runner {
-//  
-//        public static void invoke(String className) {
-//            try {
-//                if (className == null || className.length() == 0) {
-//                    Ajde.getDefault().getErrorHandler().handleWarning("No main class specified, please select a class to run.");
-//
-//                } else {
-//                    Class[] argTypes = { String[].class };
-//                    java.lang.reflect.Method method = Class.forName(className).getDeclaredMethod("main", argTypes);
-//                    Object[] args = { new String[0] };
-//                    method.invoke(null, args);
-//                }
-//            } catch(ClassNotFoundException cnfe) {
-//                Ajde.getDefault().getErrorHandler().handleWarning("Main class not found: " + className +
-//                "\nMake sure that you have \".\" on your classpath.");
-//            } catch(NoSuchMethodException nsme) {
-//                Ajde.getDefault().getErrorHandler().handleWarning("Class: " + className + " does not declare public static void main(String[])");
-//            } catch(java.lang.reflect.InvocationTargetException ite) {
-//                Ajde.getDefault().getErrorHandler().handleWarning("Could not execute: " + className);
-//            } catch(IllegalAccessException iae) {
-//                Ajde.getDefault().getErrorHandler().handleWarning("Class: " + className + " does not declare public main method");
-//            }
-//        }
-//    }
-    
-       private final BuildListener BUILD_MESSAGES_LISTENER = new BuildListener() {
-               
-               public void compileStarted(String buildConfigFile) { }
-               
-        public void compileFinished(String buildConfigFile, int buildTime, boolean succeeded, boolean warnings) {
-            if (succeeded && !warnings) {
-                hideMessages();
-            } else {
-                showMessages();
-            }
-        }
-        
-        public void compileAborted(String buildConfigFile, String message) { }
-    };
-    
-       public List getConfigFiles() {
-               return configFiles;
+       
+       /**
+        * Add the different options panels to the main options frame
+        * (adds panels for java compliance, compiler warnings, debug
+        * warnings, other java options and options specific to 
+        * ajbrowser)
+        */
+       private void addOptionsPanels() {
+               Ajde.getDefault().getOptionsFrame().addOptionsPanel(
+                               new JavaComplianceOptionsPanel(javaBuildOptions));
+               Ajde.getDefault().getOptionsFrame().addOptionsPanel(
+                               new JavaCompilerWarningsOptionsPanel(javaBuildOptions));
+               Ajde.getDefault().getOptionsFrame().addOptionsPanel(
+                               new JavaOtherOptionsPanel(javaBuildOptions));
+               Ajde.getDefault().getOptionsFrame().addOptionsPanel(
+                               new JavaDebugOptionsPanel(javaBuildOptions));
+               Ajde.getDefault().getOptionsFrame().addOptionsPanel(
+                               new BrowserOptionsPanel());             
        }
 
-       public BrowserProperties getBrowserProjectProperties() {
-               return browserProjectProperties;
-       }
        /**
-        * @return
+        * @return the EditorManager
         */
        public EditorManager getEditorManager() {
                return editorManager;
        }
+       
+       /**
+        * @return the UserPreferencesAdapter 
+        */
+       public UserPreferencesAdapter getPreferencesAdapter() {
+               return preferencesAdapter;
+       }
+
+       /**
+        * @return the JavaBuildOptions instance being used
+        */
+       public JavaBuildOptions getJavaBuildOptions() {
+               return javaBuildOptions;
+       }
 
 }
diff --git a/ajbrowser/src/org/aspectj/tools/ajbrowser/BrowserOptionsPanel.java b/ajbrowser/src/org/aspectj/tools/ajbrowser/BrowserOptionsPanel.java
deleted file mode 100644 (file)
index 07215cb..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-/* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
- *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/epl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
- * ******************************************************************/
-
-
-package org.aspectj.tools.ajbrowser;
-
-import java.io.*;
-import javax.swing.*;
-import java.awt.*;
-import javax.swing.border.*;
-import org.aspectj.ajde.ui.swing.*;
-
-/**
- * @author Mik Kersten
- */
-public class BrowserOptionsPanel extends OptionsPanel {
-       
-       private static final long serialVersionUID = 4491319302490183151L;
-       private JPanel runOptions_panel = new JPanel();
-       private JPanel build_panel = new JPanel();
-       private FlowLayout flowLayout1 = new FlowLayout();
-       private JTextField classToRun_field = new JTextField();
-       private JLabel jLabel4 = new JLabel();
-       private BorderLayout borderLayout4 = new BorderLayout();
-       private JPanel buildPaths_panel = new JPanel();
-       private Box compileOptions_box2 = Box.createVerticalBox();
-       private JTextField classpath_field = new JTextField();
-       private JTextField outputPath_field = new JTextField();
-       private JLabel jLabel16 = new JLabel();
-       private JLabel jLabel15 = new JLabel();
-       private Box compileOptions_box3 = Box.createVerticalBox();
-       private BorderLayout borderLayout1 = new BorderLayout();
-       private Border border1;
-       private TitledBorder titledBorder1;
-       private Border border2;
-       private Border border3;
-       private TitledBorder titledBorder2;
-       private Border border4;
-
-       public BrowserOptionsPanel() {
-               try {
-                       jbInit();
-                       this.setName("AJBrowser Options");
-               } catch (Exception e) {
-                       e.printStackTrace();
-               }
-       }
-
-       public void loadOptions() throws IOException {
-               outputPath_field.setText(
-                       BrowserManager.getDefault().getBrowserProjectProperties().getOutputPath()
-               );
-               classpath_field.setText(
-                       BrowserManager.getDefault().getBrowserProjectProperties().getClasspath()
-               );
-               classToRun_field.setText(
-                       BrowserManager.getDefault().getBrowserProjectProperties().getClassToExecute()
-               );
-       }
-       
-       public void saveOptions() throws IOException {          
-               BrowserManager.getDefault().getBrowserProjectProperties().setOutputPath(
-                       outputPath_field.getText()
-               );              
-               BrowserManager.getDefault().getBrowserProjectProperties().setClasspath(
-                       classpath_field.getText()
-               );
-               BrowserManager.getDefault().getBrowserProjectProperties().setClassToExecute(
-                       classToRun_field.getText()
-               );      
-       }       
-
-       private void jbInit() throws Exception {
-               border1 =
-                       BorderFactory.createEtchedBorder(Color.white, new Color(156, 156, 158));
-               titledBorder1 = new TitledBorder(border1, "ajc Build Paths");
-               border2 =
-                       BorderFactory.createCompoundBorder(
-                               titledBorder1,
-                               BorderFactory.createEmptyBorder(5, 5, 5, 5));
-               border3 =
-                       BorderFactory.createEtchedBorder(Color.white, new Color(156, 156, 158));
-               titledBorder2 = new TitledBorder(border3, "Run Options");
-               border4 =
-                       BorderFactory.createCompoundBorder(
-                               titledBorder2,
-                               BorderFactory.createEmptyBorder(5, 5, 5, 5));
-               this.setLayout(borderLayout1);
-               build_panel.setLayout(borderLayout4);
-               classToRun_field.setFont(new java.awt.Font("SansSerif", 0, 11));
-               classToRun_field.setMinimumSize(new Dimension(200, 21));
-               classToRun_field.setPreferredSize(new Dimension(250, 21));
-               jLabel4.setFont(new java.awt.Font("Dialog", 0, 11));
-               jLabel4.setText("Fully qualified name for main class to run: ");
-               buildPaths_panel.setLayout(flowLayout1);
-               runOptions_panel.setBorder(border4);
-               buildPaths_panel.setBorder(border2);
-               classpath_field.setFont(new java.awt.Font("SansSerif", 0, 11));
-               classpath_field.setMinimumSize(new Dimension(100, 21));
-               classpath_field.setPreferredSize(new Dimension(150, 21));
-               outputPath_field.setPreferredSize(new Dimension(225, 21));
-               outputPath_field.setMinimumSize(new Dimension(100, 21));
-               outputPath_field.setFont(new java.awt.Font("SansSerif", 0, 11));
-               jLabel16.setText("Classpath (defaults to current directory): ");
-               jLabel16.setPreferredSize(new Dimension(200, 25));
-               jLabel16.setMaximumSize(new Dimension(400, 25));
-               jLabel16.setFont(new java.awt.Font("Dialog", 0, 11));
-               jLabel15.setMaximumSize(new Dimension(400, 25));
-               jLabel15.setFont(new java.awt.Font("Dialog", 0, 11));
-               jLabel15.setPreferredSize(new Dimension(230, 25));
-               jLabel15.setText("Output path (defaults to current directory): ");
-               titledBorder1.setTitleFont(new java.awt.Font("Dialog", 0, 11));
-               titledBorder2.setTitleFont(new java.awt.Font("Dialog", 0, 11));
-               runOptions_panel.add(jLabel4, null);
-               runOptions_panel.add(classToRun_field, null);
-               build_panel.add(buildPaths_panel, BorderLayout.CENTER);
-               build_panel.add(runOptions_panel, BorderLayout.SOUTH);
-               compileOptions_box2.add(outputPath_field, null);
-               compileOptions_box2.add(classpath_field, null);
-               compileOptions_box3.add(jLabel15, null);
-               compileOptions_box3.add(jLabel16, null);
-               buildPaths_panel.add(compileOptions_box3, null);
-               buildPaths_panel.add(compileOptions_box2, null);
-               this.add(build_panel, BorderLayout.NORTH);
-       }
-
-}
diff --git a/ajbrowser/src/org/aspectj/tools/ajbrowser/BrowserProperties.java b/ajbrowser/src/org/aspectj/tools/ajbrowser/BrowserProperties.java
deleted file mode 100644 (file)
index 4fd6a66..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-/* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
- *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/epl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
- *        AMC 01.20.2003 extended for new AspectJ 1.1 project options
- * ******************************************************************/
-
-
-
-package org.aspectj.tools.ajbrowser;
-
-import java.util.*;
-import java.io.*;
-import org.aspectj.ajde.*;
-import org.aspectj.ajde.ui.*;
-
-public class BrowserProperties implements ProjectPropertiesAdapter {
-    
-    UserPreferencesAdapter preferencesAdapter = null;
-    
-    public BrowserProperties(UserPreferencesAdapter preferencesAdapter) {
-       this.preferencesAdapter = preferencesAdapter;
-    }
-
-    public String getLastOpenSourceFilePath() {
-        return preferencesAdapter.getProjectPreference("editor.lastOpenFile");
-    }
-
-    public void setLastOpenSourceFilePath(String value) {
-        preferencesAdapter.setProjectPreference("editor.lastOpenFile",value);
-    }
-
-    public String getLastOpenSourceLineNumber() {
-        return preferencesAdapter.getProjectPreference("editor.lastOpenLineNumber");
-    }
-
-    public void setLastOpenSourceLineNumber(String value) {
-        preferencesAdapter.setProjectPreference("editor.lastOpenLineNumber",value);
-    }
-
-       public List getBuildConfigFiles() {
-               return BrowserManager.getDefault().getConfigFiles();
-       }
-       
-       public String getDefaultBuildConfigFile() {
-               return null;    
-       }
-
-       public String getLastActiveBuildConfigFile() {
-               return null;    
-       }
-
-    public String getProjectName() {
-        return null;
-    }
-
-    public String getClassToExecute() {
-        return preferencesAdapter.getProjectPreference("runtime.mainClass");
-    }
-
-    public void setClassToExecute(String mainClass) {
-        preferencesAdapter.setProjectPreference("runtime.mainClass", mainClass);
-    }
-
-    public String getRootProjectDir() {
-        return new File(Ajde.getDefault().getConfigurationManager().getActiveConfigFile()).getParent();
-    }
-
-       public String getExecutionArgs() {
-               return null;    
-       }
-
-       public List getProjectSourceFiles() {
-               return null;    
-       }
-    
-    public String getVmArgs() {
-       return null;    
-    }
-
-    public String getProjectSourcePath() {
-        return null;
-    }
-
-    public String getBootClasspath() {
-        return System.getProperty("sun.boot.class.path");
-    }
-
-    public void setAjcOptions(String flags) {
-        preferencesAdapter.setProjectPreference("build.flags", flags);
-    }
-
-    public String getAjcOptions() {
-        return preferencesAdapter.getProjectPreference("build.flags");
-    }
-
-    public String getOutputPath() {
-        String outputPath = preferencesAdapter.getProjectPreference("build.outputpath");
-        if (outputPath == null) {
-            return ".";
-        } else {
-            return outputPath;
-        }
-    }
-
-    public void setOutputPath(String path) {
-        preferencesAdapter.setProjectPreference("build.outputpath", path);
-    }
-    
-    public OutputLocationManager getOutputLocationManager() {
-       return null;
-    }
-
-    public String getUserClasspath() {
-        return preferencesAdapter.getProjectPreference("build.classpath");
-    }
-
-    public String getClasspath() {
-        String systemPath = System.getProperty("java.class.path", ".");
-        String userPath = preferencesAdapter.getProjectPreference("build.classpath");
-        if (userPath != null && userPath.trim().length() != 0) {
-               return userPath;
-        } else {
-               return systemPath;
-        }
-    }
-
-    public void setClasspath(String path) {
-        preferencesAdapter.setProjectPreference("build.classpath", path);
-    }
-
-    // 1.1 options
-    public Set getInJars( ) {
-       return null;
-    }
-    
-    public Set getInpath() {
-       return null;
-    }
-    
-    public String getOutJar( ) { // XXX unimplemented
-       return null;
-    }
-    
-       public Set getSourceRoots( ) { // XXX unimplemented
-               return null;
-       }    
-       
-       public Set getAspectPath( ) { // XXX unimplemented
-               return null;
-       }
-
-       public Map getSourcePathResources() {
-               return null;
-       }
-}
-
-//public String getAjcWorkingDir() {
-//String workingDir = preferencesAdapter.getProjectPreference("build.workingdir");
-//if (workingDir == null || workingDir.equals(getOutputPath())) {
-//  return getOutputPath() + "./ajworkingdir";
-//} else {
-//  return workingDir;
-//}
-//}
-
-//public void setAjcWorkingDir(String path) {
-//preferencesAdapter.setProjectPreference("build.workingdir", path);
-//}
-
diff --git a/ajbrowser/src/org/aspectj/tools/ajbrowser/BrowserUIAdapter.java b/ajbrowser/src/org/aspectj/tools/ajbrowser/BrowserUIAdapter.java
deleted file mode 100644 (file)
index c273bc6..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-/* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
- *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/epl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
- * ******************************************************************/
-
-package org.aspectj.tools.ajbrowser;
-
-import org.aspectj.ajde.ui.*;
-
-public class BrowserUIAdapter implements IdeUIAdapter {
-       
-       public void displayStatusInformation(String message) {
-               BrowserManager.getDefault().setStatusInformation(message);
-       }
-}
diff --git a/ajbrowser/src/org/aspectj/tools/ajbrowser/CompilerMessagesPanel.java b/ajbrowser/src/org/aspectj/tools/ajbrowser/CompilerMessagesPanel.java
deleted file mode 100644 (file)
index a45b3fa..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
- *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/epl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
- * ******************************************************************/
-
-
-package org.aspectj.tools.ajbrowser;
-
-import java.awt.BorderLayout;
-import java.awt.event.*;
-
-import javax.swing.*;
-
-import org.aspectj.ajde.*;
-import org.aspectj.ajde.ui.swing.*;
-import org.aspectj.bridge.*;
-import org.aspectj.bridge.IMessage.Kind;
-
-/**
- * Used to display a list of compiler messages that can be clicked in order
- * to seek to their corresponding sourceline.
- *
- * @author Mik Kersten
- */
-public class CompilerMessagesPanel extends JPanel implements TaskListManager {
-    
-       private static final long serialVersionUID = -2251912345065588977L;
-       private JScrollPane jScrollPane1 = new JScrollPane();
-    //private JScrollPane jScrollPane2 = new JScrollPane();
-    private JList list = new JList();
-    private DefaultListModel listModel = new DefaultListModel();
-    private BorderLayout borderLayout1 = new BorderLayout();
-       private boolean hasWarning = false;
-
-    public CompilerMessagesPanel() {
-        try {
-            jbInit(); 
-        }
-        catch(Exception e) {
-            e.printStackTrace();
-        }
-        list.setModel(listModel);
-
-        MouseListener mouseListener = new MouseAdapter() {
-             public void mouseClicked(MouseEvent e) {
-                 if (e.getClickCount() >= 1) {
-                     int index = list.locationToIndex(e.getPoint());
-                     if (listModel.getSize() >= index && index != -1) {
-                       IMessage message = (IMessage)listModel.getElementAt(index);
-                       Ajde.getDefault().getEditorAdapter().showSourceLine(message.getSourceLocation(), true);
-                     }
-                  }
-             }
-        };
-        list.addMouseListener(mouseListener);
-        list.setCellRenderer(new CompilerMessagesCellRenderer());
-    } 
-
-       public void addSourcelineTask(IMessage message) {
-               listModel.addElement(message);
-               checkIfWarning(message.getKind());
-       }
-       public void addSourcelineTask(String message, ISourceLocation sourceLocation, IMessage.Kind kind) {   
-        listModel.addElement(new Message(message, kind, null, sourceLocation));
-               checkIfWarning(kind);
-    }
-
-    public void addProjectTask(String message, IMessage.Kind kind) {
-               listModel.addElement(new Message(message, kind, null, null));
-               checkIfWarning(kind);
-       }
-  
-       private void checkIfWarning(Kind kind) {
-               if (kind.equals(IMessage.WARNING)) hasWarning = true;   
-       }
-  
-    public void clearTasks() {
-        listModel.clear();
-        hasWarning = false;
-    }
-
-    private void jbInit() throws Exception {
-        this.setLayout(borderLayout1);
-        this.add(jScrollPane1, BorderLayout.CENTER);
-        jScrollPane1.getViewport().add(list, null);
-    }
-
-       public boolean hasWarning() {
-               return hasWarning;
-       }
-
-}
-
-
-
diff --git a/ajbrowser/src/org/aspectj/tools/ajbrowser/EditorManager.java b/ajbrowser/src/org/aspectj/tools/ajbrowser/EditorManager.java
deleted file mode 100644 (file)
index 740bb84..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-/* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
- *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/epl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
- * ******************************************************************/
-
-
-package org.aspectj.tools.ajbrowser;
-
-import java.awt.BorderLayout;
-import java.awt.event.KeyEvent;
-import java.io.IOException;
-import java.util.*;
-
-import javax.swing.*;
-
-import org.aspectj.ajde.*;
-import org.aspectj.bridge.ISourceLocation;
-
-/**
- * Responsible for controlling the editor.
- *
- * @todo    remove coupling to <CODE>BasicEditor</CODE>
- * @author  Mik Kersten
- */
-public class EditorManager {
-
-    /** @return true if input modifiers have shift down */
-    public static boolean isShiftDown(int modifiers) {
-        return (0 != (modifiers & KeyEvent.SHIFT_MASK));
-    }
-
-    private EditorAdapter editor = null;
-    private BasicEditor basicEditor = null;
-    private ArrayList editorListeners = new ArrayList();
-    private Vector editors = new Vector();
-    private JPanel editor_panel = null;
-    private Box editors_box = Box.createVerticalBox();
-
-    public EditorManager(EditorAdapter ajdeEditor) {
-       if (ajdeEditor instanceof BasicEditor) {
-               this.basicEditor = (BasicEditor)ajdeEditor;
-               editors.add(basicEditor);
-               editors_box.add(basicEditor.getPanel());
-               editor_panel = new JPanel(new BorderLayout());
-               editor_panel.add(editors_box, BorderLayout.CENTER);     
-       } else {
-               editors.add(ajdeEditor);
-               this.editor = ajdeEditor;               
-       }
-    }
-
-    public void addListener(EditorListener editorListener) {
-        editorListeners.add(editorListener);
-    }
-
-    public void removeListener(EditorListener editorListener) {
-        editorListeners.remove(editorListener);
-    }
-
-    public void notifyCurrentFileChanged(String filePath) {
-        for (Iterator it = editorListeners.iterator(); it.hasNext(); ) {
-            ((EditorListener)it.next()).currentFileChanged(filePath);
-        }
-    }
-
-    public void addViewForSourceLine(final String filePath, final int lineNumber) {
-        if (basicEditor == null) return;
-        editors_box.remove(basicEditor.getPanel());
-        final BasicEditor newEditor = new BasicEditor();
-        editors.add(newEditor);
-        
-        Runnable update = new Runnable() {
-            public void run() {
-                editors_box.add(newEditor.getPanel());
-                newEditor.showSourceLine(filePath, lineNumber, true);
-                //AjdeUIManager.getDefault().getIdeUIAdapter().resetGUI();
-            }
-        };
-
-        if (SwingUtilities.isEventDispatchThread()) {
-            update.run(); 
-        } else {
-            try {
-                SwingUtilities.invokeAndWait(update);
-            } catch (Exception e) {
-                Ajde.getDefault().getErrorHandler().handleError("Could not add view for source line.", e);
-            }
-        }
-    }
-
-    public String getCurrFile() {
-       if (basicEditor != null) {
-               return basicEditor.getCurrFile();
-       } else {
-               return editor.getCurrFile();
-       }
-    }
-
-       
-       public void showSourceLine(ISourceLocation sourceLocation, boolean highlight) {
-               if (sourceLocation != null) {
-                       showSourceLine(
-                               sourceLocation.getSourceFile().getAbsolutePath(),
-                               sourceLocation.getLine(),
-                               highlight);     
-               }       
-       }
-
-    /**
-     * @todo    remove "instanceof AjdeManager" hack
-     */
-    public void showSourceLine(String filePath, int lineNumber, boolean highlight) {
-        if (editors.size() > 1) {
-            editors_box.removeAll();
-            editors_box.add(basicEditor.getPanel());
-            //AjdeUIManager.getDefault().getIdeUIAdapter().resetGUI();
-            editors.removeAllElements();
-            editors.add(basicEditor);
-        } 
-        
-        if (basicEditor != null) {
-               basicEditor.showSourceLine(filePath, lineNumber, highlight);
-        } else {
-               editor.showSourceLine(filePath, lineNumber, highlight);
-        }
-    }
-
-    public void pasteToCaretPos(String text) {
-        if (basicEditor != null) {
-               basicEditor.pasteToCaretPos(text);
-        } else {
-               editor.pasteToCaretPos(text);
-        }      
-    }
-
-    public void showSourcelineAnnotation(String filePath, int lineNumber, java.util.List items) {
-        editor.showSourcelineAnnotation(filePath, lineNumber, items);
-    }
-
-    public void saveContents() {
-        try {
-            for (Iterator it = editors.iterator(); it.hasNext(); ) {
-                ((EditorAdapter)it.next()).saveContents();
-            }
-        } catch (IOException ioe) {
-            Ajde.getDefault().getErrorHandler().handleError("Editor could not save the current file.", ioe);
-        }
-    }
-
-    public JPanel getEditorPanel() {
-        if (editor_panel != null) {
-            return editor_panel;
-        } else {
-            return basicEditor.getPanel();
-        }
-    }
-}
-
-
diff --git a/ajbrowser/src/org/aspectj/tools/ajbrowser/TopFrame.java b/ajbrowser/src/org/aspectj/tools/ajbrowser/TopFrame.java
deleted file mode 100644 (file)
index d10c18b..0000000
+++ /dev/null
@@ -1,545 +0,0 @@
-/* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
- *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/epl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
- * ******************************************************************/
-
-
-package org.aspectj.tools.ajbrowser;
-
-import java.awt.*;
-import java.awt.event.*;
-import java.io.File;
-
-import javax.swing.*;
-import javax.swing.border.*;
-import javax.swing.filechooser.FileFilter;
-
-import org.aspectj.ajde.Ajde;
-import org.aspectj.ajde.ui.swing.*;
-import org.aspectj.asm.IProgramElement;
-
-/**
- * UI for standalone operation.
- *
- * @author Mik Kersten
- */
-public class TopFrame extends JFrame {
-
-       private static final long serialVersionUID = 1007473581156451702L;
-
-       private static final File CURRENT_DIR = new File(".");
-
-    JLabel statusText_label = new JLabel();
-
-       //private AJButtonMenuCombo lastBuildCombo = null;
-    private JPanel editor_panel = null;
-    private JPanel sourceEditor_panel = null;
-
-    private JMenuBar menuBar = new JMenuBar();
-    private JMenu jMenu1 = new JMenu();
-    private JMenu jMenu2 = new JMenu();
-    private JMenuItem projectBuild_menuItem = new JMenuItem();
-    private FlowLayout left_flowLayout = new FlowLayout();
-    private JMenuItem jMenuItem1 = new JMenuItem();
-    private JMenuItem exit_menuItem = new JMenuItem();
-    private JSplitPane top_splitPane = new JSplitPane();
-//    private BorderLayout borderLayout2 = new BorderLayout();
-//    private BorderLayout borderLayout1 = new BorderLayout();
-    private BorderLayout borderLayout3 = new BorderLayout();
-    private JMenuItem projectRun_menuItem = new JMenuItem();
-    private JMenuItem projectRunOther_menuItem = new JMenuItem();
-    private JPanel status_panel = new JPanel();
-    private BorderLayout borderLayout4 = new BorderLayout();
-    private Border emptyBorder = BorderFactory.createEmptyBorder();
-    private JPanel toolbar_panel = new JPanel();
-    private JSplitPane right_splitPane = new JSplitPane();
-    private JPanel messages_panel = null;
-    private JMenu tools_menu = new JMenu();
-    private JMenuItem joinpointProbe_menuItem = new JMenuItem();
-    private JMenuItem projectDebug_menuItem = new JMenuItem();
-    private JMenuItem svProperties_menuItem = new JMenuItem();
-    private File lastChosenDir = CURRENT_DIR;
-    
-    JPanel toolBar_panel = new JPanel();
-    JToolBar build_toolBar = new JToolBar();
-    JButton closeConfig_button = new JButton();
-    JButton openConfig_button = new JButton();
-    JButton run_button = new JButton();
-    JToolBar project_toolBar = new JToolBar();
-    JButton save_button = new JButton();
-    JButton options_button = new JButton();
-    JButton editConfig_button = new JButton();
-    JToolBar file_toolBar = new JToolBar();
-    JPanel filler_panel = new JPanel();
-    BorderLayout borderLayout5 = new BorderLayout();
-    BorderLayout borderLayout6 = new BorderLayout();
-    Border border8;
-    JLabel jLabel1 = new JLabel();
-    JLabel jLabel2 = new JLabel();
-    JPanel multiView_panel;
-
-       private AJButtonMenuCombo buildCombo;
-
-    public void init(MultiStructureViewPanel multiViewPanel, JPanel compilerMessagesPanel, JPanel editorPanel) {
-        try {
-               this.multiView_panel = multiViewPanel;
-            //this.browser_panel = browserPanel;
-            //this.fileStructure_panel = fileStructurePanel;
-            this.messages_panel = compilerMessagesPanel;
-            this.editor_panel = editorPanel;
-            this.sourceEditor_panel = editorPanel;
-
-            jbInit();
-            svProperties_menuItem.setIcon(AjdeUIManager.getDefault().getIconRegistry().getBrowserOptionsIcon());
-            projectBuild_menuItem.setIcon(AjdeUIManager.getDefault().getIconRegistry().getBuildIcon());
-            projectRun_menuItem.setIcon(AjdeUIManager.getDefault().getIconRegistry().getExecuteIcon());
-            projectRunOther_menuItem.setIcon(AjdeUIManager.getDefault().getIconRegistry().getExecuteIcon());
-            projectDebug_menuItem.setIcon(AjdeUIManager.getDefault().getIconRegistry().getDebugIcon());
-
-            this.setJMenuBar(menuBar);
-            this.setIconImage(((ImageIcon)AjdeUIManager.getDefault().getIconRegistry().getStructureSwingIcon(IProgramElement.Kind.ADVICE)).getImage());
-            this.setLocation(75, 10);
-            this.setSize(900, 650);
-            this.setTitle(BrowserManager.TITLE);
-            //bindKeys();
-            fixButtonBorders();
-            messages_panel.setVisible(false);
-
-                       JPopupMenu orderMenu = new BuildConfigPopupMenu(new AbstractAction() {
-
-                               private static final long serialVersionUID = 1L;
-
-                               public void actionPerformed(ActionEvent arg0) {
-                               BrowserManager.getDefault().saveAll();
-                               }
-               });
-
-                       buildCombo = new AJButtonMenuCombo(
-                               "Build",
-                               "Build",
-                               AjdeUIManager.getDefault().getIconRegistry().getBuildIcon(),
-                               orderMenu,
-                               false);  
-                       
-                       build_toolBar.add(buildCombo, 1);
-                       refreshBuildMenu();
-        }
-        catch(Exception e) {
-            e.printStackTrace();  
-        }
-    }
-  
-       private void refreshBuildMenu() {
-               JPopupMenu orderMenu = new BuildConfigPopupMenu(new AbstractAction() {
-                       private static final long serialVersionUID = -3204840278758386318L;
-
-                       public void actionPerformed(ActionEvent arg0) {
-                       BrowserManager.getDefault().saveAll();
-                       }
-       });
-
-               buildCombo.setMenu(orderMenu);
-       }
-
-    public void setEditorPanel(JPanel panel) {
-        editor_panel = panel;
-        right_splitPane.remove(editor_panel);
-        right_splitPane.add(panel, JSplitPane.TOP);
-        panel.setVisible(true);
-    }
-
-    /**
-     * @todo    get rid of this method and make jbinit() work properly
-     */
-    private void fixButtonBorders() {
-        run_button.setBorder(null);
-        options_button.setBorder(null);
-        openConfig_button.setBorder(null);
-        closeConfig_button.setBorder(null);
-        save_button.setBorder(null);
-        editConfig_button.setBorder(null);
-    }
-
-    private void jbInit() throws Exception {
-        border8 = BorderFactory.createCompoundBorder(BorderFactory.createEtchedBorder(Color.white,new Color(156, 156, 158)),BorderFactory.createEmptyBorder(2,2,2,2));
-        emptyBorder = BorderFactory.createEmptyBorder(2,2,2,2);
-        jMenu1.setFont(new java.awt.Font("Dialog", 0, 11));
-        jMenu1.setText("File");
-        jMenu1.setMnemonic(KeyEvent.VK_F);
-        jMenu2.setFont(new java.awt.Font("Dialog", 0, 11));
-        jMenu2.setText("Project");
-        jMenu2.setMnemonic(KeyEvent.VK_P);
-        projectBuild_menuItem.setFont(new java.awt.Font("Dialog", 0, 11));
-        projectBuild_menuItem.setText("Build");
-        projectBuild_menuItem.setMnemonic(KeyEvent.VK_B);
-        projectBuild_menuItem.setAccelerator(KeyStroke.getKeyStroke(
-                            KeyEvent.VK_B, ActionEvent.ALT_MASK));
-
-        projectBuild_menuItem.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                projectBuild_menuItem_actionPerformed(e);
-            }
-        });
-        left_flowLayout.setAlignment(FlowLayout.LEFT);
-        jMenuItem1.setFont(new java.awt.Font("Dialog", 0, 11));
-        jMenuItem1.setText("Save");
-        jMenuItem1.setMnemonic(KeyEvent.VK_S);
-        jMenuItem1.setAccelerator(KeyStroke.getKeyStroke(
-                            KeyEvent.VK_S, ActionEvent.ALT_MASK));
-        jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                jMenuItem1_actionPerformed(e);
-            }
-        });
-        exit_menuItem.setFont(new java.awt.Font("Dialog", 0, 11));
-        exit_menuItem.setText("Exit");
-        exit_menuItem.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                exit_menuItem_actionPerformed(e);
-            }
-        });
-        top_splitPane.setPreferredSize(new Dimension(706, 800));
-        top_splitPane.setDividerSize(4);
-        this.getContentPane().setLayout(borderLayout3);
-        projectRun_menuItem.setEnabled(true);
-        projectRun_menuItem.setFont(new java.awt.Font("Dialog", 0, 11));
-        projectRun_menuItem.setText("Run in same VM");
-        projectRun_menuItem.setToolTipText("Run in same VM (hold shift down to run in separate process)");
-        projectRun_menuItem.setMnemonic(KeyEvent.VK_R);
-        projectRun_menuItem.setAccelerator(KeyStroke.getKeyStroke(
-                                      KeyEvent.VK_R, ActionEvent.ALT_MASK));
-        projectRun_menuItem.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                projectRun_menuItem_actionPerformed(e);
-            }
-        });  
-        projectRunOther_menuItem.setEnabled(true);
-        projectRunOther_menuItem.setFont(new java.awt.Font("Dialog", 0, 11));
-        projectRunOther_menuItem.setText("Run in separate process");
-        projectRunOther_menuItem.setMnemonic(KeyEvent.VK_P);
-        projectRunOther_menuItem.setAccelerator(KeyStroke.getKeyStroke(
-                                      KeyEvent.VK_P, ActionEvent.ALT_MASK));
-        projectRunOther_menuItem.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                projectRunOther_menuItem_actionPerformed(e);
-            }
-        });  
-        statusText_label.setFont(new java.awt.Font("Dialog", 0, 11));
-        statusText_label.setBorder(BorderFactory.createLoweredBevelBorder());
-        statusText_label.setMaximumSize(new Dimension(2000, 20));
-        statusText_label.setPreferredSize(new Dimension(300, 20));
-        status_panel.setLayout(borderLayout4);
-        this.addWindowListener(new java.awt.event.WindowAdapter() {
-            public void windowClosed(WindowEvent e) {
-                this_windowClosed(e);
-            }
-            public void windowClosing(WindowEvent e) {
-                this_windowClosing(e);
-            }
-        });
-        toolbar_panel.setLayout(borderLayout5);
-        right_splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
-        right_splitPane.setBorder(null);
-        right_splitPane.setDividerSize(4);
-        tools_menu.setFont(new java.awt.Font("Dialog", 0, 11));
-        tools_menu.setText("Tools");
-        tools_menu.setMnemonic(KeyEvent.VK_T);
-        projectDebug_menuItem.setEnabled(false);
-        projectDebug_menuItem.setFont(new java.awt.Font("Dialog", 0, 11));
-        projectDebug_menuItem.setText("Debug");
-        svProperties_menuItem.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                svProperties_menuItem_actionPerformed(e);
-            }
-        });
-        svProperties_menuItem.setText("Options...");
-        svProperties_menuItem.setActionCommand("AJDE Console...");
-        svProperties_menuItem.setFont(new java.awt.Font("Dialog", 0, 11));
-        svProperties_menuItem.setMnemonic(KeyEvent.VK_O);
-        svProperties_menuItem.setAccelerator(KeyStroke.getKeyStroke(
-                            KeyEvent.VK_O, ActionEvent.ALT_MASK));
-        build_toolBar.setBorder(emptyBorder);
-        build_toolBar.setFloatable(false);
-        closeConfig_button.setMaximumSize(new Dimension(100, 20));
-        closeConfig_button.setEnabled(true);
-        closeConfig_button.setFont(new java.awt.Font("Dialog", 0, 11));
-        closeConfig_button.setBorder(null);
-        closeConfig_button.setMinimumSize(new Dimension(24, 20));
-        closeConfig_button.setPreferredSize(new Dimension(20, 20));
-        closeConfig_button.setToolTipText("Close build configuration");
-        closeConfig_button.setIcon(AjdeUIManager.getDefault().getIconRegistry().getCloseConfigIcon());
-        closeConfig_button.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                closeConfig_button_actionPerformed(e);
-            }
-        });
-        openConfig_button.setMaximumSize(new Dimension(100, 20));
-        openConfig_button.setEnabled(true);
-        openConfig_button.setFont(new java.awt.Font("Dialog", 0, 11));
-        openConfig_button.setBorder(null);
-        openConfig_button.setMinimumSize(new Dimension(24, 20));
-        openConfig_button.setPreferredSize(new Dimension(20, 20));
-        openConfig_button.setToolTipText("Select build configuration...");
-        openConfig_button.setIcon(AjdeUIManager.getDefault().getIconRegistry().getOpenConfigIcon());
-        openConfig_button.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                openConfig_button_actionPerformed(e);
-            }
-        });
-        run_button.setMaximumSize(new Dimension(60, 20));
-        run_button.setEnabled(true);
-        run_button.setFont(new java.awt.Font("Dialog", 0, 11));
-        run_button.setBorder(null);
-        run_button.setMinimumSize(new Dimension(24, 20));
-        run_button.setPreferredSize(new Dimension(20, 20));
-        run_button.setToolTipText("Run in same VM (hold shift down to run in separate process)");
-        run_button.setIcon(AjdeUIManager.getDefault().getIconRegistry().getExecuteIcon());
-        run_button.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                run_button_actionPerformed(e);
-            }
-        });
-        project_toolBar.setBorder(emptyBorder);
-        save_button.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                save_button_actionPerformed(e);
-            }
-        });
-        save_button.setIcon(AjdeUIManager.getDefault().getIconRegistry().getSaveIcon());
-        save_button.setText("Save");
-        save_button.setToolTipText("Save");
-        save_button.setPreferredSize(new Dimension(55, 20));
-        save_button.setMinimumSize(new Dimension(24, 20));
-        save_button.setFont(new java.awt.Font("Dialog", 0, 11));
-        save_button.setBorder(null);
-        save_button.setMaximumSize(new Dimension(60, 20));
-        options_button.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                options_button_actionPerformed(e);
-            }
-        });
-        options_button.setIcon(AjdeUIManager.getDefault().getIconRegistry().getBrowserOptionsIcon());
-        options_button.setText("Options");
-        options_button.setToolTipText("Options...");
-        options_button.setPreferredSize(new Dimension(60, 20));
-        options_button.setMinimumSize(new Dimension(24, 20));
-        options_button.setFont(new java.awt.Font("Dialog", 0, 11));
-        options_button.setBorder(null);
-        options_button.setMaximumSize(new Dimension(80, 20));
-        editConfig_button.addActionListener(new java.awt.event.ActionListener() {
-            public void actionPerformed(ActionEvent e) {
-                editConfig_button_actionPerformed(e);
-            }
-        });
-        editConfig_button.setIcon(AjdeUIManager.getDefault().getIconRegistry().getStructureSwingIcon(IProgramElement.Kind.FILE_LST));
-        editConfig_button.setText("Edit Config");
-        editConfig_button.setToolTipText("Edit Config...");
-        editConfig_button.setPreferredSize(new Dimension(80, 20));
-        editConfig_button.setMinimumSize(new Dimension(24, 20));
-        editConfig_button.setFont(new java.awt.Font("Dialog", 0, 11));
-        editConfig_button.setBorder(null);
-        editConfig_button.setMaximumSize(new Dimension(80, 20));
-        file_toolBar.setBorder(emptyBorder);
-        toolBar_panel.setLayout(borderLayout6);
-        jLabel1.setFont(new java.awt.Font("Dialog", 0, 11));
-        jLabel1.setText(" Build: ");
-        jLabel2.setText("      Run: ");
-        jLabel2.setFont(new java.awt.Font("Dialog", 0, 11));
-        //fileStructure_panel.setFont(new java.awt.Font("Dialog", 0, 11));
-        //browser_panel.setFont(new java.awt.Font("Dialog", 0, 11));
-        this.getContentPane().add(top_splitPane, BorderLayout.CENTER);
-        top_splitPane.add(right_splitPane, JSplitPane.RIGHT);
-        top_splitPane.add(multiView_panel, JSplitPane.LEFT);
-        right_splitPane.add(messages_panel, JSplitPane.BOTTOM);
-        right_splitPane.add(editor_panel, JSplitPane.TOP);
-        //structureView_pane.add(fileStructure_panel, JSplitPane.RIGHT);
-        //structureView_pane.add(browser_panel, JSplitPane.LEFT);
-        this.getContentPane().add(status_panel, BorderLayout.SOUTH);
-        status_panel.add(statusText_label, BorderLayout.CENTER);
-        this.getContentPane().add(toolbar_panel, BorderLayout.NORTH);
-        toolbar_panel.add(filler_panel, BorderLayout.CENTER);
-        toolbar_panel.add(toolBar_panel,  BorderLayout.WEST);
-        //file_toolBar.add(editConfig_button, null);
-        file_toolBar.add(save_button, null);
-        file_toolBar.add(options_button, null);
-        toolBar_panel.add(build_toolBar, BorderLayout.WEST);
-        toolBar_panel.add(project_toolBar, BorderLayout.CENTER);
-        project_toolBar.add(jLabel2, null);
-        project_toolBar.add(run_button, null);
-        build_toolBar.add(jLabel1, null);
-        build_toolBar.add(openConfig_button, null);
-        build_toolBar.add(closeConfig_button, null);
-        toolBar_panel.add(file_toolBar, BorderLayout.EAST);
-        menuBar.add(jMenu1);
-        menuBar.add(jMenu2);
-        menuBar.add(tools_menu);
-        jMenu1.add(jMenuItem1);
-        jMenu1.addSeparator();
-        jMenu1.add(exit_menuItem);
-        jMenu2.add(projectBuild_menuItem);
-        jMenu2.add(projectRun_menuItem);
-        jMenu2.add(projectRunOther_menuItem);
-        //jMenu2.add(projectDebug_menuItem);
-        tools_menu.add(joinpointProbe_menuItem);
-        tools_menu.add(svProperties_menuItem);
-        top_splitPane.setDividerLocation(380);
-        right_splitPane.setDividerLocation(500);
-        project_toolBar.addSeparator();
-        project_toolBar.addSeparator();
-    }
-
-    private void exit_menuItem_actionPerformed(ActionEvent e) {
-        quit();
-    }
-
-    private void this_windowClosing(WindowEvent e) {
-        quit();
-    }
-
-    private void quit() {
-        this.dispose();
-        System.exit(0);
-    }
-
-
-    void treeMode_comboBox_actionPerformed(ActionEvent e) { }
-
-    void save_button_actionPerformed(ActionEvent e) {
-        BrowserManager.getDefault().getEditorManager().saveContents();
-    }
-
-
-    void this_windowClosed(WindowEvent e) {
-        quit();
-    }
-
-    public void showMessagesPanel() {
-        right_splitPane.setDividerLocation(right_splitPane.getHeight()-100);
-        messages_panel.setVisible(true);
-    }
-
-    public void hideMessagesPanel() {
-        right_splitPane.setDividerLocation(right_splitPane.getHeight());
-        messages_panel.setVisible(false);
-    }
-
-    void jMenuItem1_actionPerformed(ActionEvent e) {
-               BrowserManager.getDefault().getEditorManager().saveContents();
-    }
-
-    void projectBuild_menuItem_actionPerformed(ActionEvent e) {
-        BrowserManager.getDefault().saveAll();
-        if (EditorManager.isShiftDown(e.getModifiers())) {
-            buildFresh();
-        } else {
-            build();
-        }
-    }
-
-    void run_button_actionPerformed(ActionEvent e) {
-        if (EditorManager.isShiftDown(e.getModifiers())) {
-            runInNewVM();
-        } else {
-            runInSameVM();
-        }
-    }
-
-    void projectRunOther_menuItem_actionPerformed(ActionEvent e) {
-        runInNewVM();
-    }
-
-    void projectRun_menuItem_actionPerformed(ActionEvent e) {
-        if (EditorManager.isShiftDown(e.getModifiers())) {
-            runInNewVM();
-        } else {
-            runInSameVM();
-        }
-    }
-
-    void build_button_actionPerformed(ActionEvent e) {
-        BrowserManager.getDefault().saveAll();
-        if (EditorManager.isShiftDown(e.getModifiers())) {
-            buildFresh();
-        } else {
-            build();
-        }
-       }
-
-    void options_button_actionPerformed(ActionEvent e) {
-        AjdeUIManager.getDefault().showOptionsFrame();
-    }
-
-    void editConfig_button_actionPerformed(ActionEvent e) {
-        //Ajde.getDefault().getConfigurationManager().editConfigFile(UiManager.getDefault().getViewManager().getCurrConfigFile());
-       BrowserManager.getDefault().openFile(Ajde.getDefault().getConfigurationManager().getActiveConfigFile());
-       refreshBuildMenu();
-    }
-
-    public void resetSourceEditorPanel() {
-        right_splitPane.removeAll();
-        right_splitPane.add(sourceEditor_panel, JSplitPane.TOP);
-    }
-    
-    private void svProperties_menuItem_actionPerformed(ActionEvent e) {
-        AjdeUIManager.getDefault().showOptionsFrame();
-    }
-
-    private void openConfig_button_actionPerformed(ActionEvent e) {
-        JFileChooser fileChooser = new JFileChooser();
-        fileChooser.setCurrentDirectory(lastChosenDir);
-        fileChooser.setFileFilter(new FileFilter() {
-            public boolean accept(File f) {
-                return (f.getPath().endsWith(".lst") || f.isDirectory());
-            }
-            public String getDescription() {
-                return "AspectJ Build Configuration (*.lst)";
-            }
-        });
-        int returnVal = fileChooser.showOpenDialog(this);
-        if(returnVal == JFileChooser.APPROVE_OPTION) {
-            File result = fileChooser.getSelectedFile();
-               String path = result.getAbsolutePath();//.replace('\\', '/');
-               BrowserManager.getDefault().getConfigFiles().add(0, path);
-               Ajde.getDefault().getConfigurationManager().setActiveConfigFile(path);
-            lastChosenDir = result.getParentFile();
-            if (null == lastChosenDir) {
-                lastChosenDir = CURRENT_DIR;
-            }
-            refreshBuildMenu();  
-        }
-    }
-
-    private void closeConfig_button_actionPerformed(ActionEvent e) {
-       BrowserManager.getDefault().getConfigFiles().remove(Ajde.getDefault().getConfigurationManager().getActiveConfigFile());
-       if (!BrowserManager.getDefault().getConfigFiles().isEmpty()) {
-               Ajde.getDefault().getConfigurationManager().setActiveConfigFile((String)BrowserManager.getDefault().getConfigFiles().get(0));
-       }
-       refreshBuildMenu();
-    }
-    
-    
-    private void buildFresh() {
-        Ajde.getDefault().getBuildManager().buildFresh();
-    }
-    
-    private void build() {
-        Ajde.getDefault().getBuildManager().build();
-    }
-    
-    private void runInSameVM() {
-        Ajde.getDefault().runInSameVM();
-    }
-    
-    private void runInNewVM() {
-        Ajde.getDefault().runInNewVM();
-    }
-    
-}
diff --git a/ajbrowser/src/org/aspectj/tools/ajbrowser/core/BrowserBuildProgressMonitor.java b/ajbrowser/src/org/aspectj/tools/ajbrowser/core/BrowserBuildProgressMonitor.java
new file mode 100644 (file)
index 0000000..aab3e3b
--- /dev/null
@@ -0,0 +1,88 @@
+/********************************************************************
+ * Copyright (c) 2007 Contributors. All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://eclipse.org/legal/epl-v10.html 
+ *  
+ * Contributors: IBM Corporation - initial API and implementation 
+ *                              Helen Hawkins   - initial version (bug 148190)
+ *******************************************************************/
+package org.aspectj.tools.ajbrowser.core;
+
+import javax.swing.JDialog;
+
+import org.aspectj.ajde.Ajde;
+import org.aspectj.ajde.core.IBuildProgressMonitor;
+import org.aspectj.ajde.ui.swing.BuildProgressPanel;
+import org.aspectj.tools.ajbrowser.BrowserManager;
+import org.aspectj.tools.ajbrowser.ui.BrowserMessageHandler;
+import org.aspectj.tools.ajbrowser.ui.swing.TopFrame;
+
+/**
+ * Build progress monitor that shows the progress in a dialog containing
+ * a JProgressBar. Also updates the progress bar at the bottom of AjBrowser
+ * with the build progress information.
+ */
+public class BrowserBuildProgressMonitor extends Thread implements IBuildProgressMonitor {
+
+       public static final String PROGRESS_HEADING = "AspectJ Build";
+       
+       private BuildProgressPanel progressDialog = null;
+       private JDialog dialog = null;
+       private TopFrame topFrame;
+       
+       private BrowserMessageHandler handler;
+       
+       public BrowserBuildProgressMonitor(BrowserMessageHandler handler) {
+               this.handler = handler;
+               topFrame = (TopFrame) BrowserManager.getDefault().getRootFrame();
+        dialog = new JDialog(topFrame, PROGRESS_HEADING, false);
+        progressDialog = new BuildProgressPanel();
+        dialog.setContentPane(progressDialog);
+        dialog.setSize(550, 120);
+        try {
+               dialog.setLocationRelativeTo(topFrame); 
+               } catch (NoSuchMethodError nsme) {
+                       // running on 1.3
+               }
+       }
+       
+       public void finish(boolean wasFullBuild) {
+               Ajde.getDefault().getIdeUIAdapter().displayStatusInformation("build finished...");
+               progressDialog.finish();
+               dialog.dispose();       
+               if (handler.getMessages().isEmpty()) {
+                       topFrame.hideMessagesPanel(handler);
+               } else {
+                       topFrame.showMessagesPanel(handler);
+               }
+       }
+
+       public boolean isCancelRequested() {
+               boolean isCancel = progressDialog.isCancelRequested();
+               if (isCancel) {
+                       Ajde.getDefault().getIdeUIAdapter().displayStatusInformation("Compile aborted");
+               }
+               return isCancel;
+       }
+
+       public void setProgress(double percentDone) {
+               progressDialog.setProgressBarVal((int) (percentDone*progressDialog.getProgressBarMax()));
+       }
+
+       public void setProgressText(String text) {
+               Ajde.getDefault().getIdeUIAdapter().displayStatusInformation(text);
+               progressDialog.setProgressText(text);
+       }
+
+       public void begin() {
+               Ajde.getDefault().getIdeUIAdapter().displayStatusInformation("starting build...");
+               handler.reset();
+       progressDialog.setProgressBarVal(0);
+       progressDialog.setProgressText("starting build...");
+               dialog.setLocationRelativeTo(Ajde.getDefault().getRootFrame());
+               dialog.setVisible(true);
+       }
+
+}
diff --git a/ajbrowser/src/org/aspectj/tools/ajbrowser/core/BrowserCompilerConfiguration.java b/ajbrowser/src/org/aspectj/tools/ajbrowser/core/BrowserCompilerConfiguration.java
new file mode 100644 (file)
index 0000000..5be2276
--- /dev/null
@@ -0,0 +1,97 @@
+/********************************************************************
+ * Copyright (c) 2007 Contributors. All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://eclipse.org/legal/epl-v10.html 
+ *  
+ * Contributors: IBM Corporation - initial API and implementation 
+ *                              Helen Hawkins   - initial version (bug 148190)
+ *******************************************************************/
+package org.aspectj.tools.ajbrowser.core;
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.aspectj.ajde.core.ICompilerConfiguration;
+import org.aspectj.ajde.core.IOutputLocationManager;
+import org.aspectj.ajde.ui.UserPreferencesAdapter;
+import org.aspectj.tools.ajbrowser.BrowserManager;
+
+/**
+ * AjBrowser implementation of ICompilerConfiguration which returns something
+ * for getClasspath(), getJavaOptionsMap(), getNonStandardOptions() and 
+ * getOutputLocationManager() and null for everything else. The reason it doesn't
+ * return anything for getProjectSourceFiles() is that it uses .lst files to record
+ * what is needed to build (via BuildConfigManager).
+ */
+public class BrowserCompilerConfiguration implements ICompilerConfiguration {
+
+       private UserPreferencesAdapter preferencesAdapter;
+       private IOutputLocationManager locationManager;
+
+       public BrowserCompilerConfiguration(UserPreferencesAdapter preferencesAdapter) {
+               this.preferencesAdapter = preferencesAdapter;
+       }
+
+       public String getClasspath() {
+               StringBuffer classpath = new StringBuffer();
+               String userPath = preferencesAdapter
+                       .getProjectPreference(PreferenceStoreConstants.BUILD_CLASSPATH);
+               if (userPath != null && userPath.trim().length() != 0) {
+                       classpath.append(userPath);
+               }
+               List outputDirs = getOutputLocationManager().getAllOutputLocations();
+               for (Iterator iterator = outputDirs.iterator(); iterator.hasNext();) {
+                       File dir = (File) iterator.next();
+                       classpath.append(File.pathSeparator + dir.getAbsolutePath() + File.pathSeparator);
+               }
+               classpath.append(System.getProperty("java.class.path", "."));
+               //System.out.println("classpath: " + classpath.toString());
+               return classpath.toString();
+       }
+
+       public Map getJavaOptionsMap() {
+               return BrowserManager.getDefault().getJavaBuildOptions().getJavaBuildOptionsMap();
+       }
+
+       public String getNonStandardOptions() {
+               return preferencesAdapter
+                               .getProjectPreference(PreferenceStoreConstants.NONSTANDARD_OPTIONS);
+       }
+
+       public IOutputLocationManager getOutputLocationManager() {
+               if (locationManager == null) {
+                       locationManager = new BrowserOutputLocationManager(preferencesAdapter);
+               }
+               return locationManager;
+       }
+
+       public List getProjectSourceFiles() {
+               // unimplemented in AjBrowser (uses BuildConfigManager instead)
+               return null;
+       }
+
+       public Map getSourcePathResources() {
+               // unimplemented in AjBrowser
+               return null;
+       }
+
+       public Set getAspectPath() {
+               // unimplemented in AjBrowser
+               return null;
+       }
+
+       public Set getInpath() {
+               // unimplemented in AjBrowser
+               return null;
+       }
+
+       public String getOutJar() {
+               // unimplemented in AjBrowser
+               return null;
+       }
+}
diff --git a/ajbrowser/src/org/aspectj/tools/ajbrowser/core/BrowserErrorHandler.java b/ajbrowser/src/org/aspectj/tools/ajbrowser/core/BrowserErrorHandler.java
new file mode 100644 (file)
index 0000000..9d8e385
--- /dev/null
@@ -0,0 +1,54 @@
+/********************************************************************
+ * Copyright (c) 2007 Contributors. All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://eclipse.org/legal/epl-v10.html 
+ *  
+ * Contributors: IBM Corporation - initial API and implementation 
+ *                              Helen Hawkins   - initial version (bug 148190)
+ *******************************************************************/
+package org.aspectj.tools.ajbrowser.core;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import javax.swing.JOptionPane;
+
+import org.aspectj.ajde.Ajde;
+import org.aspectj.ajde.ui.swing.ErrorDialog;
+import org.aspectj.tools.ajbrowser.BrowserManager;
+
+/**
+ * Error handler used by AjBrowser. Handles errors and warnings by
+ * producing an error/warning dialog.
+ */
+public class BrowserErrorHandler {
+
+       public static void handleWarning(String message) {
+               JOptionPane.showMessageDialog(BrowserManager.getDefault()
+                               .getRootFrame(), message, "AJBrowser Warning",
+                               JOptionPane.WARNING_MESSAGE);
+       }
+
+       public static void handleError(String errorMessage) {
+               handleError(errorMessage, null);
+       }
+
+       public static void handleError(String message, Throwable t) {
+               String stack = getStackTraceAsString(t);
+               ErrorDialog errorDialog = new ErrorDialog(Ajde.getDefault()
+                               .getRootFrame(), "AJBrowser Error", t, message, stack);
+               errorDialog.setVisible(true);
+       }
+
+       private static String getStackTraceAsString(Throwable t) {
+               StringWriter stringWriter = new StringWriter();
+               if (t != null) {
+                       t.printStackTrace(new PrintWriter(stringWriter));
+                       return stringWriter.getBuffer().toString();
+               } 
+               return "<no stack trace available>";
+       }
+
+}
diff --git a/ajbrowser/src/org/aspectj/tools/ajbrowser/core/BrowserOutputLocationManager.java b/ajbrowser/src/org/aspectj/tools/ajbrowser/core/BrowserOutputLocationManager.java
new file mode 100644 (file)
index 0000000..078715d
--- /dev/null
@@ -0,0 +1,60 @@
+/********************************************************************
+ * Copyright (c) 2007 Contributors. All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://eclipse.org/legal/epl-v10.html 
+ *  
+ * Contributors: IBM Corporation - initial API and implementation 
+ *                              Helen Hawkins   - initial version (bug 148190)
+ *******************************************************************/
+package org.aspectj.tools.ajbrowser.core;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.aspectj.ajde.core.IOutputLocationManager;
+import org.aspectj.ajde.ui.UserPreferencesAdapter;
+
+/**
+ * IOutputLocationManager which returns the same output location for
+ * all files and resources.
+ */
+public class BrowserOutputLocationManager implements IOutputLocationManager {
+
+       private UserPreferencesAdapter preferencesAdapter;
+
+       public BrowserOutputLocationManager(
+                       UserPreferencesAdapter preferencesAdapter) {
+               this.preferencesAdapter = preferencesAdapter;
+       }
+
+       public File getOutputLocationForClass(File compilationUnit) {
+               return new File(getCommonOutputDir());
+       }
+
+       public File getOutputLocationForResource(File resource) {
+               return new File(getCommonOutputDir());
+       }
+
+       private String getCommonOutputDir() {
+               String outputPath = preferencesAdapter.getProjectPreference(
+                               PreferenceStoreConstants.BUILD_OUTPUTPATH);
+               if (outputPath == null) {
+                       return ".";
+               }
+               return outputPath;
+       }
+
+       public List getAllOutputLocations() {
+               List outputDirs = new ArrayList();
+               outputDirs.add(new File(getCommonOutputDir()));
+               return outputDirs;
+       }
+
+       public File getDefaultOutputLocation() {
+               return new File(getCommonOutputDir());
+       }
+
+}
diff --git a/ajbrowser/src/org/aspectj/tools/ajbrowser/core/PreferenceStoreConstants.java b/ajbrowser/src/org/aspectj/tools/ajbrowser/core/PreferenceStoreConstants.java
new file mode 100644 (file)
index 0000000..6ad9b44
--- /dev/null
@@ -0,0 +1,24 @@
+/********************************************************************
+ * Copyright (c) 2007 Contributors. All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://eclipse.org/legal/epl-v10.html 
+ *  
+ * Contributors: IBM Corporation - initial API and implementation 
+ *                              Helen Hawkins   - initial version (bug 148190)
+ *******************************************************************/
+package org.aspectj.tools.ajbrowser.core;
+
+/**
+ * Constants used by the preference store
+ */
+public class PreferenceStoreConstants {
+
+       public static final String BUILD_CLASSPATH = "build.classpath";
+       public static final String RUNTIME_MAINCLASS = "runtime.mainClass";
+       public static final String BUILD_OUTPUTPATH = "build.outputpath";
+       public static final String JAVA_CLASSPATH = "java.class.path";
+       public static final String NONSTANDARD_OPTIONS = "ajc.nonStandardOptions";
+       
+}
diff --git a/ajbrowser/src/org/aspectj/tools/ajbrowser/ui/BasicEditor.java b/ajbrowser/src/org/aspectj/tools/ajbrowser/ui/BasicEditor.java
new file mode 100644 (file)
index 0000000..7830f8b
--- /dev/null
@@ -0,0 +1,187 @@
+/* *******************************************************************
+ * Copyright (c) 1999-2001 Xerox Corporation, 
+ *               2002 Palo Alto Research Center, Incorporated (PARC).
+ * All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ *  
+ * Contributors: 
+ *     Xerox/PARC     initial implementation
+ *     Helen Hawkins  Converted to new interface (bug 148190) 
+ * ******************************************************************/
+
+
+package org.aspectj.tools.ajbrowser.ui;
+
+import java.awt.BorderLayout;
+import java.awt.Font;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+
+import javax.swing.JEditorPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.text.BadLocationException;
+import javax.swing.text.DefaultHighlighter;
+
+import org.aspectj.ajde.Ajde;
+import org.aspectj.ajde.EditorAdapter;
+import org.aspectj.bridge.ISourceLocation;
+import org.aspectj.tools.ajbrowser.BrowserManager;
+import org.aspectj.tools.ajbrowser.core.BrowserErrorHandler;
+
+/**
+ * Bare-bones editor implementation used when the framework is being used
+ * standalone.
+ *
+ * @author Mik Kersten
+ */
+public class BasicEditor implements EditorAdapter {
+
+       private String NO_FILE = "<no file selected>";
+    private String filePath = NO_FILE;
+    private JPanel editor_panel = new JPanel();
+
+    // @todo    get rid of these
+    private int currHighlightStart = 0;
+    private int currHighlightEnd = 0;
+
+    private BorderLayout borderLayout1 = new BorderLayout();
+    private JScrollPane jScrollPane1 = new JScrollPane();
+    private JEditorPane editorPane = new JEditorPane();
+
+    public BasicEditor() {
+        try {
+            editorPane.setEditable(true);
+            editorPane.setContentType("text/plain");
+            editorPane.setFont(new Font("Monospaced", 0, 11));
+            editor_panel.add(editorPane);
+            jbInit();
+        }
+        catch(Exception e) {
+            BrowserErrorHandler.handleError("Could not initialize GUI.", e);
+        }
+    }
+
+    public String getCurrFile() {
+               return filePath;
+    }
+
+    public void showSourceLine(ISourceLocation sourceLocation, boolean highlight) {
+       try {
+               showSourceLine(sourceLocation.getSourceFile().getAbsolutePath(), sourceLocation.getLine(), highlight);
+       } catch (NullPointerException npe) {
+               Ajde.getDefault().getIdeUIAdapter().displayStatusInformation(" no corresponding source line to seek to");
+       }
+    }
+       
+    public void showSourceLine(int lineNumber, boolean highlight) {
+        showSourceLine(filePath, lineNumber, highlight);
+    }
+
+    public void pasteToCaretPos(String text) {
+        if (currHighlightEnd < 1) return;
+        String contents = editorPane.getText();
+        String pasted = contents.substring(0, currHighlightEnd) +
+            text + contents.substring(currHighlightEnd, contents.length());
+        editorPane.setText(pasted);
+    }
+
+    public void showSourceLine(String filePath, int lineNumber, boolean highlight) {
+       //AjdeUIManager.getDefault().getIdeUIAdapter().resetEditor();
+        
+        this.filePath = filePath;
+//        if (oldPath != filePath && !Ajde.INSTANCE.BROWSER_MANAGER.isGlobalMode()) {
+//            Ajde.INSTANCE.BROWSER_MANAGER.updateView();
+//        }
+
+//        Ajde.IDE_MANAGER.setEditorStatusText(filePath);
+
+        currHighlightStart = 0;
+        currHighlightEnd = 0;
+        editorPane.setText(readFile(filePath, lineNumber));
+        try {
+            editorPane.getHighlighter().addHighlight(currHighlightStart, currHighlightEnd, DefaultHighlighter.DefaultPainter);
+            editorPane.setCaretPosition(currHighlightStart);
+        } catch (BadLocationException ble) {
+               BrowserErrorHandler.handleError("Could not highlight location.", ble);
+        }
+        BrowserManager.getDefault().getEditorManager().notifyCurrentFileChanged(filePath);
+    }
+
+    /**
+     * Not implemented.
+     */
+    public void showSourcelineAnnotation(String filePath, int lineNumber, java.util.List items) { }
+
+       public void addEditorViewForSourceLine(String filePath, int lineNumber) {
+               
+       }
+
+    public void saveContents() throws IOException {
+        if (!filePath.equals(NO_FILE) && !filePath.equals("") && !editorPane.getText().equals("")) {
+            BufferedWriter writer = new BufferedWriter(new FileWriter(filePath));
+            writer.write(editorPane.getText());
+            writer.close();
+        }
+    }
+
+    public JPanel getPanel() {
+        return editor_panel;
+    }
+
+    public void showSourceForFile(String filePath) { }
+
+    public void showSourceForLine(int lineNumber, boolean highlight) { }
+
+    public void showSourceForSourceLine(String filePath, int lineNumber, boolean highlight) { }
+
+    public String getCurrSourceFilePath() { return null; }
+
+    public void setBreakpointRequest(String filePath, int lineNumber, boolean isDeferred) { }
+
+    public void clearBreakpointRequest(String filePath, int lineNumber) { }
+
+    private String readFile(String filePath, int lineNumber) {
+        try {
+//            URL url = ClassLoader.getSystemResource(filePath);
+            File file = new File(filePath);
+            if (!file.exists()) {
+                return "ERROR: file \"" + filePath + "\" does not exist.";
+            }
+            BufferedReader reader = new BufferedReader(new FileReader(file));
+            StringBuffer contents = new StringBuffer();
+            String line = reader.readLine();
+            int numLines = 0;
+            while (line != null) {
+                numLines++;
+                if (numLines < lineNumber) {
+                    currHighlightStart += line.length()+1;
+                }
+                if (numLines == lineNumber) {
+                    currHighlightEnd = currHighlightStart + line.length();
+                }
+                contents.append(line);
+                contents.append('\n');
+                line = reader.readLine();
+            }
+            reader.close();
+            return contents.toString();
+        } catch (IOException ioe) {
+            return "ERROR: could not read file \"" + filePath + "\", make sure that you have mounted /project/aop on X:\\";
+        }
+    }
+
+    private void jbInit() throws Exception {
+        editor_panel.setFont(new java.awt.Font("DialogInput", 1, 12));
+        editor_panel.setLayout(borderLayout1);
+        editor_panel.add(jScrollPane1, BorderLayout.CENTER);
+        jScrollPane1.getViewport().add(editorPane, null);
+    }
+}
diff --git a/ajbrowser/src/org/aspectj/tools/ajbrowser/ui/BrowserMessageHandler.java b/ajbrowser/src/org/aspectj/tools/ajbrowser/ui/BrowserMessageHandler.java
new file mode 100644 (file)
index 0000000..11c57d6
--- /dev/null
@@ -0,0 +1,94 @@
+/********************************************************************
+ * Copyright (c) 2007 Contributors. All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://eclipse.org/legal/epl-v10.html 
+ *  
+ * Contributors: IBM Corporation - initial API and implementation 
+ *                              Helen Hawkins   - initial version (bug 148190)
+ *******************************************************************/
+package org.aspectj.tools.ajbrowser.ui;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.aspectj.ajde.Ajde;
+import org.aspectj.ajde.IUIBuildMessageHandler;
+import org.aspectj.ajde.ui.swing.ErrorDialog;
+import org.aspectj.bridge.AbortException;
+import org.aspectj.bridge.IMessage;
+import org.aspectj.bridge.IMessage.Kind;
+
+/**
+ * MessageHandler used by AjBrowser that displays ERROR messages with
+ * exceptions and ABORT messages in an error dialog. Other messages are
+ * displayed by the MessageHandlerPanel. By default INFO and WEAVEINFO 
+ * messages are ignored.
+ */
+public class BrowserMessageHandler implements IUIBuildMessageHandler {
+
+       private List ignoring;
+       private List messages;
+       
+       public BrowserMessageHandler() {
+               ignoring = new ArrayList();
+               messages = new ArrayList();
+               ignore(IMessage.INFO);
+               ignore(IMessage.WEAVEINFO);
+       }
+       
+       public boolean handleMessage(IMessage message) throws AbortException {
+               Kind messageKind = message.getKind();
+               if (isIgnoring(messageKind)) {
+                       return true;
+               }
+               if (messageKind.equals(IMessage.ABORT) 
+                               || (message.getThrown() != null) ) {
+               String stack = getStackTraceAsString(message.getThrown());
+               ErrorDialog errorDialog = new ErrorDialog(
+                               Ajde.getDefault().getRootFrame(), 
+                               "AJDE Error", message.getThrown(), message.getMessage(), stack);
+               errorDialog.setVisible(true);
+               return true;
+               }
+               messages.add(message);
+               return true;
+       }
+
+       public void dontIgnore(Kind kind) {
+           if (null != kind) {
+               ignoring.remove(kind);
+           }
+       }
+
+       public boolean isIgnoring(Kind kind) {
+               return ((null != kind) && (ignoring.contains(kind)));
+       }
+       
+       public void ignore(Kind kind) {
+           if ((null != kind) && (!ignoring.contains(kind))) {
+               ignoring.add(kind);
+           }   
+       }
+       
+       public List getMessages() {
+               return messages;
+       }
+
+    private String getStackTraceAsString(Throwable t) {
+        StringWriter stringWriter = new StringWriter();
+        if (t != null) {
+            t.printStackTrace(new PrintWriter(stringWriter));
+            return stringWriter.getBuffer().toString();
+        } 
+        return "<no stack trace available>";
+    }
+
+       public void reset() {
+               messages.clear();
+       }
+       
+}
diff --git a/ajbrowser/src/org/aspectj/tools/ajbrowser/ui/BrowserRuntimeProperties.java b/ajbrowser/src/org/aspectj/tools/ajbrowser/ui/BrowserRuntimeProperties.java
new file mode 100644 (file)
index 0000000..a00c51d
--- /dev/null
@@ -0,0 +1,38 @@
+/********************************************************************
+ * Copyright (c) 2007 Contributors. All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://eclipse.org/legal/epl-v10.html 
+ *  
+ * Contributors: IBM Corporation - initial API and implementation 
+ *                              Helen Hawkins   - initial version (bug 148190)
+ *******************************************************************/
+package org.aspectj.tools.ajbrowser.ui;
+
+import org.aspectj.ajde.IRuntimeProperties;
+import org.aspectj.ajde.ui.UserPreferencesAdapter;
+import org.aspectj.tools.ajbrowser.core.PreferenceStoreConstants;
+
+/**
+ * AjBrowser implementation of IRuntimeProperties which uses the PreferenceStoreConstant
+ * to decide which class the user has specified contains the main method
+ */
+public class BrowserRuntimeProperties implements IRuntimeProperties {
+
+       private UserPreferencesAdapter preferencesAdapter;
+       
+       public BrowserRuntimeProperties(UserPreferencesAdapter preferencesAdapter) {
+               this.preferencesAdapter = preferencesAdapter;
+       }
+       
+       public String getClassToExecute() {
+               return preferencesAdapter.getProjectPreference(PreferenceStoreConstants.RUNTIME_MAINCLASS);
+       }
+
+       public String getExecutionArgs() {
+               // not implemented by ajbrowser
+               return null;
+       }
+
+}
diff --git a/ajbrowser/src/org/aspectj/tools/ajbrowser/ui/BrowserUIAdapter.java b/ajbrowser/src/org/aspectj/tools/ajbrowser/ui/BrowserUIAdapter.java
new file mode 100644 (file)
index 0000000..2388c33
--- /dev/null
@@ -0,0 +1,29 @@
+/* *******************************************************************
+ * Copyright (c) 1999-2001 Xerox Corporation, 
+ *               2002 Palo Alto Research Center, Incorporated (PARC).
+ * All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ *  
+ * Contributors: 
+ *     Xerox/PARC     initial implementation 
+ * ******************************************************************/
+
+package org.aspectj.tools.ajbrowser.ui;
+
+import org.aspectj.ajde.IdeUIAdapter;
+import org.aspectj.tools.ajbrowser.BrowserManager;
+
+/**
+ * AjBrowser implementation if IdeUIAdapter which displays the provided
+ * information in the status bar at the bottom of the AjBrowser GUI.
+ */
+public class BrowserUIAdapter implements IdeUIAdapter {
+       
+       public void displayStatusInformation(String message) {
+               BrowserManager.getDefault().setStatusInformation(message);
+       }
+}
diff --git a/ajbrowser/src/org/aspectj/tools/ajbrowser/ui/EditorManager.java b/ajbrowser/src/org/aspectj/tools/ajbrowser/ui/EditorManager.java
new file mode 100644 (file)
index 0000000..682a5e9
--- /dev/null
@@ -0,0 +1,168 @@
+/* *******************************************************************
+ * Copyright (c) 1999-2001 Xerox Corporation, 
+ *               2002 Palo Alto Research Center, Incorporated (PARC).
+ * All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ *  
+ * Contributors: 
+ *     Xerox/PARC     initial implementation 
+ * ******************************************************************/
+
+
+package org.aspectj.tools.ajbrowser.ui;
+
+import java.awt.BorderLayout;
+import java.awt.event.KeyEvent;
+import java.io.IOException;
+import java.util.*;
+
+import javax.swing.*;
+
+import org.aspectj.ajde.*;
+import org.aspectj.bridge.ISourceLocation;
+import org.aspectj.tools.ajbrowser.core.BrowserErrorHandler;
+
+/**
+ * Responsible for controlling the editor.
+ *
+ * @todo    remove coupling to <CODE>BasicEditor</CODE>
+ * @author  Mik Kersten
+ */
+public class EditorManager {
+
+    /** @return true if input modifiers have shift down */
+    public static boolean isShiftDown(int modifiers) {
+        return (0 != (modifiers & KeyEvent.SHIFT_MASK));
+    }
+
+    private EditorAdapter editor = null;
+    private BasicEditor basicEditor = null;
+    private ArrayList editorListeners = new ArrayList();
+    private Vector editors = new Vector();
+    private JPanel editor_panel = null;
+    private Box editors_box = Box.createVerticalBox();
+
+    public EditorManager(EditorAdapter ajdeEditor) {
+       if (ajdeEditor instanceof BasicEditor) {
+               this.basicEditor = (BasicEditor)ajdeEditor;
+               editors.add(basicEditor);
+               editors_box.add(basicEditor.getPanel());
+               editor_panel = new JPanel(new BorderLayout());
+               editor_panel.add(editors_box, BorderLayout.CENTER);     
+       } else {
+               editors.add(ajdeEditor);
+               this.editor = ajdeEditor;               
+       }
+    }
+
+    public void addListener(EditorListener editorListener) {
+        editorListeners.add(editorListener);
+    }
+
+    public void removeListener(EditorListener editorListener) {
+        editorListeners.remove(editorListener);
+    }
+
+    public void notifyCurrentFileChanged(String filePath) {
+        for (Iterator it = editorListeners.iterator(); it.hasNext(); ) {
+            ((EditorListener)it.next()).currentFileChanged(filePath);
+        }
+    }
+
+    public void addViewForSourceLine(final String filePath, final int lineNumber) {
+        if (basicEditor == null) return;
+        editors_box.remove(basicEditor.getPanel());
+        final BasicEditor newEditor = new BasicEditor();
+        editors.add(newEditor);
+        
+        Runnable update = new Runnable() {
+            public void run() {
+                editors_box.add(newEditor.getPanel());
+                newEditor.showSourceLine(filePath, lineNumber, true);
+                //AjdeUIManager.getDefault().getIdeUIAdapter().resetGUI();
+            }
+        };
+
+        if (SwingUtilities.isEventDispatchThread()) {
+            update.run(); 
+        } else {
+            try {
+                SwingUtilities.invokeAndWait(update);
+            } catch (Exception e) {
+               BrowserErrorHandler.handleError("Could not add view for source line.", e);
+            }
+        }
+    }
+
+    public String getCurrFile() {
+       if (basicEditor != null) {
+               return basicEditor.getCurrFile();
+       } else {
+               return editor.getCurrFile();
+       }
+    }
+
+       
+       public void showSourceLine(ISourceLocation sourceLocation, boolean highlight) {
+               if (sourceLocation != null) {
+                       showSourceLine(
+                               sourceLocation.getSourceFile().getAbsolutePath(),
+                               sourceLocation.getLine(),
+                               highlight);     
+               }       
+       }
+
+    /**
+     * @todo    remove "instanceof AjdeManager" hack
+     */
+    public void showSourceLine(String filePath, int lineNumber, boolean highlight) {
+        if (editors.size() > 1) {
+            editors_box.removeAll();
+            editors_box.add(basicEditor.getPanel());
+            //AjdeUIManager.getDefault().getIdeUIAdapter().resetGUI();
+            editors.removeAllElements();
+            editors.add(basicEditor);
+        } 
+        
+        if (basicEditor != null) {
+               basicEditor.showSourceLine(filePath, lineNumber, highlight);
+        } else {
+               editor.showSourceLine(filePath, lineNumber, highlight);
+        }
+    }
+
+    public void pasteToCaretPos(String text) {
+        if (basicEditor != null) {
+               basicEditor.pasteToCaretPos(text);
+        } else {
+               editor.pasteToCaretPos(text);
+        }      
+    }
+
+    public void showSourcelineAnnotation(String filePath, int lineNumber, java.util.List items) {
+        editor.showSourcelineAnnotation(filePath, lineNumber, items);
+    }
+
+    public void saveContents() {
+        try {
+            for (Iterator it = editors.iterator(); it.hasNext(); ) {
+                ((EditorAdapter)it.next()).saveContents();
+            }
+        } catch (IOException ioe) {
+               BrowserErrorHandler.handleError("Editor could not save the current file.", ioe);
+        }
+    }
+
+    public JPanel getEditorPanel() {
+        if (editor_panel != null) {
+            return editor_panel;
+        } else {
+            return basicEditor.getPanel();
+        }
+    }
+}
+
+
diff --git a/ajbrowser/src/org/aspectj/tools/ajbrowser/ui/swing/BrowserOptionsPanel.java b/ajbrowser/src/org/aspectj/tools/ajbrowser/ui/swing/BrowserOptionsPanel.java
new file mode 100644 (file)
index 0000000..e01c01f
--- /dev/null
@@ -0,0 +1,159 @@
+/* *******************************************************************
+ * Copyright (c) 1999-2001 Xerox Corporation, 
+ *               2002 Palo Alto Research Center, Incorporated (PARC).
+ * All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ *  
+ * Contributors: 
+ *     Xerox/PARC     initial implementation
+ *     Helen Hawkins  Converted to new interface (bug 148190) 
+ * ******************************************************************/
+
+
+package org.aspectj.tools.ajbrowser.ui.swing;
+
+import java.io.*;
+import javax.swing.*;
+import java.awt.*;
+import javax.swing.border.*;
+import org.aspectj.ajde.ui.swing.*;
+import org.aspectj.tools.ajbrowser.BrowserManager;
+import org.aspectj.tools.ajbrowser.core.PreferenceStoreConstants;
+
+/**
+ * Panel the displays both ajc and runtime options
+ * 
+ * @author Mik Kersten
+ */
+public class BrowserOptionsPanel extends OptionsPanel {
+       
+       private static final long serialVersionUID = 4491319302490183151L;
+       private JPanel runOptions_panel = new JPanel();
+       private JPanel build_panel = new JPanel();
+       private FlowLayout flowLayout1 = new FlowLayout();
+       private JTextField classToRun_field = new JTextField();
+       private JLabel jLabel4 = new JLabel();
+       private BorderLayout borderLayout4 = new BorderLayout();
+       private JPanel buildPaths_panel = new JPanel();
+       private Box compileOptions_box2 = Box.createVerticalBox();
+       private JTextField classpath_field = new JTextField();
+       private JTextField outputPath_field = new JTextField();
+       private JTextField nonStandardOptions_field = new JTextField();
+       private JLabel jLabel16 = new JLabel();
+       private JLabel jLabel15 = new JLabel();
+       private JLabel nonStandardOptions_label = new JLabel();
+       private Box compileOptions_box3 = Box.createVerticalBox();
+       private BorderLayout borderLayout1 = new BorderLayout();
+       private Border border1;
+       private TitledBorder titledBorder1;
+       private Border border2;
+       private Border border3;
+       private TitledBorder titledBorder2;
+       private Border border4;
+
+       public BrowserOptionsPanel() {
+               try {
+                       jbInit();
+                       this.setName("AJBrowser Options");
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+       }
+
+       public void loadOptions() throws IOException {
+               outputPath_field.setText(
+                       BrowserManager.getDefault().getPreferencesAdapter().
+                               getProjectPreference(PreferenceStoreConstants.BUILD_OUTPUTPATH)
+               );
+               nonStandardOptions_field.setText(
+                       BrowserManager.getDefault().getPreferencesAdapter().
+                               getProjectPreference(PreferenceStoreConstants.NONSTANDARD_OPTIONS)
+               );
+               classpath_field.setText(
+                       BrowserManager.getDefault().getPreferencesAdapter().
+                               getProjectPreference(PreferenceStoreConstants.BUILD_CLASSPATH)
+               );
+               classToRun_field.setText(
+                       BrowserManager.getDefault().getPreferencesAdapter().
+                               getProjectPreference(PreferenceStoreConstants.RUNTIME_MAINCLASS)
+               );
+       }
+       
+       public void saveOptions() throws IOException {          
+               BrowserManager.getDefault().getPreferencesAdapter().setProjectPreference(
+                               PreferenceStoreConstants.BUILD_OUTPUTPATH, outputPath_field.getText());
+               BrowserManager.getDefault().getPreferencesAdapter().setProjectPreference(
+                               PreferenceStoreConstants.NONSTANDARD_OPTIONS, nonStandardOptions_field.getText());
+               BrowserManager.getDefault().getPreferencesAdapter().setProjectPreference(
+                               PreferenceStoreConstants.BUILD_CLASSPATH, classpath_field.getText());
+               BrowserManager.getDefault().getPreferencesAdapter().setProjectPreference(
+                               PreferenceStoreConstants.RUNTIME_MAINCLASS, classToRun_field.getText());
+       }       
+
+       private void jbInit() throws Exception {
+               border1 =
+                       BorderFactory.createEtchedBorder(Color.white, new Color(156, 156, 158));
+               titledBorder1 = new TitledBorder(border1, "Ajc Options");
+               border2 =
+                       BorderFactory.createCompoundBorder(
+                               titledBorder1,
+                               BorderFactory.createEmptyBorder(5, 5, 5, 5));
+               border3 =
+                       BorderFactory.createEtchedBorder(Color.white, new Color(156, 156, 158));
+               titledBorder2 = new TitledBorder(border3, "Run Options");
+               border4 =
+                       BorderFactory.createCompoundBorder(
+                               titledBorder2,
+                               BorderFactory.createEmptyBorder(5, 5, 5, 5));
+               this.setLayout(borderLayout1);
+               build_panel.setLayout(borderLayout4);
+               classToRun_field.setFont(new java.awt.Font("SansSerif", 0, 11));
+               classToRun_field.setMinimumSize(new Dimension(200, 21));
+               classToRun_field.setPreferredSize(new Dimension(250, 21));
+               jLabel4.setFont(new java.awt.Font("Dialog", 0, 11));
+               jLabel4.setText("Fully qualified name for main class to run: ");
+               buildPaths_panel.setLayout(flowLayout1);
+               runOptions_panel.setBorder(border4);
+               buildPaths_panel.setBorder(border2);
+               classpath_field.setFont(new java.awt.Font("SansSerif", 0, 11));
+               classpath_field.setMinimumSize(new Dimension(100, 21));
+               classpath_field.setPreferredSize(new Dimension(150, 21));
+               outputPath_field.setPreferredSize(new Dimension(225, 21));
+               outputPath_field.setMinimumSize(new Dimension(100, 21));
+               outputPath_field.setFont(new java.awt.Font("SansSerif", 0, 11));
+               nonStandardOptions_field.setPreferredSize(new Dimension(225, 21));
+               nonStandardOptions_field.setMinimumSize(new Dimension(100, 21));
+               nonStandardOptions_field.setFont(new java.awt.Font("SansSerif", 0, 11));
+               jLabel16.setText("Classpath (defaults to current directory): ");
+               jLabel16.setPreferredSize(new Dimension(200, 25));
+               jLabel16.setMaximumSize(new Dimension(400, 25));
+               jLabel16.setFont(new java.awt.Font("Dialog", 0, 11));
+               jLabel15.setMaximumSize(new Dimension(400, 25));
+               jLabel15.setFont(new java.awt.Font("Dialog", 0, 11));
+               jLabel15.setPreferredSize(new Dimension(230, 25));
+               jLabel15.setText("Output path (defaults to current directory): ");
+               nonStandardOptions_label.setMaximumSize(new Dimension(400, 25));
+               nonStandardOptions_label.setFont(new java.awt.Font("Dialog", 0, 11));
+               nonStandardOptions_label.setPreferredSize(new Dimension(230, 25));
+               nonStandardOptions_label.setText("Non-standard compiler options: ");
+               titledBorder1.setTitleFont(new java.awt.Font("Dialog", 0, 11));
+               titledBorder2.setTitleFont(new java.awt.Font("Dialog", 0, 11));
+               runOptions_panel.add(jLabel4, null);
+               runOptions_panel.add(classToRun_field, null);
+               build_panel.add(buildPaths_panel, BorderLayout.CENTER);
+               build_panel.add(runOptions_panel, BorderLayout.SOUTH);
+               compileOptions_box2.add(outputPath_field, null);
+               compileOptions_box2.add(nonStandardOptions_field, null);
+               compileOptions_box2.add(classpath_field, null);
+               compileOptions_box3.add(jLabel15, null);
+               compileOptions_box3.add(nonStandardOptions_label, null);
+               compileOptions_box3.add(jLabel16, null);
+               buildPaths_panel.add(compileOptions_box3, null);
+               buildPaths_panel.add(compileOptions_box2, null);
+               this.add(build_panel, BorderLayout.NORTH);
+       }
+
+}
diff --git a/ajbrowser/src/org/aspectj/tools/ajbrowser/ui/swing/MessageHandlerPanel.java b/ajbrowser/src/org/aspectj/tools/ajbrowser/ui/swing/MessageHandlerPanel.java
new file mode 100644 (file)
index 0000000..3222483
--- /dev/null
@@ -0,0 +1,87 @@
+/********************************************************************
+ * Copyright (c) 2007 Contributors. All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://eclipse.org/legal/epl-v10.html 
+ *  
+ * Contributors: IBM Corporation - initial API and implementation 
+ *                              Helen Hawkins   - initial version (bug 148190)
+ *******************************************************************/
+package org.aspectj.tools.ajbrowser.ui.swing;
+
+import java.awt.BorderLayout;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.DefaultListModel;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+
+import org.aspectj.ajde.Ajde;
+import org.aspectj.ajde.ui.swing.CompilerMessagesCellRenderer;
+import org.aspectj.bridge.IMessage;
+import org.aspectj.tools.ajbrowser.ui.BrowserMessageHandler;
+
+/**
+ * Panel used to display messages from the message handler
+ */
+public class MessageHandlerPanel extends JPanel {
+       
+       private static final long serialVersionUID = -2251912345065588977L;
+       private JScrollPane jScrollPane1 = new JScrollPane();
+       private JList list;
+       private DefaultListModel listModel;
+       private BorderLayout borderLayout1 = new BorderLayout();
+
+       public void showMessageHandlerPanel(BrowserMessageHandler handler, boolean showPanel) {
+               if (!showPanel) {
+                       setVisible(false);
+                       return;
+               }
+               createList(handler.getMessages());
+               
+               try {
+                       jbInit();
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }               
+               list.setModel(listModel);
+
+               MouseListener mouseListener = new MouseAdapter() {
+                       public void mouseClicked(MouseEvent e) {
+                               if (e.getClickCount() >= 1) {
+                                       int index = list.locationToIndex(e.getPoint());
+                                       if (listModel.getSize() >= index && index != -1) {
+                                               IMessage message = (IMessage) listModel
+                                                               .getElementAt(index);
+                                               Ajde.getDefault().getEditorAdapter().showSourceLine(
+                                                               message.getSourceLocation(), true);
+                                       }
+                               }
+                       }
+               };
+               list.addMouseListener(mouseListener);
+               list.setCellRenderer(new CompilerMessagesCellRenderer());
+               setVisible(showPanel);
+       }
+       
+       private void createList(List messages) {
+               list = new JList();
+               listModel = new DefaultListModel();
+               for (Iterator iterator = messages.iterator(); iterator.hasNext();) {
+                       listModel.addElement(iterator.next());
+               }
+       }
+
+       private void jbInit() throws Exception {
+               this.setLayout(borderLayout1);
+               this.add(jScrollPane1, BorderLayout.CENTER);
+               jScrollPane1.getViewport().add(list, null);
+       }
+
+}
diff --git a/ajbrowser/src/org/aspectj/tools/ajbrowser/ui/swing/TopFrame.java b/ajbrowser/src/org/aspectj/tools/ajbrowser/ui/swing/TopFrame.java
new file mode 100644 (file)
index 0000000..5949e2e
--- /dev/null
@@ -0,0 +1,599 @@
+/* *******************************************************************
+ * Copyright (c) 1999-2001 Xerox Corporation, 
+ *               2002 Palo Alto Research Center, Incorporated (PARC).
+ * All rights reserved. 
+ * This program and the accompanying materials are made available 
+ * under the terms of the Eclipse Public License v1.0 
+ * which accompanies this distribution and is available at 
+ * http://www.eclipse.org/legal/epl-v10.html 
+ *  
+ * Contributors: 
+ *     Xerox/PARC     initial implementation 
+ * ******************************************************************/
+
+package org.aspectj.tools.ajbrowser.ui.swing;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
+import java.awt.event.WindowEvent;
+import java.io.File;
+
+import javax.swing.AbstractAction;
+import javax.swing.BorderFactory;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JFileChooser;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JMenu;
+import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
+import javax.swing.JPanel;
+import javax.swing.JPopupMenu;
+import javax.swing.JSplitPane;
+import javax.swing.JToolBar;
+import javax.swing.KeyStroke;
+import javax.swing.border.Border;
+import javax.swing.filechooser.FileFilter;
+
+import org.aspectj.ajde.Ajde;
+import org.aspectj.ajde.ui.swing.AJButtonMenuCombo;
+import org.aspectj.ajde.ui.swing.BuildConfigPopupMenu;
+import org.aspectj.ajde.ui.swing.MultiStructureViewPanel;
+import org.aspectj.asm.IProgramElement;
+import org.aspectj.tools.ajbrowser.BrowserManager;
+import org.aspectj.tools.ajbrowser.ui.BrowserMessageHandler;
+import org.aspectj.tools.ajbrowser.ui.EditorManager;
+
+/**
+ * UI for standalone operation.
+ * 
+ * @author Mik Kersten
+ */
+public class TopFrame extends JFrame {
+
+       private static final long serialVersionUID = 1007473581156451702L;
+
+       private static final File CURRENT_DIR = new File(".");
+
+       public JLabel statusText_label = new JLabel();
+
+       private JPanel editor_panel = null;
+       private JPanel sourceEditor_panel = null;
+
+       private JMenuBar menuBar = new JMenuBar();
+       private JMenu jMenu1 = new JMenu();
+       private JMenu jMenu2 = new JMenu();
+       private JMenuItem projectBuild_menuItem = new JMenuItem();
+       private FlowLayout left_flowLayout = new FlowLayout();
+       private JMenuItem jMenuItem1 = new JMenuItem();
+       private JMenuItem exit_menuItem = new JMenuItem();
+       private JSplitPane top_splitPane = new JSplitPane();
+       private BorderLayout borderLayout3 = new BorderLayout();
+       private JMenuItem projectRun_menuItem = new JMenuItem();
+       private JMenuItem projectRunOther_menuItem = new JMenuItem();
+       private JPanel status_panel = new JPanel();
+       private BorderLayout borderLayout4 = new BorderLayout();
+       private Border emptyBorder = BorderFactory.createEmptyBorder();
+       private JPanel toolbar_panel = new JPanel();
+       private JSplitPane right_splitPane = new JSplitPane();
+       private MessageHandlerPanel messages_panel = null;
+       private JMenu tools_menu = new JMenu();
+       private JMenuItem joinpointProbe_menuItem = new JMenuItem();
+       private JMenuItem projectDebug_menuItem = new JMenuItem();
+       private JMenuItem svProperties_menuItem = new JMenuItem();
+       private File lastChosenDir = CURRENT_DIR;
+
+       JPanel toolBar_panel = new JPanel();
+       JToolBar build_toolBar = new JToolBar();
+       JButton closeConfig_button = new JButton();
+       JButton openConfig_button = new JButton();
+       JButton run_button = new JButton();
+       JToolBar project_toolBar = new JToolBar();
+       JButton save_button = new JButton();
+       JButton options_button = new JButton();
+       JButton editConfig_button = new JButton();
+       JToolBar file_toolBar = new JToolBar();
+       JPanel filler_panel = new JPanel();
+       BorderLayout borderLayout5 = new BorderLayout();
+       BorderLayout borderLayout6 = new BorderLayout();
+       Border border8;
+       JLabel jLabel1 = new JLabel();
+       JLabel jLabel2 = new JLabel();
+       JPanel multiView_panel;
+
+       private AJButtonMenuCombo buildCombo;
+
+       public void init(MultiStructureViewPanel multiViewPanel,
+                       MessageHandlerPanel compilerMessagesPanel, JPanel editorPanel) {
+               try {
+                       this.multiView_panel = multiViewPanel;
+                       this.messages_panel = compilerMessagesPanel;
+                       this.editor_panel = editorPanel;
+                       this.sourceEditor_panel = editorPanel;
+
+                       jbInit();
+                       svProperties_menuItem.setIcon(Ajde.getDefault()
+                                       .getIconRegistry().getBrowserOptionsIcon());
+                       projectBuild_menuItem.setIcon(Ajde.getDefault()
+                                       .getIconRegistry().getBuildIcon());
+                       projectRun_menuItem.setIcon(Ajde.getDefault()
+                                       .getIconRegistry().getExecuteIcon());
+                       projectRunOther_menuItem.setIcon(Ajde.getDefault()
+                                       .getIconRegistry().getExecuteIcon());
+                       projectDebug_menuItem.setIcon(Ajde.getDefault()
+                                       .getIconRegistry().getDebugIcon());
+
+                       this.setJMenuBar(menuBar);
+                       this.setIconImage(((ImageIcon) Ajde.getDefault()
+                                       .getIconRegistry().getStructureSwingIcon(
+                                                       IProgramElement.Kind.ADVICE)).getImage());
+                       this.setLocation(75, 10);
+                       this.setSize(900, 650);
+                       this.setTitle(BrowserManager.TITLE);
+                       // bindKeys();
+                       fixButtonBorders();
+                       messages_panel.setVisible(false);
+
+                       JPopupMenu orderMenu = new BuildConfigPopupMenu(
+                                       new AbstractAction() {
+
+                                               private static final long serialVersionUID = 1L;
+
+                                               public void actionPerformed(ActionEvent arg0) {
+                                                       BrowserManager.getDefault().saveAll();
+                                               }
+                                       });
+
+                       buildCombo = new AJButtonMenuCombo("Build", "Build", Ajde
+                                       .getDefault().getIconRegistry().getBuildIcon(), orderMenu,
+                                       false);
+
+                       build_toolBar.add(buildCombo, 1);
+                       refreshBuildMenu();
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+       }
+
+       private void refreshBuildMenu() {
+               JPopupMenu orderMenu = new BuildConfigPopupMenu(new AbstractAction() {
+                       private static final long serialVersionUID = -3204840278758386318L;
+
+                       public void actionPerformed(ActionEvent arg0) {
+                               BrowserManager.getDefault().saveAll();
+                       }
+               });
+
+               buildCombo.setMenu(orderMenu);
+       }
+
+       public void setEditorPanel(JPanel panel) {
+               editor_panel = panel;
+               right_splitPane.remove(editor_panel);
+               right_splitPane.add(panel, JSplitPane.TOP);
+               panel.setVisible(true);
+       }
+
+       /**
+        * @todo get rid of this method and make jbinit() work properly
+        */
+       private void fixButtonBorders() {
+               run_button.setBorder(null);
+               options_button.setBorder(null);
+               openConfig_button.setBorder(null);
+               closeConfig_button.setBorder(null);
+               save_button.setBorder(null);
+               editConfig_button.setBorder(null);
+       }
+
+       private void jbInit() throws Exception {
+               border8 = BorderFactory.createCompoundBorder(BorderFactory
+                               .createEtchedBorder(Color.white, new Color(156, 156, 158)),
+                               BorderFactory.createEmptyBorder(2, 2, 2, 2));
+               emptyBorder = BorderFactory.createEmptyBorder(2, 2, 2, 2);
+               jMenu1.setFont(new java.awt.Font("Dialog", 0, 11));
+               jMenu1.setText("File");
+               jMenu1.setMnemonic(KeyEvent.VK_F);
+               jMenu2.setFont(new java.awt.Font("Dialog", 0, 11));
+               jMenu2.setText("Project");
+               jMenu2.setMnemonic(KeyEvent.VK_P);
+               projectBuild_menuItem.setFont(new java.awt.Font("Dialog", 0, 11));
+               projectBuild_menuItem.setText("Build");
+               projectBuild_menuItem.setMnemonic(KeyEvent.VK_B);
+               projectBuild_menuItem.setAccelerator(KeyStroke.getKeyStroke(
+                               KeyEvent.VK_B, ActionEvent.ALT_MASK));
+
+               projectBuild_menuItem
+                               .addActionListener(new java.awt.event.ActionListener() {
+                                       public void actionPerformed(ActionEvent e) {
+                                               projectBuild_menuItem_actionPerformed(e);
+                                       }
+                               });
+               left_flowLayout.setAlignment(FlowLayout.LEFT);
+               jMenuItem1.setFont(new java.awt.Font("Dialog", 0, 11));
+               jMenuItem1.setText("Save");
+               jMenuItem1.setMnemonic(KeyEvent.VK_S);
+               jMenuItem1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
+                               ActionEvent.ALT_MASK));
+               jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
+                       public void actionPerformed(ActionEvent e) {
+                               jMenuItem1_actionPerformed(e);
+                       }
+               });
+               exit_menuItem.setFont(new java.awt.Font("Dialog", 0, 11));
+               exit_menuItem.setText("Exit");
+               exit_menuItem.addActionListener(new java.awt.event.ActionListener() {
+                       public void actionPerformed(ActionEvent e) {
+                               exit_menuItem_actionPerformed(e);
+                       }
+               });
+               top_splitPane.setPreferredSize(new Dimension(706, 800));
+               top_splitPane.setDividerSize(4);
+               this.getContentPane().setLayout(borderLayout3);
+               projectRun_menuItem.setEnabled(true);
+               projectRun_menuItem.setFont(new java.awt.Font("Dialog", 0, 11));
+               projectRun_menuItem.setText("Run in same VM");
+               projectRun_menuItem
+                               .setToolTipText("Run in same VM (hold shift down to run in separate process)");
+               projectRun_menuItem.setMnemonic(KeyEvent.VK_R);
+               projectRun_menuItem.setAccelerator(KeyStroke.getKeyStroke(
+                               KeyEvent.VK_R, ActionEvent.ALT_MASK));
+               projectRun_menuItem
+                               .addActionListener(new java.awt.event.ActionListener() {
+                                       public void actionPerformed(ActionEvent e) {
+                                               projectRun_menuItem_actionPerformed(e);
+                                       }
+                               });
+               projectRunOther_menuItem.setEnabled(true);
+               projectRunOther_menuItem.setFont(new java.awt.Font("Dialog", 0, 11));
+               projectRunOther_menuItem.setText("Run in separate process");
+               projectRunOther_menuItem.setMnemonic(KeyEvent.VK_P);
+               projectRunOther_menuItem.setAccelerator(KeyStroke.getKeyStroke(
+                               KeyEvent.VK_P, ActionEvent.ALT_MASK));
+               projectRunOther_menuItem
+                               .addActionListener(new java.awt.event.ActionListener() {
+                                       public void actionPerformed(ActionEvent e) {
+                                               projectRunOther_menuItem_actionPerformed(e);
+                                       }
+                               });
+               statusText_label.setFont(new java.awt.Font("Dialog", 0, 11));
+               statusText_label.setBorder(BorderFactory.createLoweredBevelBorder());
+               statusText_label.setMaximumSize(new Dimension(2000, 20));
+               statusText_label.setPreferredSize(new Dimension(300, 20));
+               status_panel.setLayout(borderLayout4);
+               this.addWindowListener(new java.awt.event.WindowAdapter() {
+                       public void windowClosed(WindowEvent e) {
+                               this_windowClosed(e);
+                       }
+
+                       public void windowClosing(WindowEvent e) {
+                               this_windowClosing(e);
+                       }
+               });
+               toolbar_panel.setLayout(borderLayout5);
+               right_splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT);
+               right_splitPane.setBorder(null);
+               right_splitPane.setDividerSize(4);
+               tools_menu.setFont(new java.awt.Font("Dialog", 0, 11));
+               tools_menu.setText("Tools");
+               tools_menu.setMnemonic(KeyEvent.VK_T);
+               projectDebug_menuItem.setEnabled(false);
+               projectDebug_menuItem.setFont(new java.awt.Font("Dialog", 0, 11));
+               projectDebug_menuItem.setText("Debug");
+               svProperties_menuItem
+                               .addActionListener(new java.awt.event.ActionListener() {
+                                       public void actionPerformed(ActionEvent e) {
+                                               svProperties_menuItem_actionPerformed(e);
+                                       }
+                               });
+               svProperties_menuItem.setText("Options...");
+               svProperties_menuItem.setActionCommand("AJDE Console...");
+               svProperties_menuItem.setFont(new java.awt.Font("Dialog", 0, 11));
+               svProperties_menuItem.setMnemonic(KeyEvent.VK_O);
+               svProperties_menuItem.setAccelerator(KeyStroke.getKeyStroke(
+                               KeyEvent.VK_O, ActionEvent.ALT_MASK));
+               build_toolBar.setBorder(emptyBorder);
+               build_toolBar.setFloatable(false);
+               closeConfig_button.setMaximumSize(new Dimension(100, 20));
+               closeConfig_button.setEnabled(true);
+               closeConfig_button.setFont(new java.awt.Font("Dialog", 0, 11));
+               closeConfig_button.setBorder(null);
+               closeConfig_button.setMinimumSize(new Dimension(24, 20));
+               closeConfig_button.setPreferredSize(new Dimension(20, 20));
+               closeConfig_button.setToolTipText("Close build configuration");
+               closeConfig_button.setIcon(Ajde.getDefault().getIconRegistry()
+                               .getCloseConfigIcon());
+               closeConfig_button
+                               .addActionListener(new java.awt.event.ActionListener() {
+                                       public void actionPerformed(ActionEvent e) {
+                                               closeConfig_button_actionPerformed(e);
+                                       }
+                               });
+               openConfig_button.setMaximumSize(new Dimension(100, 20));
+               openConfig_button.setEnabled(true);
+               openConfig_button.setFont(new java.awt.Font("Dialog", 0, 11));
+               openConfig_button.setBorder(null);
+               openConfig_button.setMinimumSize(new Dimension(24, 20));
+               openConfig_button.setPreferredSize(new Dimension(20, 20));
+               openConfig_button.setToolTipText("Select build configuration...");
+               openConfig_button.setIcon(Ajde.getDefault().getIconRegistry()
+                               .getOpenConfigIcon());
+               openConfig_button
+                               .addActionListener(new java.awt.event.ActionListener() {
+                                       public void actionPerformed(ActionEvent e) {
+                                               openConfig_button_actionPerformed(e);
+                                       }
+                               });
+               run_button.setMaximumSize(new Dimension(60, 20));
+               run_button.setEnabled(true);
+               run_button.setFont(new java.awt.Font("Dialog", 0, 11));
+               run_button.setBorder(null);
+               run_button.setMinimumSize(new Dimension(24, 20));
+               run_button.setPreferredSize(new Dimension(20, 20));
+               run_button
+                               .setToolTipText("Run in same VM (hold shift down to run in separate process)");
+               run_button.setIcon(Ajde.getDefault().getIconRegistry()
+                               .getExecuteIcon());
+               run_button.addActionListener(new java.awt.event.ActionListener() {
+                       public void actionPerformed(ActionEvent e) {
+                               run_button_actionPerformed(e);
+                       }
+               });
+               project_toolBar.setBorder(emptyBorder);
+               save_button.addActionListener(new java.awt.event.ActionListener() {
+                       public void actionPerformed(ActionEvent e) {
+                               save_button_actionPerformed(e);
+                       }
+               });
+               save_button.setIcon(Ajde.getDefault().getIconRegistry()
+                               .getSaveIcon());
+               save_button.setText("Save");
+               save_button.setToolTipText("Save");
+               save_button.setPreferredSize(new Dimension(55, 20));
+               save_button.setMinimumSize(new Dimension(24, 20));
+               save_button.setFont(new java.awt.Font("Dialog", 0, 11));
+               save_button.setBorder(null);
+               save_button.setMaximumSize(new Dimension(60, 20));
+               options_button.addActionListener(new java.awt.event.ActionListener() {
+                       public void actionPerformed(ActionEvent e) {
+                               options_button_actionPerformed(e);
+                       }
+               });
+               options_button.setIcon(Ajde.getDefault().getIconRegistry()
+                               .getBrowserOptionsIcon());
+               options_button.setText("Options");
+               options_button.setToolTipText("Options...");
+               options_button.setPreferredSize(new Dimension(60, 20));
+               options_button.setMinimumSize(new Dimension(24, 20));
+               options_button.setFont(new java.awt.Font("Dialog", 0, 11));
+               options_button.setBorder(null);
+               options_button.setMaximumSize(new Dimension(80, 20));
+               editConfig_button
+                               .addActionListener(new java.awt.event.ActionListener() {
+                                       public void actionPerformed(ActionEvent e) {
+                                               editConfig_button_actionPerformed(e);
+                                       }
+                               });
+               editConfig_button.setIcon(Ajde.getDefault().getIconRegistry()
+                               .getStructureSwingIcon(IProgramElement.Kind.FILE_LST));
+               editConfig_button.setText("Edit Config");
+               editConfig_button.setToolTipText("Edit Config...");
+               editConfig_button.setPreferredSize(new Dimension(80, 20));
+               editConfig_button.setMinimumSize(new Dimension(24, 20));
+               editConfig_button.setFont(new java.awt.Font("Dialog", 0, 11));
+               editConfig_button.setBorder(null);
+               editConfig_button.setMaximumSize(new Dimension(80, 20));
+               file_toolBar.setBorder(emptyBorder);
+               toolBar_panel.setLayout(borderLayout6);
+               jLabel1.setFont(new java.awt.Font("Dialog", 0, 11));
+               jLabel1.setText(" Build: ");
+               jLabel2.setText("      Run: ");
+               jLabel2.setFont(new java.awt.Font("Dialog", 0, 11));
+               // fileStructure_panel.setFont(new java.awt.Font("Dialog", 0, 11));
+               // browser_panel.setFont(new java.awt.Font("Dialog", 0, 11));
+               this.getContentPane().add(top_splitPane, BorderLayout.CENTER);
+               top_splitPane.add(right_splitPane, JSplitPane.RIGHT);
+               top_splitPane.add(multiView_panel, JSplitPane.LEFT);
+               right_splitPane.add(messages_panel, JSplitPane.BOTTOM);
+               right_splitPane.add(editor_panel, JSplitPane.TOP);
+               // structureView_pane.add(fileStructure_panel, JSplitPane.RIGHT);
+               // structureView_pane.add(browser_panel, JSplitPane.LEFT);
+               this.getContentPane().add(status_panel, BorderLayout.SOUTH);
+               status_panel.add(statusText_label, BorderLayout.CENTER);
+               this.getContentPane().add(toolbar_panel, BorderLayout.NORTH);
+               toolbar_panel.add(filler_panel, BorderLayout.CENTER);
+               toolbar_panel.add(toolBar_panel, BorderLayout.WEST);
+               // file_toolBar.add(editConfig_button, null);
+               file_toolBar.add(save_button, null);
+               file_toolBar.add(options_button, null);
+               toolBar_panel.add(build_toolBar, BorderLayout.WEST);
+               toolBar_panel.add(project_toolBar, BorderLayout.CENTER);
+               project_toolBar.add(jLabel2, null);
+               project_toolBar.add(run_button, null);
+               build_toolBar.add(jLabel1, null);
+               build_toolBar.add(openConfig_button, null);
+               build_toolBar.add(closeConfig_button, null);
+               toolBar_panel.add(file_toolBar, BorderLayout.EAST);
+               menuBar.add(jMenu1);
+               menuBar.add(jMenu2);
+               menuBar.add(tools_menu);
+               jMenu1.add(jMenuItem1);
+               jMenu1.addSeparator();
+               jMenu1.add(exit_menuItem);
+               jMenu2.add(projectBuild_menuItem);
+               jMenu2.add(projectRun_menuItem);
+               jMenu2.add(projectRunOther_menuItem);
+               // jMenu2.add(projectDebug_menuItem);
+               tools_menu.add(joinpointProbe_menuItem);
+               tools_menu.add(svProperties_menuItem);
+               top_splitPane.setDividerLocation(380);
+               right_splitPane.setDividerLocation(500);
+               project_toolBar.addSeparator();
+               project_toolBar.addSeparator();
+       }
+
+       private void exit_menuItem_actionPerformed(ActionEvent e) {
+               quit();
+       }
+
+       private void this_windowClosing(WindowEvent e) {
+               quit();
+       }
+
+       private void quit() {
+               this.dispose();
+               System.exit(0);
+       }
+
+       void treeMode_comboBox_actionPerformed(ActionEvent e) {
+       }
+
+       void save_button_actionPerformed(ActionEvent e) {
+               BrowserManager.getDefault().getEditorManager().saveContents();
+       }
+
+       void this_windowClosed(WindowEvent e) {
+               quit();
+       }
+
+       public void showMessagesPanel(BrowserMessageHandler handler) {
+               right_splitPane.setDividerLocation(right_splitPane.getHeight() - 100);
+               messages_panel.showMessageHandlerPanel(handler, true);
+       }
+
+       public void hideMessagesPanel(BrowserMessageHandler handler) {
+               right_splitPane.setDividerLocation(right_splitPane.getHeight());
+               messages_panel.showMessageHandlerPanel(handler, false);
+       }
+
+       void jMenuItem1_actionPerformed(ActionEvent e) {
+               BrowserManager.getDefault().getEditorManager().saveContents();
+       }
+
+       void projectBuild_menuItem_actionPerformed(ActionEvent e) {
+               BrowserManager.getDefault().saveAll();
+               if (EditorManager.isShiftDown(e.getModifiers())) {
+                       buildFresh();
+               } else {
+                       build();
+               }
+       }
+
+       void run_button_actionPerformed(ActionEvent e) {
+               if (EditorManager.isShiftDown(e.getModifiers())) {
+                       runInNewVM();
+               } else {
+                       runInSameVM();
+               }
+       }
+
+       void projectRunOther_menuItem_actionPerformed(ActionEvent e) {
+               runInNewVM();
+       }
+
+       void projectRun_menuItem_actionPerformed(ActionEvent e) {
+               if (EditorManager.isShiftDown(e.getModifiers())) {
+                       runInNewVM();
+               } else {
+                       runInSameVM();
+               }
+       }
+
+       void build_button_actionPerformed(ActionEvent e) {
+               BrowserManager.getDefault().saveAll();
+               if (EditorManager.isShiftDown(e.getModifiers())) {
+                       buildFresh();
+               } else {
+                       build();
+               }
+       }
+
+       void options_button_actionPerformed(ActionEvent e) {
+               Ajde.getDefault().showOptionsFrame();
+       }
+
+       void editConfig_button_actionPerformed(ActionEvent e) {
+               BrowserManager.getDefault().openFile(
+                               Ajde.getDefault().getBuildConfigManager()
+                                               .getActiveConfigFile());
+               refreshBuildMenu();
+       }
+
+       public void resetSourceEditorPanel() {
+               right_splitPane.removeAll();
+               right_splitPane.add(sourceEditor_panel, JSplitPane.TOP);
+       }
+
+       private void svProperties_menuItem_actionPerformed(ActionEvent e) {
+               Ajde.getDefault().showOptionsFrame();
+       }
+
+       private void openConfig_button_actionPerformed(ActionEvent e) {
+               JFileChooser fileChooser = new JFileChooser();
+               fileChooser.setCurrentDirectory(lastChosenDir);
+               fileChooser.setFileFilter(new FileFilter() {
+                       public boolean accept(File f) {
+                               return (f.getPath().endsWith(".lst") || f.isDirectory());
+                       }
+
+                       public String getDescription() {
+                               return "AspectJ Build Configuration (*.lst)";
+                       }
+               });
+               int returnVal = fileChooser.showOpenDialog(this);
+               if (returnVal == JFileChooser.APPROVE_OPTION) {
+                       File result = fileChooser.getSelectedFile();
+                       String path = result.getAbsolutePath();// .replace('\\', '/');
+                       if (!Ajde.getDefault().getBuildConfigManager()
+                                       .getAllBuildConfigFiles().contains(path)) {
+                               Ajde.getDefault().getBuildConfigManager()
+                                               .getAllBuildConfigFiles().add(0, path);
+                       }
+                       Ajde.getDefault().getBuildConfigManager().setActiveConfigFile(
+                                       path);
+                       lastChosenDir = result.getParentFile();
+                       if (null == lastChosenDir) {
+                               lastChosenDir = CURRENT_DIR;
+                       }
+                       refreshBuildMenu();
+               }
+       }
+
+       private void closeConfig_button_actionPerformed(ActionEvent e) {
+               Ajde.getDefault().getBuildConfigManager()
+                               .getAllBuildConfigFiles().remove(
+                                               Ajde.getDefault().getBuildConfigManager()
+                                                               .getActiveConfigFile());
+               if (!Ajde.getDefault().getBuildConfigManager()
+                               .getAllBuildConfigFiles().isEmpty()) {
+                       Ajde.getDefault().getBuildConfigManager().setActiveConfigFile(
+                                       (String) Ajde.getDefault().getBuildConfigManager()
+                                                       .getAllBuildConfigFiles().get(0));
+               }
+               refreshBuildMenu();
+       }
+
+       private void buildFresh() {
+               Ajde.getDefault().runBuildInDifferentThread(Ajde.getDefault()
+                               .getBuildConfigManager().getActiveConfigFile(), true);
+       }
+
+       private void build() {
+               Ajde.getDefault().runBuildInDifferentThread(Ajde.getDefault()
+                               .getBuildConfigManager().getActiveConfigFile(), false);
+       }
+
+       private void runInSameVM() {
+               Ajde.getDefault().runInSameVM();
+       }
+
+       private void runInNewVM() {
+               Ajde.getDefault().runInNewVM();
+       }
+
+}
diff --git a/ajbrowser/testsrc/org/aspectj/tools/ajbrowser/InteractiveBrowserTest.java b/ajbrowser/testsrc/org/aspectj/tools/ajbrowser/InteractiveBrowserTest.java
deleted file mode 100644 (file)
index ca75d04..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/* *******************************************************************
- * Copyright (c) 1999-2001 Xerox Corporation, 
- *               2002 Palo Alto Research Center, Incorporated (PARC).
- * All rights reserved. 
- * This program and the accompanying materials are made available 
- * under the terms of the Eclipse Public License v1.0 
- * which accompanies this distribution and is available at 
- * http://www.eclipse.org/legal/epl-v10.html 
- *  
- * Contributors: 
- *     Xerox/PARC     initial implementation 
- * ******************************************************************/
-
-
-package org.aspectj.tools.ajbrowser;
-
-import java.io.File;
-import javax.swing.*;
-import junit.framework.*;
-//import org.aspectj.asm.*;
-import org.aspectj.bridge.*;
-import org.aspectj.bridge.IMessage;
-import org.aspectj.ajde.*;
-
-/**
- * Define system property "ajbrowser.interactive" to run.
- * @author Mik Kersten
- */
-public class InteractiveBrowserTest extends TestCase {
-    static boolean interactive() {
-        return (null != System.getProperty("ajbrowser.interactive"));
-    }
-       public InteractiveBrowserTest(String name) {
-               super(name);
-       }
-
-       public static TestSuite suite() {
-               TestSuite result = new TestSuite();
-               result.addTestSuite(InteractiveBrowserTest.class);      
-               return result;
-       }
-
-       public void testInitNoArgs() {
-               //String[] args = { "C:/Dev/aspectj/modules/ajde/testdata/examples/figures-coverage/all.lst" }; 
-               String[] args = { };
-               BrowserManager.getDefault().init(args, true);   
-       }
-
-       public void testAddProjectTask() {
-        if (!interactive()) {
-            return;
-        }
-               BrowserManager.getDefault().init(new String[]{}, true); 
-               Ajde.getDefault().getTaskListManager().addProjectTask(
-                       "project-level task",
-                       IMessage.ERROR);
-
-               BrowserManager.getDefault().showMessages();
-
-               assertTrue("confirmation result", verifySuccess("Project task is visible."));
-       }
-       
-       public void testAddSourceLineTasks() {
-        if (!interactive()) {
-            return;
-        }
-               BrowserManager.getDefault().init(new String[]{}, true); 
-               ISourceLocation dummyLocation = new SourceLocation(new File("<file>"), 0, 0);
-
-               Ajde.getDefault().getTaskListManager().addSourcelineTask(
-                       "error task",
-                       dummyLocation,
-                       IMessage.ERROR); 
-
-               Ajde.getDefault().getTaskListManager().addSourcelineTask(
-                       "warning task",
-                       dummyLocation,
-                       IMessage.WARNING);
-               
-               Ajde.getDefault().getTaskListManager().addSourcelineTask(
-                       "info task",
-                       dummyLocation,
-                       IMessage.INFO);
-                       
-               BrowserManager.getDefault().showMessages();
-
-               assertTrue("confirmation result", verifySuccess("3 kinds of sourceline tasks are visible."));
-       }
-       
-       
-       private boolean verifySuccess(String message) {
-               int result = JOptionPane.showConfirmDialog(
-                       BrowserManager.getDefault().getRootFrame(),
-                       "Verify Results",
-                       message,
-                       JOptionPane.YES_NO_OPTION);             
-               return result == JOptionPane.YES_OPTION;
-       }
-       
-       protected void setUp() throws Exception {
-               super.setUp();
-       }
-       
-       protected void tearDown() throws Exception {
-               super.tearDown();
-       }
-}