diff --git a/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/diagram/CompositediagramFeatureProvider.java b/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/diagram/CompositediagramFeatureProvider.java index bf6f964dc9f9bcbc1a2bd30b7238d87c2c415cf5..27dc656424d5a1dc2fbbefd83ba8c257e9b10b63 100644 --- a/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/diagram/CompositediagramFeatureProvider.java +++ b/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/diagram/CompositediagramFeatureProvider.java @@ -11,19 +11,48 @@ package edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram.di import java.util.ArrayList; import java.util.Arrays; +import org.eclipse.emf.ecore.EObject; import org.eclipse.graphiti.dt.IDiagramTypeProvider; +import org.eclipse.graphiti.features.IAddFeature; +import org.eclipse.graphiti.features.context.IAddContext; import org.eclipse.graphiti.features.context.ICustomContext; import org.eclipse.graphiti.features.custom.ICustomFeature; import org.eclipselabs.spray.runtime.graphiti.zest.features.ZestLayoutDiagramFeature; import com.google.common.collect.Iterables; +import edu.kit.ipd.descartes.mm.applicationlevel.repository.RepositoryPackage; +import edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram.features.CompositediagramAddAssemblyContextFeature; +import edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram.features.CompositediagramAddCompositeComponentFeature; + public class CompositediagramFeatureProvider extends CompositediagramFeatureProviderBase { public CompositediagramFeatureProvider(final IDiagramTypeProvider dtp) { super(dtp); } + /** + * {@inheritDoc} + */ + @Override + public IAddFeature getAddFeature(final IAddContext context) { + // is object for add request a EClass or EReference? + final EObject bo = (EObject) context.getNewObject(); + final String reference = (String) context.getProperty(PROPERTY_REFERENCE); + final String alias = (String) context.getProperty(PROPERTY_ALIAS); + if (bo.eClass() == RepositoryPackage.Literals.COMPOSITE_COMPONENT && alias == null) { + if (reference == null) { + return new CompositediagramAddCompositeComponentFeature(this); + } + } + if (bo.eClass() == RepositoryPackage.Literals.ASSEMBLY_CONTEXT && alias == null) { + if (reference == null) { + return new CompositediagramAddAssemblyContextFeature(this); + } + } + return super.getAddFeature(context); + } + @Override public ICustomFeature[] getCustomFeatures(ICustomContext context) { ArrayList<ICustomFeature> features = new ArrayList<ICustomFeature>(Arrays.asList(super.getCustomFeatures(context))); diff --git a/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/features/CompositediagramAddCompositeComponentFeature.java b/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/features/CompositediagramAddCompositeComponentFeature.java new file mode 100644 index 0000000000000000000000000000000000000000..6f9518beddb693e44eef4eb1eaa10284e51dbf42 --- /dev/null +++ b/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/features/CompositediagramAddCompositeComponentFeature.java @@ -0,0 +1,17 @@ +/************************************************************************************* + * + * Generated on Tue Nov 19 19:17:53 CET 2013 by Spray AddShapeFromDslFeature.xtend + * + * This file is an extension point: copy to "src" folder to manually add code to this + * extension point. + * + *************************************************************************************/ +package edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram.features; + +import org.eclipse.graphiti.features.IFeatureProvider; + +public class CompositediagramAddCompositeComponentFeature extends CompositediagramAddCompositeComponentFeatureBase { + public CompositediagramAddCompositeComponentFeature(final IFeatureProvider fp) { + super(fp); + } +} diff --git a/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/popup/actions/AddAssemblyContext.java b/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/popup/actions/AddAssemblyContext.java new file mode 100644 index 0000000000000000000000000000000000000000..79e80bf84ff5600d9a4113c9d6befd333cc465e7 --- /dev/null +++ b/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/popup/actions/AddAssemblyContext.java @@ -0,0 +1,5 @@ +package edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram.popup.actions; + +public class AddAssemblyContext { + +} diff --git a/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/popup/actions/InitCreateDiagramWizard.java b/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/popup/actions/InitCreateDiagramWizard.java index 3b7efc21f104a38be2760d3f38edf063a2a20f7e..33cb384772ed231f8d9f251b25eaa4af7f6cbad1 100644 --- a/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/popup/actions/InitCreateDiagramWizard.java +++ b/edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram/src/edu/kit/ipd/descartes/mm/applicationlevel/repository/compositediagram/popup/actions/InitCreateDiagramWizard.java @@ -20,9 +20,15 @@ import org.eclipse.emf.transaction.TransactionalEditingDomain; import org.eclipse.emf.transaction.TransactionalEditingDomain.Registry; import org.eclipse.emf.transaction.util.TransactionUtil; import org.eclipse.graphiti.dt.IDiagramTypeProvider; +import org.eclipse.graphiti.features.IFeatureProvider; import org.eclipse.graphiti.features.context.impl.AddContext; +import org.eclipse.graphiti.features.context.impl.UpdateContext; +import org.eclipse.graphiti.mm.pictograms.ContainerShape; import org.eclipse.graphiti.mm.pictograms.Diagram; +import org.eclipse.graphiti.mm.pictograms.PictogramElement; +import org.eclipse.graphiti.mm.pictograms.PictogramLink; import org.eclipse.graphiti.mm.pictograms.PictogramsFactory; +import org.eclipse.graphiti.mm.pictograms.impl.ContainerShapeImpl; import org.eclipse.graphiti.services.Graphiti; import org.eclipse.graphiti.services.IGaService; import org.eclipse.graphiti.services.IPeCreateService; @@ -37,6 +43,8 @@ import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IActionDelegate; import org.eclipse.ui.IObjectActionDelegate; import org.eclipse.ui.IWorkbenchPart; +import org.eclipselabs.spray.runtime.graphiti.features.custom.UpdateElementsFeature; +import org.eclipselabs.spray.runtime.graphiti.layout.SprayLayoutService; import org.eclipselabs.spray.runtime.graphiti.wizard.FileOpener; import org.eclipselabs.spray.runtime.graphiti.wizard.IDiagramInitializer; import org.eclipselabs.spray.runtime.graphiti.wizard.NewDiagramPage; @@ -44,8 +52,10 @@ import org.eclipselabs.spray.runtime.graphiti.wizard.NewDiagramPage; import com.google.inject.Inject; import com.google.inject.name.Named; +import edu.kit.ipd.descartes.mm.applicationlevel.repository.AssemblyContext; import edu.kit.ipd.descartes.mm.applicationlevel.repository.CompositeComponent; import edu.kit.ipd.descartes.mm.applicationlevel.repository.Repository; +import edu.kit.ipd.descartes.mm.applicationlevel.repository.compositediagram.features.CompositediagramAddCompositeComponentFeature; public class InitCreateDiagramWizard implements IObjectActionDelegate { @@ -106,7 +116,7 @@ public class InitCreateDiagramWizard implements IObjectActionDelegate { /* * Load Repository from diagramRoot */ - TreeIterator<EObject> it = diagramRoot.eAllContents(); + TreeIterator<EObject> itDiagRoot = diagramRoot.eAllContents(); final Repository model; if (diagramRoot instanceof Repository) { model = (Repository) diagramRoot; @@ -125,23 +135,6 @@ public class InitCreateDiagramWizard implements IObjectActionDelegate { // } // } - /* - * Testweises laden von EOBjects to add - */ - CompositeComponent testObj = null; - while (it.hasNext()) { - EObject possibleCC = it.next(); - if (possibleCC instanceof CompositeComponent) { //load CompositeComponent - testObj = (CompositeComponent) possibleCC; - break; - } - } - if (testObj == null) { - MessageDialog.openError(shell, "No CompositeComponent found", "Resource does not contain a 'CompositeComponent' EObject"); - return; - } - - /* * If no model found exit */ @@ -150,6 +143,7 @@ public class InitCreateDiagramWizard implements IObjectActionDelegate { return; } + /* * Create empty diagram */ @@ -158,27 +152,185 @@ public class InitCreateDiagramWizard implements IObjectActionDelegate { final URI uri = URI.createPlatformResourceURI(diagPath, true); final Resource resource = rs.createResource(uri); // Diagram diagram = Graphiti.getPeCreateService().createDiagram(diagramTypeId, fileName, true); - Diagram diagram = PictogramsFactory.eINSTANCE.createDiagram(); + final Diagram diagram = PictogramsFactory.eINSTANCE.createDiagram(); diagram.setDiagramTypeId(diagramTypeId); diagram.setName(fileName); diagramInitializer.initialize(diagram); + /* + * Add Diagram to resource file + */ + resource.getContents().add(diagram); /* - * TODO Add Repository/EObject to diagram and link + * Save resource and open editor */ - String dtId = GraphitiUi.getExtensionManager().getDiagramTypeProviderId(diagramTypeId); - IDiagramTypeProvider dtp = GraphitiUi.getExtensionManager().createDiagramTypeProvider(diagram, dtId); - AddContext ac = new AddContext(); - ac.setNewObject(testObj); - ac.setTargetContainer(diagram); - dtp.getFeatureProvider().addIfPossible(ac); + try { + resource.save(Collections.emptyMap()); + IFile file = workspace.getRoot().getFile(new Path(uri.toPlatformString(true))); + fileOpener.selectAndReveal(file); + fileOpener.openFileToEdit(shell, file); + } catch (IOException e) { + e.printStackTrace(); + } /* - * Add Diagram to resource file + * Testweises laden von EOBjects to add */ - resource.getContents().add(diagram); +// CompositeComponent testObj = null; +// while (itDiagRoot.hasNext()) { +// EObject possibleAddObject = itDiagRoot.next(); +// if (possibleAddObject instanceof CompositeComponent) { +// testObj = (CompositeComponent) possibleAddObject; +// break; +// } +// if (possibleAddObject instanceof AssemblyContext) { +// +// } +// } +// if (testObj == null) { +// MessageDialog.openError(shell, "No CompositeComponent found", "Resource does not contain a 'CompositeComponent' EObject"); +// return; +// } + + /* + * TODO Add Repository/EObject to diagram and link (linking is done automatically) + */ +// String dtId = GraphitiUi.getExtensionManager().getDiagramTypeProviderId(diagramTypeId); +// IDiagramTypeProvider dtp = GraphitiUi.getExtensionManager().createDiagramTypeProvider(diagram, dtId); +// AddContext ac = new AddContext(); +// ac.setNewObject(testObj); +// ac.setTargetContainer(diagram); +// dtp.getFeatureProvider().addIfPossible(ac); + +// ----------------------------------------------------- + + /* + * Get DiagramTypeProvider and FeatureProvider for adding Objects + */ + final String dtId = GraphitiUi.getExtensionManager().getDiagramTypeProviderId(diagramTypeId); + final IDiagramTypeProvider dtp = GraphitiUi.getExtensionManager().createDiagramTypeProvider(diagram, dtId); + final IFeatureProvider fp = dtp.getFeatureProvider(); + + /* + * TEST BEGIN + */ +// PictogramLink link =PictogramsFactory.eINSTANCE.createPictogramLink(); +// link.getBusinessObjects().add(model); +// diagram.setLink(link); +// CompositediagramAddCompositeComponentFeature add = new CompositediagramAddCompositeComponentFeature(fp) { +// public IFeatureProvider getFeatureProvider() { +// return dtp.getFeatureProvider(); +// } +// +// protected Diagram getDiagram() { +// return diagram; +// } +// }; +// fp.addIfPossible(context) +// AddContext context = new AddContext(); +// context.setNewObject(model); +// context.setTargetContainer(diagram); +// add.add(context); + /* + * TEST END + */ + + /* + * Will be filled with EObjects to add within while loop + */ +// AddContext ac; + + /* + * Add all elements from diagramRoot to diagram + */ + while (itDiagRoot.hasNext()) { + final EObject possibleAddObject = itDiagRoot.next(); + if (possibleAddObject instanceof CompositeComponent) { +// AddContext ac = new AddContext(); +// ac.setNewObject((CompositeComponent)possibleAddObject); +// ac.setTargetContainer(diagram); +// +// PictogramElement picto = fp.addIfPossible(ac); + +// TransactionalEditingDomain domain = TransactionUtil.getEditingDomain(resourceSet); + editingDomain.getCommandStack().execute(new RecordingCommand(editingDomain) { + public void doExecute() { + AddContext ac = new AddContext(); + ac.setNewObject((CompositeComponent)possibleAddObject); + ac.setTargetContainer(diagram); + PictogramElement picto = fp.addIfPossible(ac); + + AssemblyContext ass = ((CompositeComponent)possibleAddObject).getAssemblyContexts().get(0); + ac = new AddContext(); + ac.setNewObject(ass); + ac.setTargetContainer((ContainerShape) picto); + fp.addIfPossible(ac); +// UpdateContext updateContext = new UpdateContext(diagram.getChildren().get(0).getGraphicsAlgorithm().getPictogramElement()); +// IUpdateFeature updateFeature = fp.getUpdateFeature(updateContext); +// updateFeature.update(updateContext); + } + }); + +// fp.link(fp.getPictogramElementForBusinessObject(possibleAddObject), possibleAddObject); + + // Save diagram, because else object are not visible for others +// resource.getContents().add(diagram); +// try { +// resource.save(Collections.emptyMap()); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// IFile file = workspace.getRoot().getFile(new Path(uri.toPlatformString(true))); +// fileOpener.selectAndReveal(file); +// SprayLayoutService.setCompartment(picto, true); + } + if (possibleAddObject instanceof AssemblyContext) { +// AddContext ac = new AddContext(); +// ac.setNewObject((AssemblyContext)possibleAddObject); + // a.eContainer() == a.getParentStructure() == True + // a.eContainer().equals(a.getParentStructure()) == True + // Object o = fp.getPictogramElementForBusinessObject(a.getParentStructure()); + // o.getClass() == org.eclipse.graphiti.mm.pictograms.impl.ContainerShapeImpl + final ContainerShape cs = (ContainerShape) fp.getPictogramElementForBusinessObject(((AssemblyContext) possibleAddObject).getParentStructure()); + +// PictogramElement o1 = fp.getPictogramElementForBusinessObject(a.getParentStructure()); +// Object o2 = fp.getBusinessObjectForPictogramElement(o1); +// System.out.println("------o1------"); +// System.out.println(o1); +// System.out.println("------o2------"); +// System.out.println(o2); +// System.out.println("------end------"); + +// ac.setTargetContainer(cs); +// PictogramElement p = fp.addIfPossible(ac); +// System.out.println(p); + editingDomain.getCommandStack().execute(new RecordingCommand(editingDomain) { + public void doExecute() { + AddContext ac = new AddContext(); + ac.setNewObject((AssemblyContext)possibleAddObject); + ac.setTargetContainer(cs); + fp.addIfPossible(ac); +// UpdateContext updateContext = new UpdateContext(diagram.getChildren().get(0).getGraphicsAlgorithm().getPictogramElement()); +// IUpdateFeature updateFeature = fp.getUpdateFeature(updateContext); +// updateFeature.update(updateContext); + } + }); + + // Save diagram, because else object are not visible for others +// resource.getContents().add(diagram); +// try { +// resource.save(Collections.emptyMap()); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// IFile file = workspace.getRoot().getFile(new Path(uri.toPlatformString(true))); +// fileOpener.selectAndReveal(file); + } + } +// ------------------------------------------------------ + // TransactionalEditingDomain domain = TransactionUtil.getEditingDomain(diagram); // domain.getCommandStack().execute(new RecordingCommand(domain) { @@ -186,12 +338,21 @@ public class InitCreateDiagramWizard implements IObjectActionDelegate { // diagram.eResource().getContents().add(model); // } // }); - + + + + /* + * Add Diagram to resource file + */ + resource.getContents().add(diagram); + /* * Save resource and open editor + * + * + * org.eclipselabs.spray.runtime.graphiti.wizard.NewDiagramWizard nutzt das folgende: + * public void run(IProgressMonitor monitor) throws InvocationTargetException */ - //org.eclipselabs.spray.runtime.graphiti.wizard.NewDiagramWizard nutzt das folgende: - //public void run(IProgressMonitor monitor) throws InvocationTargetException try { resource.save(Collections.emptyMap()); } catch (IOException e) {