/*******************************************************************************
* 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.buildsystem;
import java.util.ArrayList;
import java.util.Arrays;
import org.ebayopensource.turmeric.eclipse.buildsystem.utils.BuildSystemCodeGen;
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.model.services.ServiceFromTemplateWsdlParamModel;
import org.ebayopensource.turmeric.eclipse.core.model.services.ServiceFromWsdlParamModel;
import org.ebayopensource.turmeric.eclipse.exception.resources.projects.SOAConsumeNewServiceFailedException;
import org.ebayopensource.turmeric.eclipse.repositorysystem.core.GlobalRepositorySystem;
import org.ebayopensource.turmeric.eclipse.repositorysystem.core.ISOAProjectConfigurer;
import org.ebayopensource.turmeric.eclipse.resources.model.AssetInfo;
import org.ebayopensource.turmeric.eclipse.resources.model.SOAConsumerProject;
import org.ebayopensource.turmeric.eclipse.resources.model.SOAImplProject;
import org.ebayopensource.turmeric.eclipse.resources.model.SOAIntfMetadata;
import org.ebayopensource.turmeric.eclipse.resources.model.SOAIntfProject;
import org.ebayopensource.turmeric.eclipse.resources.ui.model.ConsumerFromJavaParamModel;
import org.ebayopensource.turmeric.eclipse.resources.util.SOAConsumerUtil;
import org.ebayopensource.turmeric.eclipse.template.wsdl.processors.WSDLTemplateProcessor;
import org.ebayopensource.turmeric.eclipse.utils.collections.ListUtil;
import org.ebayopensource.turmeric.eclipse.utils.plugin.ProgressUtil;
import org.eclipse.core.runtime.IProgressMonitor;
/**
* The Class ServiceCreator.
*
* @author smathew All create wizards are going to hit here after validation
*/
public class ServiceCreator {
private static final SOALogger logger = SOALogger.getLogger();
/**
* Creates the service from blank wsdl.
*
* @param paramModel the param model
* @param monitor the monitor
* @throws Exception the exception
*/
public static void createServiceFromBlankWSDL(
ServiceFromTemplateWsdlParamModel paramModel,
IProgressMonitor monitor) throws Exception {
WSDLTemplateProcessor wsdlTemplateProcessor = new WSDLTemplateProcessor(
paramModel);
SOAIntfProject intfProject = InterfaceCreator
.createIntfModelFromBlankWsdl(paramModel, monitor);
SOAImplProject implProject = ImplementationCreator
.createImplModelFromBlankWsdl(paramModel, intfProject, monitor);
InterfaceCreator.createIntfProjectFromBlankWsdl(intfProject,
implProject, paramModel.getTargetNamespace(),
wsdlTemplateProcessor, monitor);
ImplementationCreator.createImplProjectFromBlankWsdl(implProject,
intfProject, monitor);
}
/**
* Creates the service from existing wsdl.
*
* @param paramModel the param model
* @param monitor the monitor
* @throws Exception the exception
*/
public static void createServiceFromExistingWSDL(
final ServiceFromWsdlParamModel paramModel,
final IProgressMonitor monitor) throws Exception {
SOAIntfProject intfProject = InterfaceCreator
.createIntfModelFromExistingWsdl(paramModel, monitor);
SOAImplProject implProject = ImplementationCreator
.createImplModelFromExistingWsdl(paramModel, intfProject,
monitor);
InterfaceCreator.createIntfProjectFromExistingWsdl(intfProject,
implProject, paramModel.getTargetNamespace(), monitor);
ImplementationCreator.createImplProjectFromExistingWsdl(implProject,
intfProject, monitor);
}
/**
* Creates the consumer from existing wsdl.
*
* @param paramModel the param model
* @param monitor the monitor
* @throws Exception the exception
*/
public static void createConsumerFromExistingWSDL(
final ConsumerFromWsdlParamModel paramModel,
final IProgressMonitor monitor) throws Exception {
SOAIntfProject intfProject = InterfaceCreator
.createIntfModelFromExistingWsdl(paramModel, monitor);
InterfaceCreator
.createIntfProjectFromExistingWsdl(intfProject, monitor);
//skip the consumer creation for simple mode
SOAConsumerProject consumerProject = ConsumerCreator
.createConsumerModelFromExistingWsdl(paramModel, intfProject,
monitor);
ConsumerCreator.createConsumerProjectFromExistingWsdl(consumerProject,
intfProject, monitor);
}
/**
* Adds the service to consumer from wsdl.
*
* @param paramModel the param model
* @param consumerProject the consumer project
* @param monitor the monitor
* @throws Exception the exception
*/
public static void addServiceToConsumerFromWSDL(
final ConsumerFromWsdlParamModel paramModel,
SOAConsumerProject consumerProject, final IProgressMonitor monitor)
throws Exception {
// create interface project staff
SOAIntfProject intfProject = InterfaceCreator
.createIntfModelFromExistingWsdl(paramModel, monitor);
InterfaceCreator
.createIntfProjectFromExistingWsdl(intfProject, monitor);
SOAIntfMetadata metadata = intfProject.getMetadata();
// add service to required services
consumerProject.getRequiredServices().put(metadata.getServiceName(),
metadata);
// services configuration
ISOAProjectConfigurer configurer = GlobalRepositorySystem.instanceOf()
.getActiveRepositorySystem().getProjectConfigurer();
AssetInfo assertObj = (AssetInfo) GlobalRepositorySystem.instanceOf()
.getActiveRepositorySystem().getAssetRegistry().getAsset(
intfProject.getProject());
try {
logger.info("Consuming new services->", intfProject
.getProjectName());
// generate client configure for newly created service
BuildSystemCodeGen.generateClientConfigXmlForAddedService(
consumerProject, Arrays.asList(metadata), paramModel
.getEnvironments(), monitor);
ProgressUtil.progressOneStep(monitor);
// newly create service is always shared consumer, add this service
// to the not_genreate_base_consumer list
SOAConsumerUtil.modifyNotGenerateBaseConsumers(consumerProject
.getProject(), Arrays.asList(metadata.getServiceName()),
new ArrayList<String>(), monitor);
ProgressUtil.progressOneStep(monitor);
// BuildSystemConfigurer.configure(consumerProject, monitor);
// add service to consumer dependency list
configurer.addDependencies(consumerProject.getProjectName(),
ListUtil.arrayList(assertObj), monitor);
ProgressUtil.progressOneStep(monitor);
// update consumer project classpath
BuildSystemUtil.updateSOAClasspathContainer(consumerProject
.getProject());
ProgressUtil.progressOneStep(monitor);
} catch (Exception e) {
logger.error(e);
throw new SOAConsumeNewServiceFailedException(
"Failed to add new service to consumer project->"
+ consumerProject.getProjectName(), e);
}
}
/**
* Creates the consumer from java.
*
* @param uiModel the ui model
* @param monitor the monitor
* @throws Exception the exception
*/
public static void createConsumerFromJava(
final ConsumerFromJavaParamModel uiModel,
final IProgressMonitor monitor) throws Exception {
SOAConsumerProject consumerProject = ConsumerCreator
.createConsumerModelFromJava(uiModel, monitor);
ConsumerCreator.createConsumerProjectFromJava(consumerProject,
uiModel.isConvertingJavaProject(), monitor);
}
}