1 package org.apache.maven.plugin.checkstyle;
2
3 /*
4 * Licensed to the Apache Software Foundation (ASF) under one
5 * or more contributor license agreements. See the NOTICE file
6 * distributed with this work for additional information
7 * regarding copyright ownership. The ASF licenses this file
8 * to you under the Apache License, Version 2.0 (the
9 * "License"); you may not use this file except in compliance
10 * with the License. You may obtain a copy of the License at
11 *
12 * http://www.apache.org/licenses/LICENSE-2.0
13 *
14 * Unless required by applicable law or agreed to in writing,
15 * software distributed under the License is distributed on an
16 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17 * KIND, either express or implied. See the License for the
18 * specific language governing permissions and limitations
19 * under the License.
20 */
21
22 import org.apache.maven.plugin.MojoExecutionException;
23 import org.apache.maven.plugin.logging.Log;
24 import org.apache.maven.plugin.logging.SystemStreamLog;
25 import org.apache.velocity.context.Context;
26 import org.apache.velocity.exception.ResourceNotFoundException;
27 import org.apache.velocity.exception.VelocityException;
28 import org.codehaus.plexus.velocity.VelocityComponent;
29
30 import java.io.File;
31 import java.io.FileWriter;
32 import java.io.IOException;
33 import java.io.Writer;
34
35 /**
36 * <p>
37 * A component to work with VelocityTemplates from within plugins.
38 * </p>
39 *
40 * <p/>
41 * You will need to reference the velocity component as a parameter
42 * in your plugin. Like this:
43 * </p>
44 * <pre>
45 * /**
46 * * Velocity Component
47 * * @component
48 * */
49 * private VelocityComponent velocity;
50 * </pre>
51 *
52 * @author <a href="mailto:joakim@erdfelt.net">Joakim Erdfelt</a>
53 * @version $Id: VelocityTemplate.java 1155038 2011-08-08 18:23:02Z olamy $
54 */
55 public class VelocityTemplate
56 {
57 private String templateDirectory;
58
59 private Log log;
60
61 private VelocityComponent velocity;
62
63 public VelocityTemplate( VelocityComponent velocityComponent, String templateBaseDirectory )
64 {
65 this.velocity = velocityComponent;
66 this.templateDirectory = templateBaseDirectory;
67 }
68
69 public String getTemplateDirectory()
70 {
71 return templateDirectory;
72 }
73
74 public VelocityComponent getVelocity()
75 {
76 return velocity;
77 }
78
79 /**
80 * Using a specified Velocity Template and provided context, create the outputFilename.
81 *
82 * @param outputFilename the file to be generated.
83 * @param template the velocity template to use.
84 * @param context the velocity context map.
85 * @throws VelocityException if the template was not found or any other Velocity exception.
86 * @throws MojoExecutionException
87 * @throws IOException
88 */
89 public void generate( String outputFilename, String template, Context context )
90 throws VelocityException, MojoExecutionException, IOException
91 {
92 File f;
93
94 try
95 {
96 f = new File( outputFilename );
97
98 if ( !f.getParentFile().exists() )
99 {
100 f.getParentFile().mkdirs();
101 }
102
103 Writer writer = new FileWriter( f );
104
105 getVelocity().getEngine().mergeTemplate( templateDirectory + "/" + template, context, writer );
106
107 writer.flush();
108 writer.close();
109
110 getLog().debug( "File " + outputFilename + " created..." );
111 }
112
113 catch ( ResourceNotFoundException e )
114 {
115 throw new ResourceNotFoundException( "Template not found: " + templateDirectory + "/" + template, e );
116 }
117 catch ( VelocityException e )
118 {
119 throw e; // to get past generic catch for Exception.
120 }
121 catch ( IOException e )
122 {
123 throw e; // to get past generic catch for Exception.
124 }
125 catch ( Exception e )
126 {
127 throw new MojoExecutionException( e.getMessage(), e );
128 }
129 }
130
131 public void setTemplateDirectory( String templateDirectory )
132 {
133 this.templateDirectory = templateDirectory;
134 }
135
136 public void setVelocity( VelocityComponent velocity )
137 {
138 this.velocity = velocity;
139 }
140
141 public Log getLog()
142 {
143 if ( this.log == null )
144 {
145 this.log = new SystemStreamLog();
146 }
147 return log;
148 }
149
150 public void setLog( Log log )
151 {
152 this.log = log;
153 }
154
155 }