/******************************************************************************* * 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; import java.lang.reflect.InvocationTargetException; import java.net.URL; import java.util.Date; import org.apache.commons.lang.StringUtils; import org.ebayopensource.turmeric.eclipse.buildsystem.services.SOAResourceCreator; import org.ebayopensource.turmeric.eclipse.buildsystem.utils.BuildSystemUtil; import org.ebayopensource.turmeric.eclipse.core.logging.SOALogger; import org.ebayopensource.turmeric.eclipse.core.model.consumer.ConsumerFromWsdlParamModel; import org.ebayopensource.turmeric.eclipse.core.resources.constants.SOAProjectConstants; import org.ebayopensource.turmeric.eclipse.core.resources.constants.SOAProjectConstants.SupportedProjectType; import org.ebayopensource.turmeric.eclipse.exception.resources.projects.SOAConsumerCreationFailedException; import org.ebayopensource.turmeric.eclipse.repositorysystem.core.GlobalRepositorySystem; import org.ebayopensource.turmeric.eclipse.repositorysystem.core.TrackingEvent; import org.ebayopensource.turmeric.eclipse.resources.model.ISOAProject; import org.ebayopensource.turmeric.eclipse.resources.model.SOAConsumerProject; import org.ebayopensource.turmeric.eclipse.resources.model.SOAImplProject; import org.ebayopensource.turmeric.eclipse.resources.util.SOAServiceUtil; import org.ebayopensource.turmeric.eclipse.services.buildsystem.ServiceCreator; import org.ebayopensource.turmeric.eclipse.services.ui.wizards.pages.ConsumeServiceFromExistingWSDLWizardPage; import org.ebayopensource.turmeric.eclipse.ui.AbstractSOADomainWizard; import org.ebayopensource.turmeric.eclipse.ui.SOABasePage; import org.ebayopensource.turmeric.eclipse.utils.plugin.ProgressUtil; import org.ebayopensource.turmeric.eclipse.utils.plugin.WorkspaceUtil; import org.ebayopensource.turmeric.eclipse.utils.ui.UIUtil; import org.ebayopensource.turmeric.eclipse.validator.core.ISOAPreValidator; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.eclipse.ui.ide.IDE; /** * The Class ConsumeServiceFromWSDLWizard. * * @author yayu */ public class ConsumeServiceFromWSDLWizard extends AbstractSOADomainWizard { private ConsumeServiceFromExistingWSDLWizardPage consumerFromWsdl = null; private static final SOALogger logger = SOALogger.getLogger(); /** * Instantiates a new consume service from wsdl wizard. */ public ConsumeServiceFromWSDLWizard() { super(); } /** * {@inheritDoc} */ @Override public IWizardPage[] getContentPages() { try { consumerFromWsdl = new ConsumeServiceFromExistingWSDLWizardPage( getSelection()); } catch (Exception e) { logger.warning(e); } return new IWizardPage[] { consumerFromWsdl }; } /** * {@inheritDoc} */ @Override protected Object getCreatingType() { return ISOAPreValidator.CONSUMER_FROM_WSDL; } /** * {@inheritDoc} */ @Override public boolean performFinish() { // saving the user selected project dir if (SOALogger.DEBUG) logger.entering(); final ISOAProject soaProject = consumerFromWsdl.getSOAProject(); final boolean overrideWorkspaceRoot = consumerFromWsdl .isOverrideProjectRootDirectory(); final String workspaceRootDirectory = consumerFromWsdl .getProjectRootDirectory(); if (overrideWorkspaceRoot) SOABasePage.saveWorkspaceRoot(workspaceRootDirectory); final String serviceName = consumerFromWsdl.getAdminName(); final String servicePackage = consumerFromWsdl.getServicePackage(); final String serviceInterface = StringUtils.isBlank(servicePackage) ? serviceName : servicePackage + SOAProjectConstants.CLASS_NAME_SEPARATOR + serviceName; final ConsumerFromWsdlParamModel uiModel = new ConsumerFromWsdlParamModel(); uiModel.setServiceName(serviceName); uiModel.setPublicServiceName(consumerFromWsdl.getPublicServiceName()); uiModel.setServiceInterface(serviceInterface); uiModel.setOverrideWorkspaceRoot(overrideWorkspaceRoot); uiModel.setWorkspaceRootDirectory(workspaceRootDirectory); uiModel.setServiceImpl(consumerFromWsdl .getFullyQualifiedServiceImplementation()); uiModel.setServiceVersion(consumerFromWsdl.getServiceVersion()); uiModel.setServiceLayer(consumerFromWsdl.getServiceLayer()); final String clientName = consumerFromWsdl.getClientName(); final String clientID = consumerFromWsdl.getConsumerId(); uiModel .setWSDLSourceType(SOAProjectConstants.InterfaceWsdlSourceType.EXISTIING); uiModel.setNamespaceToPacakgeMappings(consumerFromWsdl .getNamespaceToPackageMappings()); uiModel.setClientName(clientName); if (StringUtils.isNotBlank(consumerFromWsdl.getConsumerId())) uiModel.setConsumerId(consumerFromWsdl.getConsumerId()); uiModel.setServiceDomain(consumerFromWsdl.getServiceDomain()); uiModel.setNamespacePart(consumerFromWsdl.getDomainClassifier()); uiModel.setEnvironments(consumerFromWsdl.getEnvironments()); uiModel.setTypeFolding(consumerFromWsdl.getTypeFolding()); uiModel.setServiceLocation(consumerFromWsdl.getServiceLocation()); try { uiModel.setOriginalWsdlUrl(new URL(consumerFromWsdl.getWSDLURL())); WorkspaceModifyOperation operation = new WorkspaceModifyOperation() { @Override protected void execute(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException { final long startTime = System.currentTimeMillis(); final int totalWork = ProgressUtil.PROGRESS_STEP * 180; monitor.beginTask("Creating consumer from WSDL->" + clientName, totalWork); ProgressUtil.progressOneStep(monitor); SOAConsumerProject consumerSOAProject = null; try { if (((soaProject instanceof SOAImplProject) == true) && (soaProject .getProject() .hasNature( GlobalRepositorySystem .instanceOf() .getActiveRepositorySystem() .getProjectNatureId( SupportedProjectType.CONSUMER)) == false)) { // does not have consumer nature yet, add it now IProject project = soaProject.getProject(); BuildSystemUtil .addSOAConsumerSupport( project, GlobalRepositorySystem .instanceOf() .getActiveRepositorySystem() .getProjectNatureId( SupportedProjectType.CONSUMER), monitor); logger .warning("Added SOA consumer project nature to the impl project->" + project.getName()); SOAResourceCreator .createConsumerPropertiesFileForImplProjects( project, clientName, clientID, monitor); logger .warning("Created service_consumer_project.properties to the impl project->" + project.getName()); consumerSOAProject = (SOAConsumerProject) GlobalRepositorySystem .instanceOf().getActiveRepositorySystem() .getAssetRegistry().getSOAProject(project); } else { consumerSOAProject = (SOAConsumerProject) soaProject; } ServiceCreator.addServiceToConsumerFromWSDL(uiModel, consumerSOAProject, monitor); // we should open the wsdl file for any successful // creation of an interface project. final IFile wsdlFile = SOAServiceUtil .getWsdlFile(serviceName); WorkspaceUtil.refresh(wsdlFile, monitor); if (wsdlFile.exists()) { IDE.openEditor( UIUtil.getWorkbench() .getActiveWorkbenchWindow() .getActivePage(), wsdlFile); } final TrackingEvent event = new TrackingEvent( "ConsumeNewServiceFromWSDL", new Date(startTime), System.currentTimeMillis() - startTime); GlobalRepositorySystem.instanceOf() .getActiveRepositorySystem().trackingUsage( event); } catch (Exception e) { logger.error(e); throw new SOAConsumerCreationFailedException( "Failed to create consumer from WSDL->" + clientName, e); } finally { monitor.done(); } } }; getContainer().run(false, true, operation); changePerspective(); } catch (Exception e) { logger.error(e); UIUtil.showErrorDialog(getShell(), "Error Occured During Consumer Creation", null, e); if (SOALogger.DEBUG) logger.exiting(false); return false; } if (SOALogger.DEBUG) logger.exiting(true); return true; } /** * {@inheritDoc} */ @Override public int getMinimumHeight() { return super.getMinimumHeight() - 150; } }