1 package org.codehaus.mojo.appassembler.daemon.daemontools;
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.FileWriter;
29 import java.io.IOException;
30 import java.io.InputStream;
31 import java.io.InputStreamReader;
32 import java.io.Reader;
33 import java.io.Writer;
34 import java.util.HashMap;
35 import java.util.Map;
36
37 import org.codehaus.mojo.appassembler.daemon.DaemonGenerationRequest;
38 import org.codehaus.mojo.appassembler.daemon.DaemonGenerator;
39 import org.codehaus.mojo.appassembler.daemon.DaemonGeneratorException;
40 import org.codehaus.mojo.appassembler.model.Daemon;
41 import org.codehaus.plexus.logging.AbstractLogEnabled;
42 import org.codehaus.plexus.util.FileUtils;
43 import org.codehaus.plexus.util.IOUtil;
44 import org.codehaus.plexus.util.InterpolationFilterReader;
45
46
47
48
49
50
51 public class DaemonToolsDaemonGenerator
52 extends AbstractLogEnabled
53 implements DaemonGenerator
54 {
55
56
57
58
59
60
61
62
63
64 public void generate( DaemonGenerationRequest request )
65 throws DaemonGeneratorException
66 {
67 Daemon daemon = request.getDaemon();
68
69 try
70 {
71 FileUtils.forceMkdir( request.getOutputDirectory() );
72 }
73 catch ( IOException e )
74 {
75 throw new DaemonGeneratorException( "Error creating output directory: " + request.getOutputDirectory(), e );
76 }
77
78 File envDir = new File( request.getOutputDirectory(), "env" );
79 envDir.mkdir();
80
81 copyEnvFile( "JAVA_HOME", envDir );
82 copyEnvFile( "USER", envDir );
83
84 File logDir = new File( request.getOutputDirectory(), "logs" );
85 logDir.mkdir();
86
87 File serviceDir = new File( request.getOutputDirectory(), "service" );
88 serviceDir.mkdir();
89
90
91
92
93
94 InputStream in = this.getClass().getResourceAsStream( "run.sh.template" );
95
96 if ( in == null )
97 {
98 throw new DaemonGeneratorException( "Could not load template." );
99 }
100
101 InputStreamReader reader = new InputStreamReader( in );
102
103 Map<Object, Object> context = new HashMap<Object, Object>();
104 context.put( "MAINCLASS", daemon.getMainClass() );
105 context.put( "NAME", daemon.getId() );
106
107 InterpolationFilterReader interpolationFilterReader = new InterpolationFilterReader( reader, context, "@", "@" );
108
109 File runFile = new File( request.getOutputDirectory(), "run" );
110 FileWriter out = null;
111
112 try
113 {
114
115
116
117
118 out = new FileWriter( runFile );
119
120 IOUtil.copy( interpolationFilterReader, out );
121 }
122 catch ( IOException e )
123 {
124 throw new DaemonGeneratorException( "Error writing output file: " + runFile.getAbsolutePath(), e );
125 }
126 finally
127 {
128 IOUtil.close( interpolationFilterReader );
129 IOUtil.close( out );
130 }
131
132 }
133
134 private void copyEnvFile( String envName, File envDir )
135 throws DaemonGeneratorException
136 {
137 Writer out = null;
138 Reader envReader = null;
139
140 File envFile = new File( envDir, envName );
141
142 try
143 {
144 envReader = new InputStreamReader( this.getClass().getResourceAsStream( "env/" + envName ) );
145
146
147
148
149
150 out = new FileWriter( envFile );
151
152 IOUtil.copy( envReader, out );
153 }
154 catch ( IOException e )
155 {
156 throw new DaemonGeneratorException( "Error writing environment file: " + envFile, e );
157 }
158 finally
159 {
160 IOUtil.close( envReader );
161 IOUtil.close( out );
162 }
163 }
164 }