View Javadoc
1   /**
2    * The MIT License
3    *
4    * Copyright 2006-2012 The Codehaus.
5    *
6    * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and
7    * associated documentation files (the "Software"), to deal in the Software without restriction,
8    * including without limitation the rights to use, copy, modify, merge, publish, distribute,
9    * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
10   * furnished to do so, subject to the following conditions:
11   *
12   * The above copyright notice and this permission notice shall be included in all copies or
13   * substantial portions of the Software.
14   *
15   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT
16   * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17   * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18   * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20   */
21  package org.codehaus.mojo.appassembler.daemon;
22  
23  import java.io.File;
24  import java.io.FileNotFoundException;
25  import java.io.FileReader;
26  import java.io.FileWriter;
27  import java.io.IOException;
28  import java.util.Properties;
29  
30  import org.apache.maven.artifact.repository.ArtifactRepository;
31  import org.apache.maven.artifact.repository.ArtifactRepositoryFactory;
32  import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
33  import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
34  import org.apache.maven.profiles.DefaultProfileManager;
35  import org.apache.maven.profiles.ProfileManager;
36  import org.apache.maven.project.MavenProject;
37  import org.apache.maven.project.MavenProjectBuilder;
38  import org.apache.maven.settings.MavenSettingsBuilder;
39  import org.apache.maven.settings.Settings;
40  import org.codehaus.mojo.appassembler.model.Daemon;
41  import org.codehaus.plexus.PlexusTestCase;
42  import org.codehaus.plexus.util.FileUtils;
43  import org.codehaus.plexus.util.IOUtil;
44  import org.codehaus.plexus.util.InterpolationFilterReader;
45  import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
46  
47  /**
48   * @author <a href="mailto:trygvis@inamo.no">Trygve Laugst&oslash;l</a>
49   * @version $Id$
50   */
51  public abstract class AbstractDaemonGeneratorTest
52      extends PlexusTestCase
53  {
54      private static String appassemblerVersion;
55  
56      public void runTest( String generatorId, String pom, String descriptor, String outputPath )
57          throws Exception
58      {
59          File outputDir = getTestFile( outputPath );
60  
61          DaemonGenerator generator = (DaemonGenerator) lookup( DaemonGenerator.ROLE, generatorId );
62  
63          // -----------------------------------------------------------------------
64          // Build the MavenProject instance
65          // -----------------------------------------------------------------------
66  
67          MavenProjectBuilder projectBuilder = (MavenProjectBuilder) lookup( MavenProjectBuilder.ROLE );
68  
69          MavenSettingsBuilder settingsBuilder = (MavenSettingsBuilder) lookup( MavenSettingsBuilder.ROLE );
70          Settings settings = settingsBuilder.buildSettings();
71  
72          ArtifactRepositoryFactory artifactRepositoryFactory =
73              (ArtifactRepositoryFactory) lookup( ArtifactRepositoryFactory.ROLE );
74  
75          String localRepoUrl = new File( settings.getLocalRepository() ).toURL().toExternalForm();
76  
77          ArtifactRepository localRepository =
78              artifactRepositoryFactory.createDeploymentArtifactRepository( "local", localRepoUrl,
79                                                                            new DefaultRepositoryLayout(), false );
80  
81          ProfileManager profileManager = new DefaultProfileManager( getContainer() );
82  
83          File tempPom = createFilteredFile( pom );
84  
85          MavenProject project = projectBuilder.buildWithDependencies( tempPom, localRepository, profileManager );
86  
87          // -----------------------------------------------------------------------
88          // Clean the output directory
89          // -----------------------------------------------------------------------
90  
91          FileUtils.deleteDirectory( outputDir );
92          FileUtils.forceMkdir( outputDir );
93  
94          // -----------------------------------------------------------------------
95          //
96          // -----------------------------------------------------------------------
97  
98          DaemonGeneratorService daemonGeneratorService = (DaemonGeneratorService) lookup( DaemonGeneratorService.ROLE );
99  
100         Daemon model = daemonGeneratorService.loadModel( getTestFile( descriptor ) );
101 
102         generator.generate( new DaemonGenerationRequest( model, project, localRepository, outputDir, "bin" ) );
103     }
104 
105     protected File createFilteredFile( String file )
106         throws IOException, FileNotFoundException, DaemonGeneratorException, XmlPullParserException
107     {
108         String version = getAppAssemblerBooterVersion();
109         Properties context = new Properties();
110         context.setProperty( "appassembler.version", version );
111 
112         File tempPom = File.createTempFile( "appassembler", "tmp" );
113         tempPom.deleteOnExit();
114 
115         InterpolationFilterReader reader =
116             new InterpolationFilterReader( new FileReader( getTestFile( file ) ), context, "@", "@" );
117         FileWriter out = null;
118 
119         try
120         {
121             out = new FileWriter( tempPom );
122 
123             IOUtil.copy( reader, out );
124         }
125         catch ( IOException e )
126         {
127             throw new DaemonGeneratorException( "Error writing output file: " + tempPom.getAbsolutePath(), e );
128         }
129         finally
130         {
131             IOUtil.close( reader );
132             IOUtil.close( out );
133         }
134         return tempPom;
135     }
136 
137     private static String getAppAssemblerBooterVersion()
138         throws IOException, XmlPullParserException
139     {
140         if ( appassemblerVersion == null )
141         {
142             MavenXpp3Reader reader = new MavenXpp3Reader();
143             FileReader fileReader = new FileReader( getTestFile( "pom.xml" ) );
144             try
145             {
146                 appassemblerVersion = reader.read( fileReader ).getParent().getVersion();
147             }
148             finally
149             {
150                 IOUtil.close( fileReader );
151             }
152         }
153         return appassemblerVersion;
154     }
155 
156     protected static String normalizeLineTerminators( String input )
157     {
158         return ( input != null ) ? input.replaceAll( "(\r\n)|(\r)", "\n" ) : null;
159     }
160 }