/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.webservice; import java.util.ArrayList; import java.util.List; import org.teiid.core.designer.util.CoreArgCheck; import org.teiid.designer.compare.ModelGenerator; import org.teiid.designer.compare.ModelProducer; import org.teiid.designer.compare.generator.BasicModelGenerator; import org.teiid.designer.compare.generator.CompositeModelGenerator; import org.teiid.designer.compare.selector.ModelResourceSelector; import org.teiid.designer.compare.selector.ModelSelector; import org.teiid.designer.core.compare.CoreMatcherFactory; import org.teiid.designer.core.compare.EcoreMatcherFactory; import org.teiid.designer.core.compare.UuidMatcherFactory; import org.teiid.designer.core.compare.diagram.DiagramMatcherFactory; import org.teiid.designer.core.workspace.ModelWorkspaceException; import org.teiid.designer.metamodels.webservice.compare.WebServiceMatcherFactory; import org.teiid.designer.metamodels.xml.compare.XmlMatcherFactory; import org.teiid.designer.transformation.compare.TransformationMatcherFactory; /** * This generator is the component that actually does the work of creating the Web Service * and XML Document models from the prescribed input information. * @since 8.0 */ public class WebServiceModelGenerator extends CompositeModelGenerator { private final IWebServiceModelBuilder builder; /** * * @since 4.2 */ public WebServiceModelGenerator( final IWebServiceModelBuilder builder, final ModelSelector wsSelector, final ModelSelector xmlSelector ) { super(new ArrayList()); CoreArgCheck.isNotNull(builder); this.builder = builder; // Add the other generator(s) ... final WebServiceModelProducer wsProducer = new WebServiceModelProducer(builder); final List wsMatcherFactories = new ArrayList(); wsMatcherFactories.add(new UuidMatcherFactory()); wsMatcherFactories.add(new CoreMatcherFactory()); wsMatcherFactories.add(new WebServiceMatcherFactory()); wsMatcherFactories.add(new TransformationMatcherFactory()); wsMatcherFactories.add(new DiagramMatcherFactory()); wsMatcherFactories.add(new EcoreMatcherFactory()); final ModelGenerator wsGen = new SavingModelGenerator(wsSelector,wsProducer,wsMatcherFactories); final ModelProducer xmlProducer = new XmlDocumentModelProducer(builder,wsProducer); final List xmlMatcherFactories = new ArrayList(); xmlMatcherFactories.add(new UuidMatcherFactory()); xmlMatcherFactories.add(new CoreMatcherFactory()); xmlMatcherFactories.add(new XmlMatcherFactory()); xmlMatcherFactories.add(new TransformationMatcherFactory()); xmlMatcherFactories.add(new DiagramMatcherFactory()); xmlMatcherFactories.add(new EcoreMatcherFactory()); final ModelGenerator xmlGen = new SavingModelGenerator(xmlSelector,xmlProducer,xmlMatcherFactories); super.getModelGenerators().add(wsGen); super.getModelGenerators().add(xmlGen); } public IWebServiceModelBuilder getWebServiceModelBuilder() { return this.builder; } protected class SavingModelGenerator extends BasicModelGenerator { public SavingModelGenerator(ModelSelector original, ModelProducer outputProducer, List mappingAdapters) { super(original, outputProducer, mappingAdapters); } @Override protected void doPostMerge() { super.doPostMerge(); // Defect 23340 // DO NOT SAVE resource here if !isSaveAllBeforeFinish() because the model imports may not have been re-organized. // Saving too early was resulting in a model with an incomplete set of imports, even though the "Workspace" model // indicated they were all there. if( !isSaveAllBeforeFinish() ) { // Save the XML model ... final ModelSelector selector = this.getOriginalModelSelector(); if ( selector instanceof ModelResourceSelector ) { try { ((ModelResourceSelector)selector).getModelResource().save(null,true); } catch (ModelWorkspaceException err) { WebServicePlugin.Util.log(err); } } } } } }