1 | /* |
2 | * Copyright (C) Christian Schulte, 2005-206 |
3 | * All rights reserved. |
4 | * |
5 | * Redistribution and use in source and binary forms, with or without |
6 | * modification, are permitted provided that the following conditions |
7 | * are met: |
8 | * |
9 | * o Redistributions of source code must retain the above copyright |
10 | * notice, this list of conditions and the following disclaimer. |
11 | * |
12 | * o Redistributions in binary form must reproduce the above copyright |
13 | * notice, this list of conditions and the following disclaimer in |
14 | * the documentation and/or other materials provided with the |
15 | * distribution. |
16 | * |
17 | * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, |
18 | * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY |
19 | * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL |
20 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, |
21 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT |
22 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
23 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
24 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
25 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
26 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
27 | * |
28 | * $JOMC: ResourceFileProcessorTask.java 4613 2012-09-22 10:07:08Z schulte $ |
29 | * |
30 | */ |
31 | package org.jomc.ant; |
32 | |
33 | import java.util.Locale; |
34 | import org.apache.tools.ant.BuildException; |
35 | import org.apache.tools.ant.Project; |
36 | import org.jomc.tools.ResourceFileProcessor; |
37 | |
38 | /** |
39 | * Base class for executing resource file processor based tasks. |
40 | * |
41 | * @author <a href="mailto:cs@schulte.it">Christian Schulte</a> |
42 | * @version $JOMC: ResourceFileProcessorTask.java 4613 2012-09-22 10:07:08Z schulte $ |
43 | * @see #processResourceFiles() |
44 | */ |
45 | public class ResourceFileProcessorTask extends JomcToolTask |
46 | { |
47 | |
48 | /** The language of the default language properties file of generated resource bundle resources. */ |
49 | private String resourceBundleDefaultLanguage; |
50 | |
51 | /** Controls processing of resource files. */ |
52 | private boolean resourceProcessingEnabled = true; |
53 | |
54 | /** Class of the {@code ResourceFileProcessor} backing the task. */ |
55 | private Class<? extends ResourceFileProcessor> resourceFileProcessorClass; |
56 | |
57 | /** Creates a new {@code ResourceFileProcessorTask} instance. */ |
58 | public ResourceFileProcessorTask() |
59 | { |
60 | super(); |
61 | } |
62 | |
63 | /** |
64 | * Gets a flag indicating the processing of resources is enabled. |
65 | * |
66 | * @return {@code true}, if processing of resources is enabled; {@code false}, else. |
67 | * |
68 | * @see #setResourceProcessingEnabled(boolean) |
69 | */ |
70 | public final boolean isResourceProcessingEnabled() |
71 | { |
72 | return this.resourceProcessingEnabled; |
73 | } |
74 | |
75 | /** |
76 | * Sets the flag indicating the processing of resources is enabled. |
77 | * |
78 | * @param value {@code true}, to enable processing of resources; {@code false}, to disable processing of resources. |
79 | * |
80 | * @see #isResourceProcessingEnabled() |
81 | */ |
82 | public final void setResourceProcessingEnabled( final boolean value ) |
83 | { |
84 | this.resourceProcessingEnabled = value; |
85 | } |
86 | |
87 | /** |
88 | * Gets the language of the default language properties file of generated resource bundle resource files. |
89 | * |
90 | * @return The language of the default language properties file of generated resource bundle resource files or |
91 | * {@code null}. |
92 | * |
93 | * @see #setResourceBundleDefaultLanguage(java.lang.String) |
94 | */ |
95 | public final String getResourceBundleDefaultLanguage() |
96 | { |
97 | return this.resourceBundleDefaultLanguage; |
98 | } |
99 | |
100 | /** |
101 | * Sets the language of the default language properties file of generated resource bundle resource files. |
102 | * |
103 | * @param value The new language of the default language properties file of generated resource bundle resource files |
104 | * or {@code null}. |
105 | * |
106 | * @see #getResourceBundleDefaultLanguage() |
107 | */ |
108 | public final void setResourceBundleDefaultLanguage( final String value ) |
109 | { |
110 | this.resourceBundleDefaultLanguage = value; |
111 | } |
112 | |
113 | /** |
114 | * Gets the class of the {@code ResourceFileProcessor} backing the task. |
115 | * |
116 | * @return The class of the {@code ResourceFileProcessor} backing the task. |
117 | * |
118 | * @see #setResourceFileProcessorClass(java.lang.Class) |
119 | */ |
120 | public final Class<? extends ResourceFileProcessor> getResourceFileProcessorClass() |
121 | { |
122 | if ( this.resourceFileProcessorClass == null ) |
123 | { |
124 | this.resourceFileProcessorClass = ResourceFileProcessor.class; |
125 | } |
126 | |
127 | return this.resourceFileProcessorClass; |
128 | } |
129 | |
130 | /** |
131 | * Sets the class of the {@code ResourceFileProcessor} backing the task. |
132 | * |
133 | * @param value The new class of the {@code ResourceFileProcessor} backing the task or {@code null}. |
134 | * |
135 | * @see #getResourceFileProcessorClass() |
136 | */ |
137 | public final void setResourceFileProcessorClass( final Class<? extends ResourceFileProcessor> value ) |
138 | { |
139 | this.resourceFileProcessorClass = value; |
140 | } |
141 | |
142 | /** |
143 | * Creates a new {@code ResourceFileProcessor} instance setup using the properties of the instance. |
144 | * |
145 | * @return A new {@code ResourceFileProcessor} instance. |
146 | * |
147 | * @throws BuildException if creating a new {@code ResourceFileProcessor} instance fails. |
148 | * |
149 | * @see #getResourceFileProcessorClass() |
150 | * @see #configureResourceFileProcessor(org.jomc.tools.ResourceFileProcessor) |
151 | */ |
152 | public ResourceFileProcessor newResourceFileProcessor() throws BuildException |
153 | { |
154 | try |
155 | { |
156 | final ResourceFileProcessor resourceFileProcessor = this.getResourceFileProcessorClass().newInstance(); |
157 | this.configureResourceFileProcessor( resourceFileProcessor ); |
158 | return resourceFileProcessor; |
159 | } |
160 | catch ( final InstantiationException e ) |
161 | { |
162 | throw new BuildException( Messages.getMessage( "failedCreatingObject", |
163 | this.getResourceFileProcessorClass().getName() ), |
164 | e, this.getLocation() ); |
165 | |
166 | } |
167 | catch ( final IllegalAccessException e ) |
168 | { |
169 | throw new BuildException( Messages.getMessage( "failedCreatingObject", |
170 | this.getResourceFileProcessorClass().getName() ), |
171 | e, this.getLocation() ); |
172 | |
173 | } |
174 | } |
175 | |
176 | /** |
177 | * Configures a given {@code ResourceFileProcessor} instance using the properties of the instance. |
178 | * |
179 | * @param resourceFileProcessor The resource file processor to configure. |
180 | * |
181 | * @throws NullPointerException if {@code resourceFileProcessor} is {@code null}. |
182 | * @throws BuildException if configuring {@code resourceFileProcessor} fails. |
183 | * |
184 | * @see #configureJomcTool(org.jomc.tools.JomcTool) |
185 | */ |
186 | public void configureResourceFileProcessor( final ResourceFileProcessor resourceFileProcessor ) |
187 | throws BuildException |
188 | { |
189 | if ( resourceFileProcessor == null ) |
190 | { |
191 | throw new NullPointerException( "resourceFileProcessor" ); |
192 | } |
193 | |
194 | this.configureJomcTool( resourceFileProcessor ); |
195 | |
196 | if ( this.getResourceBundleDefaultLanguage() != null ) |
197 | { |
198 | resourceFileProcessor.setResourceBundleDefaultLocale( |
199 | new Locale( this.getResourceBundleDefaultLanguage() ) ); |
200 | |
201 | } |
202 | } |
203 | |
204 | /** |
205 | * Calls the {@code processResourceFiles} method if resource processing is enabled. |
206 | * |
207 | * @throws BuildException if processing resource files fails. |
208 | * |
209 | * @see #processResourceFiles() |
210 | */ |
211 | @Override |
212 | public final void executeTask() throws BuildException |
213 | { |
214 | if ( this.isResourceProcessingEnabled() ) |
215 | { |
216 | this.processResourceFiles(); |
217 | this.log( Messages.getMessage( "resourceProcessingSuccess" ) ); |
218 | } |
219 | else |
220 | { |
221 | this.log( Messages.getMessage( "resourceProcessingDisabled" ) ); |
222 | } |
223 | } |
224 | |
225 | /** |
226 | * Processes resource files. |
227 | * |
228 | * @throws BuildException if processing resource files fails. |
229 | * |
230 | * @see #executeTask() |
231 | */ |
232 | public void processResourceFiles() throws BuildException |
233 | { |
234 | this.log( Messages.getMessage( "unimplementedTask", this.getClass().getName(), "processResourceFiles" ), |
235 | Project.MSG_ERR ); |
236 | |
237 | } |
238 | |
239 | /** {@inheritDoc} */ |
240 | @Override |
241 | public ResourceFileProcessorTask clone() |
242 | { |
243 | return (ResourceFileProcessorTask) super.clone(); |
244 | } |
245 | |
246 | } |