Package com.salesforce.ide.core.internal.components.workflow

Source Code of com.salesforce.ide.core.internal.components.workflow.WorkflowComponentController

/*******************************************************************************
* Copyright (c) 2014 Salesforce.com, inc..
* 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
*
* Contributors:
*     Salesforce.com, inc. - initial API and implementation
******************************************************************************/
package com.salesforce.ide.core.internal.components.workflow;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.SortedSet;

import javax.xml.bind.JAXBException;

import org.apache.log4j.Logger;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IProgressMonitor;

import com.salesforce.ide.core.factories.FactoryException;
import com.salesforce.ide.core.internal.components.ComponentController;
import com.salesforce.ide.core.internal.context.ContainerDelegate;
import com.salesforce.ide.core.internal.utils.Utils;
import com.salesforce.ide.core.model.ComponentList;
import com.salesforce.ide.core.model.ProjectPackageList;
import com.salesforce.ide.core.project.ForceProjectException;
import com.salesforce.ide.core.remote.ForceConnectionException;
import com.salesforce.ide.core.remote.ForceRemoteException;
import com.salesforce.ide.core.remote.metadata.RetrieveResultExt;
import com.salesforce.ide.core.remote.registries.DescribeObjectRegistry;

public class WorkflowComponentController extends ComponentController {

    private static final Logger logger = Logger.getLogger(WorkflowComponentController.class);

    public WorkflowComponentController() throws ForceProjectException {
        super(new WorkflowModel());
    }

    /**
     * get workflowable objects.
     *
     * @throws ForceRemoteException
     */
    @Override
    public SortedSet<String> getObjectNames(boolean refresh) throws ForceConnectionException, ForceRemoteException {
        IProject project = getComponentWizardModel().getProject();

        if (project == null) {
            return null;
        }

        String namespace = ContainerDelegate.getInstance().getServiceLocator().getProjectService().getNamespacePrefix(project);
        DescribeObjectRegistry describeObjectRegistry = ContainerDelegate.getInstance().getFactoryLocator().getConnectionFactory().getDescribeObjectRegistry();

        return describeObjectRegistry.getCachedWorkflowableDescribeTypes(project, refresh, namespace);
    }

    @Override
    public void finish(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException, IOException {
        if (getComponentWizardModel() == null || getComponentWizardModel().getProject() == null) {
            logger.error("Component model and/or project cannot be null");
            throw new IllegalArgumentException("Component model and/or project cannot be null");
        }

        if (logger.isDebugEnabled()) {
            logger.debug("***   C R E A T E   C O M P O N E N T   ***");
        }

        monitorWorkCheck(monitor, "Retrieving " + getComponentWizardModel().getDisplayName() + " container...");

        // create and load components from user input including metadata, if applicable
        ComponentList components = null;
        try {
            components = getComponentWizardModel().getLoadedComponents();
        } catch (FactoryException e) {
            logger.error("Unable to get loaded components", e);
            throw new InvocationTargetException(e);
        } catch (JAXBException e) {
            logger.error("Unable to get loaded components", e);
            throw new InvocationTargetException(e);
        }

        if (Utils.isEmpty(components)) {
            logger.error("Unable to create component.");
            Utils.openError(new Exception("Unable to create component.  Component is null."), "Unable to create "
                    + getComponentWizardModel().getDisplayName(), null);
            return;
        }

        if (logger.isDebugEnabled()) {
            logger.debug("Creating " + components.get(0).getFullDisplayName());
        }

        // prepare container to perform save and deploy ops
        ProjectPackageList projectPackageList = ContainerDelegate.getInstance().getServiceLocator().getProjectService().getProjectPackageListInstance();
        projectPackageList.setProject(getComponentWizardModel().getProject());
        projectPackageList.addComponents(components, false);

        // save to f/s - enables offline work
        monitorSubTask(monitor, "Saving " + getComponentWizardModel().getDisplayName() + " to project...");
        projectPackageList.saveResources(new String[] { getComponentWizardModel().getComponent().getComponentType() },
            monitor);
        monitorWorkCheck(monitor);

        // retrieve from server
        RetrieveResultExt retrieveResultExt = null;
        try {
            retrieveResultExt =
                    ContainerDelegate.getInstance().getServiceLocator().getPackageRetrieveService().retrieveSelective(projectPackageList, true, monitor);
        } catch (Exception e) {
            logger.error("Unable to retrieve " + getComponentWizardModel().getDisplayName(), e);
            throw new InvocationTargetException(e);
        } finally {
            monitorWorkCheck(monitor);
        }

        // save to project
        monitorSubTask(monitor, "Saving " + getComponentWizardModel().getDisplayName() + " container to project...");
        try {
            ContainerDelegate.getInstance().getServiceLocator().getProjectService().handleRetrieveResult(retrieveResultExt, true, monitor);
            monitorWorkCheck(monitor, "Saving " + getComponentWizardModel().getDisplayName()
                    + " container to project...");
        } catch (Exception e) {
            logger.error("Unable to save " + getComponentWizardModel().getDisplayName(), e);
            throw new InvocationTargetException(e);
        } finally {
            monitorWork(monitor);
        }

        List<IResource> resources = retrieveResultExt.getProjectPackageList().getAllComponentResources(false);
        if (Utils.isNotEmpty(resources)) {
            getComponent().setFileResource((IFile) resources.get(0));
        }
    }
}
TOP

Related Classes of com.salesforce.ide.core.internal.components.workflow.WorkflowComponentController

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.