/******************************************************************************* * 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.typelibrary.builders; import java.util.List; import java.util.Map; import org.ebayopensource.turmeric.eclipse.buildsystem.SynchronizeWsdlAndDepXML; import org.ebayopensource.turmeric.eclipse.buildsystem.eclipse.AbstractSOAProjectBuilder; import org.ebayopensource.turmeric.eclipse.buildsystem.utils.BuilderUtil; import org.ebayopensource.turmeric.eclipse.codegen.utils.CodegenInvoker; import org.ebayopensource.turmeric.eclipse.core.resources.constants.SOATypeLibraryConstants; import org.ebayopensource.turmeric.eclipse.resources.util.MarkerUtil; import org.ebayopensource.turmeric.eclipse.typelibrary.TypeLibraryActivator; import org.ebayopensource.turmeric.eclipse.typelibrary.codegen.model.BaseTypeLibCodegenModel; import org.ebayopensource.turmeric.eclipse.typelibrary.codegen.model.TypeLibModelTransformer; import org.ebayopensource.turmeric.eclipse.typelibrary.utils.TypeLibraryUtil; 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; /** * Type Library builder. This builder calls codegen(internally xjc) for xsd to * java code generation * * @author smathew */ public class TypeLibraryProjectBuilder extends AbstractSOAProjectBuilder { /** The Constant BUILDER_ID. */ public static final String BUILDER_ID = TypeLibraryActivator.PLUGIN_ID + ".TypeLibraryProjectBuilder"; //private static final SOALogger logger = SOALogger.getLogger(); /* (non-Javadoc) * @see org.ebayopensource.turmeric.eclipse.buildsystem.eclipse.AbstractSOAProjectBuilder#shouldBuild(org.eclipse.core.resources.IResourceDelta, org.eclipse.core.resources.IProject) */ @Override protected boolean shouldBuild(IResourceDelta delta, IProject project) throws Exception { return BuilderUtil.shouldBuild(delta, project, SOATypeLibraryConstants.EXT_XSD); } /* (non-Javadoc) * @see org.ebayopensource.turmeric.eclipse.buildsystem.eclipse.AbstractSOAProjectBuilder#checkProjectHealth(org.eclipse.core.resources.IProject) */ @Override protected IStatus checkProjectHealth(IProject project) throws Exception { IStatus status = super.checkProjectHealth(project); if (status.isOK() == false) return status; return TypeLibraryBuilderUtils.checkProjectHealth(project); } /* (non-Javadoc) * @see org.ebayopensource.turmeric.eclipse.buildsystem.eclipse.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 { IStatus status = TypeLibraryBuilderUtils.validateXSDS(project, false); if (status.isOK() == false) { MarkerUtil.createSOAProblemMarkerRecursive(status, project); //return null; } // Only for clean or full build we need the synchronize // dependency to pitch in if (kind == CLEAN_BUILD || kind == FULL_BUILD) { try { SynchronizeWsdlAndDepXML synch = new SynchronizeWsdlAndDepXML(project); synch.syncronizeAllXSDsandDepXml(); synch.synchronizeTypeDepandProjectDep(monitor); } catch (Exception e) { // Silently ignore. This is just an attempt } } else { final List<IFile> modifiedXsds = TypeLibraryBuilderUtils.getModifiedXsds(delta, project); if (modifiedXsds.isEmpty() == false) { try { SynchronizeWsdlAndDepXML synch = new SynchronizeWsdlAndDepXML(project); synch.syncronizeAllXSDsandDepXml(TypeLibraryUtil.getAllXsdFiles(project, true)); synch.synchronizeTypeDepandProjectDep(monitor); } catch (Exception e) { // Silently ignore. This is just an attempt } } } CodegenInvoker codegenInvoker = TypeLibraryBuilderUtils .initForTypeLib(project); BaseTypeLibCodegenModel codeGenModel = TypeLibModelTransformer .buildBaseTypeLibModel(project); codeGenModel = TypeLibModelTransformer .transformToGenTypeIncrOrCleanBuildTypeLibrary( codeGenModel, project, delta); codegenInvoker.execute(codeGenModel); return null; } /* (non-Javadoc) * @see org.ebayopensource.turmeric.eclipse.buildsystem.eclipse.AbstractSOAProjectBuilder#doClean(org.eclipse.core.resources.IProject, org.eclipse.core.runtime.IProgressMonitor) */ @Override protected void doClean(IProject project, IProgressMonitor monitor) throws Exception { } }