blob: 1d9bff5aaeed96da7ebc54e3b16d944e5bac1f5b [file] [log] [blame]
/*********************************************************************
* 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;
}
}