Package com.salesforce.ide.ui.wizards.components.wsdl

Source Code of com.salesforce.ide.ui.wizards.components.wsdl.Wsdl2apexWizard

/*******************************************************************************
* 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.ui.wizards.components.wsdl;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Iterator;

import org.apache.log4j.Logger;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IWorkbench;

import com.salesforce.ide.core.internal.components.MultiClassComponentController;
import com.salesforce.ide.core.internal.components.apex.clazz.ApexClassModel;
import com.salesforce.ide.core.internal.context.ContainerDelegate;
import com.salesforce.ide.core.model.Component;
import com.salesforce.ide.core.model.ProjectPackageList;
import com.salesforce.ide.core.project.ForceProjectException;
import com.salesforce.ide.ui.wizards.components.apex.clazz.ApexClassWizard;
import com.salesforce.ide.ui.wizards.components.apex.clazz.ApexClassWizardPage;
import com.salesforce.ide.wsdl2apex.core.CalloutException;
import com.salesforce.ide.wsdl2apex.core.Wsdl2Apex;

/**
* Wizard to create apex classes from a wsdl
*
* @author kevin.ren
*
*/

public class Wsdl2apexWizard extends Wizard implements INewWizard {
    private IStructuredSelection initialSelection;
    private Wsdl2apexWizardFindPage convertPage;
    private Wsdl2apexWizardRenameClasses createPage;
    private IWorkbench currentWorkBench;
    private static final Logger logger = Logger.getLogger(ProjectPackageList.class);
    private Wsdl2Apex generator;
    private ProjectPackageList allPackages = null;

    @Override
    public void init(IWorkbench workbench, IStructuredSelection selection) {
        this.initialSelection = selection;
        this.currentWorkBench = workbench;
        this.generator = new Wsdl2Apex();
        this.setForcePreviousAndNextButtons(true);
    }

    public Wsdl2apexWizardFindPage getConvertPage() {
        return this.convertPage;
    }

    public Wsdl2apexWizardRenameClasses getCreatePage() {
        return this.createPage;
    }

    public String getWsdlFileLocation() {
        return this.convertPage.getWsdlFileLocation();
    }

    public Wsdl2Apex getApexGenerator() {
        return this.generator;
    }

    public void addPages() {
        setWindowTitle("Convert WSDL File to Apex");
        this.convertPage = new Wsdl2apexWizardFindPage();
        this.createPage = new Wsdl2apexWizardRenameClasses();
        addPage(convertPage);
        addPage(createPage);
    }

    @Override
    public boolean canFinish() {
        if (this.convertPage.getWsdlFileLocation() != null && this.convertPage.getWsdlFileLocation() != ""
                && this.convertPage.getErrorMessage() == null && this.createPage.getErrorMessage() == null) //check if all fields are filled in and completed
        {
            return true;
        } else
            return false;
    }

    @Override
    public boolean performFinish() {
        try {
            getContainer().run(true, true, new IRunnableWithProgress() {
                public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
                    exec();
                }
            });
        } catch (InvocationTargetException e) {
            MessageDialog dialog =
                    new MessageDialog(null, "Error", null, e.getMessage(), MessageDialog.ERROR, new String[] { "Ok" },
                            0);
            dialog.open();
            logger.error(e.getMessage());
        } catch (InterruptedException e) {
            MessageDialog dialog =
                    new MessageDialog(null, "Error", null, e.getMessage(), MessageDialog.ERROR, new String[] { "Ok" },
                            0);
            dialog.open();
            logger.error(e.getMessage());
        } catch (Exception e) {
            MessageDialog dialog =
                    new MessageDialog(null, "Error", null, e.getMessage(), MessageDialog.ERROR, new String[] { "Ok" },
                            0);
            dialog.open();
            logger.error(e.getMessage());
        }
        return true;
    }

    public void exec() {
        Display.getDefault().syncExec(new Runnable() {
            @Override
            public void run() {
                ApexClassWizard a;
                try {
                    String[] arguements = new String[1];
                    arguements[0] = convertPage.getAsyncTrue().toString(); //checks if we want async methods
                    generator.generate(arguements);

                    //we have all of the generated classes now
                    Iterator<String> ii = generator.getAllClasses().iterator();
                    Iterator<String> jj = generator.getAllClassNames().iterator();
                    allPackages =
                            ContainerDelegate.getInstance().getServiceLocator().getProjectService()
                                    .getProjectPackageListInstance();
                    while (ii.hasNext() && jj.hasNext()) //this loop here purely for checking if the class name is already used
                    {
                        String classBody = ii.next().trim();
                        String className = jj.next().trim();
                        a = new ApexClassWizard(true, allPackages);

                        ApexClassWizardPage ap = new ApexClassWizardPage(a);
                        ApexClassModel apexClassModel = (ApexClassModel) ap.getComponentWizardModel();

                        a.init(currentWorkBench, initialSelection);

                        Component apexComponent = apexClassModel.getComponent();
                        apexComponent.setBodyFromTemplateString(classBody);
                        apexComponent.setName(className);
                        if (!ap.getComponentController().isNameUniqueLocalCheck()) {
                            throw new IOException("There is already a class named " + className);
                        }
                    }

                    Iterator<String> i = generator.getAllClasses().iterator();
                    Iterator<String> j = generator.getAllClassNames().iterator();

                    while (i.hasNext() && j.hasNext()) //this loop for creating apex classes by programmatically using the ApexClassWizard
                    {
                        String classBody = i.next();
                        String className = j.next();
                        a = new ApexClassWizard(true, allPackages);

                        ApexClassWizardPage ap = new ApexClassWizardPage(a);
                        ApexClassModel apexClassModel = (ApexClassModel) ap.getComponentWizardModel();

                        a.init(currentWorkBench, initialSelection);

                        Component apexComponent = apexClassModel.getComponent();

                        //set the body and class name of the component
                        apexComponent.setBodyFromTemplateString(classBody);
                        apexComponent.setName(className);

                        if (!i.hasNext() && !j.hasNext()) {
                            //this is the last class we are creating for this wsdl, so we want to save the packagelist to the server
                            MultiClassComponentController c =
                                    (MultiClassComponentController) ap.getComponentController();
                            c.setShouldSaveToServer(true);
                        }

                        if (ap.getComponentController().isNameUniqueLocalCheck()) {
                            a.executeCreateOperation();
                        }
                    }

                } catch (ForceProjectException e) {
                    MessageDialog dialog =
                            new MessageDialog(null, "Error", null, e.getMessage(), MessageDialog.ERROR,
                                    new String[] { "Ok" }, 0);
                    dialog.open();
                    logger.error(e.getMessage());
                } catch (IOException e) {
                    MessageDialog dialog =
                            new MessageDialog(null, "Error", null, e.getMessage(), MessageDialog.ERROR,
                                    new String[] { "Ok" }, 0);
                    dialog.open();
                    logger.error(e.getMessage());
                } catch (CalloutException e) {
                    MessageDialog dialog =
                            new MessageDialog(null, "Error", null, e.getMessage(), MessageDialog.ERROR,
                                    new String[] { "Ok" }, 0);
                    dialog.open();
                    logger.error(e.getMessage());
                } catch (Exception e) {
                    if (e.getMessage() != null) {
                        MessageDialog dialog =
                                new MessageDialog(null, "Error", null, e.getMessage(), MessageDialog.ERROR,
                                        new String[] { "Ok" }, 0);
                        dialog.open();
                    }
                    logger.error(e.getMessage());
                }
            }
        });
    }
}
TOP

Related Classes of com.salesforce.ide.ui.wizards.components.wsdl.Wsdl2apexWizard

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.