You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

BrowserManager.java 8.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. /* *******************************************************************
  2. * Copyright (c) 1999-2001 Xerox Corporation,
  3. * 2002 Palo Alto Research Center, Incorporated (PARC).
  4. * All rights reserved.
  5. * This program and the accompanying materials are made available
  6. * under the terms of the Eclipse Public License v1.0
  7. * which accompanies this distribution and is available at
  8. * http://www.eclipse.org/legal/epl-v10.html
  9. *
  10. * Contributors:
  11. * Xerox/PARC initial implementation
  12. * Helen Hawkins Converted to new interface (bug 148190)
  13. * ******************************************************************/
  14. package org.aspectj.tools.ajbrowser;
  15. import java.io.IOException;
  16. import java.util.ArrayList;
  17. import java.util.List;
  18. import javax.swing.JFrame;
  19. import org.aspectj.ajde.Ajde;
  20. import org.aspectj.ajde.IconRegistry;
  21. import org.aspectj.ajde.internal.BuildConfigManager;
  22. import org.aspectj.ajde.ui.FileStructureView;
  23. import org.aspectj.ajde.ui.InvalidResourceException;
  24. import org.aspectj.ajde.ui.UserPreferencesAdapter;
  25. import org.aspectj.ajde.ui.internal.UserPreferencesStore;
  26. import org.aspectj.ajde.ui.javaoptions.JavaBuildOptions;
  27. import org.aspectj.ajde.ui.javaoptions.JavaCompilerWarningsOptionsPanel;
  28. import org.aspectj.ajde.ui.javaoptions.JavaComplianceOptionsPanel;
  29. import org.aspectj.ajde.ui.javaoptions.JavaDebugOptionsPanel;
  30. import org.aspectj.ajde.ui.javaoptions.JavaOtherOptionsPanel;
  31. import org.aspectj.ajde.ui.swing.MultiStructureViewPanel;
  32. import org.aspectj.asm.AsmManager;
  33. import org.aspectj.asm.IHierarchy;
  34. import org.aspectj.asm.IHierarchyListener;
  35. import org.aspectj.tools.ajbrowser.core.BrowserBuildProgressMonitor;
  36. import org.aspectj.tools.ajbrowser.core.BrowserCompilerConfiguration;
  37. import org.aspectj.tools.ajbrowser.core.BrowserErrorHandler;
  38. import org.aspectj.tools.ajbrowser.ui.BasicEditor;
  39. import org.aspectj.tools.ajbrowser.ui.BrowserMessageHandler;
  40. import org.aspectj.tools.ajbrowser.ui.BrowserRuntimeProperties;
  41. import org.aspectj.tools.ajbrowser.ui.BrowserUIAdapter;
  42. import org.aspectj.tools.ajbrowser.ui.EditorManager;
  43. import org.aspectj.tools.ajbrowser.ui.swing.BrowserOptionsPanel;
  44. import org.aspectj.tools.ajbrowser.ui.swing.MessageHandlerPanel;
  45. import org.aspectj.tools.ajbrowser.ui.swing.TopFrame;
  46. import org.aspectj.util.FileUtil;
  47. /**
  48. * IDE manager for standalone AJDE application.
  49. *
  50. * @author Mik Kersten
  51. */
  52. public class BrowserManager {
  53. public static final String TITLE = "AspectJ Browser";
  54. private static final BrowserManager INSTANCE = new BrowserManager();
  55. private EditorManager editorManager;
  56. private UserPreferencesAdapter preferencesAdapter;
  57. private static TopFrame topFrame = null;
  58. private List configFiles = new ArrayList();
  59. private JavaBuildOptions javaBuildOptions;
  60. public static BrowserManager getDefault() {
  61. return INSTANCE;
  62. }
  63. public final IHierarchyListener VIEW_LISTENER = new IHierarchyListener() {
  64. public void elementsUpdated(IHierarchy model) {
  65. FileStructureView fsv = Ajde.getDefault().getStructureViewManager().getDefaultFileView();
  66. if (fsv != null) {
  67. fsv.setSourceFile(BrowserManager.getDefault().getEditorManager().getCurrFile());
  68. }
  69. }
  70. };
  71. public void init(String[] configFilesArgs, boolean visible) {
  72. try {
  73. javaBuildOptions = new JavaBuildOptions();
  74. preferencesAdapter = new UserPreferencesStore(true);
  75. topFrame = new TopFrame();
  76. BasicEditor ajdeEditor = new BasicEditor();
  77. editorManager = new EditorManager(ajdeEditor);
  78. BrowserMessageHandler messageHandler = new BrowserMessageHandler();
  79. Ajde.getDefault().init(
  80. new BrowserCompilerConfiguration(preferencesAdapter),
  81. messageHandler,
  82. new BrowserBuildProgressMonitor(messageHandler),
  83. ajdeEditor,
  84. new BrowserUIAdapter(),
  85. new IconRegistry(),
  86. topFrame,
  87. new BrowserRuntimeProperties(preferencesAdapter),
  88. true);
  89. setUpTopFrame(visible);
  90. addOptionsPanels();
  91. setUpConfigFiles(configFilesArgs);
  92. AsmManager.getDefault().addListener(VIEW_LISTENER);
  93. } catch (Throwable t) {
  94. t.printStackTrace();
  95. BrowserErrorHandler.handleError("AJDE failed to initialize.", t);
  96. }
  97. }
  98. /**
  99. * Find and create the set of build configuration files
  100. * @param configFilesArgs
  101. */
  102. private void setUpConfigFiles(String[] configFilesArgs) {
  103. configFiles = getConfigFilesList(configFilesArgs);
  104. if (configFiles.size() == 0) {
  105. BrowserErrorHandler
  106. .handleWarning("No build configuration selected. "
  107. + "Select a \".lst\" build configuration file in order to compile and navigate structure.");
  108. } else {
  109. Ajde.getDefault().getBuildConfigManager().setActiveConfigFile(
  110. (String)configFiles.get(0));
  111. }
  112. }
  113. /**
  114. * Create the top frame of the browser
  115. */
  116. private void setUpTopFrame(boolean visible) {
  117. MultiStructureViewPanel multiViewPanel = new MultiStructureViewPanel(
  118. Ajde.getDefault().getViewManager()
  119. .getBrowserPanel(), Ajde.getDefault()
  120. .getFileStructurePanel());
  121. topFrame.init(multiViewPanel, new MessageHandlerPanel(),
  122. editorManager.getEditorPanel());
  123. if (visible)
  124. topFrame.setVisible(true);
  125. }
  126. public void resetEditorFrame() {
  127. topFrame.resetSourceEditorPanel();
  128. }
  129. public void resetEditor() {
  130. BrowserManager.getDefault().getRootFrame().setSize(BrowserManager.getDefault().getRootFrame().getWidth()+1, BrowserManager.getDefault().getRootFrame().getHeight()+1);
  131. BrowserManager.getDefault().getRootFrame().doLayout();
  132. BrowserManager.getDefault().getRootFrame().repaint();
  133. }
  134. public void setStatusInformation(String text) {
  135. topFrame.statusText_label.setText(text);
  136. }
  137. public void setEditorStatusText(String text) {
  138. topFrame.setTitle(BrowserManager.TITLE + " - " + text);
  139. }
  140. public void saveAll() {
  141. editorManager.saveContents();
  142. }
  143. public JFrame getRootFrame() {
  144. return topFrame;
  145. }
  146. public void openFile(String filePath) {
  147. try {
  148. if (filePath.endsWith(".lst")) {
  149. Ajde.getDefault().getBuildConfigEditor().openFile(filePath);
  150. topFrame.setEditorPanel(Ajde.getDefault().getBuildConfigEditor());
  151. } else if (FileUtil.hasSourceSuffix(filePath)){
  152. editorManager.showSourceLine(filePath, 0, false);
  153. } else {
  154. BrowserErrorHandler
  155. .handleError("File: "
  156. + filePath
  157. + " could not be opened because the extension was not recoginzed.");
  158. }
  159. } catch (IOException ioe) {
  160. BrowserErrorHandler.handleError("Could not open file: "
  161. + filePath, ioe);
  162. } catch (InvalidResourceException ire) {
  163. BrowserErrorHandler.handleError("Invalid file: " + filePath, ire);
  164. }
  165. }
  166. private List getConfigFilesList(String[] configFiles) {
  167. List configs = new ArrayList();
  168. for (int i = 0; i < configFiles.length; i++) {
  169. if (configFiles[i].endsWith(BuildConfigManager.CONFIG_FILE_SUFFIX)) {
  170. configs.add(configFiles[i]);
  171. }
  172. }
  173. return configs;
  174. }
  175. /**
  176. * Add the different options panels to the main options frame
  177. * (adds panels for java compliance, compiler warnings, debug
  178. * warnings, other java options and options specific to
  179. * ajbrowser)
  180. */
  181. private void addOptionsPanels() {
  182. Ajde.getDefault().getOptionsFrame().addOptionsPanel(
  183. new JavaComplianceOptionsPanel(javaBuildOptions));
  184. Ajde.getDefault().getOptionsFrame().addOptionsPanel(
  185. new JavaCompilerWarningsOptionsPanel(javaBuildOptions));
  186. Ajde.getDefault().getOptionsFrame().addOptionsPanel(
  187. new JavaOtherOptionsPanel(javaBuildOptions));
  188. Ajde.getDefault().getOptionsFrame().addOptionsPanel(
  189. new JavaDebugOptionsPanel(javaBuildOptions));
  190. Ajde.getDefault().getOptionsFrame().addOptionsPanel(
  191. new BrowserOptionsPanel());
  192. }
  193. /**
  194. * @return the EditorManager
  195. */
  196. public EditorManager getEditorManager() {
  197. return editorManager;
  198. }
  199. /**
  200. * @return the UserPreferencesAdapter
  201. */
  202. public UserPreferencesAdapter getPreferencesAdapter() {
  203. return preferencesAdapter;
  204. }
  205. /**
  206. * @return the JavaBuildOptions instance being used
  207. */
  208. public JavaBuildOptions getJavaBuildOptions() {
  209. return javaBuildOptions;
  210. }
  211. }