org.ebayopensource.turmeric.eclipse.services.ui.wizards.pages.ServiceFromNewWSDLPage.java Source code

Java tutorial

Introduction

Here is the source code for org.ebayopensource.turmeric.eclipse.services.ui.wizards.pages.ServiceFromNewWSDLPage.java

Source

/*******************************************************************************
 * Copyright (c) 2006-2010 eBay Inc. All Rights Reserved.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *******************************************************************************/
package org.ebayopensource.turmeric.eclipse.services.ui.wizards.pages;

import java.net.URL;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.wsdl.Definition;

import org.apache.commons.lang.StringUtils;
import org.ebayopensource.turmeric.eclipse.config.exception.SOAConfigAreaCorruptedException;
import org.ebayopensource.turmeric.eclipse.config.repo.SOAConfigExtensionFactory;
import org.ebayopensource.turmeric.eclipse.config.repo.SOAConfigExtensionFactory.SOAConfigTemplate;
import org.ebayopensource.turmeric.eclipse.core.logging.SOALogger;
import org.ebayopensource.turmeric.eclipse.core.resources.constants.SOAProjectConstants;
import org.ebayopensource.turmeric.eclipse.repositorysystem.core.GlobalRepositorySystem;
import org.ebayopensource.turmeric.eclipse.repositorysystem.core.ISOAHelpProvider;
import org.ebayopensource.turmeric.eclipse.services.resources.SOAConstants;
import org.ebayopensource.turmeric.eclipse.services.ui.SOAMessages;
import org.ebayopensource.turmeric.eclipse.soatools.configtool.ConfigTool;
import org.ebayopensource.turmeric.eclipse.ui.wizards.pages.AbstractNewServiceFromWSDLWizardPage;
import org.ebayopensource.turmeric.eclipse.utils.plugin.EclipseMessageUtils;
import org.ebayopensource.turmeric.eclipse.utils.ui.UIUtil;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;

/**
 * Wizard for Service from template WSDL option. Here user decided to create the
 * service from template WSDL. This page takes all the initial inputs like the
 * template, the service name, name space, location, type folding, common types
 * name space etc. In short some of this information goes to the WSDL as part of
 * the templating process and some of them goes to the properties file and the
 * xml files. The SOA specific instant validation also will find a place in this
 * page as we show as much issues then and there in the UI itself, so that user
 * gets an early feed back. Additionally adds a context help id also for easy
 * access from this page itself.
 * 
 * @author smathew
 * 
 * 
 * 
 */
public class ServiceFromNewWSDLPage extends AbstractNewServiceFromWSDLWizardPage {
    private CCombo templateFileCombo;

    private static final SOALogger logger = SOALogger.getLogger();

    /**
     * Instantiates a new service from new wsdl page.
     */
    public ServiceFromNewWSDLPage() {
        super(SOAConstants.SVC_PAGE_NAME, SOAMessages.NEW_SVC_TITLE, SOAMessages.NEW_SVC_DESC);
    }

