package org.activiti.designer.popupmenus; import java.io.File; import org.activiti.designer.eclipse.bpmnimport.ImportBpmnElementsCommand; import org.activiti.designer.eclipse.bpmnimport.ImportBpmnUtil; import org.activiti.designer.eclipse.common.ActivitiBPMNDiagramConstants; import org.activiti.designer.eclipse.common.ActivitiPlugin; import org.activiti.designer.util.platform.OSEnum; import org.activiti.designer.util.platform.OSUtil; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Status; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.ui.IFileEditorInput; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.FileEditorInput; public class ImportBpmnMenu implements org.eclipse.ui.IObjectActionDelegate{ ISelection fSelection; @Override public void run(IAction action) { Object selection = ( (IStructuredSelection) fSelection).getFirstElement(); IJavaProject javaProject = (IJavaProject) selection; IFolder diagramFolder = null; try { diagramFolder = javaProject.getProject().getFolder(ActivitiBPMNDiagramConstants.DIAGRAM_FOLDER); if(diagramFolder == null) { return; } } catch(Throwable e) { return; } FileDialog fd = new FileDialog(Display.getCurrent().getActiveShell(), SWT.OPEN); fd.setText("Choose BPMN 2.0 XML file to import"); if(OSUtil.getOperatingSystem() == OSEnum.Windows) { fd.setFilterPath("C:/"); } else { fd.setFilterPath("/"); } String[] filterExt = { "*.xml"}; fd.setFilterExtensions(filterExt); String bpmnFile = fd.open(); if(bpmnFile == null || bpmnFile.length() == 0) return; String processName = bpmnFile.substring(bpmnFile.lastIndexOf(File.separator) + 1); processName = processName.replace(".xml", ""); processName = processName.replace(".bpmn20", ""); ImportBpmnElementsCommand operation = ImportBpmnUtil.createDiagram(processName, bpmnFile, javaProject.getProject(), diagramFolder); // Open the editor String platformString = operation.getCreatedResource().getURI().toPlatformString(true); IFile file = javaProject.getProject().getParent().getFile(new Path(platformString)); IFileEditorInput input = new FileEditorInput(file); try { PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().openEditor(input, ActivitiBPMNDiagramConstants.DIAGRAM_EDITOR_ID); } catch (PartInitException e) { String error = "Error while opening diagram editor"; IStatus status = new Status(IStatus.ERROR, ActivitiPlugin.getID(), error, e); ErrorDialog.openError(Display.getCurrent().getActiveShell(), "An error occured", null, status); return; } } @Override public void selectionChanged(IAction action, ISelection selection) { fSelection = selection; } @Override public void setActivePart(IAction action, IWorkbenchPart part) { } }