eu.geclipse.workflow.ui.internal.actions.GetJobDescriptionFromFileAction.java Source code

Java tutorial

Introduction

Here is the source code for eu.geclipse.workflow.ui.internal.actions.GetJobDescriptionFromFileAction.java

Source

/*******************************************************************************
 * Copyright (c) 2006-2008 g-Eclipse Consortium 
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Eclipse Public License v1.0 
 * which accompanies this distribution, and is available at 
 * http://www.eclipse.org/legal/epl-v10.html 
 * 
 * Initial development of the original code was made for the g-Eclipse project 
 * funded by European Union project number: FP6-IST-034327 
 * http://www.geclipse.eu/
 *  
 * Contributors:
 *     RUR (http://acet.rdg.ac.uk/)
 *     - Ashish Thandavan - initial API and implementation
 *     - David Johnson
 ******************************************************************************/
package eu.geclipse.workflow.ui.internal.actions;

import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.operations.OperationHistoryFactory;
import org.eclipse.core.filesystem.IFileStore;
import org.eclipse.core.filesystem.URIUtil;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.transaction.TransactionalEditingDomain;
import org.eclipse.gmf.runtime.emf.commands.core.command.AbstractTransactionalCommand;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IObjectActionDelegate;
import org.eclipse.ui.IWorkbenchPart;

import eu.geclipse.core.model.GridModel;
import eu.geclipse.jsdl.JSDLJobDescription;
import eu.geclipse.workflow.model.IWorkflowJob;
import eu.geclipse.workflow.ui.edit.commands.CopyJobDescToWorkflowCommand;
import eu.geclipse.workflow.ui.edit.commands.UpdateJobPortsCommand;
import eu.geclipse.workflow.ui.edit.parts.WorkflowJobEditPart;
import eu.geclipse.workflow.ui.part.Messages;

/**
 * @author athandava
 */
public class GetJobDescriptionFromFileAction implements IObjectActionDelegate {

    /**
     * The WorkflowJobEditPart that has been selected.
     */
    protected WorkflowJobEditPart mySelectedElement;
    protected IFile jsdlTarget;
    String jobDescriptionInJSDL = null;
    private Shell myShell;
    private IFileStore wfRootFileStore = null;
    private String[] dirs = null;

    public void setActivePart(final IAction action, final IWorkbenchPart targetPart) {
        this.myShell = targetPart.getSite().getShell();
    }

    /**
     * Fires up a GridFileDialog and fetches the contents of a user-chosen JSDL
     * file.
     */
    public void run(final IAction action) {
        FileDialog dialog = new FileDialog(this.myShell, SWT.OPEN);
        String[] exts = { "*.jsdl" }; //$NON-NLS-1$
        dialog.setFilterExtensions(exts);
        // this bit find the root directory of the workflow
        TransactionalEditingDomain domain = this.mySelectedElement.getEditingDomain();
        ResourceSet resourceSet = domain.getResourceSet();
        Resource res = resourceSet.getResources().get(0);
        URI wfRootUri = res.getURI();
        String wfRootPath = wfRootUri.path();
        this.dirs = wfRootPath.split("/"); //$NON-NLS-1$
        String projectName = this.dirs[2];
        this.wfRootFileStore = GridModel.getRoot().getFileStore().getChild(projectName);
        dialog.setFilterPath(this.wfRootFileStore.toString());
        if (dialog.open() != null) {
            String result = dialog.getFileName();
            if ((result != null) && (result.length() > 0)) {
                String filePath = dialog.getFilterPath() + "/" + result; //$NON-NLS-1$
                // filePath = filePath.replace(' ', '+');
                java.net.URI filePathUri = null;
                filePathUri = URIUtil.toURI(filePath);
                IFile jsdlFile = ResourcesPlugin.getWorkspace().getRoot().findFilesForLocationURI(filePathUri)[0];
                IWorkflowJob selectedJob = (IWorkflowJob) this.mySelectedElement.resolveSemanticElement();
                if (!(selectedJob.getName() == null && selectedJob.getJobDescription() == null)) {
                    MessageDialog confirmDialog = new MessageDialog(null,
                            Messages.getString("WorkflowJobDragDropEditPolicy_confirmationTitle"), //$NON-NLS-1$
                            null, Messages.getString("WorkflowJobDragDropEditPolicy_userPrompt"), //$NON-NLS-1$
                            true ? MessageDialog.QUESTION : MessageDialog.WARNING,
                            new String[] { IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL }, 0);
                    int confirmResult = confirmDialog.open();
                    if (confirmResult == 0) {
                        JSDLJobDescription jsdl = new JSDLJobDescription(jsdlFile);
                        AbstractTransactionalCommand copyCommand = new CopyJobDescToWorkflowCommand(
                                this.mySelectedElement.resolveSemanticElement(), jsdl);
                        AbstractTransactionalCommand updatePortsCommand = new UpdateJobPortsCommand(
                                GetJobDescriptionFromFileAction.this.mySelectedElement, jsdl);
                        try {
                            OperationHistoryFactory.getOperationHistory().execute(copyCommand,
                                    new NullProgressMonitor(), null);
                            OperationHistoryFactory.getOperationHistory().execute(updatePortsCommand,
                                    new NullProgressMonitor(), null);
                        } catch (ExecutionException eE) {
                            eE.printStackTrace();
                        }
                    }
                }
            }
        }
    }

    public void selectionChanged(final IAction action, final ISelection selection) {
        this.mySelectedElement = null;
        if (selection instanceof IStructuredSelection) {
            IStructuredSelection structuredSelection = (IStructuredSelection) selection;
            if (structuredSelection.size() == 1
                    && structuredSelection.getFirstElement() instanceof WorkflowJobEditPart) {
                this.mySelectedElement = (WorkflowJobEditPart) structuredSelection.getFirstElement();
            }
        }
        action.setEnabled(isEnabled());
    }

    private boolean isEnabled() {
        return this.mySelectedElement != null;
    }
}