/*******************************************************************************
* 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.build.builder;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.ebayopensource.turmeric.eclipse.build.SOAFrameworkBuilderActivator;
import org.ebayopensource.turmeric.eclipse.build.resources.SOAMessages;
import org.ebayopensource.turmeric.eclipse.buildsystem.eclipse.AbstractSOAProjectBuilder;
import org.ebayopensource.turmeric.eclipse.buildsystem.utils.BuilderUtil;
import org.ebayopensource.turmeric.eclipse.buildsystem.utils.ModelTransformer;
import org.ebayopensource.turmeric.eclipse.codegen.utils.CodegenInvoker;
import org.ebayopensource.turmeric.eclipse.core.logging.SOALogger;
import org.ebayopensource.turmeric.eclipse.core.resources.constants.SOAProjectConstants.SupportedProjectType;
import org.ebayopensource.turmeric.eclipse.repositorysystem.core.GlobalRepositorySystem;
import org.ebayopensource.turmeric.eclipse.repositorysystem.model.BaseCodeGenModel;
import org.ebayopensource.turmeric.eclipse.resources.util.SOAImplUtil;
import org.ebayopensource.turmeric.eclipse.soatools.configtool.ConfigTool;
import org.ebayopensource.turmeric.eclipse.utils.lang.StringUtil;
import org.ebayopensource.turmeric.eclipse.utils.plugin.WorkspaceUtil;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.runtime.IProgressMonitor;
/**
* SOA Implementation Project Builder. Builds all the SOA Implementation
* artifacts other than the one time generated ones. This calls only on genType -
* ServiceFromWSDLImpl.
*
* @author smathew
*
*/
public class SOAImplProjectBuilder extends AbstractSOAProjectBuilder {
/**
* The Builder ID for the SOAImplProjectBuilder.
*/
public static final String BUILDER_ID = SOAFrameworkBuilderActivator.PLUGIN_ID
+ ".SOAImplProjectBuilder";
private static final SOALogger logger = SOALogger.getLogger();
/**
* {@inheritDoc}
*
* @see org.ebayopensource.turmeric.eclipse.build.builder.AbstractSOAProjectBuilder#shouldBuild(org.eclipse.core.resources.IResourceDelta, org.eclipse.core.resources.IProject)
*/
@Override
protected boolean shouldBuild(IResourceDelta delta, IProject project)
throws Exception {
for (IProject reqProject : BuilderUtil.getRequiredProjects(
getProject(), GlobalRepositorySystem.instanceOf().getActiveRepositorySystem()
.getProjectNatureId(SupportedProjectType.INTERFACE))) {
IResourceDelta deltaReqProj = getDelta(reqProject);
if (BuilderUtil.shouldBuild(deltaReqProj, reqProject)) {
return true;
}
}
return BuilderUtil.shouldBuild(delta, project);
}
/**
* {@inheritDoc}
*
* @see org.ebayopensource.turmeric.eclipse.build.builder.AbstractSOAProjectBuilder#doBuild(int, java.util.Map, org.eclipse.core.resources.IProject, org.eclipse.core.resources.IResourceDelta, org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
protected IProject[] doBuild(int kind, Map args, IProject project,
IResourceDelta delta, IProgressMonitor monitor) throws Exception {
CodegenInvoker codegenInvoker = CodegenInvoker.init(project);
BaseCodeGenModel baseCodeGenModel = BuilderUtil
.buildBaseCodeGenModel(project, monitor);
if (StringUtils.isNotBlank(baseCodeGenModel.getServiceName())) {
final IProject intfProject = WorkspaceUtil
.getProject(baseCodeGenModel.getServiceName());
if (intfProject.isAccessible()) {
final String newNamespace = BuilderUtil
.isWSDLTargetNamespaceChanged(
getDelta(intfProject), baseCodeGenModel
.getServiceName(), intfProject,
project);
if (newNamespace != null) {
logger.warning(StringUtil.formatString(
SOAMessages.TNS_CHANGED, baseCodeGenModel
.getServiceName(), project
.getName()));
// update ServiceConfig.xml
final IFile svcConfigFile = SOAImplUtil
.getServiceConfigFile(project,
baseCodeGenModel.getServiceName());
if (svcConfigFile != null
&& svcConfigFile.isAccessible() == true) {
ConfigTool.modifyServiceConfigNamespace(
newNamespace, svcConfigFile
.getLocationURI().toURL());
} else {
logger.warning(StringUtil.formatString(
SOAMessages.NO_SVC_CONFIG_FOUND,
project.getName()));
}
// ClientConfig.xml of the Unit Test will be re
// generated with
// genType ServiceFromWSDLImpl
}
}
}
// Gen Type ServiceFromWSDLImpl
BaseCodeGenModel codeGenModel = ModelTransformer
.transformToGenTypeServiceFromWSDLImpl(
baseCodeGenModel, project);
codegenInvoker.execute(codeGenModel);
return BuilderUtil.getRequiredProjects(project,
GlobalRepositorySystem.instanceOf().getActiveRepositorySystem()
.getProjectNatureId(SupportedProjectType.INTERFACE));
}
/**
* {@inheritDoc}
*
* @see org.ebayopensource.turmeric.eclipse.build.builder.AbstractSOAProjectBuilder#doClean(org.eclipse.core.resources.IProject, org.eclipse.core.runtime.IProgressMonitor)
*/
@Override
protected void doClean(IProject project, IProgressMonitor monitor)
throws Exception {
}
}