/*******************************************************************************
* 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.ArrayList;
import java.util.List;
import java.util.Map;
import org.ebayopensource.turmeric.eclipse.build.SOAFrameworkBuilderActivator;
import org.ebayopensource.turmeric.eclipse.buildsystem.SynchronizeWsdlAndDepXML;
import org.ebayopensource.turmeric.eclipse.buildsystem.eclipse.AbstractSOAProjectBuilder;
import org.ebayopensource.turmeric.eclipse.buildsystem.utils.ActionUtil;
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.exception.SOAExceptionHandler;
import org.ebayopensource.turmeric.eclipse.core.logging.SOALogger;
import org.ebayopensource.turmeric.eclipse.repositorysystem.core.GlobalRepositorySystem;
import org.ebayopensource.turmeric.eclipse.repositorysystem.model.BaseCodeGenModel;
import org.ebayopensource.turmeric.eclipse.resources.util.MarkerUtil;
import org.ebayopensource.turmeric.eclipse.resources.util.SOAIntfUtil;
import org.ebayopensource.turmeric.eclipse.resources.util.SOAServiceUtil;
import org.ebayopensource.turmeric.eclipse.utils.plugin.EclipseMessageUtils;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResourceDelta;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
/**
* The interface builder builds the SOA interface projects. From codegen
* perspective it use the gentype ServiceFromWSDLIntf. One additional step is
* synchronizing the type libraries entries in Type dependency.xml.
*
* @author smathew
*/
public class SOAInterfaceProjectBuilder extends AbstractSOAProjectBuilder {
/**
* The Builder ID for the SOAInterfaceProjectBuilder.
*/
public static final String BUILDER_ID = SOAFrameworkBuilderActivator.PLUGIN_ID
+ ".SOAInterfaceProjectBuilder";
private static final SOALogger logger = SOALogger.getLogger();
/* (non-Javadoc)
* @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 {
return super.shouldBuild(delta, project) || BuilderUtil
.isWSDLFileChanged(delta, project);
}
/* (non-Javadoc)
* @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 {
if (kind == CLEAN_BUILD || kind == FULL_BUILD) {
try {
SynchronizeWsdlAndDepXML synch = new SynchronizeWsdlAndDepXML(project);
synch.syncronizeWsdlandDepXml();
synch.synchronizeTypeDepandProjectDep(monitor);
//TypeLibSynhcronizer.syncronizeWsdlandDepXml(project);
//TypeLibSynhcronizer.synchronizeTypeDepandProjectDep(project,
// monitor);
} catch (Exception e) {
SOAExceptionHandler.silentHandleException(e);
// Silently ignore. This is just an attempt
}
}
// validate service WSDL when WSDL file is modified.
try {
IFile wsdlFile = SOAServiceUtil.getWsdlFile(project, project
.getName());
List<IStatus> wtpStatus = new ArrayList<IStatus>();
ActionUtil.validateUsingWTP(wsdlFile, wsdlFile.getLocationURI()
.toURL(), wtpStatus, true, monitor);
} catch (Exception e) {
SOAExceptionHandler.silentHandleException(e);
}
final IFile oldMetadataFile = SOAIntfUtil.getOldMetadataFile(project, project.getName());
final IFile newMetadataFile = SOAIntfUtil.getNewMetadataFile(project, project.getName());
if (oldMetadataFile.exists() == true) {
String message = GlobalRepositorySystem.instanceOf()
.getActiveRepositorySystem().getProjectHealthChecker()
.getWarningMessageIntfProjectStructureOld();
MarkerUtil.createSOAProblemMarker(EclipseMessageUtils
.createErrorStatus(message), oldMetadataFile);
} else if (newMetadataFile.exists() == false) {
logger.warning("The service_metadata.properties file is missing, re-genreate it");
}
CodegenInvoker codegenInvoker = CodegenInvoker.init(project);
BaseCodeGenModel baseCodeGenModel = BuilderUtil
.buildBaseCodeGenModel(project, monitor);
BaseCodeGenModel codeGenModel = ModelTransformer
.transformToGenTypeServiceFromWSDLIntf(
baseCodeGenModel, project);
codegenInvoker.execute(codeGenModel);
return null;
}
/* (non-Javadoc)
* @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 {
}
}