/*******************************************************************************
* 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.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.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.util.SOAServiceUtil;
import org.ebayopensource.turmeric.eclipse.services.buildsystem.ServiceCreator;
import org.ebayopensource.turmeric.eclipse.services.ui.wizards.pages.ConsumerFromExistingWSDLWizardPage;
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.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 ConsumerFromWSDLWizard.
*
* @author yayu
*/
public class ConsumerFromWSDLWizard extends AbstractSOADomainWizard {
private ConsumerFromExistingWSDLWizardPage consumerFromWsdl = null;
private static final SOALogger logger = SOALogger.getLogger();
/**
* Instantiates a new consumer from wsdl wizard.
*/
public ConsumerFromWSDLWizard() {
super();
}
/**
* {@inheritDoc}
*/
@Override
public IWizardPage[] getContentPages() {
consumerFromWsdl = new ConsumerFromExistingWSDLWizardPage(
getSelection());
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 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();
uiModel
.setWSDLSourceType(SOAProjectConstants.InterfaceWsdlSourceType.EXISTIING);
uiModel.setNamespaceToPacakgeMappings(consumerFromWsdl
.getNamespaceToPackageMappings());
uiModel.setClientName(clientName);
if (StringUtils.isNotBlank(consumerFromWsdl.getConsumerId()))
uiModel.setConsumerId(consumerFromWsdl.getConsumerId());
uiModel.setEnvironments(consumerFromWsdl.getEnvironments());
uiModel.setServiceDomain(consumerFromWsdl.getServiceDomain());
uiModel.setNamespacePart(consumerFromWsdl.getDomainClassifier());
uiModel.setTypeFolding(consumerFromWsdl.getTypeFolding());
try {
uiModel.setOriginalWsdlUrl(new URL(consumerFromWsdl.getWSDLURL()));
final 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 * 30;
monitor.beginTask("Creating consumer from WSDL->"
+ clientName, totalWork);
ProgressUtil.progressOneStep(monitor);
try {
ServiceCreator.createConsumerFromExistingWSDL(uiModel,
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(
"NewConsumerFromWSDL", 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() - 100;
}
}