1 package org.codehaus.mojo.appassembler.daemon.generic;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 import java.io.File;
28 import java.io.FileOutputStream;
29 import java.io.IOException;
30 import java.io.OutputStreamWriter;
31 import java.util.Iterator;
32
33 import javax.xml.stream.XMLStreamException;
34
35 import org.apache.maven.artifact.Artifact;
36 import org.apache.maven.artifact.repository.layout.ArtifactRepositoryLayout;
37 import org.apache.maven.project.MavenProject;
38 import org.codehaus.mojo.appassembler.daemon.DaemonGenerationRequest;
39 import org.codehaus.mojo.appassembler.daemon.DaemonGenerator;
40 import org.codehaus.mojo.appassembler.daemon.DaemonGeneratorException;
41 import org.codehaus.mojo.appassembler.daemon.merge.DaemonMerger;
42 import org.codehaus.mojo.appassembler.model.Classpath;
43 import org.codehaus.mojo.appassembler.model.Daemon;
44 import org.codehaus.mojo.appassembler.model.Dependency;
45 import org.codehaus.mojo.appassembler.model.io.stax.AppassemblerModelStaxWriter;
46 import org.codehaus.mojo.appassembler.util.DependencyFactory;
47 import org.codehaus.plexus.logging.AbstractLogEnabled;
48 import org.codehaus.plexus.util.FileUtils;
49 import org.codehaus.plexus.util.IOUtil;
50
51
52
53
54
55
56 public class GenericDaemonGenerator
57 extends AbstractLogEnabled
58 implements DaemonGenerator
59 {
60
61
62
63 private DaemonMerger daemonMerger;
64
65
66
67
68
69
70
71
72
73
74 public void generate( DaemonGenerationRequest request )
75 throws DaemonGeneratorException
76 {
77
78
79
80
81 Daemon createdDaemon =
82 createDaemon( request.getMavenProject(), request.getRepositoryLayout(), request.getOutputFileNameMapping() );
83
84
85
86
87
88 Daemon mergedDaemon = daemonMerger.mergeDaemons( request.getDaemon(), createdDaemon );
89
90
91
92
93
94 OutputStreamWriter writer = null;
95
96 try
97 {
98
99 FileUtils.forceMkdir( request.getOutputDirectory() );
100
101 File outputFile = new File( request.getOutputDirectory(), mergedDaemon.getId() + ".xml" );
102
103 FileOutputStream fos = new FileOutputStream( outputFile );
104
105 writer = new OutputStreamWriter( fos, "UTF-8" );
106
107 AppassemblerModelStaxWriter staxWriter = new AppassemblerModelStaxWriter();
108 staxWriter.write( writer, mergedDaemon );
109 }
110 catch ( IOException e )
111 {
112 throw new DaemonGeneratorException( "Error while writing output file: " + request.getOutputDirectory(), e );
113 }
114 catch ( XMLStreamException e )
115 {
116 throw new DaemonGeneratorException( "Error while writing output file: " + request.getOutputDirectory(), e );
117 }
118 finally
119 {
120 IOUtil.close( writer );
121 }
122 }
123
124
125
126
127
128 private Daemon createDaemon( MavenProject project, ArtifactRepositoryLayout layout, String outputFileNameMapping )
129 {
130 Daemon complete = new Daemon();
131
132 complete.setClasspath( new Classpath() );
133
134
135
136
137 complete.getClasspath().addDependency( DependencyFactory.create( project.getArtifact(), layout,
138 outputFileNameMapping ) );
139
140
141
142
143 for ( Iterator it = project.getRuntimeArtifacts().iterator(); it.hasNext(); )
144 {
145 Artifact artifact = (Artifact) it.next();
146
147 Dependency dependency = DependencyFactory.create( artifact, layout, outputFileNameMapping );
148
149 complete.getClasspath().addDependency( dependency );
150 }
151
152 return complete;
153 }
154 }