diff options
author | Cedric Dumoulin | 2016-03-15 21:29:55 +0000 |
---|---|---|
committer | Cedric Dumoulin | 2016-03-17 10:07:02 +0000 |
commit | ccb038548f57bfcdbb25262ca42a88864bbfd651 (patch) | |
tree | 1a79eb1efddbdbfc983fdda1b2eefd2ce801e55c /extraplugins | |
parent | b31846ff391f55d1a0014a450ec8e9f485d7730a (diff) | |
download | org.eclipse.papyrus-ccb038548f57bfcdbb25262ca42a88864bbfd651.tar.gz org.eclipse.papyrus-ccb038548f57bfcdbb25262ca42a88864bbfd651.tar.xz org.eclipse.papyrus-ccb038548f57bfcdbb25262ca42a88864bbfd651.zip |
441179: [java code reverse] Reverse plugin shall provide eclipse
preferences for search path & creation path values
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=441179
Remove usage of deprecated API in ReverseCodeHandler.
Diffstat (limited to 'extraplugins')
8 files changed, 143 insertions, 31 deletions
diff --git a/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/DndReverseCodeHandler.java b/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/DndReverseCodeHandler.java index 4dca0015470..cade8f285c0 100644 --- a/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/DndReverseCodeHandler.java +++ b/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/DndReverseCodeHandler.java @@ -28,6 +28,7 @@ import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.TreeSelection; +import org.eclipse.papyrus.infra.core.services.ServiceException; import org.eclipse.papyrus.infra.ui.editor.IMultiDiagramEditor; import org.eclipse.papyrus.java.reverse.ui.dialog.DndReverseCodeDialog; import org.eclipse.papyrus.java.reverse.ui.dialog.ReverseCodeDialog; @@ -105,20 +106,24 @@ public class DndReverseCodeHandler extends ReverseCodeHandler { // Run the reverse super.doExecute(dialog); - // Find model to display - Model model = null; - if (displayModel) { - String modelName = dndDialog.getValue(); - model = getModelToDisplay(diagram, modelName); - } - - // Run the reverse displayer - DisplayReverse displayReverse = new DisplayReverse(listSelection, diagram, getUmlResource(), model); + try { + // Find model to display + Model model = null; + if (displayModel) { + String modelName = dndDialog.getValue(); + model = getModelToDisplay(diagram, modelName); + } + + // Run the reverse displayer + DisplayReverse displayReverse = new DisplayReverse(listSelection, diagram, getUmlResource(), model); displayReverse.execute(); } catch (JavaModelException e) { // TODO Auto-generated catch block e.printStackTrace(); + } catch (ServiceException e) { + // TODO Auto-generated catch block + e.printStackTrace(); } } @@ -184,8 +189,9 @@ public class DndReverseCodeHandler extends ReverseCodeHandler { * @param modelName * the name of the model the find * @return the model which named <code>modelName</code>, or null if it doesn't exists into the current papyrus uml resource + * @throws ServiceException */ - public Model getModel(String modelName) { + public Model getModel(String modelName) throws ServiceException { TreeIterator<EObject> tree = getUmlResource().getAllContents(); while (tree.hasNext()) { for (EObject o : tree.next().eContents()) { @@ -214,8 +220,9 @@ public class DndReverseCodeHandler extends ReverseCodeHandler { * the name of the model to find * @return model corresponding to the modelName if it has to be displayed, i.e. if it doesn't already displayed into the diagram, or null * otherwise + * @throws ServiceException */ - private Model getModelToDisplay(Diagram diagram, String modelName) { + private Model getModelToDisplay(Diagram diagram, String modelName) throws ServiceException { Model model = getModel(modelName); if (model != null && !isInDiagram(diagram, model)) { System.out.println("display model " + model); diff --git a/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/Messages.java b/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/Messages.java index 38577506c0d..96060e9d1dd 100644 --- a/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/Messages.java +++ b/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/Messages.java @@ -9,6 +9,11 @@ public class Messages extends NLS { public static String ReverseCodeHandler_NoModelError_Message; public static String ReverseCodeHandler_NoModelError_Title; + + public static String ReverseCodeHandler_NoPapyrusEditor_Title; + + public static String ReverseCodeHandler_NoPapyrusEditor_Message; + static { // initialize resource bundle NLS.initializeMessages(BUNDLE_NAME, Messages.class); diff --git a/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/ReverseCodeHandler.java b/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/ReverseCodeHandler.java index cf6b83a6033..0903515ecaf 100644 --- a/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/ReverseCodeHandler.java +++ b/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/ReverseCodeHandler.java @@ -10,6 +10,7 @@ import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.IHandler; +import org.eclipse.core.expressions.IEvaluationContext; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.emf.ecore.resource.Resource; @@ -21,13 +22,18 @@ import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.TreeSelection; import org.eclipse.jface.window.Window; +import org.eclipse.papyrus.infra.core.Activator; import org.eclipse.papyrus.infra.core.services.ServiceException; +import org.eclipse.papyrus.infra.core.services.ServicesRegistry; +import org.eclipse.papyrus.infra.core.services.spi.IContextualServiceRegistryTracker; +import org.eclipse.papyrus.infra.core.utils.ServiceUtils; import org.eclipse.papyrus.infra.ui.editor.IMultiDiagramEditor; import org.eclipse.papyrus.infra.ui.util.EditorUtils; -import org.eclipse.papyrus.infra.ui.util.ServiceUtilsForActionHandlers; +import org.eclipse.papyrus.infra.ui.util.ServiceUtilsForHandlers; import org.eclipse.papyrus.java.reverse.ui.dialog.ReverseCodeDialog; -import org.eclipse.papyrus.uml.tools.model.UmlUtils; +import org.eclipse.papyrus.uml.tools.model.UmlModel; import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.ISources; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.handlers.HandlerUtil; @@ -35,7 +41,7 @@ import org.eclipse.uml2.uml.Package; /** - * @author dumoulin + * @author cedric dumoulin * */ public class ReverseCodeHandler extends AbstractHandler implements IHandler { @@ -43,10 +49,39 @@ public class ReverseCodeHandler extends AbstractHandler implements IHandler { private static String DefaultGenerationModeleName = "generated"; /** + * Event provided to the execute method. The event is stored when the execute() method start. + * Other method can then use this event. + */ + protected ExecutionEvent event; + protected ServicesRegistry registry; + + /** * Method called when button is pressed. */ @Override public Object execute(ExecutionEvent event) throws ExecutionException { + + // Store the event in order to be able to use it from utility methods. + this.event = event; + // Lookup ServiceRegistry + try { + registry = ServiceUtilsForHandlers.getInstance().getServiceRegistry(event); + } catch (ServiceException e1) { + try { + registry = getContextualServiceRegistry(); + } catch (ServiceException e) { + // Can't get a Papyrus ServiceRegistry. + Shell shell = HandlerUtil.getActiveShell(event); + Status errorStatus = new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.ReverseCodeHandler_NoPapyrusEditor_Title); + ErrorDialog.openError(shell, "", Messages.ReverseCodeHandler_NoPapyrusEditor_Message, errorStatus); + + // Stop the handler execution. + return null; + } + } + + System.err.println("ServiceRegistry = " + registry); + // Try to find uml resource final Resource umlResource; try { @@ -59,21 +94,28 @@ public class ReverseCodeHandler extends AbstractHandler implements IHandler { // Stop the reverse execution. return null; + } catch (ServiceException e) { + // No uml resource available. User must open a model. We open an error dialog with an explicit message to advice user. + Shell shell = HandlerUtil.getActiveShell(event); + Status errorStatus = new Status(IStatus.ERROR, Activator.PLUGIN_ID, Messages.ReverseCodeHandler_NoModelError_Title); + ErrorDialog.openError(shell, "", Messages.ReverseCodeHandler_NoModelError_Message, errorStatus); + + e.printStackTrace(); + // Stop the reverse execution. + return null; } ; String modelUid = getModelUid(umlResource); - System.out.println("Model uid :" + modelUid); // Get reverse parameters from a dialog - Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart().getSite().getShell(); + Shell shell = HandlerUtil.getActiveShell(event); // ReverseCodeDialog dialog = new ReverseCodeDialog(shell, DefaultGenerationPackageName, Arrays.asList("generated") ); final ReverseCodeDialog dialog = getDialog(shell, modelUid); int res = dialog.open(); // System.out.println("dialog result =" + res); if (res == Window.CANCEL) { - System.out.println("Canceled by user."); return null; } @@ -112,7 +154,8 @@ public class ReverseCodeHandler extends AbstractHandler implements IHandler { // Try to compute a uid identifying the model. Used to store user settings. String modelUid = umlResource.getURI().toPlatformString(true); if (modelUid == null) { - System.err.println("Can't compute relatif model uid. Use absolute one"); + // Can't compute relatif model uid. Use absolute one +// System.err.println("Can't compute relatif model uid. Use absolute one"); modelUid = umlResource.getURI().path(); } return modelUid; @@ -126,7 +169,13 @@ public class ReverseCodeHandler extends AbstractHandler implements IHandler { protected void doExecute(ReverseCodeDialog dialog) { // Create searchpaths. Add the rootmodelname as prefix. final List<String> searchPaths = Arrays.asList(dialog.getSearchPath()); - Resource umlResource = getUmlResource(); + Resource umlResource; + try { + umlResource = getUmlResource(); + } catch (ServiceException e) { + // Should never happen, as we have already used this method and check its result (with an error message). + return; + } String packageName = getPackageName(dialog); JavaCodeReverse reverse = new JavaCodeReverse(getRootPackage(umlResource), packageName, searchPaths); reverse.executeCodeReverse(umlResource, packageName, searchPaths); @@ -148,10 +197,11 @@ public class ReverseCodeHandler extends AbstractHandler implements IHandler { * @return the name of the selected project into explorer */ protected String getSelectedProjectName() { - // Get current selection - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - final ISelection selection = page.getSelection(); + + // Lookup selection + ISelection selection = getCurrentSelection(); + // Lookup the java compilation unit. TreeSelection treeSelection = (TreeSelection)selection; IJavaElement selectionElement = (IJavaElement)treeSelection.getFirstElement(); String name = selectionElement.getAncestor(IJavaProject.JAVA_PROJECT).getElementName(); @@ -159,6 +209,28 @@ public class ReverseCodeHandler extends AbstractHandler implements IHandler { } /** + * Get the current selection. + * First, try with ISources.ACTIVE_CURRENT_SELECTION_NAME. + * Then try with PlatformUI.getWorkbench() ... + * @return + */ + protected ISelection getCurrentSelection() { + ISelection selection=null; + Object context = event.getApplicationContext(); + + if (context instanceof IEvaluationContext) { + IEvaluationContext evaluationContext = (IEvaluationContext) context; + selection = (ISelection)evaluationContext.getVariable(ISources.ACTIVE_CURRENT_SELECTION_NAME); + } + if( selection == null) { + // Get current selection + IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + selection = page.getSelection(); + } + return selection; + } + + /** * Find the name of the model provided by the dialog * * @param dialog @@ -178,9 +250,12 @@ public class ReverseCodeHandler extends AbstractHandler implements IHandler { * Get the uml resource used by the model. * * @return the Uml Resource + * @throws ServiceException */ - protected Resource getUmlResource() { - Resource umlResource = UmlUtils.getUmlModel().getResource(); + protected Resource getUmlResource() throws ServiceException { + + UmlModel umlModel = (UmlModel)ServiceUtils.getInstance().getModelSet(registry).getModel(UmlModel.MODEL_ID); + Resource umlResource = umlModel.getResource(); return umlResource; } @@ -210,7 +285,24 @@ public class ReverseCodeHandler extends AbstractHandler implements IHandler { * @throws ServiceException */ protected TransactionalEditingDomain getEditingDomain() throws ServiceException { - return ServiceUtilsForActionHandlers.getInstance().getTransactionalEditingDomain(); + return ServiceUtils.getInstance().getTransactionalEditingDomain(registry); + } + + /** + * Obtains the service registry determined automatically from the context of which + * Papyrus editor or view is active (implying the model that the user is currently editing). + * + * @return the contextual service registry, or {@code null} if none can be determined + * @throws ServiceException + * @since 2.0 + */ + protected ServicesRegistry getContextualServiceRegistry() throws ServiceException { + IContextualServiceRegistryTracker tracker = Activator.getDefault().getContextualServiceRegistryTracker(); + if( tracker !=null) { + return tracker.getServiceRegistry(); + } + throw new ServiceException("Can't get ServiceRegistry from Tracker"); } + } diff --git a/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/messages.properties b/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/messages.properties index a754ab7df2a..91fed190265 100644 --- a/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/messages.properties +++ b/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/messages.properties @@ -1,2 +1,4 @@ ReverseCodeHandler_NoModelError_Message=No model selected for Reverse. Please open a model where you want to add the reverse result. ReverseCodeHandler_NoModelError_Title=No model selected +ReverseCodeHandler_NoPapyrusEditor_Title=No Papyrus Editor selected +ReverseCodeHandler_NoPapyrusEditor_Message=No Papyrus Editor selected for Reverse. Please open and select a Papyrus Editor, then select java classes to reverse.
\ No newline at end of file diff --git a/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/preference/CreationPathListEditor.java b/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/preference/CreationPathListEditor.java index 979e042496d..11f0ccbbd7e 100644 --- a/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/preference/CreationPathListEditor.java +++ b/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/preference/CreationPathListEditor.java @@ -43,14 +43,15 @@ public class CreationPathListEditor extends ListEditor { @Override protected String createList(String[] items) { StringBuffer str = new StringBuffer(); - for(String item : items) + for(String item : items) { str.append(item + SPLIT_STRING); + } return str.toString(); } @Override protected String getNewInputObject() { - InputDialog dialog = new InputDialog(getShell(), "add creation path", "add creation path", "", new CreationPathValidator()); + InputDialog dialog = new InputDialog(getShell(), "Add creation path", "Add creation path", "", new CreationPathValidator()); dialog.open(); // If user clicked on "cancel" button, return null to NOT add empty value diff --git a/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/preference/PreferenceInitializer.java b/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/preference/PreferenceInitializer.java index 5cd34e0399e..7237ad2aa5e 100644 --- a/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/preference/PreferenceInitializer.java +++ b/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/preference/PreferenceInitializer.java @@ -34,6 +34,10 @@ public class PreferenceInitializer extends AbstractPreferenceInitializer { IPreferenceStore store = Activator.getDefault().getPreferenceStore(); store.setDefault(PreferenceConstants.P_SEARCH_PATH, "java;*;osgi.*;datatype"); - store.setDefault(PreferenceConstants.P_CREATION_PATH, "java.* ; ; java" + CreationPathListEditor.SPLIT_STRING + "org.eclipse.papyrus.* ; ; *" + CreationPathListEditor.SPLIT_STRING + "org.eclipse.* ; org.eclipse.papyrus.* ; *" + CreationPathListEditor.SPLIT_STRING + " org.osgi.* ; ; osgi.*" + CreationPathListEditor.SPLIT_STRING + " datatype.* ; ; datatype"); + store.setDefault(PreferenceConstants.P_CREATION_PATH, "java.* ; ; java" + + CreationPathListEditor.SPLIT_STRING + "org.eclipse.papyrus.* ; ; *" + + CreationPathListEditor.SPLIT_STRING + "org.eclipse.* ; org.eclipse.papyrus.* ; *" + + CreationPathListEditor.SPLIT_STRING + " org.osgi.* ; ; osgi.*" + + CreationPathListEditor.SPLIT_STRING + " datatype.* ; ; datatype"); } } diff --git a/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/preference/PreferencePage.java b/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/preference/PreferencePage.java index 6654b90445c..dacb89581ef 100644 --- a/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/preference/PreferencePage.java +++ b/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/preference/PreferencePage.java @@ -52,10 +52,10 @@ public class PreferencePage extends FieldEditorPreferencePage implements IWorkbe @Override protected void createFieldEditors() { // Search path field - addField(new SearchPathListEditor(PreferenceConstants.P_SEARCH_PATH, "default search path", getFieldEditorParent())); + addField(new SearchPathListEditor(PreferenceConstants.P_SEARCH_PATH, "Default search path", getFieldEditorParent())); // Creation path field - addField(new CreationPathListEditor(PreferenceConstants.P_CREATION_PATH, "default creation path", getFieldEditorParent())); + addField(new CreationPathListEditor(PreferenceConstants.P_CREATION_PATH, "Default creation path", getFieldEditorParent())); } diff --git a/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/preference/SearchPathListEditor.java b/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/preference/SearchPathListEditor.java index 92d02d3a829..a6791398d43 100644 --- a/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/preference/SearchPathListEditor.java +++ b/extraplugins/qompass/codegen/java/org.eclipse.papyrus.java.reverse.ui/src/org/eclipse/papyrus/java/reverse/ui/preference/SearchPathListEditor.java @@ -66,8 +66,9 @@ public class SearchPathListEditor extends ListEditor { @Override protected String createList(String[] items) { StringBuffer str = new StringBuffer(); - for(String item : items) + for(String item : items) { str.append(item + ";"); + } return str.toString(); } |