|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- /* *******************************************************************
- * 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 v 2.0
- * which accompanies this distribution and is available at
- * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt
- *
- * Contributors:
- * Xerox/PARC initial implementation
- * Helen Hawkins Converted to new interface (bug 148190)
- * ******************************************************************/
-
- package org.aspectj.ajde.ui;
-
- import java.util.ArrayList;
- import java.util.List;
-
- import org.aspectj.ajde.Ajde;
- import org.aspectj.ajde.ui.internal.NavigationHistoryModel;
- import org.aspectj.ajde.ui.internal.TreeStructureViewBuilder;
- import org.aspectj.asm.IHierarchy;
- import org.aspectj.asm.IHierarchyListener;
- import org.aspectj.asm.IProgramElement;
- import org.aspectj.asm.IRelationship;
- import org.aspectj.asm.internal.AspectJElementHierarchy;
-
- /**
- * @author Mik Kersten
- */
- public class StructureViewManager {
-
- private final TreeStructureViewBuilder treeViewBuilder;
- // private String buildConfigFilePath = null;
-
- private final NavigationHistoryModel historyModel = new NavigationHistoryModel();
- private final List structureViews = new ArrayList();
- private FileStructureView defaultFileView = null;
-
- private static final StructureViewProperties DEFAULT_VIEW_PROPERTIES;
- private static final List AVAILABLE_RELATIONS;
-
- public final IHierarchyListener VIEW_LISTENER = new IHierarchyListener() {
- public void elementsUpdated(IHierarchy model) {
- // updating structure views:
-
- for (Object structureView : structureViews) {
- treeViewBuilder.buildView((StructureView) structureView, (AspectJElementHierarchy) model);
- }
- }
- };
-
- /**
- * @param nodeFactory concrete factory for creating view nodes
- */
- public StructureViewManager(StructureViewNodeFactory nodeFactory) {
- treeViewBuilder = new TreeStructureViewBuilder(nodeFactory);
-
- Ajde.getDefault().getModel().addListener(VIEW_LISTENER);
- }
-
- public void fireNavigateBackAction(StructureView view) {
- IProgramElement backNode = historyModel.navigateBack();
-
- if (backNode == null) {
- Ajde.getDefault().getIdeUIAdapter().displayStatusInformation("No node to navigate back to in history");
- } else {
- navigationAction(backNode, false);
- }
- }
-
- public void fireNavigateForwardAction(StructureView view) {
- IProgramElement forwardNode = historyModel.navigateForward();
-
- if (forwardNode == null) {
- Ajde.getDefault().getIdeUIAdapter().displayStatusInformation("No node to navigate forward to in history");
- } else {
- navigationAction(forwardNode, false);
- }
- }
-
- /**
- * Only navigations of the default view are registered with the history.
- *
- * @param newFilePath the canonicalized path to the new file
- */
- public void fireNavigationAction(String newFilePath, int lineNumber) {
- IProgramElement currNode = Ajde.getDefault().getModel().getHierarchy().findElementForSourceLine(newFilePath, lineNumber);
-
- if (currNode != null) {
- navigationAction(currNode, true);
- }
- }
-
- public void fireNavigationAction(IProgramElement pe, boolean isLink) {
- navigationAction(pe, isLink);
- }
-
- /**
- * Highlights the given node in all structure views. If the node represents code and as such is below the granularity visible in
- * the view the parent is highlighted, along with the corresponding sourceline.
- */
- private void navigationAction(IProgramElement node, boolean recordHistory) {
- if (node == null)
- return;
- // navigating to node: " + node + ", recordHistory: " + recordHistory
- if (recordHistory)
- historyModel.navigateToNode(node);
- if (defaultFileView != null && node.getSourceLocation() != null) {
- String newFilePath = node.getSourceLocation().getSourceFile().getAbsolutePath();
- if (defaultFileView.getSourceFile() != null && !defaultFileView.getSourceFile().equals(newFilePath)) {
- defaultFileView.setSourceFile(newFilePath);
- treeViewBuilder.buildView(defaultFileView, Ajde.getDefault().getModel().getHierarchy());
- }
- }
-
- for (Object structureView : structureViews) {
- StructureView view = (StructureView) structureView;
- if (!(view instanceof GlobalStructureView) || !recordHistory || defaultFileView == null) {
- if (node.getKind().equals(IProgramElement.Kind.CODE)) {
- IProgramElement parentNode = node.getParent();
- if (parentNode != null) {
- IStructureViewNode currNode = view.findCorrespondingViewNode(parentNode);
- int lineOffset = node.getSourceLocation().getLine() - parentNode.getSourceLocation().getLine();
- if (currNode != null)
- view.setActiveNode(currNode, lineOffset);
- }
- } else {
- IStructureViewNode currNode = view.findCorrespondingViewNode(node);
- if (currNode != null)
- view.setActiveNode(currNode);
- }
- }
- }
- }
-
- public void refreshView(StructureView view) {
- IStructureViewNode activeNode = view.getActiveNode();
- treeViewBuilder.buildView(view, Ajde.getDefault().getModel().getHierarchy());
- view.setActiveNode(activeNode);
- }
-
- public StructureViewProperties getDefaultViewProperties() {
- return DEFAULT_VIEW_PROPERTIES;
- }
-
- /**
- * Returns the list of all available relations.
- */
- public List getAvailableRelations() {
- return AVAILABLE_RELATIONS;
- }
-
- /**
- * @param properties can not be null
- */
- public GlobalStructureView createGlobalView(GlobalViewProperties properties) {
- GlobalStructureView view = new GlobalStructureView(properties);
- structureViews.add(view);
- return view;
- }
-
- /**
- * @param sourceFilePath full path to corresponding source file
- * @param properties if null default properties will be used
- * @return always returns a view intance
- */
- public FileStructureView createViewForSourceFile(String sourceFilePath, StructureViewProperties properties) {
- // creating view for file:
- if (properties == null)
- properties = DEFAULT_VIEW_PROPERTIES;
- FileStructureView view = new FileStructureView(properties);
- view.setSourceFile(sourceFilePath);
- treeViewBuilder.buildView(view, Ajde.getDefault().getModel().getHierarchy());
- structureViews.add(view);
- return view;
- }
-
- /**
- * @return true if the view was found and removed, false otherwise
- */
- public boolean deleteView(StructureView view) {
- return structureViews.remove(view);
- }
-
- public void setDefaultFileView(FileStructureView defaultFileView) {
- this.defaultFileView = defaultFileView;
- }
-
- public FileStructureView getDefaultFileView() {
- return defaultFileView;
- }
-
- static {
- AVAILABLE_RELATIONS = new ArrayList();
- AVAILABLE_RELATIONS.add(IRelationship.Kind.ADVICE);
- AVAILABLE_RELATIONS.add(IRelationship.Kind.DECLARE);
-
- DEFAULT_VIEW_PROPERTIES = new StructureViewProperties();
- DEFAULT_VIEW_PROPERTIES.setRelations(AVAILABLE_RELATIONS);
- }
-
- }
-
- // this.multiFileViewMode = multiFileViewMode;
- // if (!multiFileViewMode) {
- // structureViews.add(DEFAULT_FILE_VIEW);
- // structureViews.add(DECLARATION_VIEW);
- // structureViews.add(CROSSCUTTING_VIEW);
- // structureViews.add(INHERITANCE_VIEW);
- // }
-
- // public GlobalStructureView getGlobalStructureView(StructureViewProperties.Hierarchy hierarchy) {
- // if (hierarchy == StructureViewProperties.Hierarchy.CROSSCUTTING) {
- // return CROSSCUTTING_VIEW;
- // } else if (hierarchy == StructureViewProperties.Hierarchy.INHERITANCE) {
- // return INHERITANCE_VIEW;
- // } else {
- // return DECLARATION_VIEW;
- // }
- // }
-
- // public FileStructureView getDefaultFileStructureView() {
- // return DEFAULT_FILE_VIEW;
- // }
-
|