EMMA Coverage Report (generated Tue Nov 18 06:49:09 CET 2014)
[all classes][org.jomc.ant]

COVERAGE SUMMARY FOR SOURCE FILE [JomcToolTask.java]

nameclass, %method, %block, %line, %
JomcToolTask.java100% (2/2)100% (45/45)71%  (651/911)81%  (164.6/203)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class JomcToolTask100% (1/1)100% (43/43)71%  (611/857)81%  (156.6/193)
clone (): JomcToolTask 100% (1/1)15%  (24/159)28%  (8/29)
configureJomcTool (JomcTool): void 100% (1/1)68%  (233/344)73%  (41.6/57)
JomcToolTask (): void 100% (1/1)100% (3/3)100% (2/2)
createLocale (): LocaleType 100% (1/1)100% (25/25)100% (4/4)
createTemplateParameter (): KeyValueType 100% (1/1)100% (11/11)100% (3/3)
createTemplateParameterResource (): PropertiesResourceType 100% (1/1)100% (11/11)100% (3/3)
createVelocityProperty (): KeyValueType 100% (1/1)100% (11/11)100% (3/3)
createVelocityPropertyResource (): PropertiesResourceType 100% (1/1)100% (11/11)100% (3/3)
getDefaultTemplateEncoding (): String 100% (1/1)100% (3/3)100% (1/1)
getDefaultTemplateProfile (): String 100% (1/1)100% (3/3)100% (1/1)
getImplementation (): String 100% (1/1)100% (3/3)100% (1/1)
getImplementation (Model): Implementation 100% (1/1)100% (38/38)100% (10/10)
getIndentation (): String 100% (1/1)100% (3/3)100% (1/1)
getInputEncoding (): String 100% (1/1)100% (3/3)100% (1/1)
getLineSeparator (): String 100% (1/1)100% (3/3)100% (1/1)
getLocale (): LocaleType 100% (1/1)100% (3/3)100% (1/1)
getModule (): String 100% (1/1)100% (3/3)100% (1/1)
getModule (Model): Module 100% (1/1)100% (38/38)100% (10/10)
getOutputEncoding (): String 100% (1/1)100% (3/3)100% (1/1)
getSpecification (): String 100% (1/1)100% (3/3)100% (1/1)
getSpecification (Model): Specification 100% (1/1)100% (38/38)100% (10/10)
getTemplateEncoding (): String 100% (1/1)100% (3/3)100% (1/1)
getTemplateLocation (): String 100% (1/1)100% (3/3)100% (1/1)
getTemplateParameterResources (): List 100% (1/1)100% (11/11)100% (3/3)
getTemplateParameters (): List 100% (1/1)100% (11/11)100% (3/3)
getTemplateProfile (): String 100% (1/1)100% (3/3)100% (1/1)
getVelocityProperties (): List 100% (1/1)100% (11/11)100% (3/3)
getVelocityPropertyResources (): List 100% (1/1)100% (11/11)100% (3/3)
isModulesProcessingRequested (): boolean 100% (1/1)100% (13/13)100% (1/1)
postExecuteTask (): void 100% (1/1)100% (5/5)100% (3/3)
preExecuteTask (): void 100% (1/1)100% (19/19)100% (6/6)
setDefaultTemplateEncoding (String): void 100% (1/1)100% (4/4)100% (2/2)
setDefaultTemplateProfile (String): void 100% (1/1)100% (4/4)100% (2/2)
setImplementation (String): void 100% (1/1)100% (4/4)100% (2/2)
setIndentation (String): void 100% (1/1)100% (4/4)100% (2/2)
setInputEncoding (String): void 100% (1/1)100% (4/4)100% (2/2)
setLineSeparator (String): void 100% (1/1)100% (4/4)100% (2/2)
setModule (String): void 100% (1/1)100% (4/4)100% (2/2)
setOutputEncoding (String): void 100% (1/1)100% (4/4)100% (2/2)
setSpecification (String): void 100% (1/1)100% (4/4)100% (2/2)
setTemplateEncoding (String): void 100% (1/1)100% (4/4)100% (2/2)
setTemplateLocation (String): void 100% (1/1)100% (4/4)100% (2/2)
setTemplateProfile (String): void 100% (1/1)100% (4/4)100% (2/2)
     
