diff options
author | atischenko | 2015-01-13 06:07:55 +0000 |
---|---|---|
committer | atischenko | 2015-01-13 07:11:47 +0000 |
commit | c905d3e9dda86908a2529dc853df30d367ba30c2 (patch) | |
tree | acfc504a48cafad6630cd486f79d486b841a4439 /plugins/developer | |
parent | 5ca2326ea8c6f78f4a51fcfcf8013a77c94e9f31 (diff) | |
download | org.eclipse.papyrus-c905d3e9dda86908a2529dc853df30d367ba30c2.tar.gz org.eclipse.papyrus-c905d3e9dda86908a2529dc853df30d367ba30c2.tar.xz org.eclipse.papyrus-c905d3e9dda86908a2529dc853df30d367ba30c2.zip |
Merge bugs/449899-activity-regen to master
- acticityDiagram.gmfgen
- templates
Signed-off-by: atischenko <montages.t7@gmail.com>
Diffstat (limited to 'plugins/developer')
20 files changed, 353 insertions, 72 deletions
diff --git a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/diagram/editparts/LinkLabelEditPart.xtend b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/diagram/editparts/LinkLabelEditPart.xtend index 7dcf4beeee4..03513d7a8c8 100644 --- a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/diagram/editparts/LinkLabelEditPart.xtend +++ b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/diagram/editparts/LinkLabelEditPart.xtend @@ -19,7 +19,6 @@ import org.eclipse.gmf.codegen.gmfgen.GenLinkLabel import org.eclipse.papyrus.papyrusgmfgenextension.LabelVisibilityPreference import xpt.Common import org.eclipse.gmf.codegen.gmfgen.CustomBehaviour -import org.eclipse.papyrus.papyrusgmfgenextension.ExtendedGenView @Singleton class LinkLabelEditPart extends diagram.editparts.LinkLabelEditPart{ @Inject extension Common; @@ -51,21 +50,25 @@ import org.eclipse.papyrus.papyrusgmfgenextension.ExtendedGenView ««« END: PapyrusGenCode ''' -// override extendsList(GenLinkLabel it) '''extends org.eclipse.papyrus.infra.gmfdiag.common.editpart.PapyrusLabelEditPart''' - - override extendsList(GenLinkLabel it) ''' - «««BEGIN: PapyrusGenCode - «««specify a java super class for external nodes - «IF it.eResource.allContents.filter(typeof (ExtendedGenView)).filter[v | v.genView.contains(it) && v.superOwnedEditPart != null].size != 0» - extends «FOR extendedObject : it.eResource.allContents.filter(typeof (ExtendedGenView)).filter[v|v.genView.contains(it) && v.superOwnedEditPart != null].toIterable» - «extendedObject.superOwnedEditPart» - «ENDFOR» - «««END: PapyrusGenCode - «ELSE» - extends org.eclipse.papyrus.infra.gmfdiag.common.editpart.PapyrusLabelEditPart - «ENDIF» + override extendsList(GenLinkLabel it) '''extends org.eclipse.papyrus.infra.gmfdiag.common.editpart.PapyrusLabelEditPart''' + + override createDefaultEditPolicies(GenLinkLabel it) ''' + /** + * @generated Papyrus Generation + */ + @Override + protected void createDefaultEditPolicies() { + super.createDefaultEditPolicies(); + installEditPolicy(EditPolicy.DIRECT_EDIT_ROLE, new LabelDirectEditPolicy()); + installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new «diagram.getTextSelectionEditPolicyQualifiedClassName()»()); + ««« BEGIN: PapyrusGenCode + installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE, new org.eclipse.papyrus.infra.gmfdiag.common.editpolicies.PapyrusLinkLabelDragPolicy()); + ««« END: PapyrusGenCode + ««« Get the added custom behavoir + «FOR CustomBehaviour:it.behaviour.filter(typeof (CustomBehaviour))» + installEditPolicy(«CustomBehaviour.key», new «CustomBehaviour.editPolicyQualifiedClassName»()); + «ENDFOR» + } ''' - - - + } diff --git a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/diagram/editparts/NodeLabelEditPart.xtend b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/diagram/editparts/NodeLabelEditPart.xtend index 1baa2dab3d2..0c009a414db 100644 --- a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/diagram/editparts/NodeLabelEditPart.xtend +++ b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/diagram/editparts/NodeLabelEditPart.xtend @@ -55,7 +55,7 @@ override extendsList (GenNodeLabel it) '''extends org.eclipse.papyrus.infra.gmfd «generatedMemberComment» protected void addOwnerElementListeners() { - addListenerFilter(ADD_PARENT_MODEL, this, ((org.eclipse.gmf.runtime.notation.View) getParent().getModel())); //$NON-NLS-1$ + addListenerFilter(ADD_PARENT_MODEL, this, ((org.eclipse.gmf.runtime.notation.View) getParent().getModel())); } diff --git a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/impl/diagram/editparts/LinkLabelEditPart.xtend b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/impl/diagram/editparts/LinkLabelEditPart.xtend index 1175194be6e..80c54cde444 100644 --- a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/impl/diagram/editparts/LinkLabelEditPart.xtend +++ b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/impl/diagram/editparts/LinkLabelEditPart.xtend @@ -38,10 +38,5 @@ import xpt.diagram.editparts.Common ««« End Papyrus Code super.handleNotificationEvent(event); ''' - - override additionalEditPolicies(GenLinkLabel it) - ''' - installEditPolicy(EditPolicy.PRIMARY_DRAG_ROLE, new org.eclipse.papyrus.infra.gmfdiag.common.editpolicies.PapyrusLinkLabelDragPolicy()); - ''' } diff --git a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/impl/diagram/editparts/NodeEditPart.xtend b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/impl/diagram/editparts/NodeEditPart.xtend index f6ab147f25e..8c84ea36d0d 100644 --- a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/impl/diagram/editparts/NodeEditPart.xtend +++ b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/impl/diagram/editparts/NodeEditPart.xtend @@ -35,8 +35,6 @@ import xpt.diagram.editparts.EditPartFactory import xpt.diagram.editparts.Utils_qvto import xpt.diagram.editpolicies.TextSelectionEditPolicy import xpt.CodeStyle -import xpt.diagram.ViewmapAttributesUtils_qvto -import org.eclipse.papyrus.papyrusgmfgenextension.SpecificNodePlate @Singleton class NodeEditPart extends impl.diagram.editparts.NodeEditPart { @Inject extension Common; @@ -45,10 +43,8 @@ import org.eclipse.papyrus.papyrusgmfgenextension.SpecificNodePlate @Inject extension EditPartsUtils_qvto; @Inject extension VisualIDRegistry; - @Inject extension ViewmapAttributesUtils_qvto; - @Inject extension Utils_qvto; - @Inject extension xpt.diagram.Utils_qvto; + @Inject EditPartFactory xptEditPartFactory; @Inject impl.diagram.editparts.TextAware xptTextAware; @@ -181,26 +177,6 @@ override addFixedChild (GenNode it)''' // } // ''' - override createNodePlate(GenNode it) ''' - «IF it.eResource.allContents.filter(typeof(SpecificNodePlate)).filter[v |v.editParts.contains(it) && v.nodePlateQualifiedName!=null].size != 0» - «val editPart = it.eResource.allContents.filter(typeof(SpecificNodePlate)).filter[v |v.editParts.contains(it) && v.nodePlateQualifiedName!=null].head» - protected org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure createNodePlate() { - «editPart.nodePlateQualifiedName» result = new «editPart.nodePlateQualifiedName»(«IF getDiagram().isPixelMapMode()»«defaultSizeWidth(viewmap, 40)», «defaultSizeHeight(viewmap, 40)»«ELSE»getMapMode().DPtoLP(«defaultSizeWidth(viewmap, 40)»), getMapMode().DPtoLP(«defaultSizeHeight(viewmap, 40)»)«ENDIF»); - «setupNodePlate» - return result; - } - «««END: BEGIN: PapyrusGenCode - «ELSE» - ««« «super.createNodePlate(it)» - ««« By default node edit part are now RoundedRectangleNodePlateFigure - protected org.eclipse.gmf.runtime.gef.ui.figures.NodeFigure createNodePlate() { - org.eclipse.papyrus.infra.gmfdiag.common.figure.node.RoundedRectangleNodePlateFigure result = new org.eclipse.papyrus.infra.gmfdiag.common.figure.node.RoundedRectangleNodePlateFigure(«IF getDiagram().isPixelMapMode()»«defaultSizeWidth(viewmap, 40)», «defaultSizeHeight(viewmap, 40)»«ELSE»getMapMode().DPtoLP(«defaultSizeWidth(viewmap, 40)»), getMapMode().DPtoLP(«defaultSizeHeight(viewmap, 40)»)«ENDIF»); - «setupNodePlate» - return result; - } - «ENDIF» - ''' - override borderItemSelectionEditPolicy(GenNode it)''' «IF hasBorderItems(it)» org.eclipse.gmf.runtime.notation.View childView = (org.eclipse.gmf.runtime.notation.View) child.getModel(); diff --git a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/impl/diagram/editparts/TextAware.xtend b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/impl/diagram/editparts/TextAware.xtend index c49287fa1be..e9a108a2f11 100644 --- a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/impl/diagram/editparts/TextAware.xtend +++ b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/impl/diagram/editparts/TextAware.xtend @@ -373,7 +373,7 @@ override getEditTextValidator (GenCommonBase it)''' setResult(parser.isValidEditString(new org.eclipse.gmf.runtime.emf.core.util.EObjectAdapter(element), (String) value)); } }); - return valid.getCode() == org.eclipse.gmf.runtime.common.ui.services.parser.ParserEditStatus.EDITABLE ? null : valid.getMessage(); + return valid.getCode() == org.eclipse.gmf.runtime.common.ui.services.parser.IParserEditStatus.EDITABLE ? null : valid.getMessage(); } catch (InterruptedException ie) { ie.printStackTrace(); } @@ -501,7 +501,7 @@ def performDirectEditRequest(GenCommonBase it, GenDiagram diagram ) ''' else if(configuration instanceof org.eclipse.papyrus.extensionpoints.editors.configuration.IAdvancedEditorConfiguration) { dialog = ((org.eclipse.papyrus.extensionpoints.editors.configuration.IAdvancedEditorConfiguration)configuration).createDialog(org.eclipse.ui.PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), resolveSemanticElement(), configuration.getTextToEdit(resolveSemanticElement())); } else if(configuration instanceof org.eclipse.papyrus.extensionpoints.editors.configuration.IDirectEditorConfiguration) { - dialog = new org.eclipse.papyrus.extensionpoints.editors.ui.ExtendedDirectEditionDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), resolveSemanticElement(), ((org.eclipse.papyrus.extensionpoints.editors.configuration.IDirectEditorConfiguration)configuration).getTextToEdit(resolveSemanticElement()), (org.eclipse.papyrus.extensionpoints.editors.configuration.IDirectEditorConfiguration)configuration); + dialog = new org.eclipse.papyrus.extensionpoints.editors.ui.ExtendedDirectEditionDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), resolveSemanticElement(), configuration.getTextToEdit(resolveSemanticElement()), configuration); } else { return; } diff --git a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/impl/diagram/update/CanonicalUpdate.xtend b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/impl/diagram/update/CanonicalUpdate.xtend index bec85eefbe8..0206e2b54cc 100644 --- a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/impl/diagram/update/CanonicalUpdate.xtend +++ b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/impl/diagram/update/CanonicalUpdate.xtend @@ -135,5 +135,26 @@ import xpt.editor.VisualIDRegistry return result; } '''
-
+ + override getEditPartMethod(GenDiagram it) ''' + «generatedMemberComment» + private org.eclipse.gef.EditPart getEditPart(org.eclipse.emf.ecore.EObject domainModelElement, «Domain2Notation(it)» domain2NotationMap) { + org.eclipse.gmf.runtime.notation.View view = domain2NotationMap.get(domainModelElement); + if (view != null) { + return (org.eclipse.gef.EditPart) getHost().getViewer().getEditPartRegistry().get(view); + } + return null; + } + ''' + + override getHintedEditPartMethod(GenDiagram it) ''' + «generatedMemberComment» + protected final org.eclipse.gef.EditPart getHintedEditPart(org.eclipse.emf.ecore.EObject domainModelElement, «Domain2Notation(it)» domain2NotationMap, int hintVisualId) { + org.eclipse.gmf.runtime.notation.View view = domain2NotationMap.getHinted(domainModelElement, «xptVisualIDRegistry.typeMethodCall(it, 'hintVisualId')»); + if (view != null) { + return (org.eclipse.gef.EditPart) getHost().getViewer().getEditPartRegistry().get(view); + } + return null; + } + ''' }
diff --git a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/metamodel/MetaModel.xtend b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/metamodel/MetaModel.xtend new file mode 100644 index 00000000000..3b327283dfa --- /dev/null +++ b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/metamodel/MetaModel.xtend @@ -0,0 +1,16 @@ +package aspects.metamodel
+
+import org.eclipse.emf.codegen.ecore.genmodel.GenClass
+import org.eclipse.emf.codegen.ecore.genmodel.GenFeature
+import com.google.inject.Inject
+import metamodel.MetaModel_qvto
+import com.google.inject.Singleton
+
+@Singleton class MetaModel extends metamodel.MetaModel {
+
+ @Inject extension MetaModel_qvto;
+
+ override DeclareAndAssign2(GenClass it, String assignee, String src, GenClass srcMetaClass, GenFeature srcFeature, String srcExt, boolean needCast) //
+ '''«getQualifiedInterfaceName(it)» «assignee» = «getFeatureValue(srcFeature, src, srcMetaClass)».«srcExt»;'''
+
+}
\ No newline at end of file diff --git a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/diagram/commands/ReorientLinkUtils.xtend b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/diagram/commands/ReorientLinkUtils.xtend new file mode 100644 index 00000000000..a50891a8806 --- /dev/null +++ b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/diagram/commands/ReorientLinkUtils.xtend @@ -0,0 +1,65 @@ +package aspects.xpt.diagram.commands
+
+import org.eclipse.gmf.codegen.gmfgen.LinkModelFacet
+import org.eclipse.gmf.codegen.gmfgen.GenLink
+import xpt.Common
+import com.google.inject.Inject
+import com.google.inject.Singleton
+
+@Singleton class ReorientLinkUtils extends xpt.diagram.commands.ReorientLinkUtils {
+
+ @Inject extension Common
+
+ override canReorient(LinkModelFacet it, GenLink link) '''
+ «generatedMemberComment()»
+ public boolean canExecute() {
+ «checkLinkValidity(it)»
+ if (reorientDirection == org.eclipse.gmf.runtime.emf.type.core.requests.ReorientRequest.REORIENT_SOURCE) {
+ return canReorientSource();
+ }
+ if (reorientDirection == org.eclipse.gmf.runtime.emf.type.core.requests.ReorientRequest.REORIENT_TARGET) {
+ return canReorientTarget();
+ }
+ return false;
+ }
+
+ «generatedMemberComment()»
+ protected boolean canReorientSource() {
+ «checkSourceRequestValidity(it, link)»
+ }
+
+ «generatedMemberComment()»
+ protected boolean canReorientTarget() {
+ «checkTargetRequestValidity(it, link)»
+ }
+ '''
+
+ override reorient(LinkModelFacet it) '''
+
+ «generatedMemberComment()»
+ protected org.eclipse.gmf.runtime.common.core.command.CommandResult doExecuteWithResult(
+ org.eclipse.core.runtime.IProgressMonitor monitor, org.eclipse.core.runtime.IAdaptable info)
+ throws org.eclipse.core.commands.ExecutionException {
+ if (!canExecute()) {
+ throw new org.eclipse.core.commands.ExecutionException("Invalid arguments in reorient link command"); «nonNLS()»
+ }
+ if (reorientDirection == org.eclipse.gmf.runtime.emf.type.core.requests.ReorientRequest.REORIENT_SOURCE) {
+ return reorientSource();
+ }
+ if (reorientDirection == org.eclipse.gmf.runtime.emf.type.core.requests.ReorientRequest.REORIENT_TARGET) {
+ return reorientTarget();
+ }
+ throw new IllegalStateException();
+ }
+
+ «generatedMemberComment()»
+ protected org.eclipse.gmf.runtime.common.core.command.CommandResult reorientSource() throws org.eclipse.core.commands.ExecutionException {
+ «reorientSource(it)»
+ }
+
+ «generatedMemberComment()»
+ protected org.eclipse.gmf.runtime.common.core.command.CommandResult reorientTarget() throws org.eclipse.core.commands.ExecutionException {
+ «reorientTarget(it)»
+ }
+ '''
+}
\ No newline at end of file diff --git a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/diagram/editpolicies/BaseItemSemanticEditPolicy.xtend b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/diagram/editpolicies/BaseItemSemanticEditPolicy.xtend index 1556194cfb0..6c452d61f57 100644 --- a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/diagram/editpolicies/BaseItemSemanticEditPolicy.xtend +++ b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/diagram/editpolicies/BaseItemSemanticEditPolicy.xtend @@ -61,7 +61,7 @@ public class «className(it)» extends org.eclipse.gmf.runtime.diagram.ui.editpoli if (view instanceof org.eclipse.gmf.runtime.notation.View) { Integer id = new Integer(«getVisualIDMethodCall(it)»((org.eclipse.gmf.runtime.notation.View) view)); request.getExtendedData().put(VISUAL_ID_KEY, id); - request.getExtendedData().put(GRAPHICAL_RECONNECTED_EDGE, (org.eclipse.gmf.runtime.notation.View)view); + request.getExtendedData().put(GRAPHICAL_RECONNECTED_EDGE, view); } } return super.getCommand(request); diff --git a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/diagram/updater/DiagramUpdater.xtend b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/diagram/updater/DiagramUpdater.xtend index 46cadd471f2..40a62f67168 100644 --- a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/diagram/updater/DiagramUpdater.xtend +++ b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/diagram/updater/DiagramUpdater.xtend @@ -225,7 +225,7 @@ import org.eclipse.papyrus.papyrusgmfgenextension.CustomDiagramUpdaterSingleton «ENDFOR» «IF it.getPhantomNodes.notEmpty» org.eclipse.emf.ecore.resource.Resource resource = modelElement.eResource(); - for (java.util.Iterator<org.eclipse.emf.ecore.EObject> it = getPhantomNodesIterator(resource)) { + for (java.util.Iterator<org.eclipse.emf.ecore.EObject> it = getPhantomNodesIterator(resource); it.hasNaxt();) { org.eclipse.emf.ecore.EObject childElement = it.next(); if (childElement == modelElement) { continue; diff --git a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/DiagramEditorUtil.xtend b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/DiagramEditorUtil.xtend index 4fbb93af0cc..b2c92c7b63c 100644 --- a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/DiagramEditorUtil.xtend +++ b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/DiagramEditorUtil.xtend @@ -25,7 +25,7 @@ import com.google.inject.Singleton (if(editorGen.application == null) 'This method should be called within a workspace modify operation since it creates resources.' else ''))»
public static org.eclipse.emf.ecore.resource.Resource createDiagram(org.eclipse.emf.common.util.URI diagramURI,«IF standaloneDomainModel(
it)» org.eclipse.emf.common.util.URI modelURI,«ENDIF» org.eclipse.core.runtime.IProgressMonitor progressMonitor) {
- org.eclipse.emf.transaction.TransactionalEditingDomain editingDomain = org.eclipse.gmf.runtime.emf.core.GMFEditingDomainFactory.INSTANCE.createEditingDomain();
+ org.eclipse.emf.transaction.TransactionalEditingDomain editingDomain = org.eclipse.emf.workspace.WorkspaceEditingDomainFactory.INSTANCE.createEditingDomain();
progressMonitor.beginTask(«xptExternalizer.accessorCall(editorGen, i18nKeyForCreateDiagramProgressTask(it))», 3);
final org.eclipse.emf.ecore.resource.Resource diagramResource = editingDomain.getResourceSet().createResource(diagramURI);
«IF standaloneDomainModel(it)»
diff --git a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/DocumentProvider.xtend b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/DocumentProvider.xtend index 1abc876db22..5d809566671 100644 --- a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/DocumentProvider.xtend +++ b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/DocumentProvider.xtend @@ -63,14 +63,14 @@ import xpt.editor.DiagramEditorUtil if (uri.fragment() != null) { org.eclipse.emf.ecore.EObject rootElement = resource.getEObject(uri.fragment()); if (rootElement instanceof org.eclipse.gmf.runtime.notation.Diagram) { - document.setContent((org.eclipse.gmf.runtime.notation.Diagram) rootElement); + document.setContent(rootElement); return; } } else { for (java.util.Iterator<org.eclipse.emf.ecore.EObject> it = resource.getContents().iterator(); it.hasNext();) { Object rootElement = it.next(); if (rootElement instanceof org.eclipse.gmf.runtime.notation.Diagram) { - document.setContent((org.eclipse.gmf.runtime.notation.Diagram) rootElement); + document.setContent(rootElement); return; } } @@ -194,7 +194,7 @@ import xpt.editor.DiagramEditorUtil } org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument diagramDocument = (org.eclipse.gmf.runtime.diagram.ui.resources.editor.document.IDiagramDocument) document; final org.eclipse.emf.ecore.resource.Resource newResource = diagramDocument.getEditingDomain().getResourceSet().createResource(newResoruceURI); - final org.eclipse.gmf.runtime.notation.Diagram diagramCopy = (org.eclipse.gmf.runtime.notation.Diagram) org.eclipse.emf.ecore.util.EcoreUtil.copy(diagramDocument.getDiagram()); + final org.eclipse.gmf.runtime.notation.Diagram diagramCopy = org.eclipse.emf.ecore.util.EcoreUtil.copy(diagramDocument.getDiagram()); try { new org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand(diagramDocument.getEditingDomain(), org.eclipse.osgi.util.NLS.bind(«xptExternalizer.accessorCall(editorGen, i18nKeyForDocumentSaveAs(it))», diagramCopy.getName()), affectedFiles) { «overrideC» @@ -237,4 +237,100 @@ import xpt.editor.DiagramEditorUtil return org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRuleFactory().createRule(toCreateOrModify); } ''' + + override doValidateState(GenDiagram it) ''' + «generatedMemberComment» + protected void doValidateState(Object element, Object computationContext) throws org.eclipse.core.runtime.CoreException { + ResourceSetInfo info = getResourceSetInfo(element); + if (info != null) { + java.util.LinkedList<org.eclipse.core.resources.IFile> files2Validate = new java.util.LinkedList<org.eclipse.core.resources.IFile>(); + for (java.util.Iterator<org.eclipse.emf.ecore.resource.Resource> it = info.getLoadedResourcesIterator(); it.hasNext();) { + org.eclipse.emf.ecore.resource.Resource nextResource = it.next(); + org.eclipse.core.resources.IFile file = org.eclipse.emf.workspace.util.WorkspaceSynchronizer.getFile(nextResource); + if (file != null && file.isReadOnly()) { + files2Validate.add(file); + } + } + org.eclipse.core.resources.ResourcesPlugin.getWorkspace().validateEdit(files2Validate.toArray(new org.eclipse.core.resources.IFile[files2Validate.size()]), computationContext); + } + + super.doValidateState(element, computationContext); + } + ''' + + override getResetRule(GenDiagram it) ''' + «generatedMemberComment» + protected org.eclipse.core.runtime.jobs.ISchedulingRule getResetRule(Object element) { + ResourceSetInfo info = getResourceSetInfo(element); + if (info != null) { + java.util.LinkedList<org.eclipse.core.runtime.jobs.ISchedulingRule> rules = new java.util.LinkedList<org.eclipse.core.runtime.jobs.ISchedulingRule>(); + for (java.util.Iterator<org.eclipse.emf.ecore.resource.Resource> it = info.getLoadedResourcesIterator(); it.hasNext();) { + org.eclipse.emf.ecore.resource.Resource nextResource = it.next(); + org.eclipse.core.resources.IFile file = org.eclipse.emf.workspace.util.WorkspaceSynchronizer.getFile(nextResource); + if (file != null) { + rules.add(org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRuleFactory().modifyRule(file)); + } + } + return new org.eclipse.core.runtime.jobs.MultiRule(rules.toArray(new org.eclipse.core.runtime.jobs.ISchedulingRule[rules.size()])); + } + return null; + } + ''' + + override getSaveRule(GenDiagram it) ''' + «generatedMemberComment» + protected org.eclipse.core.runtime.jobs.ISchedulingRule getSaveRule(Object element) { + ResourceSetInfo info = getResourceSetInfo(element); + if (info != null) { + java.util.LinkedList<org.eclipse.core.runtime.jobs.ISchedulingRule> rules = new java.util.LinkedList<org.eclipse.core.runtime.jobs.ISchedulingRule>(); + for (java.util.Iterator<org.eclipse.emf.ecore.resource.Resource> it = info.getLoadedResourcesIterator(); it.hasNext();) { + org.eclipse.emf.ecore.resource.Resource nextResource = it.next(); + org.eclipse.core.resources.IFile file = org.eclipse.emf.workspace.util.WorkspaceSynchronizer.getFile(nextResource); + if (file != null) { + rules.add(computeSchedulingRule(file)); + } + } + return new org.eclipse.core.runtime.jobs.MultiRule(rules.toArray(new org.eclipse.core.runtime.jobs.ISchedulingRule[rules.size()])); + } + return null; + } + ''' + + override getSynchronizeRule(GenDiagram it) ''' + «generatedMemberComment» + protected org.eclipse.core.runtime.jobs.ISchedulingRule getSynchronizeRule(Object element) { + ResourceSetInfo info = getResourceSetInfo(element); + if (info != null) { + java.util.LinkedList<org.eclipse.core.runtime.jobs.ISchedulingRule> rules = new java.util.LinkedList<org.eclipse.core.runtime.jobs.ISchedulingRule>(); + for (java.util.Iterator<org.eclipse.emf.ecore.resource.Resource> it = info.getLoadedResourcesIterator(); it.hasNext();) { + org.eclipse.emf.ecore.resource.Resource nextResource = it.next(); + org.eclipse.core.resources.IFile file = org.eclipse.emf.workspace.util.WorkspaceSynchronizer.getFile(nextResource); + if (file != null) { + rules.add(org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRuleFactory().refreshRule(file)); + } + } + return new org.eclipse.core.runtime.jobs.MultiRule(rules.toArray(new org.eclipse.core.runtime.jobs.ISchedulingRule[rules.size()])); + } + return null; + } + ''' + + override getValidateStateRule(GenDiagram it) ''' + «generatedMemberComment» + protected org.eclipse.core.runtime.jobs.ISchedulingRule getValidateStateRule(Object element) { + ResourceSetInfo info = getResourceSetInfo(element); + if (info != null) {«/*FIXME: [MG] bad copy paste here, files should be <IFile>, its a miracle that it does not fail in runtime at toArray stage */» + java.util.LinkedList<org.eclipse.core.runtime.jobs.ISchedulingRule> files = new java.util.LinkedList<org.eclipse.core.runtime.jobs.ISchedulingRule>(); + for (java.util.Iterator<org.eclipse.emf.ecore.resource.Resource> it = info.getLoadedResourcesIterator(); it.hasNext();) { + org.eclipse.emf.ecore.resource.Resource nextResource = it.next(); + org.eclipse.core.resources.IFile file = org.eclipse.emf.workspace.util.WorkspaceSynchronizer.getFile(nextResource); + if (file != null) { + files.add(file); + } + } + return org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRuleFactory().validateEditRule(files.toArray(new org.eclipse.core.resources.IFile[files.size()])); + } + return null; + } + ''' }
\ No newline at end of file diff --git a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/InitDiagramFileAction.xtend b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/InitDiagramFileAction.xtend new file mode 100644 index 00000000000..c5f3afdc95e --- /dev/null +++ b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/InitDiagramFileAction.xtend @@ -0,0 +1,81 @@ +package aspects.xpt.editor
+
+import xpt.Common
+import com.google.inject.Inject
+import plugin.Activator
+import org.eclipse.gmf.codegen.gmfgen.GenDiagram
+import xpt.Externalizer
+import xpt.ExternalizerUtils_qvto
+import com.google.inject.Singleton
+
+@Singleton class InitDiagramFileAction extends xpt.editor.InitDiagramFileAction {
+
+ @Inject extension Common
+ @Inject extension ExternalizerUtils_qvto
+
+ @Inject Activator xptActivator
+ @Inject xpt.editor.DiagramEditorUtil xptDiagramEditorUtil
+ @Inject Externalizer xptExternalizer
+
+ override classBody_PDE(GenDiagram it) '''
+ «generatedMemberComment»
+ private org.eclipse.ui.IWorkbenchPart targetPart;
+
+ «generatedMemberComment»
+ private org.eclipse.emf.common.util.URI domainModelURI;
+
+ «generatedMemberComment»
+ public void setActivePart(org.eclipse.jface.action.IAction action, org.eclipse.ui.IWorkbenchPart targetPart) {
+ this.targetPart = targetPart;
+ }
+
+ «generatedMemberComment»
+ public void selectionChanged(org.eclipse.jface.action.IAction action, org.eclipse.jface.viewers.ISelection selection) {
+ domainModelURI = null;
+ action.setEnabled(false);
+ if (selection instanceof org.eclipse.jface.viewers.IStructuredSelection == false || selection.isEmpty()) {
+ return;
+ }
+ org.eclipse.core.resources.IFile file =
+ (org.eclipse.core.resources.IFile) ((org.eclipse.jface.viewers.IStructuredSelection) selection).getFirstElement();
+ domainModelURI = org.eclipse.emf.common.util.URI.createPlatformResourceURI(file.getFullPath().toString(), true);
+ action.setEnabled(true);
+ }
+
+ «generatedMemberComment»
+ private org.eclipse.swt.widgets.Shell getShell() {
+ return targetPart.getSite().getShell();
+ }
+
+ «generatedMemberComment»
+ public void run(org.eclipse.jface.action.IAction action) {
+ org.eclipse.emf.transaction.TransactionalEditingDomain editingDomain =
+ org.eclipse.emf.workspace.WorkspaceEditingDomainFactory.INSTANCE.createEditingDomain();
+ «IF editorGen.sameFileForDiagramAndModel»
+ org.eclipse.emf.ecore.resource.ResourceSet resourceSet = new org.eclipse.emf.ecore.resource.impl.ResourceSetImpl();
+ «ELSE»
+ org.eclipse.emf.ecore.resource.ResourceSet resourceSet = editingDomain.getResourceSet();
+ «ENDIF»
+ org.eclipse.emf.ecore.EObject diagramRoot = null;
+ try {
+ org.eclipse.emf.ecore.resource.Resource resource = resourceSet.getResource(domainModelURI, true);
+ diagramRoot = resource.getContents().get(0);
+ } catch (org.eclipse.emf.common.util.WrappedException ex) {
+ «xptActivator.qualifiedClassName(editorGen.plugin)».getInstance().logError(
+ "Unable to load resource: " + domainModelURI, ex); «nonNLS(1)»
+ }
+ if (diagramRoot == null) {
+ org.eclipse.jface.dialogs.MessageDialog.openError(getShell(),
+ «xptExternalizer.accessorCall(editorGen, titleKey(i18nKeyForInitDiagramFileResourceErrorDialog()))»,
+ «xptExternalizer.accessorCall(editorGen, messageKey(i18nKeyForInitDiagramFileResourceErrorDialog()))»);
+ return;
+ }
+ org.eclipse.jface.wizard.Wizard wizard = new «editorGen.diagram.getNewDiagramFileWizardQualifiedClassName()»(domainModelURI, diagramRoot, editingDomain);
+ wizard.setWindowTitle(org.eclipse.osgi.util.NLS.bind(
+ «xptExternalizer.accessorCall(editorGen, i18nKeyForInitDiagramFileWizardTitle())»,
+ «VisualIDRegistry::modelID(editorGen.diagram)»));
+ «xptDiagramEditorUtil.qualifiedClassName(editorGen.diagram)».runWizard(getShell(), wizard, "InitDiagramFile"); «nonNLS(
+ 1)»
+ }
+ '''
+}
\ No newline at end of file diff --git a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/ResourceSetModificationListener.xtend b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/ResourceSetModificationListener.xtend index bb3d554f045..eaddf4da755 100644 --- a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/ResourceSetModificationListener.xtend +++ b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/ResourceSetModificationListener.xtend @@ -34,7 +34,7 @@ import xpt.Common if (resource.isLoaded()) { boolean modified = false; for (java.util.Iterator<org.eclipse.emf.ecore.resource.Resource> it = myInfo.getLoadedResourcesIterator(); it.hasNext() && !modified;) { - org.eclipse.emf.ecore.resource.Resource nextResource = (org.eclipse.emf.ecore.resource.Resource) it.next(); + org.eclipse.emf.ecore.resource.Resource nextResource = it.next(); if (nextResource.isLoaded()) { modified = nextResource.isModified(); } diff --git a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/ValidateAction.xtend b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/ValidateAction.xtend index ac86d659310..c22da0057c8 100644 --- a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/ValidateAction.xtend +++ b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/ValidateAction.xtend @@ -92,7 +92,7 @@ import xpt.providers.ValidationProvider diagramEditPart.getDiagramView(), collectTargetElements(rootStatus, new java.util.HashSet<org.eclipse.emf.ecore.EObject>(), allDiagnostics)); for (java.util.Iterator<org.eclipse.emf.common.util.Diagnostic> it = emfValidationStatus.getChildren().iterator(); it.hasNext();) { - org.eclipse.emf.common.util.Diagnostic nextDiagnostic = (org.eclipse.emf.common.util.Diagnostic) it.next(); + org.eclipse.emf.common.util.Diagnostic nextDiagnostic = it.next(); java.util.List<?> data = nextDiagnostic.getData(); if (data != null && !data.isEmpty() && data.get(0) instanceof org.eclipse.emf.ecore.EObject) { org.eclipse.emf.ecore.EObject element = (org.eclipse.emf.ecore.EObject) data.get(0); @@ -133,15 +133,14 @@ import xpt.providers.ValidationProvider java.util.List<?> data = diagnostic.getData(); org.eclipse.emf.ecore.EObject target = null; if (data != null && !data.isEmpty() && data.get(0) instanceof org.eclipse.emf.ecore.EObject) { - target = (org.eclipse.emf.ecore.EObject) data.get(0); - targetElementCollector.add(target); - allDiagnostics.add(diagnostic); + target = (org.eclipse.emf.ecore.EObject) data.get(0); + targetElementCollector.add(target); + allDiagnostics.add(diagnostic); } if (diagnostic.getChildren() != null && !diagnostic.getChildren().isEmpty()) { - for (java.util.Iterator<org.eclipse.emf.common.util.Diagnostic> it = diagnostic.getChildren().iterator(); it.hasNext();) { - collectTargetElements((org.eclipse.emf.common.util.Diagnostic) it.next(), - targetElementCollector, allDiagnostics); - } + for (java.util.Iterator<org.eclipse.emf.common.util.Diagnostic> it = diagnostic.getChildren().iterator(); it.hasNext();) { + collectTargetElements(it.next(), targetElementCollector, allDiagnostics); + } } return targetElementCollector; } diff --git a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/VisualIDRegistry.xtend b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/VisualIDRegistry.xtend index a6dfcc9fad0..b799fa7b3c3 100644 --- a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/VisualIDRegistry.xtend +++ b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/editor/VisualIDRegistry.xtend @@ -163,4 +163,18 @@ import org.eclipse.gmf.codegen.gmfgen.GenConstraint }; ''' + override getModelID(GenDiagram it) ''' + «generatedMemberComment()» + public static String «getModelIDMethodName(it)»(org.eclipse.gmf.runtime.notation.View view) { + org.eclipse.gmf.runtime.notation.View diagram = view.getDiagram(); + while (view != diagram) { + org.eclipse.emf.ecore.EAnnotation annotation = view.getEAnnotation("Shortcut"); «nonNLS(1)» + if (annotation != null) { + return annotation.getDetails().get("modelID"); «nonNLS(1)» + } + view = (org.eclipse.gmf.runtime.notation.View) view.eContainer(); + } + return diagram != null ? diagram.getType() : null; + } + ''' } diff --git a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/navigator/NavigatorContentProvider.xtend b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/navigator/NavigatorContentProvider.xtend index 265abcda900..7ffd0a151d7 100644 --- a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/navigator/NavigatorContentProvider.xtend +++ b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/navigator/NavigatorContentProvider.xtend @@ -64,7 +64,7 @@ import xpt.navigator.Utils_qvto
import xpt.CodeStyle override processChanges(GenNavigator it) '''
for (java.util.Iterator<org.eclipse.emf.ecore.resource.Resource> it = myEditingDomain.getResourceSet().getResources().iterator(); it.hasNext();) { - org.eclipse.emf.ecore.resource.Resource nextResource = (org.eclipse.emf.ecore.resource.Resource) it.next(); + org.eclipse.emf.ecore.resource.Resource nextResource = it.next(); nextResource.unload(); } if (myViewer != null) { @@ -137,7 +137,7 @@ import xpt.navigator.Utils_qvto
import xpt.CodeStyle myViewerRefreshRunnable = null; for (java.util.Iterator<org.eclipse.emf.ecore.resource.Resource> it = myEditingDomain.getResourceSet().getResources().iterator(); it.hasNext();) { - org.eclipse.emf.ecore.resource.Resource resource = (org.eclipse.emf.ecore.resource.Resource) it.next(); + org.eclipse.emf.ecore.resource.Resource resource = it.next(); resource.unload(); } @@ -315,7 +315,7 @@ import xpt.navigator.Utils_qvto
import xpt.CodeStyle } ''' - + override createEditingDomain(GenNavigator it) '''org.eclipse.emf.workspace.WorkspaceEditingDomainFactory.INSTANCE.createEditingDomain()''' //BEGIN: PapyrusGenCode //Loop to call generator of each method @@ -357,7 +357,7 @@ private Object[] getViewChildrenFor«it.editPartClassName»(org.eclipse.gmf.runtim «var segment = path.segments.get(segmentsIterator-1)» «IF referencesIterator==1 && pathsIterator==1 && segmentsIterator==1»java.util.Collection «ENDIF» connectedViews = «childrenMethodName(segment.from,reference.referenceType, segment) » - («IF segmentsIterator==0»java.util.Collections.singleton(view)«ELSE»connectedViews«ENDIF» + («IF segmentsIterator==1»java.util.Collections.singleton(view)«ELSE»connectedViews«ENDIF» , «xptVisualIDRegistry.typeMethodCall(segment.to)»); «ENDFOR» diff --git a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/providers/ElementInitializers.xtend b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/providers/ElementInitializers.xtend index 4d3c2b373d9..ba0b9dff324 100644 --- a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/providers/ElementInitializers.xtend +++ b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/providers/ElementInitializers.xtend @@ -28,6 +28,8 @@ import metamodel.MetaModel import xpt.expressions.AbstractExpression import xpt.providers.ElementInitializers_qvto import aspects.xpt.Common +import org.eclipse.gmf.codegen.gmfgen.GenFeatureSeqInitializer +import plugin.Activator /** * XXX should generate this class only when there is initialization logic defined in the model @@ -37,6 +39,7 @@ import aspects.xpt.Common @Inject extension Common; @Inject extension ElementInitializers_qvto; + @Inject Activator xptActivator @Inject AbstractExpression xptAbstractExpression; @Inject MetaModel xptMetaModel @@ -97,4 +100,16 @@ import aspects.xpt.Common «ENDIF/*is literal expression*/» ''' + override dispatch CharSequence initMethod(GenFeatureSeqInitializer it, GenCommonBase diagramElement) ''' + «generatedMemberComment» + public void init_«diagramElement.getUniqueIdentifier()»(«xptMetaModel.QualifiedClassName(elementClass)» instance) { + try { + «FOR i : it.initializers» + «performInit(i, diagramElement, 'instance', elementClass, <Integer>newLinkedList(initializers.indexOf(i)))» + «ENDFOR» + } catch(RuntimeException e) { + «xptActivator.qualifiedClassName(diagramElement.getDiagram().editorGen.plugin)».getInstance().logError("Element initialization failed", e); //$NON-NLS-1$ + } + } + ''' } diff --git a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/providers/ElementTypes.xtend b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/providers/ElementTypes.xtend index bebc661cb99..35175e2e72c 100644 --- a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/providers/ElementTypes.xtend +++ b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/providers/ElementTypes.xtend @@ -37,7 +37,7 @@ import xpt.Common «IF link.modelFacet != null»«bindUniqueIdentifierToNamedElement(link.modelFacet, link.getUniqueIdentifier())»«ENDIF» «ENDFOR» } - return (org.eclipse.emf.ecore.ENamedElement) elements.get(type); + return elements.get(type); } ''' diff --git a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/providers/MarkerNavigationProvider.xtend b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/providers/MarkerNavigationProvider.xtend index 7392197e7d3..7adbabfee98 100644 --- a/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/providers/MarkerNavigationProvider.xtend +++ b/plugins/developer/org.eclipse.papyrus.def/xtend/aspects/xpt/providers/MarkerNavigationProvider.xtend @@ -70,7 +70,7 @@ import xpt.Common marker = file.createMarker(MARKER_TYPE); marker.setAttribute(org.eclipse.core.resources.IMarker.MESSAGE, message); marker.setAttribute(org.eclipse.core.resources.IMarker.LOCATION, location); - marker.setAttribute(org.eclipse.gmf.runtime.common.ui.resources.IMarker.ELEMENT_ID, elementId); + marker.setAttribute(org.eclipse.gmf.runtime.common.core.resources.IMarker.ELEMENT_ID, elementId); int markerSeverity = org.eclipse.core.resources.IMarker.SEVERITY_INFO; if (statusSeverity == org.eclipse.core.runtime.IStatus.WARNING) { markerSeverity = org.eclipse.core.resources.IMarker.SEVERITY_WARNING; |