diff options
author | Henrik Rentz-Reichert | 2018-07-06 17:19:51 +0000 |
---|---|---|
committer | Henrik Rentz-Reichert | 2018-07-06 17:22:00 +0000 |
commit | 0509ac03bea494b08a92251e68e9efc92e415a20 (patch) | |
tree | d070ca8800c829827df8aff75c1b773fe1115908 /plugins/org.eclipse.etrice.ui.common.base | |
parent | c2dfdeabf15d7e367bcd92731e6ac8651ffb9cac (diff) | |
parent | bed42b94fbf934db15e792b247ee747f0c37ebf4 (diff) | |
download | org.eclipse.etrice-0509ac03bea494b08a92251e68e9efc92e415a20.tar.gz org.eclipse.etrice-0509ac03bea494b08a92251e68e9efc92e415a20.tar.xz org.eclipse.etrice-0509ac03bea494b08a92251e68e9efc92e415a20.zip |
Merge remote-tracking branch 'newfsmgen_finalize'
Conflicts:
plugins/org.eclipse.etrice.ui.behavior.fsm/META-INF/MANIFEST.MF
plugins/org.eclipse.etrice.ui.behavior/META-INF/MANIFEST.MF
Change-Id: Icc81a851cdcdb35081b8eaa3d5b025c1f850de54
Diffstat (limited to 'plugins/org.eclipse.etrice.ui.common.base')
3 files changed, 79 insertions, 61 deletions
diff --git a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/commands/UpdateCommand.java b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/commands/UpdateCommand.java index c96378159..4e7837b3d 100644 --- a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/commands/UpdateCommand.java +++ b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/commands/UpdateCommand.java @@ -10,9 +10,10 @@ package org.eclipse.etrice.ui.common.base.commands; import org.eclipse.emf.transaction.RecordingCommand; import org.eclipse.emf.transaction.TransactionalEditingDomain; +import org.eclipse.graphiti.dt.IDiagramTypeProvider; import org.eclipse.graphiti.features.context.impl.UpdateContext; -import org.eclipse.graphiti.features.impl.AbstractUpdateFeature; import org.eclipse.graphiti.mm.pictograms.Diagram; +import org.eclipse.graphiti.ui.services.GraphitiUi; /** * @author Henrik Rentz-Reichert - initial contribution and API @@ -20,26 +21,26 @@ import org.eclipse.graphiti.mm.pictograms.Diagram; */ public class UpdateCommand extends RecordingCommand { - private Diagram diagram; - private AbstractUpdateFeature feature; + private IDiagramTypeProvider dtp; - public UpdateCommand(Diagram diag, TransactionalEditingDomain domain, AbstractUpdateFeature feature) { - super(domain); - this.feature = feature; + public UpdateCommand(String providerId, Diagram diagram, TransactionalEditingDomain editingDomain) { + super(editingDomain); + + dtp = GraphitiUi.getExtensionManager().createDiagramTypeProvider(diagram, providerId); //$NON-NLS-1$ } public boolean updateNeeded() { - UpdateContext context = new UpdateContext(diagram); - return feature.updateNeeded(context).toBoolean(); + UpdateContext ctx = new UpdateContext(dtp.getDiagram()); + return dtp.getFeatureProvider().getUpdateFeature(ctx).updateNeeded(ctx).toBoolean(); } /* (non-Javadoc) * @see org.eclipse.emf.transaction.RecordingCommand#doExecute() */ @Override - protected void doExecute() { - UpdateContext context = new UpdateContext(diagram); - feature.update(context); + protected void doExecute() { + UpdateContext ctx = new UpdateContext(dtp.getDiagram()); + dtp.getFeatureProvider().getUpdateFeature(ctx).update(ctx); } } diff --git a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/editor/SuperClassListener.java b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/editor/SuperClassListener.java index 61cac5f7d..20741c198 100644 --- a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/editor/SuperClassListener.java +++ b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/editor/SuperClassListener.java @@ -39,32 +39,34 @@ public class SuperClassListener implements IPartListener, ResourceSetListener, I private List<TransactionalEditingDomain> domains; private List<IXtextDocument> xtextDocuments; private boolean changeInSuperClass; - + public SuperClassListener(DiagramEditorBase diagramEditor, Object editorClass) { this.diagramEditor = diagramEditor; this.editorClass = editorClass; domains = new ArrayList<TransactionalEditingDomain>(); xtextDocuments = new ArrayList<IXtextDocument>(); changeInSuperClass = false; - - assert(editorClass instanceof Class) : "Class expected"; + + assert (editorClass instanceof Class) : "Class expected"; } - + public boolean isChangeInSuperClass() { return changeInSuperClass; } - public void dispose(){ - for(TransactionalEditingDomain domain : domains){ - if(domain != null) + public void dispose() { + for (TransactionalEditingDomain domain : domains) { + if (domain != null) domain.removeResourceSetListener(this); } - for(IXtextDocument document : xtextDocuments){ - if(document != null) + for (IXtextDocument document : xtextDocuments) { + if (document != null) document.removeModelListener(this); } + domains.clear(); + xtextDocuments.clear(); } - + // --- // IPartListener // --- @@ -81,18 +83,22 @@ public class SuperClassListener implements IPartListener, ResourceSetListener, I @Override public void partClosed(IWorkbenchPart part) { - if(part instanceof DiagramEditorBase){ - DiagramEditorBase editor = (DiagramEditorBase)part; + if (part == diagramEditor) { + dispose(); + return; + } + + if (part instanceof DiagramEditorBase) { + DiagramEditorBase editor = (DiagramEditorBase) part; TransactionalEditingDomain toRemove = editor.getEditingDomain(); - if(toRemove != null){ + if (toRemove != null) { toRemove.removeResourceSetListener(this); domains.remove(toRemove); } } - - if (((Class<?>)editorClass).isInstance(part)) { + if (((Class<?>) editorClass).isInstance(part)) { IXtextDocument toRemove = ((XtextEditor) part).getDocument(); - if(toRemove != null){ + if (toRemove != null) { toRemove.removeModelListener(this); xtextDocuments.remove(toRemove); } @@ -101,43 +107,43 @@ public class SuperClassListener implements IPartListener, ResourceSetListener, I @Override public void partDeactivated(IWorkbenchPart part) { - if(part == diagramEditor) + if (part == diagramEditor) changeInSuperClass = false; } @Override public void partOpened(IWorkbenchPart part) { // initial - if(part==diagramEditor){ + if (part == diagramEditor) { IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); for (IEditorReference editorRef : activePage.getEditorReferences()) { IEditorPart editor = editorRef.getEditor(false); - if (editor != null && editor!=diagramEditor) + if (editor != null && editor != diagramEditor) partOpened(editor); } return; } - - if(part instanceof DiagramEditorBase){ - DiagramEditorBase editor = (DiagramEditorBase)part; + + if (part instanceof DiagramEditorBase) { + DiagramEditorBase editor = (DiagramEditorBase) part; TransactionalEditingDomain domain = editor.getEditingDomain(); - if(!domains.contains(domain) && diagramEditor.registerSuperClassListener(editor)){ + if (!domains.contains(domain) && diagramEditor.registerSuperClassListener(editor)) { domain.addResourceSetListener(this); domains.add(domain); } } - - if (((Class<?>)editorClass).isInstance(part)) { + + if (((Class<?>) editorClass).isInstance(part)) { XtextEditor editor = (XtextEditor) part; IXtextDocument document = editor.getDocument(); - - if(!xtextDocuments.contains(document) && diagramEditor.registerSuperClassListener(editor)){ + + if (!xtextDocuments.contains(document) && diagramEditor.registerSuperClassListener(editor)) { editor.getDocument().addModelListener(this); xtextDocuments.add(document); } } } - + // --- // ResourceSetListener // --- @@ -148,8 +154,7 @@ public class SuperClassListener implements IPartListener, ResourceSetListener, I } @Override - public Command transactionAboutToCommit(ResourceSetChangeEvent event) - throws RollbackException { + public Command transactionAboutToCommit(ResourceSetChangeEvent event) throws RollbackException { return null; } @@ -173,7 +178,7 @@ public class SuperClassListener implements IPartListener, ResourceSetListener, I public boolean isPostcommitOnly() { return true; } - + // --- // IXtextModelListener // --- diff --git a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/support/DiagramAccessBase.java b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/support/DiagramAccessBase.java index d380b3c07..00cab7af3 100644 --- a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/support/DiagramAccessBase.java +++ b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/support/DiagramAccessBase.java @@ -59,23 +59,30 @@ public abstract class DiagramAccessBase { @Inject private IResourceSetProvider resourceSetProvider; - /** - * - */ public DiagramAccessBase() { super(); injectMembers(); } + + /** + * Load diagram based on rootObjects resource URI + */ + public Diagram getDiagram(EObject rootObject){ + ResourceSet rs = newResourceSet(EcoreUtil.getURI(rootObject)); + + return getDiagram(rootObject, rs); + } - public Diagram getDiagram(EObject rootObject) { + /** + * Load diagram based on rootObjects resource URI into given resourceSet + */ + public Diagram getDiagram(EObject rootObject, ResourceSet rs) { Resource resource = rootObject.eResource(); if (resource==null) return null; URI uri = resource.getURI(); - ResourceSet rs = newResourceSet(uri); - URI diagURI = null; boolean exists = false; if (uri.isPlatformResource()) { @@ -144,33 +151,34 @@ public abstract class DiagramAccessBase { } private ResourceSet newResourceSet(URI uri) { - ResourceSet rs; if (uri.isPlatformResource()) { IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(uri.toPlatformString(true))); IProject project = file.getProject(); - rs = resourceSetProvider.get(project); - } - else { - rs = new XtextResourceSet(); + return resourceSetProvider.get(project); } - return rs; + + return new XtextResourceSet(); } private void populateDiagram(EObject rootObject, Diagram diagram) { - ResourceSet rs = newResourceSet(rootObject.eResource().getURI()); + ResourceSet rs = diagram.eResource().getResourceSet(); + + // IMPORTANT STEP: this resolves the object and creates a new resource in the resource set + URI boUri = EcoreUtil.getURI(rootObject); + rootObject = rs.getEObject(boUri, true); + boolean editingDomainOwner = false; TransactionalEditingDomain editingDomain = TransactionUtil.getEditingDomain(rs); if (editingDomain == null) { // Not yet existing, create one editingDomain = TransactionalEditingDomain.Factory.INSTANCE.createEditingDomain(rs); + editingDomainOwner = true; } - - // IMPORTANT STEP: this resolves the object and creates a new resource in the resource set - URI boUri = EcoreUtil.getURI(rootObject); - rootObject = editingDomain.getResourceSet().getEObject(boUri, true); editingDomain.getCommandStack().execute(getInitialCommand(rootObject, diagram, editingDomain)); - editingDomain.dispose(); + if(editingDomainOwner){ + editingDomain.dispose(); + } } /** @@ -178,11 +186,13 @@ public abstract class DiagramAccessBase { */ private void updateDiagram(Diagram diagram, boolean doSave) { ResourceSet rs = diagram.eResource().getResourceSet(); + boolean editingDomainOwner = false; TransactionalEditingDomain editingDomain = TransactionUtil.getEditingDomain(rs); try { if (editingDomain == null) { // Not yet existing, create one and start a write transaction editingDomain = TransactionalEditingDomain.Factory.INSTANCE.createEditingDomain(rs); + editingDomainOwner = true; ((TransactionalEditingDomainImpl)editingDomain).startTransaction(false, null); } @@ -202,7 +212,9 @@ public abstract class DiagramAccessBase { catch (InterruptedException e) { } - editingDomain.dispose(); + if(editingDomainOwner){ + editingDomain.dispose(); + } } public DiagramEditorBase findDiagramEditor(EObject rootObject) { |