    /* (non-Javadoc)
     * @see org.ebayopensource.turmeric.eclipse.ui.AbstractSOAProjectWizardPage#setVisible(boolean)
     */
    @Override
    public void setVisible(boolean visible) {
        super.setVisible(visible);
        if (visible == true) {
            dialogChanged();
        }
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void createControl(final Composite parent) {
        try {
            final Composite container = super.createParentControl(parent, 4);
            addWorkspaceRootChooser(container);
            addServiceDomainList(container);
            addServiceVersion(container).addModifyListener(modifyListener);
            addTargetNamespace(container, populateServiceNamespace(), true);

            addServiceName(container, true).setText(getDefaultResourceName());
            addAdminName(container).setText(computeServiceName());
            addTypeNamespace(container).setText(getTargetNamespace());

            addServicePackage(container);
            addServiceImpl(container);
            addServiceLayer(container);
            addTemplateFileComboBox(container);
            createServiceImplTypeCombo(container);
            addTypeFolding(container);
            modifyListener.modifyText(null);
        } catch (Exception e) {
            logger.error(e);
            UIUtil.showErrorDialog(e);
        }
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected void targetNamespaceModified(String newNamespace) {
        super.targetNamespaceModified(newNamespace);
        if (typeNamespaceText != null && StringUtils.isNotBlank(newNamespace)) {
            typeNamespaceText.setText(newNamespace);
        }
    }

    /* (non-Javadoc)
     * @see org.ebayopensource.turmeric.eclipse.ui.SOABasePage#getHelpContextID()
     */
    @Override
    public String getHelpContextID() {
        return GlobalRepositorySystem.instanceOf().getActiveRepositorySystem().getHelpProvider()
                .getHelpContextID(ISOAHelpProvider.PAGE_CREATE_SERVICE_FROM_TEMPLATE_WSDL);
    }

    /* (non-Javadoc)
     * @see org.ebayopensource.turmeric.eclipse.ui.wizards.pages.AbstractNewServiceWizardPage#getDefaultTypeNamespace()
     */
    @Override
    public String getDefaultTypeNamespace() {
        return populateServiceNamespace();
    }

    /**
     * Adds the template file combo box.
     *
     * @param parent the parent
     * @throws SOAConfigAreaCorruptedException the sOA config area corrupted exception
     */
    protected void addTemplateFileComboBox(final Composite parent) throws SOAConfigAreaCorruptedException {
        final String org = getOrganizationProvider().getName();
        final List<String> templates = new ArrayList<String>();
        for (SOAConfigTemplate template : SOAConfigExtensionFactory.getWSDLTemplates(org)) {
            templates.add(template.getName());
        }

        templateFileCombo = super.createCCombo(parent, SOAMessages.TMPLT_WSDL, false,
                templates.toArray(new String[0]), "the template for the new service WSDL");
        if (templates != null && templates.isEmpty() == false) {
            templateFileCombo.select(0);
        }
        /*if (files != null && files.length > 0) {
           templateFileCombo.select(0);
        }*/
    }

    /* (non-Javadoc)
     * @see org.ebayopensource.turmeric.eclipse.ui.wizards.pages.AbstractNewServiceFromWSDLWizardPage#dialogChanged()
     */
    @Override
    protected boolean dialogChanged() {
        if (super.dialogChanged() == false)
            return false;

        if (templateFileCombo != null && templateFileCombo.getSelectionIndex() == -1) {
            updateStatus(this.templateFileCombo, SOAMessages.TEMPLATE_ERR);
            return false;
        }
        if (StringUtils.isNotEmpty(getResourceName()) && Character.isLowerCase(getResourceName().charAt(0))) {
            updatePageStatus(getResourceNameText(),
                    EclipseMessageUtils.createStatus(SOAMessages.SVCNAME_ERR, IStatus.WARNING));
            return true;
        }
        return true;
    }

    /* (non-Javadoc)
     * @see org.ebayopensource.turmeric.eclipse.ui.wizards.pages.AbstractNewServiceFromWSDLWizardPage#dialogChanged(boolean)
     */
    @Override
    public boolean dialogChanged(boolean validateWsdl) {
        if (super.dialogChanged(validateWsdl) == false)
            return false;

        return true;
    }

    /**
     * Gets the template file.
     *
     * @return the template file
     * @throws SOAConfigAreaCorruptedException the sOA config area corrupted exception
     */
    public URL getTemplateFile() throws SOAConfigAreaCorruptedException {
        final String templateFileName = getTextValue(templateFileCombo);
        final String org = getOrganizationProvider().getName();
        return SOAConfigExtensionFactory.getWSDLTemplate(org, templateFileName);
    }

    /* (non-Javadoc)
     * @see org.ebayopensource.turmeric.eclipse.ui.AbstractSOAProjectWizardPage#getProjectNames()
     */
    @Override
    public List<ProjectNameControl> getProjectNames() {
        final List<ProjectNameControl> result = new ArrayList<ProjectNameControl>(2);
        final List<Control> controls = new ArrayList<Control>(5);
        controls.add(getResourceNameText());
        if (this.overrideAdminNameButton != null && this.overrideAdminNameButton.getSelection() == false) {
            controls.add(this.publicServiceNameText);
            controls.add(this.resourceVersionText);
            if (this.serviceDomainList != null) {
                controls.add(this.serviceDomainList);
            }
        }
        result.add(new ProjectNameControl(getResourceName(), controls));
        result.add(new ProjectNameControl(getResourceName() + SOAProjectConstants.IMPL_PROJECT_SUFFIX, controls));
        return result;
    }

    /* (non-Javadoc)
     * @see org.ebayopensource.turmeric.eclipse.ui.wizards.pages.AbstractNewServiceFromWSDLWizardPage#wsdlChanged(javax.wsdl.Definition)
     */
    @Override
    public Map<String, String> getNamespaceToPackageMappings() {
        Map<String, String> result = new LinkedHashMap<String, String>();
        String targetNs = getTargetNamespace();
        String typeNs = getTypeNamespace();
        result.put(targetNs, ConfigTool.getTypePackageNameFromNamespace(targetNs, getPublicServiceName()));
        if (StringUtils.isNotBlank(typeNs) && targetNs.equals(typeNs) == false) {
            result.put(typeNs, ConfigTool.getTypePackageNameFromNamespace(typeNs, getPublicServiceName()));
        }
        return result;
    }

    @Override
    public void wsdlChanged(Definition wsdl) {

    }
}