PomParser.java
/*
* Copyright (c) 2002-2021, City of Paris
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright notice
* and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice
* and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of 'Mairie de Paris' nor 'Lutece' nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* License 1.0
*/
package fr.paris.lutece.plugins.releaser.util.pom;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
import org.xml.sax.InputSource;
import fr.paris.lutece.plugins.releaser.business.jaxb.maven.Model;
import fr.paris.lutece.plugins.releaser.business.Component;
import fr.paris.lutece.plugins.releaser.business.Dependency;
import fr.paris.lutece.plugins.releaser.business.Site;
import fr.paris.lutece.portal.service.util.AppLogService;
// TODO: Auto-generated Javadoc
/**
* PomParser.
*/
public class PomParser
{
// Tags
/** The list dependencies. */
private ArrayList<Dependency> _listDependencies = new ArrayList<Dependency>( );
/**
* Gets the dependencies.
*
* @return the dependencies
*/
public List<Dependency> getDependencies( )
{
return _listDependencies;
}
/**
* Parses the.
*
* @param site
* the site
* @param strPOM
* the str POM
*/
public void parse( Site site, String strPOM )
{
try
{
InputSource isPOM = new InputSource( new StringReader( strPOM ) );
Model model = unmarshal( Model.class, isPOM );
filledSite( site, model );
fr.paris.lutece.plugins.releaser.business.jaxb.maven.Model.Dependencies dependencies = model.getDependencies( );
if ( dependencies != null )
{
for ( fr.paris.lutece.plugins.releaser.business.jaxb.maven.Dependency jaxDependency : dependencies.getDependency( ) )
{
filledDependency( site, jaxDependency );
}
}
}
catch( JAXBException e )
{
AppLogService.error( e );
}
}
/**
* Parses the.
*
* @param component
* the component
* @param strPOM
* the str POM
*/
public void parse( Component component, String strPOM )
{
try
{
InputSource isPOM = new InputSource( new StringReader( strPOM ) );
Model model = unmarshal( Model.class, isPOM );
component.setArtifactId( model.getArtifactId( ) );
component.setGroupId( model.getGroupId( ) );
component.setCurrentVersion( model.getVersion( ) );
if ( model.getScm( ) != null )
{
component.setScmDeveloperConnection( model.getScm( ).getDeveloperConnection( ) );
component.setBranchReleaseVersion( model.getVersion( ) );
}
}
catch( JAXBException e )
{
AppLogService.error( e );
}
}
/**
* Parses the.
*
* @param component
* the component
* @param inputStream
* the input stream
*/
public void parse( Component component, InputStream inputStream )
{
try
{
Model model = PomUpdater.unmarshal( Model.class, inputStream );
component.setArtifactId( model.getArtifactId( ) );
component.setGroupId( model.getGroupId( ) );
component.setCurrentVersion( model.getVersion( ) );
if ( model.getScm( ) != null )
{
component.setScmDeveloperConnection( model.getScm( ).getDeveloperConnection( ) );
}
}
catch( JAXBException e )
{
AppLogService.error( e );
}
finally
{
try
{
inputStream.close( );
}
catch( IOException e )
{
AppLogService.error( e );
}
}
}
/**
* Filled site.
*
* @param site
* the site
* @param model
* the model
*/
private void filledSite( Site site, Model model )
{
site.setArtifactId( model.getArtifactId( ) );
site.setGroupId( model.getGroupId( ) );
site.setVersion( model.getVersion( ) );
}
/**
* Filled dependency.
*
* @param site
* the site
* @param jaxDependency
* the jax dependency
*/
private void filledDependency( Site site, fr.paris.lutece.plugins.releaser.business.jaxb.maven.Dependency jaxDependency )
{
Dependency dep = new Dependency( );
dep.setArtifactId( jaxDependency.getArtifactId( ) );
dep.setVersion( jaxDependency.getVersion( ) );
dep.setGroupId( jaxDependency.getGroupId( ) );
dep.setType( jaxDependency.getType( ) );
site.addCurrentDependency( dep );
}
/**
* Unmarshal.
*
* @param <T>
* the generic type
* @param docClass
* the doc class
* @param inputSource
* the input source
* @return the t
* @throws JAXBException
* the JAXB exception
*/
public static <T> T unmarshal( Class<T> docClass, InputSource inputSource ) throws JAXBException
{
String packageName = docClass.getPackage( ).getName( );
JAXBContext jc = JAXBContext.newInstance( packageName );
Unmarshaller u = jc.createUnmarshaller( );
JAXBElement<T> doc = (JAXBElement<T>) u.unmarshal( inputSource );
return doc.getValue( );
}
}