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 }