Package org.jbpm.ui.wizard

Source Code of org.jbpm.ui.wizard.NewProcessDefinitionWizard

package org.jbpm.ui.wizard;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard;
import org.jbpm.ui.DesignerLogger;
import org.jbpm.ui.JpdlVersionRegistry;
import org.jbpm.ui.ProcessCache;
import org.jbpm.ui.par.GpdXmlContentProvider;
import org.jbpm.ui.resource.Messages;
import org.jbpm.ui.util.ProjectFinder;
import org.jbpm.ui.util.XmlUtil;
import org.w3c.dom.Document;

public class NewProcessDefinitionWizard extends Wizard implements INewWizard {

    private IStructuredSelection selection;

    private IWorkbench workbench;

    private NewProcessDefinitionWizardPage page;

    public NewProcessDefinitionWizard() {
        setWindowTitle(Messages.getString("NewProcessDefinitionWizard.wizard.title"));
    }

    public void init(IWorkbench w, IStructuredSelection currentSelection) {
        this.workbench = w;
        this.selection = currentSelection;
        setNeedsProgressMonitor(true);
    }

    @Override
    public void addPages() {
        page = new NewProcessDefinitionWizardPage(selection);
        addPage(page);
    }

    @Override
    public boolean performFinish() {
        try {
            getContainer().run(false, false, new IRunnableWithProgress() {

                public void run(IProgressMonitor monitor) throws InvocationTargetException {
                    try {
                        // TODO move to par provider
                        monitor.beginTask(Messages.getString("NewProcessDefinitionWizard.monitor.title"), 4);
                        IFolder folder = page.getProcessFolder();
                        folder.create(true, true, null);
                        monitor.worked(1);
                        IFile definitionFile = ProjectFinder.getProcessDefinitionFile(folder);
                        String processName = page.getProcessFolder().getName();
                        Document document = JpdlVersionRegistry.getContentProvider(page.getJpdlVersion()).getInitialProcessDefinitionDocument(
                                processName);
                        byte[] bytes = XmlUtil.writeXml(document);
                        definitionFile.create(new ByteArrayInputStream(bytes), true, null);
                        monitor.worked(1);
                        IFile gpdFile = folder.getFile(GpdXmlContentProvider.GPD_FILE_NAME);
                        gpdFile.create(createInitialGpdInfo(page.getNotation()), true, null);
                        monitor.worked(1);
                        ProcessCache.newProcessDefinitionWasCreated(definitionFile);
                        IDE.openEditor(getActivePage(), definitionFile, true);
                        monitor.worked(1);
                        BasicNewResourceWizard.selectAndReveal(gpdFile, getActiveWorkbenchWindow());
                        monitor.done();
                    } catch (Exception e) {
                        throw new InvocationTargetException(e);
                    }
                }
            });
        } catch (InvocationTargetException e) {
            DesignerLogger.logError(Messages.getString("NewProcessDefinitionWizard.error.creation"), e.getTargetException());
            return false;
        } catch (InterruptedException e) {
        }
        return true;
    }

    private IWorkbenchPage getActivePage() {
        return getActiveWorkbenchWindow().getActivePage();
    }

    private IWorkbenchWindow getActiveWorkbenchWindow() {
        return workbench.getActiveWorkbenchWindow();
    }

    private InputStream createInitialGpdInfo(String notation) {
        StringBuffer buffer = new StringBuffer();
        buffer.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
        buffer.append("\n");
        buffer.append("\n");
        buffer.append("<process-diagram notation=\"").append(notation).append("\"></process-diagram>");
        return new ByteArrayInputStream(buffer.toString().getBytes());
    }

}
TOP

Related Classes of org.jbpm.ui.wizard.NewProcessDefinitionWizard

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.