package org.codehaus.mojo.dashboard.report.plugin.utils;
/*
* Copyright 2008 David Vicente
*
* 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
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Date;
import org.apache.maven.project.MavenProject;
import org.codehaus.mojo.dashboard.report.plugin.beans.CheckstyleError;
import org.codehaus.mojo.dashboard.report.plugin.beans.DashBoardMavenProject;
import org.codehaus.mojo.dashboard.report.plugin.beans.XRefPackageBean;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
/**
* @author A315941
* @version %version : 1 %
*/
public class DashXStreamUtils
{
private static DashXStreamUtils xstreamUtils = null;
//Instanciation de la classe XStream
XStream xstream = new XStream( new DomDriver() );
/**
* Creation forbidden...
*/
private DashXStreamUtils()
{
super();
xstream.setMode( XStream.NO_REFERENCES );
// Convertion du contenu de l'objet DashBoardReportBean en XML
xstream.alias( "MavenProject", DashBoardMavenProject.class );
xstream.alias( "xrefpackage", XRefPackageBean.class );
xstream.alias( "checkstyleerror", CheckstyleError.class );
xstream.useAttributeFor( "id", Long.class );
xstream.useAttributeFor( "artifactId", String.class );
xstream.useAttributeFor( "groupId", String.class );
xstream.useAttributeFor( "version", String.class );
xstream.useAttributeFor( "projectName", String.class );
xstream.useAttributeFor( "generatedDate", Date.class );
xstream.useAttributeFor( "averageAfferentCoupling", String.class );
xstream.useAttributeFor( "nbPackages", String.class );
xstream.useAttributeFor( "sumAC", String.class );
}
public static DashXStreamUtils getInstance()
{
if (xstreamUtils == null){
xstreamUtils = new DashXStreamUtils();
}
return xstreamUtils;
}
/**
*
* @param project
* @param dashboardDataFile
* @return
* @throws DashXStreamUtilsException
*/
public DashBoardMavenProject readXMLDashBoardReport( MavenProject project, String dashboardDataFile ) throws DashXStreamUtilsException
{
DashBoardMavenProject mavenProject = null;
try
{
// Instanciation d'un fichier
File fichier = new File( project.getBuild().getDirectory(), dashboardDataFile );
// Redirection du fichier /target/dashboard-report.xml vers un flux
// d'entr�e fichier
FileInputStream fis = new FileInputStream( fichier );
try
{
// D�s�rialisation du fichier /target/dashboard-multi-report.xml vers un nouvel
// objet DashBoardReportBean
mavenProject = (DashBoardMavenProject) xstream.fromXML( fis );
}
finally
{
// On s'assure de fermer le flux quoi qu'il arrive
fis.close();
}
}
catch ( FileNotFoundException e )
{
System.out.println( "readXMLDashBoardReport() for project " + project.getName() + " failed :"
+ e.getMessage() );
throw new DashXStreamUtilsException("readXMLDashBoardReport() for project " + project.getName() + " failed .",e.fillInStackTrace());
}
catch ( IOException ioe )
{
throw new DashXStreamUtilsException("readXMLDashBoardReport() for project " + project.getName() + " failed .",ioe.fillInStackTrace());
}
return mavenProject;
}
/**
*
* @param project
* @param mavenProject
* @param dashboardDataFile
* @throws DashXStreamUtilsException
*/
public void saveXMLDashBoardReport( MavenProject project, DashBoardMavenProject mavenProject,
String dashboardDataFile )throws DashXStreamUtilsException
{
try
{
// Instanciation d'un fichier
File dir = new File( project.getBuild().getDirectory() );
if ( !dir.exists() )
{
dir.mkdirs();
}
File fichier = new File( dir, dashboardDataFile );
// Instanciation d'un flux de sortie fichier vers le xml
FileOutputStream fos = new FileOutputStream( fichier );
OutputStreamWriter output = new OutputStreamWriter( fos, "UTF-8" );
try
{
output.write( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" );
// S�rialisation de l'objet dashBoardReport dans /target/dashboard-report.xml
xstream.toXML( mavenProject, output );
}
finally
{
// On s'assure de fermer le flux quoi qu'il arrive
fos.close();
}
}
catch ( FileNotFoundException e )
{
throw new DashXStreamUtilsException("saveXMLDashBoardReport() for project " + project.getName() + " failed .",e.fillInStackTrace());
}
catch ( IOException ioe )
{
throw new DashXStreamUtilsException("saveXMLDashBoardReport() for project " + project.getName() + " failed .",ioe.fillInStackTrace());
}
}
}