]> git.uio.no Git - ifi-stolz-refaktor.git/blob - case-study/jdt-before/ui/org/eclipse/jdt/internal/ui/javaeditor/BasicJavaEditorActionContributor.java
Case Study: adding data and statistics
[ifi-stolz-refaktor.git] / case-study / jdt-before / ui / org / eclipse / jdt / internal / ui / javaeditor / BasicJavaEditorActionContributor.java
1 /*******************************************************************************
2  * Copyright (c) 2000, 2011 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  *     IBM Corporation - initial API and implementation
10  *******************************************************************************/
11 package org.eclipse.jdt.internal.ui.javaeditor;
12
13 import java.util.ArrayList;
14 import java.util.Iterator;
15 import java.util.List;
16 import java.util.ResourceBundle;
17
18 import org.eclipse.jface.action.IAction;
19 import org.eclipse.jface.action.IMenuManager;
20 import org.eclipse.jface.action.IStatusLineManager;
21 import org.eclipse.jface.action.MenuManager;
22 import org.eclipse.jface.action.Separator;
23
24 import org.eclipse.ui.IActionBars;
25 import org.eclipse.ui.IEditorPart;
26 import org.eclipse.ui.IWorkbenchActionConstants;
27 import org.eclipse.ui.IWorkbenchPage;
28 import org.eclipse.ui.actions.RetargetAction;
29
30 import org.eclipse.ui.texteditor.BasicTextEditorActionContributor;
31 import org.eclipse.ui.texteditor.ITextEditor;
32 import org.eclipse.ui.texteditor.ITextEditorActionConstants;
33 import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;
34 import org.eclipse.ui.texteditor.RetargetTextEditorAction;
35
36 import org.eclipse.jdt.ui.actions.IJavaEditorActionDefinitionIds;
37
38 import org.eclipse.jdt.internal.ui.actions.CopyQualifiedNameAction;
39 import org.eclipse.jdt.internal.ui.actions.FoldingActionGroup;
40 import org.eclipse.jdt.internal.ui.javaeditor.selectionactions.GoToNextPreviousMemberAction;
41 import org.eclipse.jdt.internal.ui.javaeditor.selectionactions.StructureSelectionAction;
42
43 /**
44  * Common base class for action contributors for Java editors.
45  */
46 public class BasicJavaEditorActionContributor extends BasicTextEditorActionContributor {
47
48         private List<RetargetAction> fPartListeners= new ArrayList<RetargetAction>();
49
50         private TogglePresentationAction fTogglePresentation;
51         private ToggleMarkOccurrencesAction fToggleMarkOccurrencesAction;
52         private ToggleBreadcrumbAction fToggleBreadcrumbAction;
53
54         private RetargetTextEditorAction fGotoMatchingBracket;
55         private RetargetTextEditorAction fShowOutline;
56         private RetargetTextEditorAction fOpenStructure;
57         private RetargetTextEditorAction fOpenHierarchy;
58
59         private RetargetTextEditorAction fRetargetShowInformationAction;
60
61         private RetargetTextEditorAction fStructureSelectEnclosingAction;
62         private RetargetTextEditorAction fStructureSelectNextAction;
63         private RetargetTextEditorAction fStructureSelectPreviousAction;
64         private RetargetTextEditorAction fStructureSelectHistoryAction;
65
66         private RetargetTextEditorAction fGotoNextMemberAction;
67         private RetargetTextEditorAction fGotoPreviousMemberAction;
68
69         private RetargetTextEditorAction fRemoveOccurrenceAnnotationsAction;
70
71         public BasicJavaEditorActionContributor() {
72                 super();
73
74                 ResourceBundle b= JavaEditorMessages.getBundleForConstructedKeys();
75
76                 fRetargetShowInformationAction= new RetargetTextEditorAction(b, "Editor.ShowInformation."); //$NON-NLS-1$
77                 fRetargetShowInformationAction.setActionDefinitionId(ITextEditorActionDefinitionIds.SHOW_INFORMATION);
78
79                 // actions that are "contributed" to editors, they are considered belonging to the active editor
80                 fTogglePresentation= new TogglePresentationAction();
81
82                 fToggleMarkOccurrencesAction= new ToggleMarkOccurrencesAction();
83
84                 fGotoMatchingBracket= new RetargetTextEditorAction(b, "GotoMatchingBracket."); //$NON-NLS-1$
85                 fGotoMatchingBracket.setActionDefinitionId(IJavaEditorActionDefinitionIds.GOTO_MATCHING_BRACKET);
86
87                 fShowOutline= new RetargetTextEditorAction(JavaEditorMessages.getBundleForConstructedKeys(), "ShowOutline."); //$NON-NLS-1$
88                 fShowOutline.setActionDefinitionId(IJavaEditorActionDefinitionIds.SHOW_OUTLINE);
89
90                 fOpenHierarchy= new RetargetTextEditorAction(JavaEditorMessages.getBundleForConstructedKeys(), "OpenHierarchy."); //$NON-NLS-1$
91                 fOpenHierarchy.setActionDefinitionId(IJavaEditorActionDefinitionIds.OPEN_HIERARCHY);
92
93                 fOpenStructure= new RetargetTextEditorAction(JavaEditorMessages.getBundleForConstructedKeys(), "OpenStructure."); //$NON-NLS-1$
94                 fOpenStructure.setActionDefinitionId(IJavaEditorActionDefinitionIds.OPEN_STRUCTURE);
95
96                 fStructureSelectEnclosingAction= new RetargetTextEditorAction(b, "StructureSelectEnclosing."); //$NON-NLS-1$
97                 fStructureSelectEnclosingAction.setActionDefinitionId(IJavaEditorActionDefinitionIds.SELECT_ENCLOSING);
98                 fStructureSelectNextAction= new RetargetTextEditorAction(b, "StructureSelectNext."); //$NON-NLS-1$
99                 fStructureSelectNextAction.setActionDefinitionId(IJavaEditorActionDefinitionIds.SELECT_NEXT);
100                 fStructureSelectPreviousAction= new RetargetTextEditorAction(b, "StructureSelectPrevious."); //$NON-NLS-1$
101                 fStructureSelectPreviousAction.setActionDefinitionId(IJavaEditorActionDefinitionIds.SELECT_PREVIOUS);
102                 fStructureSelectHistoryAction= new RetargetTextEditorAction(b, "StructureSelectHistory."); //$NON-NLS-1$
103                 fStructureSelectHistoryAction.setActionDefinitionId(IJavaEditorActionDefinitionIds.SELECT_LAST);
104
105                 fGotoNextMemberAction= new RetargetTextEditorAction(b, "GotoNextMember."); //$NON-NLS-1$
106                 fGotoNextMemberAction.setActionDefinitionId(IJavaEditorActionDefinitionIds.GOTO_NEXT_MEMBER);
107                 fGotoPreviousMemberAction= new RetargetTextEditorAction(b, "GotoPreviousMember."); //$NON-NLS-1$
108                 fGotoPreviousMemberAction.setActionDefinitionId(IJavaEditorActionDefinitionIds.GOTO_PREVIOUS_MEMBER);
109
110                 fRemoveOccurrenceAnnotationsAction= new RetargetTextEditorAction(b, "RemoveOccurrenceAnnotations."); //$NON-NLS-1$
111                 fRemoveOccurrenceAnnotationsAction.setActionDefinitionId(IJavaEditorActionDefinitionIds.REMOVE_OCCURRENCE_ANNOTATIONS);
112         }
113
114         protected final void markAsPartListener(RetargetAction action) {
115                 fPartListeners.add(action);
116         }
117
118         /*
119          * @see IEditorActionBarContributor#init(IActionBars, IWorkbenchPage)
120          */
121         @Override
122         public void init(IActionBars bars, IWorkbenchPage page) {
123                 fToggleBreadcrumbAction= new ToggleBreadcrumbAction(page);
124                 Iterator<RetargetAction> e= fPartListeners.iterator();
125                 while (e.hasNext())
126                         page.addPartListener(e.next());
127
128                 super.init(bars, page);
129
130                 bars.setGlobalActionHandler(ITextEditorActionDefinitionIds.TOGGLE_SHOW_SELECTED_ELEMENT_ONLY, fTogglePresentation);
131                 bars.setGlobalActionHandler(IJavaEditorActionDefinitionIds.TOGGLE_MARK_OCCURRENCES, fToggleMarkOccurrencesAction);
132                 bars.setGlobalActionHandler(IJavaEditorActionDefinitionIds.TOGGLE_BREADCRUMB, fToggleBreadcrumbAction);
133         }
134
135         /*
136          * @see org.eclipse.ui.part.EditorActionBarContributor#contributeToMenu(org.eclipse.jface.action.IMenuManager)
137          */
138         @Override
139         public void contributeToMenu(IMenuManager menu) {
140
141                 super.contributeToMenu(menu);
142
143                 IMenuManager editMenu= menu.findMenuUsingPath(IWorkbenchActionConstants.M_EDIT);
144                 if (editMenu != null) {
145
146                         MenuManager structureSelection= new MenuManager(JavaEditorMessages.ExpandSelectionMenu_label, "expandSelection"); //$NON-NLS-1$
147                         editMenu.insertAfter(ITextEditorActionConstants.SELECT_ALL, structureSelection);
148                         structureSelection.add(fStructureSelectEnclosingAction);
149                         structureSelection.add(fStructureSelectNextAction);
150                         structureSelection.add(fStructureSelectPreviousAction);
151                         structureSelection.add(fStructureSelectHistoryAction);
152
153                         editMenu.appendToGroup(ITextEditorActionConstants.GROUP_INFORMATION, fRetargetShowInformationAction);
154                 }
155
156                 IMenuManager navigateMenu= menu.findMenuUsingPath(IWorkbenchActionConstants.M_NAVIGATE);
157                 if (navigateMenu != null) {
158                         navigateMenu.appendToGroup(IWorkbenchActionConstants.SHOW_EXT, fShowOutline);
159                         navigateMenu.appendToGroup(IWorkbenchActionConstants.SHOW_EXT, fOpenHierarchy);
160                 }
161
162                 IMenuManager gotoMenu= menu.findMenuUsingPath("navigate/goTo"); //$NON-NLS-1$
163                 if (gotoMenu != null) {
164                         gotoMenu.add(new Separator("additions2"));  //$NON-NLS-1$
165                         gotoMenu.appendToGroup("additions2", fGotoPreviousMemberAction); //$NON-NLS-1$
166                         gotoMenu.appendToGroup("additions2", fGotoNextMemberAction); //$NON-NLS-1$
167                         gotoMenu.appendToGroup("additions2", fGotoMatchingBracket); //$NON-NLS-1$
168                 }
169         }
170
171         /*
172          * @see EditorActionBarContributor#setActiveEditor(IEditorPart)
173          */
174         @Override
175         public void setActiveEditor(IEditorPart part) {
176
177                 super.setActiveEditor(part);
178
179                 ITextEditor textEditor= null;
180                 if (part instanceof ITextEditor)
181                         textEditor= (ITextEditor)part;
182
183                 fTogglePresentation.setEditor(textEditor);
184                 fToggleMarkOccurrencesAction.setEditor(textEditor);
185
186                 fGotoMatchingBracket.setAction(getAction(textEditor, GotoMatchingBracketAction.GOTO_MATCHING_BRACKET));
187                 fShowOutline.setAction(getAction(textEditor, IJavaEditorActionDefinitionIds.SHOW_OUTLINE));
188                 fOpenHierarchy.setAction(getAction(textEditor, IJavaEditorActionDefinitionIds.OPEN_HIERARCHY));
189                 fOpenStructure.setAction(getAction(textEditor, IJavaEditorActionDefinitionIds.OPEN_STRUCTURE));
190
191                 fStructureSelectEnclosingAction.setAction(getAction(textEditor, StructureSelectionAction.ENCLOSING));
192                 fStructureSelectNextAction.setAction(getAction(textEditor, StructureSelectionAction.NEXT));
193                 fStructureSelectPreviousAction.setAction(getAction(textEditor, StructureSelectionAction.PREVIOUS));
194                 fStructureSelectHistoryAction.setAction(getAction(textEditor, StructureSelectionAction.HISTORY));
195
196                 fGotoNextMemberAction.setAction(getAction(textEditor, GoToNextPreviousMemberAction.NEXT_MEMBER));
197                 fGotoPreviousMemberAction.setAction(getAction(textEditor, GoToNextPreviousMemberAction.PREVIOUS_MEMBER));
198
199                 fRemoveOccurrenceAnnotationsAction.setAction(getAction(textEditor, "RemoveOccurrenceAnnotations")); //$NON-NLS-1$
200                 fRetargetShowInformationAction.setAction(getAction(textEditor, ITextEditorActionConstants.SHOW_INFORMATION));
201
202                 if (part instanceof JavaEditor) {
203                         JavaEditor javaEditor= (JavaEditor) part;
204                         javaEditor.getActionGroup().fillActionBars(getActionBars());
205                         FoldingActionGroup foldingActions= javaEditor.getFoldingActionGroup();
206                         if (foldingActions != null)
207                                 foldingActions.updateActionBars();
208                 }
209
210                 IActionBars actionBars= getActionBars();
211                 IStatusLineManager manager= actionBars.getStatusLineManager();
212                 manager.setMessage(null);
213                 manager.setErrorMessage(null);
214
215                 /** The global actions to be connected with editor actions */
216                 IAction action= getAction(textEditor, ITextEditorActionConstants.NEXT);
217                 actionBars.setGlobalActionHandler(ITextEditorActionDefinitionIds.GOTO_NEXT_ANNOTATION, action);
218                 actionBars.setGlobalActionHandler(ITextEditorActionConstants.NEXT, action);
219                 action= getAction(textEditor, ITextEditorActionConstants.PREVIOUS);
220                 actionBars.setGlobalActionHandler(ITextEditorActionDefinitionIds.GOTO_PREVIOUS_ANNOTATION, action);
221                 actionBars.setGlobalActionHandler(ITextEditorActionConstants.PREVIOUS, action);
222                 action= getAction(textEditor, IJavaEditorActionConstants.COPY_QUALIFIED_NAME);
223                 actionBars.setGlobalActionHandler(CopyQualifiedNameAction.ACTION_HANDLER_ID, action);
224
225                 actionBars.setGlobalActionHandler(IJavaEditorActionDefinitionIds.SHOW_IN_BREADCRUMB, getAction(textEditor, IJavaEditorActionDefinitionIds.SHOW_IN_BREADCRUMB));
226                 actionBars.setGlobalActionHandler("org.eclipse.jdt.internal.ui.actions.OpenHyperlink", getAction(textEditor, ITextEditorActionConstants.OPEN_HYPERLINK)); //$NON-NLS-1$
227         }
228
229         /*
230          * @see IEditorActionBarContributor#dispose()
231          */
232         @Override
233         public void dispose() {
234
235                 Iterator<RetargetAction> e= fPartListeners.iterator();
236                 while (e.hasNext())
237                         getPage().removePartListener(e.next());
238                 fPartListeners.clear();
239
240                 setActiveEditor(null);
241                 fToggleBreadcrumbAction.dispose();
242                 super.dispose();
243         }
244 }