package org.activiti.designer.eclipse.ui.wizard.diagram; import java.lang.reflect.InvocationTargetException; import org.activiti.designer.eclipse.editor.Bpmn2DiagramCreator; import org.apache.commons.lang.StringUtils; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.graphiti.mm.pictograms.Diagram; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard; /** * The Class CreateDefaultActivitiDiagramWizard. */ public class CreateDefaultActivitiDiagramWizard extends BasicNewResourceWizard { private Diagram diagram; private CreateDefaultActivitiDiagramNameWizardPage namePage; private CreateDefaultActivitiDiagramInitialContentPage initialContentPage; @Override public void addPages() { super.addPages(); namePage = new CreateDefaultActivitiDiagramNameWizardPage(super.getSelection()); addPage(namePage); initialContentPage = new CreateDefaultActivitiDiagramInitialContentPage(); addPage(initialContentPage); } @Override public boolean canFinish() { return canCreateDiagramFile(); } private boolean canCreateDiagramFile() { if (namePage.getContainerFullPath() != null) { final IFile fileToCreate = getDiagramFile(); if (fileToCreate != null) { return !fileToCreate.exists(); } } return false; } private IFile getDiagramFile() { final String diagramName = getDiagramName(); if (StringUtils.isBlank(diagramName)) { return null; } IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); if(namePage.getContainerFullPath().segmentCount() == 1) { return root.getProject(namePage.getContainerFullPath().lastSegment()).getFile(diagramName); } else { IFolder diagramFolder = root.getFolder(namePage.getContainerFullPath()); return diagramFolder.getFile(diagramName); } } /* * (non-Javadoc) * * @see * org.eclipse.ui.wizards.newresource.BasicNewResourceWizard#init(org.eclipse * .ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection) */ @Override public void init(IWorkbench workbench, IStructuredSelection currentSelection) { super.init(workbench, currentSelection); } @Override public IWizardPage getNextPage(IWizardPage page) { if (page instanceof CreateDefaultActivitiDiagramNameWizardPage) { } return super.getNextPage(page); } /* * (non-Javadoc) * * @see org.eclipse.jface.wizard.Wizard#performFinish() */ @Override public boolean performFinish() { final IFile diagramFile = getDiagramFile(); String tempFileName = null; if(initialContentPage.contentSourceTemplate.getSelection() == true && initialContentPage.templateTable.getSelectionIndex() >= 0) { tempFileName = this.getClass().getClassLoader().getResource("src/main/resources/templates/" + TemplateInfo.templateFilenames[initialContentPage.templateTable.getSelectionIndex()]).getPath(); } final String contentFileName = tempFileName; IRunnableWithProgress op = new IRunnableWithProgress() { @Override public void run(IProgressMonitor monitor) throws InvocationTargetException { try { Bpmn2DiagramCreator creator = new Bpmn2DiagramCreator(); creator.createBpmnDiagram(null, diagramFile, null, contentFileName, true); } catch (Exception e) { e.printStackTrace(); } finally { monitor.done(); } } }; try { getContainer().run(true, false, op); } catch (InterruptedException e) { return false; } catch (InvocationTargetException e) { Throwable realException = e.getTargetException(); MessageDialog.openError(getShell(), "Error", realException.getMessage()); return false; } return true; } /** * Gets the diagram. * * @return the diagram */ public Diagram getDiagram() { return diagram; } private CreateDefaultActivitiDiagramNameWizardPage getNamePage() { return (CreateDefaultActivitiDiagramNameWizardPage) getPage(CreateDefaultActivitiDiagramNameWizardPage.PAGE_NAME); } private String getDiagramName() { return getNamePage().getDiagramName(); } }