package org.activiti.designer.eclipse.bpmnimport;
import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.Path;
import org.eclipse.emf.common.util.URI;
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.features.IFeatureProvider;
import org.eclipse.graphiti.mm.pictograms.Diagram;
import org.eclipse.graphiti.services.Graphiti;
import org.eclipse.graphiti.ui.services.GraphitiUi;
public class ImportBpmnElementsCommand extends RecordingCommand {
private TransactionalEditingDomain editingDomain;
private String diagramName;
private String bpmnFileName;
private Resource createdResource;
private Diagram diagram;
private IContainer targetFolder;
public ImportBpmnElementsCommand(TransactionalEditingDomain editingDomain,
String diagramName, String bpmnFileName, IContainer targetFolder) {
super(editingDomain);
this.editingDomain = editingDomain;
this.diagramName = diagramName;
this.bpmnFileName = bpmnFileName;
this.targetFolder = targetFolder;
}
@Override
protected void doExecute() {
// Create the diagram and its file
diagram = Graphiti.getPeCreateService().createDiagram("BPMNdiagram", diagramName, true); //$NON-NLS-1$
IFile diagramFile = targetFolder.getFile(new Path(diagramName + ".activiti")); //$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.activiti.designer.diagram.ActivitiBPMNDiagramTypeProvider"); //$NON-NLS-1$
IFeatureProvider featureProvider = dtp.getFeatureProvider();
BpmnFileReader bpmnFileReader = new BpmnFileReader(bpmnFileName, diagram, featureProvider);
bpmnFileReader.openStream();
bpmnFileReader.readBpmn();
}
/**
* @return the createdResource
*/
public Resource getCreatedResource() {
return createdResource;
}
public Diagram getDiagram() {
return diagram;
}
}