/******************************************************************************* * 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.util.Collections; import java.util.List; import java.util.Map; import javax.wsdl.Definition; import javax.wsdl.WSDLException; import org.apache.commons.lang.StringUtils; 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.resources.util.SOAIntfUtil; import org.ebayopensource.turmeric.eclipse.resources.util.SOAServiceUtil; import org.ebayopensource.turmeric.eclipse.services.ui.SOAMessages; import org.ebayopensource.turmeric.eclipse.ui.AbstractSOADomainWizard; import org.ebayopensource.turmeric.eclipse.ui.wizards.pages.AbstractNewServiceFromWSDLWizardPage; import org.ebayopensource.turmeric.eclipse.utils.lang.StringUtil; import org.ebayopensource.turmeric.eclipse.utils.plugin.EclipseMessageUtils; import org.ebayopensource.turmeric.eclipse.utils.ui.UIUtil; import org.ebayopensource.turmeric.eclipse.utils.wsdl.WSDLUtil; import org.eclipse.core.runtime.IStatus; import org.eclipse.swt.widgets.Composite; /** * The Class ServiceFromExistingWSDLWizardPage. * * @author yayu */ public class ServiceFromExistingWSDLWizardPage extends AbstractNewServiceFromWSDLWizardPage { private static final SOALogger logger = SOALogger.getLogger(); private String versionFromWSDL = null; /** * Instantiates a new service from existing wsdl wizard page. */ public ServiceFromExistingWSDLWizardPage() { super("newSOAServiceProjectFromWSDLWizardPage", "New SOA Service From Existing WSDL Wizard", "This wizard creates a new SOA Service from a pre-existing WSDL document."); } /* (non-Javadoc) * @see org.ebayopensource.turmeric.eclipse.ui.AbstractSOAProjectWizardPage#setVisible(boolean) */ @Override public void setVisible(boolean visible) { super.setVisible(visible); if (visible == true) { dialogChanged(true); } } /** * {@inheritDoc} */ @Override public void createControl(final Composite parent) { try { final Composite container = createParentControl(parent, 4); addWSDL(container); addWorkspaceRootChooser(container); addServiceDomainList(container, true); if (serviceDomainList != null && domainClassifierList != null) { this.serviceDomainList.select(-1); this.serviceDomainList.clearSelection(); this.domainClassifierList.select(-1); this.domainClassifierList.clearSelection(); } addServiceVersion(container); addServiceName(container, false); addAdminName(container); addTargetNamespace(container, null, false); addTypeNamespace(container); addServicePackage(container); addServiceImpl(container); addServiceLayer(container); createServiceImplTypeCombo(container); addTypeFolding(container); addWSDLPackageToNamespace(container); } catch (Exception e) { logger.error(e); UIUtil.showErrorDialog(e); } } /* (non-Javadoc) * @see org.ebayopensource.turmeric.eclipse.ui.wizards.pages.AbstractNewServiceFromWSDLWizardPage#targetNamespaceModified(java.lang.String) */ @Override protected void targetNamespaceModified(String newNamespace) { super.targetNamespaceModified(newNamespace); if (this.serviceDomainList == null || this.domainClassifierList == null) return; String namespacePart = getOrganizationProvider() .getNamespacePartFromTargetNamespace(newNamespace); if (StringUtils.isNotBlank(namespacePart)) { String domainName = StringUtils.capitalize(namespacePart); Map<String, List<String>> domainList = Collections.emptyMap(); if (getWizard() instanceof AbstractSOADomainWizard) { try { domainList = ((AbstractSOADomainWizard) getWizard()) .getDomainList(); } catch (Exception e) { logger.warning(e); } } for (String key : domainList.keySet()) { final List<String> values = domainList.get(key); if (values != null && values.contains(namespacePart)) { domainName = key; break; } } this.serviceDomainList.setText(domainName); this.domainClassifierList.setText(namespacePart); } else if (StringUtils.isBlank(getServiceDomain()) || StringUtils.isBlank(namespacePart)) { // could not get the namespace-part this.serviceDomainList.select(-1); this.serviceDomainList.clearSelection(); this.domainClassifierList.select(-1); this.domainClassifierList.clearSelection(); } } /* (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_EXISTING_WSDL); } /** * {@inheritDoc} */ @Override public boolean dialogChanged(boolean validateWsdl) { final boolean result = super.dialogChanged(validateWsdl); if (result == false && isPageComplete() == false) return result; if (domainClassifierList != null && StringUtils.isNotBlank(getDomainClassifier()) && this.wsdl != null) { String namespacePart = getOrganizationProvider() .getNamespacePartFromTargetNamespace( this.wsdl.getTargetNamespace()); if (StringUtils.isNotBlank(namespacePart) && namespacePart.equals(getDomainClassifier()) == false) { // user has selected a namespace part that not match the ns-part // from the wsdl file updateStatus(StringUtil.formatString( SOAMessages.ERR_WRONG_NAMESPACEPART, getDomainClassifier(), this.wsdl.getTargetNamespace()), super.domainClassifierList, super.adminNameText, super.resourceVersionText, super.getResourceNameText()); return false; } } /* * 1) If service version in WSDL follows V3 format, like 1.2.3, service * version text will not be editable. 2) If service version in WSDL * doesn�t follow V3 format, like 1.2, 1.2,3, 1, 1.a, 1.2.a, then * service version text is editable. BUT even user specified a correct * V3 version, there will be an error marker on the service version text * says Specified service version [1.2.3] does not match service version * in WSDL [1.2]. Please modify service version in source WSDL and * follow format {major.minor.maintenance}�. It means the WSDL file used * in wizard must contain a correct V3 format service version. * Otherwise, the wizard couldn�t continue. */ if ((versionFromWSDL != null) && versionFromWSDL.equals(getResourceVersion()) == false) { String errorMsg = StringUtil.formatString( SOAMessages.DIFFERENT_SERVICE_VERSION_WITH_WSDL, getResourceVersion(), versionFromWSDL); updateStatus(super.resourceVersionText, errorMsg); 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.AbstractNewServiceWizardPage#getDefaultTypeNamespace() */ @Override public String getDefaultTypeNamespace() { return getTargetNamespace(); } /* (non-Javadoc) * @see org.ebayopensource.turmeric.eclipse.ui.wizards.pages.AbstractNewServiceFromWSDLWizardPage#getDefaultResourceName() */ @Override public String getDefaultResourceName() { final String defaultName = computeServiceName(); if (StringUtils.isNotBlank(defaultName)) return defaultName; else return ""; } /* (non-Javadoc) * @see org.ebayopensource.turmeric.eclipse.ui.wizards.pages.AbstractNewServiceFromWSDLWizardPage#wsdlChanged(javax.wsdl.Definition) */ @Override public void wsdlChanged(Definition wsdl) { boolean nsChanged = false; if (wsdl != null) { try { final String targetNamespace = WSDLUtil .getTargetNamespace(wsdl); if (StringUtils.isNotBlank(targetNamespace)) { setTypeNamespace(targetNamespace); setTargetNamespace(targetNamespace); nsChanged = true; } } catch (WSDLException e) { SOALogger.getLogger().warning(e); updateStatus(e.getLocalizedMessage()); } if (domainClassifierList == null) { // Non-MP String nsPart = StringUtils .capitalize(getOrganizationProvider() .getNamespacePartFromTargetNamespace( getTargetNamespace())); if (StringUtils.isNotBlank(nsPart)) { getResourceNameText().setText(nsPart + getResourceName()); } else { getResourceNameText() .setText( getPublicServiceName() + SOAProjectConstants.MAJOR_VERSION_PREFIX + SOAServiceUtil .getServiceMajorVersion(getServiceVersion())); } } String version = SOAIntfUtil.getServiceVersionFromWsdl(wsdl, getPublicServiceName()).trim(); resourceVersionText.setEditable(true); versionFromWSDL = null; if (StringUtils.isNotBlank(version)) { versionFromWSDL = version; // has version int versionPart = StringUtils.countMatches(version, SOAProjectConstants.DELIMITER_DOT); // add "dot number" to version. It will be changed to X.Y.Z if (versionPart == 2) { // is new version format, set version text read-only. resourceVersionText.setEditable(false); } else { // is v2format while (versionPart < 2) { version += SOAProjectConstants.DELIMITER_DOT + "0"; versionPart++; } } resourceVersionText.setText(version); } else { // don't have version, use default version. resourceVersionText .setText(SOAProjectConstants.DEFAULT_SERVICE_VERSION); } } if (nsChanged == false) { setTargetNamespace(""); setTypeNamespace(""); } } }