2525import org .eclipse .emf .ecore .EObject ;
2626import org .eclipse .emf .ecore .presentation .EcoreEditor ;
2727import org .eclipse .emf .ecore .util .EcoreUtil ;
28+ import org .eclipse .jdt .internal .ui .javaeditor .CompilationUnitEditor ;
2829import org .eclipse .jface .dialogs .IDialogConstants ;
2930import org .eclipse .jface .dialogs .MessageDialog ;
3031import org .eclipse .jface .text .ITextSelection ;
4546import eu .modelwriter .marker .ui .internal .wizards .markerwizard .MarkerWizard ;
4647import eu .modelwriter .marker .ui .internal .wizards .selectionwizard .SelectionWizard ;
4748
49+ @ SuppressWarnings ("restriction" )
4850public class AddRemoveTypeHandler extends AbstractHandler {
4951 public static String COMMAND_ID = "eu.modelwriter.marker.command.addremovetype" ;
52+ IEditorPart editor ;
5053 IFile file ;
5154 ISelection selection ;
55+ IMarker selectedMarker ;
5256 private ArrayList <IMarker > candidateToTypeChanging ;
5357
5458 private void addRemoveType () {
55- this .file = PlatformUI .getWorkbench ().getActiveWorkbenchWindow ().getActivePage ()
56- .getActiveEditor ().getEditorInput ().getAdapter (IFile .class );
57- this .selection =
58- PlatformUI .getWorkbench ().getActiveWorkbenchWindow ().getSelectionService ().getSelection ();
59-
6059 if (!MarkerPage .isParsed ()) {
61- final MessageDialog parseCtrlDialog = new MessageDialog (
62- MarkerActivator .getShell (), "Type Information" , null ,
63- "You dont have any marker type registered to system! \n "
64- + "Please parse an alloy file first" ,
65- MessageDialog .INFORMATION , new String [] {"OK" }, 0 );
60+ final MessageDialog parseCtrlDialog =
61+ new MessageDialog ( MarkerActivator .getShell (), "Type Information" , null ,
62+ "You dont have any marker type registered to system! \n "
63+ + "Please parse an alloy file first" ,
64+ MessageDialog .INFORMATION , new String [] {"OK" }, 0 );
6665 parseCtrlDialog .open ();
6766 return ;
6867 }
@@ -74,13 +73,10 @@ private void addRemoveType() {
7473 return ;
7574 }
7675
77- IMarker selectedMarker = this .getMarker ();
78- selectedMarker = MarkUtilities .getLeaderOfMarker (selectedMarker );
79-
8076 if (selectedMarker != null && selectedMarker .exists ()) {
81- this . findCandidateToTypeChangingMarkers (selectedMarker );
77+ findCandidateToTypeChangingMarkers (selectedMarker );
8278 if (actionSelectionDialog .getReturnCode () == IDialogConstants .YES_ID ) {
83- this . addType (selectedMarker );
79+ addType (selectedMarker );
8480 } else if (actionSelectionDialog .getReturnCode () == IDialogConstants .NO_ID ) {
8581 final MessageDialog warningDialog =
8682 new MessageDialog (MarkerActivator .getShell (), "Warning!" , null ,
@@ -90,41 +86,47 @@ private void addRemoveType() {
9086 if (returnCode != 0 ) {
9187 return ;
9288 }
93- this . removeType (selectedMarker );
89+ removeType (selectedMarker );
9490 }
9591 // MarkerUpdater.updateTargets(selectedMarker);
9692 // MarkerUpdater.updateSources(selectedMarker);
9793 } else {
98- final MessageDialog dialog = new MessageDialog (
99- MarkerActivator .getShell (), "There is no marker in this position" ,
100- null , "Please select valid marker" , MessageDialog .INFORMATION , new String [] {"Ok" }, 0 );
94+ final MessageDialog dialog =
95+ new MessageDialog ( MarkerActivator .getShell (), "There is no marker in this position" , null ,
96+ "Please select valid marker" , MessageDialog .INFORMATION , new String [] {"Ok" }, 0 );
10197 dialog .open ();
10298 return ;
10399 }
104100 }
105101
106102 private void addType (final IMarker selectedMarker ) {
107- final MarkerWizard markerWizard = new MarkerWizard (selectedMarker );
103+ final MarkerWizard markerTypeWizard = new MarkerWizard (selectedMarker );
108104
109- final WizardDialog dialog =
110- new WizardDialog (MarkerActivator .getShell (), markerWizard );
105+ final WizardDialog dialog = new WizardDialog (MarkerActivator .getShell (), markerTypeWizard );
111106 dialog .open ();
112107 }
113108
114109 @ Override
115110 public Object execute (final ExecutionEvent event ) throws ExecutionException {
116111 if (AlloyUtilities .isExists ()) {
117- this .candidateToTypeChanging = new ArrayList <IMarker >();
118- this .addRemoveType ();
112+ candidateToTypeChanging = new ArrayList <IMarker >();
113+ file = PlatformUI .getWorkbench ().getActiveWorkbenchWindow ().getActivePage ().getActiveEditor ()
114+ .getEditorInput ().getAdapter (IFile .class );
115+ selection =
116+ PlatformUI .getWorkbench ().getActiveWorkbenchWindow ().getSelectionService ().getSelection ();
117+ editor =
118+ PlatformUI .getWorkbench ().getActiveWorkbenchWindow ().getActivePage ().getActiveEditor ();
119+ selectedMarker = MarkUtilities .getLeaderOfMarker (getMarker ());
120+
121+ addRemoveType ();
119122 if (Activator .getDefault ().getWorkbench ().getWorkbenchWindows ()[0 ].getActivePage ()
120123 .findView (Visualization .ID ) != null ) {
121124 Visualization .showViz ();
122125 }
123126 } else {
124- final MessageDialog infoDialog =
125- new MessageDialog (MarkerActivator .getShell (), "System Information" ,
126- null , "You dont have any registered alloy file to system." , MessageDialog .INFORMATION ,
127- new String [] {"Ok" }, 0 );
127+ final MessageDialog infoDialog = new MessageDialog (MarkerActivator .getShell (),
128+ "System Information" , null , "You dont have any registered alloy file to system." ,
129+ MessageDialog .INFORMATION , new String [] {"Ok" }, 0 );
128130 infoDialog .open ();
129131 }
130132 return null ;
@@ -134,60 +136,61 @@ public Object execute(final ExecutionEvent event) throws ExecutionException {
134136 * @param selectedMarker from text
135137 */
136138 private void findCandidateToTypeChangingMarkers (final IMarker selectedMarker ) {
137- this . candidateToTypeChanging .add (selectedMarker );
139+ candidateToTypeChanging .add (selectedMarker );
138140
139141 final Map <IMarker , String > fieldsSources =
140142 AlloyUtilities .getRelationsOfSecondSideMarker (selectedMarker );
141143 final ArrayList <IMarker > relationsSources =
142144 AlloyUtilities .getSourcesOfMarkerAtRelations (selectedMarker );
143145
144146 for (final IMarker iMarker : fieldsSources .keySet ()) {
145- this . candidateToTypeChanging .add (iMarker );
147+ candidateToTypeChanging .add (iMarker );
146148 }
147149
148150 for (final IMarker iMarker : relationsSources ) {
149- this . candidateToTypeChanging .add (iMarker );
151+ candidateToTypeChanging .add (iMarker );
150152 }
151153 }
152154
153155 private IMarker getMarker () {
154156 IMarker selectedMarker = null ;
155- if (this .selection instanceof ITextSelection ) {
156- final ITextSelection textSelection = (ITextSelection ) this .selection ;
157-
158- final ArrayList <IMarker > markerList =
159- MarkerFactory .findMarkersInSelection (this .file , textSelection );
160- if (markerList != null ) {
161- if (markerList .size () == 1 ) {
162- selectedMarker = markerList .get (0 );
163- } else if (markerList .size () > 1 ) {
164- final SelectionWizard selectionWizard = new SelectionWizard (markerList );
165- final WizardDialog selectionDialog =
166- new WizardDialog (MarkerActivator .getShell (), selectionWizard );
167- if (selectionDialog .open () == 1 ) {
168- return null ;
157+ if (selection != null ) {
158+ if (selection instanceof ITextSelection ) {
159+ final ITextSelection textSelection = (ITextSelection ) selection ;
160+
161+ final ArrayList <IMarker > markerList =
162+ MarkerFactory .findMarkersInSelection (file , textSelection );
163+ if (markerList != null ) {
164+ if (markerList .size () == 1 ) {
165+ selectedMarker = markerList .get (0 );
166+ } else if (markerList .size () > 1 ) {
167+ final SelectionWizard selectionWizard = new SelectionWizard (markerList );
168+ final WizardDialog selectionDialog =
169+ new WizardDialog (MarkerActivator .getShell (), selectionWizard );
170+ if (selectionDialog .open () == 1 ) {
171+ return null ;
172+ }
173+ selectedMarker = selectionWizard .getSelectedMarker ();
169174 }
170- selectedMarker = selectionWizard .getSelectedMarker ();
171175 }
172- }
173- } else if (this .selection instanceof ITreeSelection ) {
174- final IEditorPart editor =
175- PlatformUI .getWorkbench ().getActiveWorkbenchWindow ().getActivePage ().getActiveEditor ();
176- final ITreeSelection treeSelection = (ITreeSelection ) this .selection ;
177- if (this .selection != null
178- && ((ITreeSelection ) this .selection ).getFirstElement () instanceof IMarker ) {
179- selectedMarker = (IMarker ) ((ITreeSelection ) this .selection ).getFirstElement ();
180- } else if (this .selection != null && editor instanceof EcoreEditor ) {
181- if (treeSelection .getFirstElement () instanceof ENamedElement
182- && ((ENamedElement ) treeSelection .getFirstElement ()).getName () != null
183- && !((ENamedElement ) treeSelection .getFirstElement ()).getName ().isEmpty ()) {
184-
185- final URI uri = EcoreUtil .getURI ((ENamedElement ) treeSelection .getFirstElement ());
186-
187- selectedMarker = MarkerFactory .findMarkersByUri (this .file , uri .toString ());
188- } else if (!((EObject ) treeSelection .getFirstElement () instanceof EModelElement )) {
189- final URI uri = EcoreUtil .getURI ((EObject ) treeSelection .getFirstElement ());
190- selectedMarker = MarkerFactory .findMarkersByUri (this .file , uri .toString ());
176+ } else if (selection instanceof ITreeSelection ) {
177+ final ITreeSelection treeSelection = (ITreeSelection ) selection ;
178+ if (((ITreeSelection ) selection ).getFirstElement () instanceof IMarker ) {
179+ selectedMarker = (IMarker ) ((ITreeSelection ) selection ).getFirstElement ();
180+ } else if (editor instanceof EcoreEditor ) {
181+ if (treeSelection .getFirstElement () instanceof ENamedElement
182+ && ((ENamedElement ) treeSelection .getFirstElement ()).getName () != null
183+ && !((ENamedElement ) treeSelection .getFirstElement ()).getName ().isEmpty ()) {
184+
185+ final URI uri = EcoreUtil .getURI ((ENamedElement ) treeSelection .getFirstElement ());
186+
187+ selectedMarker = MarkerFactory .findMarkersByUri (file , uri .toString ());
188+ } else if (!((EObject ) treeSelection .getFirstElement () instanceof EModelElement )) {
189+ final URI uri = EcoreUtil .getURI ((EObject ) treeSelection .getFirstElement ());
190+ selectedMarker = MarkerFactory .findMarkersByUri (file , uri .toString ());
191+ }
192+ } else if (editor instanceof CompilationUnitEditor ) {
193+ selectedMarker = MarkerFactory .findMarkerByOutlineTreeSelection (treeSelection , file );
191194 }
192195 }
193196 }
@@ -199,8 +202,8 @@ private void removeType(IMarker selectedMarker) {
199202 AlloyUtilities .getTotalTargetCount (selectedMarker ));
200203
201204 IMarker marker = null ;
202- for (int i = 1 ; i < this . candidateToTypeChanging .size (); i ++) {
203- marker = this . candidateToTypeChanging .get (i );
205+ for (int i = 1 ; i < candidateToTypeChanging .size (); i ++) {
206+ marker = candidateToTypeChanging .get (i );
204207 AnnotationFactory .convertAnnotationType (marker , true ,
205208 MarkUtilities .compare (marker , selectedMarker ),
206209 AlloyUtilities .getTotalTargetCount (marker ));
0 commit comments