/*******************************************************************************
* 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) {
}
}