class JomcToolTask$1100% (1/1)100% (2/2)74%  (40/54)80%  (8/10)
onLog (Level, String, Throwable): void 100% (1/1)71%  (34/48)78%  (7/9)
JomcToolTask$1 (JomcToolTask): void 100% (1/1)100% (6/6)100% (1/1)

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: JomcToolTask.java 5006 2014-11-17 03:02:54Z schulte $
29 *
30 */
31package org.jomc.ant;
32 
33import java.io.IOException;
34import java.net.URL;
35import java.util.ArrayList;
36import java.util.Iterator;
37import java.util.LinkedList;
38import java.util.List;
39import java.util.Locale;
40import java.util.Map;
41import java.util.logging.Level;
42import org.apache.commons.lang.StringEscapeUtils;
43import org.apache.commons.lang.StringUtils;
44import org.apache.tools.ant.BuildException;
45import org.apache.tools.ant.Project;
46import org.jomc.ant.types.KeyValueType;
47import org.jomc.ant.types.LocaleType;
48import org.jomc.ant.types.PropertiesResourceType;
49import org.jomc.model.Implementation;
50import org.jomc.model.Module;
51import org.jomc.model.Modules;
52import org.jomc.model.Specification;
53import org.jomc.model.modlet.ModelHelper;
54import org.jomc.modlet.Model;
55import org.jomc.tools.JomcTool;
56 
57/**
58 * Base class for executing tool based tasks.
59 *
60 * @author <a href="mailto:cs@schulte.it">Christian Schulte</a>
61 * @version $JOMC: JomcToolTask.java 5006 2014-11-17 03:02:54Z schulte $
62 */
63public class JomcToolTask extends JomcModelTask
64{
65 
66    /** The default encoding to use for reading templates. */
67    private String defaultTemplateEncoding;
68 
69    /** The default template profile to use when accessing templates. */
70    private String defaultTemplateProfile;
71 
72    /** The encoding to use for reading files. */
73    private String inputEncoding;
74 
75    /** The encoding to use for writing files. */
76    private String outputEncoding;
77 
78    /** The encoding to use for reading templates. */
79    private String templateEncoding;
80 
81    /** Additional location to search for templates. */
82    private String templateLocation;
83 
84    /** The template profile to use when accessing templates. */
85    private String templateProfile;
86 
87    /** The indentation string ('\t' for tab). */
88    private String indentation;
89 
90    /** The line separator ('\r\n' for DOS, '\r' for Mac, '\n' for Unix). */
91    private String lineSeparator;
92 
93    /** The locale. */
94    private LocaleType locale;
95 
96    /** The identifier of a specification to process. */
97    private String specification;
98 
99    /** The identifier of an implementation to process. */
100    private String implementation;
101 
102    /** The name of a module to process. */
103    private String module;
104 
105    /** The Velocity runtime properties. */
106    private List<KeyValueType> velocityProperties;
107 
108    /** The Velocity runtime property resources. */
109    private List<PropertiesResourceType> velocityPropertyResources;
110 
111    /** The template parameters. */
112    private List<KeyValueType> templateParameters;
113 
114    /** The template parameter resources. */
115    private List<PropertiesResourceType> templateParameterResources;
116 
117    /** Creates a new {@code JomcToolTask} instance. */
118    public JomcToolTask()
119    {
120        super();
121    }
122 
123    /**
124     * Gets the encoding to use for reading files.
125     *
126     * @return The encoding to use for reading files or {@code null}.
127     *
128     * @see #setInputEncoding(java.lang.String)
129     */
130    public final String getInputEncoding()
131    {
132        return this.inputEncoding;
133    }
134 
135    /**
136     * Sets the encoding to use for reading files.
137     *
138     * @param value The new encoding to use for reading files or {@code null}.
139     *
140     * @see #getInputEncoding()
141     */
142    public final void setInputEncoding( final String value )
143    {
144        this.inputEncoding = value;
145    }
146 
147    /**
148     * Gets the encoding to use for writing files.
149     *
150     * @return The encoding to use for writing files or {@code null}.
151     *
152     * @see #setOutputEncoding(java.lang.String)
153     */
154    public final String getOutputEncoding()
155    {
156        return this.outputEncoding;
157    }
158 
159    /**
160     * Sets the encoding to use for writing files.
161     *
162     * @param value The new encoding to use for writing files or {@code null}.
163     *
164     * @see #getOutputEncoding()
165     */
166    public final void setOutputEncoding( final String value )
167    {
168        this.outputEncoding = value;
169    }
170 
171    /**
172     * Gets the encoding to use for reading templates.
173     *
174     * @return The encoding to use for reading templates or {@code null}.
175     *
176     * @see #setTemplateEncoding(java.lang.String)
177     *
178     * @deprecated As of JOMC 1.3, replaced by method {@link #getDefaultTemplateEncoding()}. This method will be removed
179     * in JOMC 2.0.
180     */
181    @Deprecated
182    public final String getTemplateEncoding()
183    {
184        return this.templateEncoding;
185    }
186 
187    /**
188     * Sets the encoding to use for reading templates.
189     *
190     * @param value The new encoding to use for reading templates or {@code null}.
191     *
192     * @see #getTemplateEncoding()
193     *
194     * @deprecated As of JOMC 1.3, replaced by method {@link #setDefaultTemplateEncoding(java.lang.String)}. This method
195     * will be removed in JOMC 2.0.
196     */
197    @Deprecated
198    public final void setTemplateEncoding( final String value )
199    {
200        this.templateEncoding = value;
201    }
202 
203    /**
204     * Gets the encoding to use for reading templates.
205     *
206     * @return The encoding to use for reading templates or {@code null}.
207     *
208     * @see #setDefaultTemplateEncoding(java.lang.String)
209     *
210     * @since 1.3
211     */
212    public final String getDefaultTemplateEncoding()
213    {
214        return this.defaultTemplateEncoding;
215    }
216 
217    /**
218     * Sets the encoding to use for reading templates.
219     *
220     * @param value The new encoding to use for reading templates or {@code null}.
221     *
222     * @see #getDefaultTemplateEncoding()
223     *
224     * @since 1.3
225     */
226    public final void setDefaultTemplateEncoding( final String value )
227    {
228        this.defaultTemplateEncoding = value;
229    }
230 
231    /**
232     * Gets the location to search for templates in addition to searching the class path of the task.
233     *
234     * @return The location to search for templates in addition to searching the class path of the task or {@code null}.
235     *
236     * @see #setTemplateLocation(java.lang.String)
237     */
238    public final String getTemplateLocation()
239    {
240        return this.templateLocation;
241    }
242 
243    /**
244     * Sets the location to search for templates in addition to searching the class path of the task.
245     *
246     * @param value The new location to search for templates in addition to searching the class path of the task or
247     * {@code null}.
248     *
249     * @see #getTemplateLocation()
250     */
251    public final void setTemplateLocation( final String value )
252    {
253        this.templateLocation = value;
254    }
255 
256    /**
257     * Gets the default template profile to use when accessing templates.
258     *
259     * @return The default template profile to use when accessing templates or {@code null}.
260     *
261     * @see #setDefaultTemplateProfile(java.lang.String)
262     */
263    public final String getDefaultTemplateProfile()
264    {
265        return this.defaultTemplateProfile;
266    }
267 
268    /**
269     * Sets the default template profile to use when accessing templates.
270     *
271     * @param value The new default template profile to use when accessing templates or {@code null}.
272     *
273     * @see #getDefaultTemplateProfile()
274     */
275    public final void setDefaultTemplateProfile( final String value )
276    {
277        this.defaultTemplateProfile = value;
278    }
279 
280    /**
281     * Gets the template profile to use when accessing templates.
282     *
283     * @return The template profile to use when accessing templates or {@code null}.
284     *
285     * @see #setTemplateProfile(java.lang.String)
286     */
287    public final String getTemplateProfile()
288    {
289        return this.templateProfile;
290    }
291 
292    /**
293     * Sets the template profile to use when accessing templates.
294     *
295     * @param value The new template profile to use when accessing templates or {@code null}.
296     *
297     * @see #getTemplateProfile()
298     */
299    public final void setTemplateProfile( final String value )
300    {
301        this.templateProfile = value;
302    }
303 
304    /**
305     * Gets the indentation string ('\t' for tab).
306     *
307     * @return The indentation string ('\t' for tab) or {@code null}.
308     *
309     * @see #setIndentation(java.lang.String)
310     */
311    public final String getIndentation()
312    {
313        return this.indentation;
314    }
315 
316    /**
317     * Sets the indentation string ('\t' for tab).
318     *
319     * @param value The new indentation string ('\t' for tab) or {@code null}.
320     *
321     * @see #getIndentation()
322     */
323    public final void setIndentation( final String value )
324    {
325        this.indentation = value;
326    }
327 
328    /**
329     * Gets the line separator ('\r\n' for DOS, '\r' for Mac, '\n' for Unix).
330     *
331     * @return The line separator ('\r\n' for DOS, '\r' for Mac, '\n' for Unix) or {@code null}.
332     *
333     * @see #setLineSeparator(java.lang.String)
334     */
335    public final String getLineSeparator()
336    {
337        return this.lineSeparator;
338    }
339 
340    /**
341     * Sets the line separator ('\r\n' for DOS, '\r' for Mac, '\n' for Unix).
342     *
343     * @param value The new line separator ('\r\n' for DOS, '\r' for Mac, '\n' for Unix) or {@code null}.
344     *
345     * @see #getLineSeparator()
346     */
347    public final void setLineSeparator( final String value )
348    {
349        this.lineSeparator = value;
350    }
351 
352    /**
353     * Gets the locale.
354     *
355     * @return The locale or {@code null}.
356     *
357     * @see #createLocale()
358     */
359    public final LocaleType getLocale()
360    {
361        return this.locale;
362    }
363 
364    /**
365     * Creates a new {@code locale} element instance.
366     *
367     * @return A new {@code locale} element instance.
368     *
369     * @throws BuildException if a value already has been created.
370     *
371     * @see #getLocale()
372     */
373    public LocaleType createLocale()
374    {
375        if ( this.locale != null )
376        {
377            throw new BuildException( Messages.getMessage( "multipleElements", "locale" ), this.getLocation() );
378        }
379 
380        this.locale = new LocaleType();
381        return this.locale;
382    }
383 
384    /**
385     * Gets the identifier of a specification to process.
386     *
387     * @return The identifier of a specification to process or {@code null}.
388     *
389     * @see #setSpecification(java.lang.String)
390     */
391    public final String getSpecification()
392    {
393        return this.specification;
394    }
395 
396    /**
397     * Sets the identifier of a specification to process.
398     *
399     * @param value The new identifier of a specification to process or {@code null}.
400     *
401     * @see #getSpecification()
402     */
403    public final void setSpecification( final String value )
404    {
405        this.specification = value;
406    }
407 
408    /**
409     * Gets the specification to process from a given model.
410     *
411     * @param model The model to get the specification to process from.
412     *
413     * @return The specification to process or {@code null}.
414     *
415     * @throws NullPointerException if {@code model} is {@code null}.
416     *
417     * @see #getSpecification()
418     */
419    public final Specification getSpecification( final Model model )
420    {
421        if ( model == null )
422        {
423            throw new NullPointerException( "model" );
424        }
425 
426        Specification s = null;
427 
428        if ( this.getSpecification() != null )
429        {
430            final Modules modules = ModelHelper.getModules( model );
431 
432            if ( modules != null )
433            {
434                s = modules.getSpecification( this.getSpecification() );
435            }
436 
437            if ( s == null )
438            {
439                this.log( Messages.getMessage( "specificationNotFound", this.getSpecification() ), Project.MSG_WARN );
440            }
441        }
442 
443        return s;
444    }
445 
446    /**
447     * Gets the identifier of an implementation to process.
448     *
449     * @return The identifier of an implementation to process or {@code null}.
450     *
451     * @see #setImplementation(java.lang.String)
452     */
453    public final String getImplementation()
454    {
455        return this.implementation;
456    }
457 
458    /**
459     * Sets the identifier of an implementation to process.
460     *
461     * @param value The new identifier of an implementation to process or {@code null}.
462     *
463     * @see #getImplementation()
464     */
465    public final void setImplementation( final String value )
466    {
467        this.implementation = value;
468    }
469 
470    /**
471     * Gets the implementation to process from a given model.
472     *
473     * @param model The model to get the implementation to process from.
474     *
475     * @return The implementation to process or {@code null}.
476     *
477     * @throws NullPointerException if {@code model} is {@code null}.
478     *
479     * @see #getImplementation()
480     */
481    public final Implementation getImplementation( final Model model )
482    {
483        if ( model == null )
484        {
485            throw new NullPointerException( "model" );
486        }
487 
488        Implementation i = null;
489 
490        if ( this.getImplementation() != null )
491        {
492            final Modules modules = ModelHelper.getModules( model );
493 
494            if ( modules != null )
495            {
496                i = modules.getImplementation( this.getImplementation() );
497            }
498 
499            if ( i == null )
500            {
501                this.log( Messages.getMessage( "implementationNotFound", this.getImplementation() ), Project.MSG_WARN );
502            }
503        }
504 
505        return i;
506    }
507 
508    /**
509     * Gets the identifier of a module to process.
510     *
511     * @return The identifier of a module to process or {@code null}.
512     *
513     * @see #setModule(java.lang.String)
514     */
515    public final String getModule()
516    {
517        return this.module;
518    }
519 
520    /**
521     * Sets the identifier of a module to process.
522     *
523     * @param value The new identifier of a module to process or {@code null}.
524     *
525     * @see #getModule()
526     */
527    public final void setModule( final String value )
528    {
529        this.module = value;
530    }
531 
532    /**
533     * Gets the module to process from a given model.
534     *
535     * @param model The model to get the module to process from.
536     *
537     * @return The module to process or {@code null}.
538     *
539     * @throws NullPointerException if {@code model} is {@code null}.
540     *
541     * @see #getModule()
542     */
543    public final Module getModule( final Model model )
544    {
545        if ( model == null )
546        {
547            throw new NullPointerException( "model" );
548        }
549 
550        Module m = null;
551 
552        if ( this.getModule() != null )
553        {
554            final Modules modules = ModelHelper.getModules( model );
555 
556            if ( modules != null )
557            {
558                m = modules.getModule( this.getModule() );
559            }
560 
561            if ( m == null )
562            {
563                this.log( Messages.getMessage( "moduleNotFound", this.getModule() ), Project.MSG_WARN );
564            }
565        }
566 
567        return m;
568    }
569 
570    /**
571     * Gets a flag indicating all modules are requested to be processed.
572     *
573     * @return {@code true}, if processing of all modules is requested; {@code false}, else.
574     *
575     * @see #getSpecification()
576     * @see #getImplementation()
577     * @see #getModule()
578     */
579    public boolean isModulesProcessingRequested()
580    {
581        return this.getSpecification() == null && this.getImplementation() == null && this.getModule() == null;
582    }
583 
584    /**
585     * Gets the Velocity runtime properties to apply.
586     * <p>This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you make
587     * to the returned list will be present inside the object. This is why there is no {@code set} method for the
588     * velocity properties property.</p>
589     *
590     * @return The Velocity runtime properties to apply.
591     *
592     * @see #createVelocityProperty()
593     */
594    public final List<KeyValueType> getVelocityProperties()
595    {
596        if ( this.velocityProperties == null )
597        {
598            this.velocityProperties = new LinkedList<KeyValueType>();
599        }
600 
601        return this.velocityProperties;
602    }
603 
604    /**
605     * Creates a new {@code velocityProperty} element instance.
606     *
607     * @return A new {@code velocityProperty} element instance.
608     *
609     * @see #getVelocityProperties()
610     */
611    public KeyValueType createVelocityProperty()
612    {
613        final KeyValueType velocityProperty = new KeyValueType();
614        this.getVelocityProperties().add( velocityProperty );
615        return velocityProperty;
616    }
617 
618    /**
619     * Gets the Velocity runtime property resources to apply.
620     * <p>This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you make
621     * to the returned list will be present inside the object. This is why there is no {@code set} method for the
622     * velocity property resources property.</p>
623     *
624     * @return The Velocity runtime property resources to apply.
625     *
626     * @see #createVelocityPropertyResource()
627     */
628    public final List<PropertiesResourceType> getVelocityPropertyResources()
629    {
630        if ( this.velocityPropertyResources == null )
631        {
632            this.velocityPropertyResources = new LinkedList<PropertiesResourceType>();
633        }
634 
635        return this.velocityPropertyResources;
636    }
637 
638    /**
639     * Creates a new {@code velocityPropertyResource} element instance.
640     *
641     * @return A new {@code velocityPropertyResource} element instance.
642     *
643     * @see #getVelocityPropertyResources()
644     */
645    public PropertiesResourceType createVelocityPropertyResource()
646    {
647        final PropertiesResourceType velocityPropertyResource = new PropertiesResourceType();
648        this.getVelocityPropertyResources().add( velocityPropertyResource );
649        return velocityPropertyResource;
650    }
651 
652    /**
653     * Gets the template parameters to apply.
654     * <p>This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you make
655     * to the returned list will be present inside the object. This is why there is no {@code set} method for the
656     * template parameters property.</p>
657     *
658     * @return The template parameters to apply.
659     *
660     * @see #createTemplateParameter()
661     */
662    public final List<KeyValueType> getTemplateParameters()
663    {
664        if ( this.templateParameters == null )
665        {
666            this.templateParameters = new LinkedList<KeyValueType>();
667        }
668 
669        return this.templateParameters;
670    }
671 
672    /**
673     * Creates a new {@code templateParameter} element instance.
674     *
675     * @return A new {@code templateParameter} element instance.
676     *
677     * @see #getTemplateParameters()
678     */
679    public KeyValueType createTemplateParameter()
680    {
681        final KeyValueType templateParameter = new KeyValueType();
682        this.getTemplateParameters().add( templateParameter );
683        return templateParameter;
684    }
685 
686    /**
687     * Gets the template parameter resources to apply.
688     * <p>This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you make
689     * to the returned list will be present inside the object. This is why there is no {@code set} method for the
690     * template parameter resources property.</p>
691     *
692     * @return The template parameter resources to apply.
693     *
694     * @see #createTemplateParameterResource()
695     */
696    public final List<PropertiesResourceType> getTemplateParameterResources()
697    {
698        if ( this.templateParameterResources == null )
699        {
700            this.templateParameterResources = new LinkedList<PropertiesResourceType>();
701        }
702 
703        return this.templateParameterResources;
704    }
705 
706    /**
707     * Creates a new {@code templateParameterResource} element instance.
708     *
709     * @return A new {@code templateParameterResource} element instance.
710     *
711     * @see #getTemplateParameterResources()
712     */
713    public PropertiesResourceType createTemplateParameterResource()
714    {
715        final PropertiesResourceType templateParameterResource = new PropertiesResourceType();
716        this.getTemplateParameterResources().add( templateParameterResource );
717        return templateParameterResource;
718    }
719 
720    /** {@inheritDoc} */
721    @Override
722    public void preExecuteTask() throws BuildException
723    {
724        super.preExecuteTask();
725 
726        this.assertKeysNotNull( this.getVelocityProperties() );
727        this.assertKeysNotNull( this.getTemplateParameters() );
728        this.assertLocationsNotNull( this.getTemplateParameterResources() );
729        this.assertLocationsNotNull( this.getVelocityPropertyResources() );
730    }
731 
732    /** {@inheritDoc} */
733    @Override
734    @SuppressWarnings( "deprecation" )
735    public void postExecuteTask() throws BuildException
736    {
737        JomcTool.setDefaultTemplateProfile( null );
738 
739        super.postExecuteTask();
740    }
741 
742    /**
743     * Configures a given {@code JomcTool} instance using the properties of the instance.
744     *
745     * @param tool The tool to configure.
746     *
747     * @throws NullPointerException if {@code tool} is {@code null}.
748     * @throws BuildException if configuring {@code tool} fails.
749     */
750    @SuppressWarnings( "deprecation" )
751    public void configureJomcTool( final JomcTool tool ) throws BuildException
752    {
753        if ( tool == null )
754        {
755            throw new NullPointerException( "tool" );
756        }
757 
758        try
759        {
760            tool.setLogLevel( Level.ALL );
761            tool.setIndentation( StringEscapeUtils.unescapeJava( this.getIndentation() ) );
762            tool.setInputEncoding( this.getInputEncoding() );
763            tool.setLineSeparator( StringEscapeUtils.unescapeJava( this.getLineSeparator() ) );
764            tool.setOutputEncoding( this.getOutputEncoding() );
765            tool.setDefaultTemplateProfile( this.getDefaultTemplateProfile() );
766            tool.setTemplateProfile( this.getTemplateProfile() );
767            tool.getListeners().add( new JomcTool.Listener()
768            {
769 
770                @Override
771                public void onLog( final Level level, final String message, final Throwable throwable )
772                {
773                    super.onLog( level, message, throwable );
774 
775                    if ( level.intValue() >= Level.SEVERE.intValue() )
776                    {
777                        log( message, throwable, Project.MSG_ERR );
778                    }
779                    else if ( level.intValue() >= Level.WARNING.intValue() )
780                    {
781                        log( message, throwable, Project.MSG_WARN );
782                    }
783                    else if ( level.intValue() >= Level.INFO.intValue() )
784                    {
785                        log( message, throwable, Project.MSG_INFO );
786                    }
787                    else
788                    {
789                        log( message, throwable, Project.MSG_DEBUG );
790                    }
791                }
792 
793            } );
794 
795            if ( this.getTemplateEncoding() != null )
796            {
797                this.log( Messages.getMessage( "deprecationWarning", "templateEncoding", "defaultTemplateEncoding" ),
798                          null, Project.MSG_WARN );
799 
800                tool.setDefaultTemplateEncoding( this.getTemplateEncoding() );
801            }
802            else
803            {
804                tool.setDefaultTemplateEncoding( this.getDefaultTemplateEncoding() );
805            }
806 
807            for ( int i = 0, s0 = this.getVelocityPropertyResources().size(); i < s0; i++ )
808            {
809                for ( Map.Entry<Object, Object> e :
810                      this.getProperties( this.getVelocityPropertyResources().get( i ) ).entrySet() )
811                {
812                    if ( e.getValue() != null )
813                    {
814                        tool.getVelocityEngine().setProperty( e.getKey().toString(), e.getValue() );
815                    }
816                    else
817                    {
818                        tool.getVelocityEngine().clearProperty( e.getKey().toString() );
819                    }
820                }
821            }
822 
823            for ( int i = 0, s0 = this.getVelocityProperties().size(); i < s0; i++ )
824            {
825                final KeyValueType p = this.getVelocityProperties().get( i );
826                final Object object = p.getObject( this.getLocation() );
827 
828                if ( object != null )
829                {
830                    tool.getVelocityEngine().setProperty( p.getKey(), object );
831                }
832                else
833                {
834                    tool.getVelocityEngine().clearProperty( p.getKey() );
835                }
836            }
837 
838            for ( Map.Entry<Object, Object> e : System.getProperties().entrySet() )
839            {
840                tool.getTemplateParameters().put( e.getKey().toString(), e.getValue() );
841            }
842 
843            for ( final Iterator<Map.Entry<?, ?>> it = this.getProject().getProperties().entrySet().iterator();
844                  it.hasNext(); )
845            {
846                final Map.Entry<?, ?> e = it.next();
847                tool.getTemplateParameters().put( e.getKey().toString(), e.getValue() );
848            }
849 
850            for ( int i = 0, s0 = this.getTemplateParameterResources().size(); i < s0; i++ )
851            {
852                for ( Map.Entry<Object, Object> e :
853                      this.getProperties( this.getTemplateParameterResources().get( i ) ).entrySet() )
854                {
855                    if ( e.getValue() != null )
856                    {
857                        tool.getTemplateParameters().put( e.getKey().toString(), e.getValue() );
858                    }
859                    else
860                    {
861                        tool.getTemplateParameters().remove( e.getKey().toString() );
862                    }
863                }
864            }
865 
866            for ( int i = 0, s0 = this.getTemplateParameters().size(); i < s0; i++ )
867            {
868                final KeyValueType p = this.getTemplateParameters().get( i );
869                final Object object = p.getObject( this.getLocation() );
870 
871                if ( object != null )
872                {
873                    tool.getTemplateParameters().put( p.getKey(), object );
874                }
875                else
876                {
877                    tool.getTemplateParameters().remove( p.getKey() );
878                }
879            }
880 
881            if ( this.getTemplateLocation() != null )
882            {
883                final URL url = this.getDirectory( this.getTemplateLocation() );
884                tool.setTemplateLocation( url );
885 
886                if ( url == null )
887                {
888                    this.log( Messages.getMessage( "templateLocationNotFound", this.getTemplateLocation() ),
889                              Project.MSG_WARN );
890 
891                }
892            }
893 
894            if ( this.getLocale() != null )
895            {
896                tool.setLocale( new Locale( StringUtils.defaultString( this.getLocale().getLanguage() ),
897                                            StringUtils.defaultString( this.getLocale().getCountry() ),
898                                            StringUtils.defaultString( this.getLocale().getVariant() ) ) );
899 
900            }
901        }
902        catch ( final IOException e )
903        {
904            throw new BuildException( Messages.getMessage( e ), e, this.getLocation() );
905        }
906    }
907 
908    /** {@inheritDoc} */
909    @Override
910    public JomcToolTask clone()
911    {
912        final JomcToolTask clone = (JomcToolTask) super.clone();
913 
914        if ( this.locale != null )
915        {
916            clone.locale = this.locale.clone();
917        }
918 
919        if ( this.velocityPropertyResources != null )
920        {
921            clone.velocityPropertyResources =
922                new ArrayList<PropertiesResourceType>( this.velocityPropertyResources.size() );
923 
924            for ( PropertiesResourceType e : this.velocityPropertyResources )
925            {
926                clone.velocityPropertyResources.add( e.clone() );
927            }
928        }
929 
930        if ( this.velocityProperties != null )
931        {
932            clone.velocityProperties = new ArrayList<KeyValueType>( this.velocityProperties.size() );
933 
934            for ( KeyValueType e : this.velocityProperties )
935            {
936                clone.velocityProperties.add( e.clone() );
937            }
938        }
939 
940        if ( this.velocityPropertyResources != null )
941        {
942            clone.velocityPropertyResources =
943                new ArrayList<PropertiesResourceType>( this.velocityPropertyResources.size() );
944 
945            for ( PropertiesResourceType e : this.velocityPropertyResources )
946            {
947                clone.velocityPropertyResources.add( e.clone() );
948            }
949        }
950 
951        if ( this.templateParameters != null )
952        {
953            clone.templateParameters = new ArrayList<KeyValueType>( this.templateParameters.size() );
954 
955            for ( KeyValueType e : this.templateParameters )
956            {
957                clone.templateParameters.add( e.clone() );
958            }
959        }
960 
961        if ( this.templateParameterResources != null )
962        {
963            clone.templateParameterResources =
964                new ArrayList<PropertiesResourceType>( this.templateParameterResources.size() );
965 
966            for ( PropertiesResourceType e : this.templateParameterResources )
967            {
968                clone.templateParameterResources.add( e.clone() );
969            }
970        }
971 
972        return clone;
973    }
974 
975}

[all classes][org.jomc.ant]
EMMA 2.1.5320 (stable) (C) Vladimir Roubtsov