/*
* Copyright (c) 2012 Red Hat, Inc.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
* by the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see
* <http://www.gnu.org/licenses>.
*/
package com.redhat.rcm.version.testutil;
import static com.redhat.rcm.version.util.InputUtils.getIncludedSubpaths;
import static junit.framework.Assert.fail;
import static org.apache.commons.io.FileUtils.copyFile;
import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.maven.mae.project.ProjectToolsException;
import org.apache.maven.mae.project.key.FullProjectKey;
import org.apache.maven.model.Model;
import org.apache.maven.model.building.ModelBuildingException;
import org.apache.maven.model.io.DefaultModelReader;
import org.apache.maven.model.io.ModelReader;
import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
import org.apache.maven.project.MavenProject;
import org.junit.rules.ExternalResource;
import org.junit.rules.TemporaryFolder;
import com.redhat.rcm.version.VManException;
import com.redhat.rcm.version.mgr.mod.ProjectModder;
import com.redhat.rcm.version.mgr.session.SessionBuilder;
import com.redhat.rcm.version.mgr.session.VersionManagerSession;
import com.redhat.rcm.version.model.Project;
public class TestProjectFixture
extends ExternalResource
{
private TestVersionManager testVman;
public TestVersionManager getVman()
{
return testVman;
}
// public static void setCurrentProjects( final VersionManagerSession session, final Collection<Model> models )
// throws ProjectToolsException
// {
// final Set<Project> projects = new HashSet<Project>( models.size() );
// for ( final Model model : models )
// {
// projects.add( new Project( model ) );
// }
//
// session.setCurrentProjects( projects );
// }
//
// public static void setCurrentProjects( final VersionManagerSession session, final Model... models )
// throws ProjectToolsException
// {
// setCurrentProjects( session, Arrays.asList( models ) );
// }
//
public static VersionManagerSession newVersionManagerSession( final File workspace, final File reports, final String suffix, final String modifier )
{
return new SessionBuilder( workspace, reports ).withVersionSuffix( suffix )
.withVersionModifier( modifier )
.build();
}
public static VersionManagerSession newVersionManagerSession( final File workspace, final File reports, final String suffix )
{
return new SessionBuilder( workspace, reports ).withVersionSuffix( suffix )
.build();
}
public static VersionManagerSession newVersionManagerSession( final File workspace, final File reports, final String suffix,
final Collection<String> removedPlugins, final Collection<String> removedTests )
{
return new SessionBuilder( workspace, reports ).withVersionSuffix( suffix )
.withRemovedPlugins( removedPlugins )
.withRemovedTests( removedTests )
.build();
}
public static Set<String> getStandardModders()
{
return new HashSet<String>( ProjectModder.STANDARD_MODIFICATIONS );
}
public static File getResourceFile( final String path )
{
final URL resource = Thread.currentThread()
.getContextClassLoader()
.getResource( path );
if ( resource == null )
{
fail( "Resource not found: " + path );
}
return new File( resource.getPath() );
}
public static File getResourceFileCopy( final String path, final TemporaryFolder tempFolder )
throws IOException
{
final File src = getResourceFile( path );
final File dest = tempFolder.newFile( new File( path ).getName() );
copyFile( src, dest );
return dest;
}
public Project loadProject( final File pom, final VersionManagerSession session )
throws ProjectToolsException, ModelBuildingException, IOException
{
return testVman.loadProjectWithModules( pom, session )
.iterator()
.next();
}
public static Model loadModel( final String path )
throws IOException
{
final File pom = getResourceFile( path );
return loadModel( pom );
}
public static Model loadModel( final File pom )
throws IOException
{
final Map<String, Object> options = new HashMap<String, Object>();
options.put( ModelReader.IS_STRICT, Boolean.FALSE.toString() );
return new DefaultModelReader().read( pom, options );
}
public static MavenProject mavenProjectFor( final Project project )
{
final MavenProject result = new MavenProject( project.getModel() );
result.setOriginalModel( project.getModel() );
result.setFile( project.getPom() );
return result;
}
public Set<Project> loadProjects( final String path, final VersionManagerSession session )
throws Exception
{
final File dir = getResourceFile( path );
return loadProjects( dir, session );
}
public Set<Project> loadProjects( final File dir, final VersionManagerSession session )
throws Exception
{
final String[] poms = getIncludedSubpaths( dir, null, null, session );
final List<File> files = new ArrayList<File>();
for ( final String pom : poms )
{
files.add( new File( dir, pom ) );
}
getVman().configureSession( null, null, session, files.toArray( new File[] {} ) );
final Set<Project> projects = new HashSet<Project>( poms.length );
for ( final File f : files )
{
projects.add( loadProject( f, session ) );
}
return projects;
}
public static FullProjectKey loadProjectKey( final String path )
throws ProjectToolsException, IOException
{
final Model model = loadModel( path );
return new FullProjectKey( model );
}
public static FullProjectKey loadProjectKey( final File pom )
throws ProjectToolsException, IOException
{
final Model model = loadModel( pom );
return new FullProjectKey( model );
}
public static Set<Model> loadModels( final Set<File> poms )
throws VManException, IOException
{
final Set<Model> models = new LinkedHashSet<Model>( poms.size() );
for ( final File pom : poms )
{
models.add( loadModel( pom ) );
}
return models;
}
public static void dumpModel( final Model model )
throws IOException
{
final StringWriter writer = new StringWriter();
new MavenXpp3Writer().write( writer, model );
System.out.println( "\n\n" + writer.toString() + "\n\n" );
}
@Override
protected void before()
throws Throwable
{
testVman = TestVersionManager.getInstance();
}
@Override
protected void after()
{
}
}