Package org.jbpm.ui.common.command

Source Code of org.jbpm.ui.common.command.UpdateJpdlVersionCommand

package org.jbpm.ui.common.command;

import java.io.ByteArrayInputStream;

import org.eclipse.core.resources.IFile;
import org.eclipse.gef.commands.Command;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.part.FileEditorInput;
import org.jbpm.ui.DesignerLogger;
import org.jbpm.ui.JpdlVersionRegistry;
import org.jbpm.ui.ParContentProvider;
import org.jbpm.ui.ProcessCache;
import org.jbpm.ui.common.model.ProcessDefinition;
import org.jbpm.ui.editor.DesignerEditor;
import org.jbpm.ui.resource.Messages;
import org.jbpm.ui.util.XmlUtil;
import org.w3c.dom.Document;

public class UpdateJpdlVersionCommand extends Command {
  private final IFile definitionFile;
  private final ProcessDefinition oldDefinition;
  private final DesignerEditor activeEditor;
  private boolean needsCloseEditorOnError = false;

  public UpdateJpdlVersionCommand(DesignerEditor activeEditor, IFile definitionFile, ProcessDefinition oldDefinition) {
    this.activeEditor = activeEditor;
    this.definitionFile = definitionFile;
    this.oldDefinition = oldDefinition;
  }
 
    @Override
    public void execute() {
        try {
            IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
            activePage.closeEditor(activeEditor, true);
            ProcessDefinition newDefinition = JpdlVersionRegistry.updateToNextVersion(oldDefinition, definitionFile);
      ParContentProvider.saveAuxInfo(definitionFile, newDefinition);
      ProcessCache.invalidateProcessDefinition(definitionFile);
      needsCloseEditorOnError = true;
      IDE.openEditor(activePage, new FileEditorInput(definitionFile), DesignerEditor.ID, true);
    } catch (Exception e) {
            DesignerLogger.logError(Messages.getString("Update.jpdl.error"), e);
            restorePreviousVersion();
    }
    }
   
    private void restorePreviousVersion() {
        try {
            IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
            if (needsCloseEditorOnError) {
                activePage.closeEditor(activePage.getActiveEditor(), true);
            }
            Document document = oldDefinition.getContentProvider().getInitialProcessDefinitionDocument(oldDefinition.getName());
            oldDefinition.getContentProvider().saveToXML(oldDefinition, document);
            byte[] bytes = XmlUtil.writeXml(document);
            definitionFile.setContents(new ByteArrayInputStream(bytes), true, true, null);
      ParContentProvider.saveAuxInfo(definitionFile, oldDefinition);
      ProcessCache.invalidateProcessDefinition(definitionFile);
      IDE.openEditor(activePage, new FileEditorInput(definitionFile), DesignerEditor.ID, true);
    } catch (Exception e) {
            DesignerLogger.logError("Undo update process definition to next jPDL version failed", e);
    }
    }
}
TOP

Related Classes of org.jbpm.ui.common.command.UpdateJpdlVersionCommand

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.