You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by do...@apache.org on 2002/05/19 11:15:31 UTC
cvs commit: jakarta-ant-myrmidon/container/src/java/org/apache/myrmidon/components/builder TransformingModelBuilder.java
donaldp 02/05/19 02:15:31
Added: container/src/java/org/apache/myrmidon/components/builder
TransformingModelBuilder.java
Log:
Copy across the transformngProjectBuilder
into a TransformingModelBuilder
Revision Changes Path
1.1 jakarta-ant-myrmidon/container/src/java/org/apache/myrmidon/components/builder/TransformingModelBuilder.java
Index: TransformingModelBuilder.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.myrmidon.components.builder;
import java.io.InputStream;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.stream.StreamSource;
import org.apache.avalon.excalibur.i18n.ResourceManager;
import org.apache.avalon.excalibur.i18n.Resources;
import org.apache.avalon.framework.logger.AbstractLogEnabled;
import org.apache.myrmidon.api.metadata.ModelElement;
import org.apache.myrmidon.api.metadata.ModelException;
import org.apache.myrmidon.interfaces.builder.ModelBuilder;
import org.apache.myrmidon.interfaces.model.ModelElementSaxHandler;
/**
* A simple ModelBuilder that will build a {@link ModelElement}
* tree after processing XML through an XSL transformation.
*
* @author <a href="mailto:peter@apache.org">Peter Donald</a>
* @author <a href="mailto:darrell@apache.org">Darrell DeBoer</a>
* @version $Revision: 1.1 $ $Date: 2002/05/19 09:15:31 $
*/
public class TransformingModelBuilder
extends AbstractLogEnabled
implements ModelBuilder
{
private final static Resources REZ =
ResourceManager.getPackageResources( TransformingModelBuilder.class );
/**
* The stylesheet to transform an ant1 project into ant2.
*/
private static final String STYLESHEET = "ant1convert.xsl";
/**
* The transformer to use when building model.
*/
private Transformer m_transformer;
public ModelElement build( final String systemID )
throws ModelException
{
try
{
if( getLogger().isDebugEnabled() )
{
final String message = REZ.getString( "ant.project-convert.notice" );
getLogger().debug( message );
}
// Create a XSLT source for the build file.
final Source source = new StreamSource( systemID );
// Create a configuration handler for the output.
final ModelElementSaxHandler contentHandler = new ModelElementSaxHandler();
final Result result = new SAXResult( contentHandler );
// Perform the transformation.
getTransformer().transform( source, result );
return contentHandler.getModel();
}
catch( final Exception e )
{
final String message = e.getMessage();
throw new ModelException( message, e );
}
}
/**
* Lazy load a Transformer with the conversion stylesheet.
*
* @return the initialised Transformer
* @throws TransformerConfigurationException on error
*/
private Transformer getTransformer()
throws TransformerConfigurationException
{
// Lazy loading of stylesheet source.
if( m_transformer == null )
{
m_transformer = createTransformer();
}
return m_transformer;
}
/**
* Actually create the transformer. Subclasses that wish to
* use a different stylesheet should overide this method.
*
* @return the newly created transformer
* @throws TransformerConfigurationException on error
*/
protected Transformer createTransformer()
throws TransformerConfigurationException
{
final InputStream stylesheet = getClass().getResourceAsStream( STYLESHEET );
final StreamSource source = new StreamSource( stylesheet );
final TransformerFactory factory = TransformerFactory.newInstance();
return factory.newTransformer( source );
}
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>