/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.gui.workflow.view;
import java.io.File;
import java.io.IOException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.action.Action;
import org.eclipse.ui.IEditorDescriptor;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.FileEditorInput;
import de.rcenvironment.core.component.workflow.execution.api.WorkflowExecutionInformation;
import de.rcenvironment.core.utils.common.StringUtils;
import de.rcenvironment.core.utils.common.TempFileServiceAccess;
/**
* Opens a workflow instance in an editor.
*
* @author Christian Weiss
*/
public class WorkflowRunEditorAction extends Action {
private static File folder;
private final WorkflowExecutionInformation wfExeInfo;
public WorkflowRunEditorAction(final WorkflowExecutionInformation wfExeInfo) {
this.wfExeInfo = wfExeInfo;
}
private static File getFolder() {
if (folder == null) {
try {
// TODO add createManagedTempDirWithFixedNamePart() method?
folder = TempFileServiceAccess.getInstance().createManagedTempDir();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return folder;
}
@Override
public void run() {
final String filename = StringUtils.format("%s.wfr", wfExeInfo.getExecutionIdentifier());
final File tempFile = new File(getFolder(), filename);
final IPath location = new Path(tempFile.getAbsolutePath());
final IFile file = ResourcesPlugin.getWorkspace().getRoot().getProject("External Files").getFile(location);
final IWorkbenchWindow activeWorkbenchWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
final IWorkbenchPage activePage = activeWorkbenchWindow.getActivePage();
final IEditorDescriptor editorDescriptor = PlatformUI.getWorkbench().getEditorRegistry().getDefaultEditor(filename);
IEditorPart editorPart;
try {
editorPart = activePage.openEditor(new FileEditorInput(file), editorDescriptor.getId());
} catch (PartInitException e) {
throw new RuntimeException(e);
}
if (!((WorkflowRunEditor) editorPart).isWorkflowExecutionInformationSet()) {
((WorkflowRunEditor) editorPart).setWorkflowExecutionInformation(wfExeInfo);
}
}
}