1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
49
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
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
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 }