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 7.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  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 v 2.0
  7. * which accompanies this distribution and is available at
  8. * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt
  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.IHierarchy;
  33. import org.aspectj.asm.IHierarchyListener;
  34. import org.aspectj.tools.ajbrowser.core.BrowserBuildProgressMonitor;
  35. import org.aspectj.tools.ajbrowser.core.BrowserCompilerConfiguration;
  36. import org.aspectj.tools.ajbrowser.core.BrowserErrorHandler;
  37. import org.aspectj.tools.ajbrowser.ui.BasicEditor;
  38. import org.aspectj.tools.ajbrowser.ui.BrowserMessageHandler;
  39. import org.aspectj.tools.ajbrowser.ui.BrowserRuntimeProperties;
  40. import org.aspectj.tools.ajbrowser.ui.BrowserUIAdapter;
  41. import org.aspectj.tools.ajbrowser.ui.EditorManager;
  42. import org.aspectj.tools.ajbrowser.ui.swing.BrowserOptionsPanel;
  43. import org.aspectj.tools.ajbrowser.ui.swing.MessageHandlerPanel;
  44. import org.aspectj.tools.ajbrowser.ui.swing.TopFrame;
  45. import org.aspectj.util.FileUtil;
  46. /**
  47. * IDE manager for standalone AJDE application.
  48. *
  49. * @author Mik Kersten
  50. */
  51. public class BrowserManager {
  52. public static final String TITLE = "AspectJ Browser";
  53. private static final BrowserManager INSTANCE = new BrowserManager();
  54. private EditorManager editorManager;
  55. private UserPreferencesAdapter preferencesAdapter;
  56. private static TopFrame topFrame = null;
  57. private List<String> configFiles = new ArrayList<>();
  58. private JavaBuildOptions javaBuildOptions;
  59. public static BrowserManager getDefault() {
  60. return INSTANCE;
  61. }
  62. public final IHierarchyListener VIEW_LISTENER = new IHierarchyListener() {
  63. public void elementsUpdated(IHierarchy model) {
  64. FileStructureView fsv = Ajde.getDefault().getStructureViewManager().getDefaultFileView();
  65. if (fsv != null) {
  66. fsv.setSourceFile(BrowserManager.getDefault().getEditorManager().getCurrFile());
  67. }
  68. }
  69. };
  70. public void init(String[] configFilesArgs, boolean visible) {
  71. try {
  72. javaBuildOptions = new JavaBuildOptions();
  73. preferencesAdapter = new UserPreferencesStore(true);
  74. topFrame = new TopFrame();
  75. BasicEditor ajdeEditor = new BasicEditor();
  76. editorManager = new EditorManager(ajdeEditor);
  77. BrowserMessageHandler messageHandler = new BrowserMessageHandler();
  78. Ajde.getDefault().init(new BrowserCompilerConfiguration(preferencesAdapter), messageHandler,
  79. new BrowserBuildProgressMonitor(messageHandler), ajdeEditor, new BrowserUIAdapter(), new IconRegistry(),
  80. topFrame, new BrowserRuntimeProperties(preferencesAdapter), true);
  81. setUpTopFrame(visible);
  82. addOptionsPanels();
  83. setUpConfigFiles(configFilesArgs);
  84. Ajde.getDefault().getModel().addListener(VIEW_LISTENER);
  85. } catch (Throwable t) {
  86. t.printStackTrace();
  87. BrowserErrorHandler.handleError("AJDE failed to initialize.", t);
  88. }
  89. }
  90. /**
  91. * Find and create the set of build configuration files
  92. *
  93. * @param configFilesArgs
  94. */
  95. private void setUpConfigFiles(String[] configFilesArgs) {
  96. configFiles = getConfigFilesList(configFilesArgs);
  97. if (configFiles.size() == 0) {
  98. BrowserErrorHandler.handleWarning("No build configuration selected. "
  99. + "Select a \".lst\" build configuration file in order to compile and navigate structure.");
  100. } else {
  101. Ajde.getDefault().getBuildConfigManager().setActiveConfigFile((String) configFiles.get(0));
  102. }
  103. }
  104. /**
  105. * Create the top frame of the browser
  106. */
  107. private void setUpTopFrame(boolean visible) {
  108. MultiStructureViewPanel multiViewPanel = new MultiStructureViewPanel(Ajde.getDefault().getViewManager().getBrowserPanel(),
  109. Ajde.getDefault().getFileStructurePanel());
  110. topFrame.init(multiViewPanel, new MessageHandlerPanel(), editorManager.getEditorPanel());
  111. if (visible)
  112. topFrame.setVisible(true);
  113. }
  114. public void resetEditorFrame() {
  115. topFrame.resetSourceEditorPanel();
  116. }
  117. public void resetEditor() {
  118. BrowserManager
  119. .getDefault()
  120. .getRootFrame()
  121. .setSize(BrowserManager.getDefault().getRootFrame().getWidth() + 1,
  122. BrowserManager.getDefault().getRootFrame().getHeight() + 1);
  123. BrowserManager.getDefault().getRootFrame().doLayout();
  124. BrowserManager.getDefault().getRootFrame().repaint();
  125. }
  126. public void setStatusInformation(String text) {
  127. topFrame.statusText_label.setText(text);
  128. }
  129. public void setEditorStatusText(String text) {
  130. topFrame.setTitle(BrowserManager.TITLE + " - " + text);
  131. }
  132. public void saveAll() {
  133. editorManager.saveContents();
  134. }
  135. public JFrame getRootFrame() {
  136. return topFrame;
  137. }
  138. public void openFile(String filePath) {
  139. try {
  140. if (filePath.endsWith(".lst")) {
  141. Ajde.getDefault().getBuildConfigEditor().openFile(filePath);
  142. topFrame.setEditorPanel(Ajde.getDefault().getBuildConfigEditor());
  143. } else if (FileUtil.hasSourceSuffix(filePath)) {
  144. editorManager.showSourceLine(filePath, 0, false);
  145. } else {
  146. BrowserErrorHandler.handleError("File: " + filePath
  147. + " could not be opened because the extension was not recoginzed.");
  148. }
  149. } catch (IOException ioe) {
  150. BrowserErrorHandler.handleError("Could not open file: " + filePath, ioe);
  151. } catch (InvalidResourceException ire) {
  152. BrowserErrorHandler.handleError("Invalid file: " + filePath, ire);
  153. }
  154. }
  155. private List<String> getConfigFilesList(String[] configFiles) {
  156. List<String> configs = new ArrayList<>();
  157. for (String configFile : configFiles) {
  158. if (configFile.endsWith(BuildConfigManager.CONFIG_FILE_SUFFIX)) {
  159. configs.add(configFile);
  160. }
  161. }
  162. return configs;
  163. }
  164. /**
  165. * Add the different options panels to the main options frame (adds panels for java compliance, compiler warnings, debug
  166. * warnings, other java options and options specific to ajbrowser)
  167. */
  168. private void addOptionsPanels() {
  169. Ajde.getDefault().getOptionsFrame().addOptionsPanel(new JavaComplianceOptionsPanel(javaBuildOptions));
  170. Ajde.getDefault().getOptionsFrame().addOptionsPanel(new JavaCompilerWarningsOptionsPanel(javaBuildOptions));
  171. Ajde.getDefault().getOptionsFrame().addOptionsPanel(new JavaOtherOptionsPanel(javaBuildOptions));
  172. Ajde.getDefault().getOptionsFrame().addOptionsPanel(new JavaDebugOptionsPanel(javaBuildOptions));
  173. Ajde.getDefault().getOptionsFrame().addOptionsPanel(new BrowserOptionsPanel());
  174. }
  175. /**
  176. * @return the EditorManager
  177. */
  178. public EditorManager getEditorManager() {
  179. return editorManager;
  180. }
  181. /**
  182. * @return the UserPreferencesAdapter
  183. */
  184. public UserPreferencesAdapter getPreferencesAdapter() {
  185. return preferencesAdapter;
  186. }
  187. /**
  188. * @return the JavaBuildOptions instance being used
  189. */
  190. public JavaBuildOptions getJavaBuildOptions() {
  191. return javaBuildOptions;
  192. }
  193. }