| /********************************************************************* |
| * Copyright (c) 2005, 2019 SAP SE |
| * |
| * This program and the accompanying materials are made |
| * available under the terms of the Eclipse Public License 2.0 |
| * which is available at https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * Contributors: |
| * SAP SE - initial API, implementation and documentation |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| **********************************************************************/ |
| package org.eclipse.graphiti.examples.tutorial.handlers; |
| |
| import org.eclipse.core.resources.IFile; |
| import org.eclipse.core.resources.IFolder; |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.emf.common.util.URI; |
| import org.eclipse.emf.ecore.EClass; |
| import org.eclipse.emf.ecore.resource.Resource; |
| import org.eclipse.emf.transaction.RecordingCommand; |
| import org.eclipse.emf.transaction.TransactionalEditingDomain; |
| import org.eclipse.graphiti.dt.IDiagramTypeProvider; |
| import org.eclipse.graphiti.examples.common.util.Util; |
| import org.eclipse.graphiti.features.IAddFeature; |
| import org.eclipse.graphiti.features.IFeatureProvider; |
| import org.eclipse.graphiti.features.context.impl.AddContext; |
| import org.eclipse.graphiti.mm.pictograms.Diagram; |
| import org.eclipse.graphiti.services.Graphiti; |
| import org.eclipse.graphiti.ui.services.GraphitiUi; |
| |
| public class AddAllClassesCommand extends RecordingCommand { |
| |
| private IProject project; |
| private TransactionalEditingDomain editingDomain; |
| private String diagramName; |
| private Resource createdResource; |
| |
| public AddAllClassesCommand(IProject project, TransactionalEditingDomain editingDomain, String diagramName) { |
| super(editingDomain); |
| this.project = project; |
| this.editingDomain = editingDomain; |
| this.diagramName = diagramName; |
| } |
| |
| @Override |
| protected void doExecute() { |
| // Get all EClasses |
| EClass[] allClasses = Util.getAllClasses(project, editingDomain.getResourceSet()); |
| |
| // Create the diagram and its file |
| Diagram diagram = Graphiti.getPeCreateService().createDiagram("tutorial", diagramName, true); //$NON-NLS-1$ |
| IFolder diagramFolder = project.getFolder("src/diagrams/"); //$NON-NLS-1$ |
| IFile diagramFile = diagramFolder.getFile(diagramName + ".diagram"); //$NON-NLS-1$ |
| URI uri = URI.createPlatformResourceURI(diagramFile.getFullPath().toString(), true); |
| createdResource = editingDomain.getResourceSet().createResource(uri); |
| createdResource.getContents().add(diagram); |
| |
| IDiagramTypeProvider dtp = GraphitiUi.getExtensionManager().createDiagramTypeProvider(diagram, |
| "org.eclipse.graphiti.examples.tutorial.diagram.TutorialDiagramTypeProvider"); //$NON-NLS-1$ |
| IFeatureProvider featureProvider = dtp.getFeatureProvider(); |
| |
| // Add all classes to diagram |
| int x = 20; |
| int y = 20; |
| for (int i = 0; i < allClasses.length; i++) { |
| // Create the context information |
| AddContext addContext = new AddContext(); |
| addContext.setNewObject(allClasses[i]); |
| addContext.setTargetContainer(diagram); |
| addContext.setX(x); |
| addContext.setY(y); |
| x = x + 20; |
| y = y + 20; |
| |
| IAddFeature addFeature = featureProvider.getAddFeature(addContext); |
| if (addFeature.canAdd(addContext)) { |
| addFeature.add(addContext); |
| } |
| } |
| } |
| |
| /** |
| * @return the createdResource |
| */ |
| public Resource getCreatedResource() { |
| return createdResource; |
| } |
| } |