EMMA Coverage Report (generated Tue Feb 25 16:41:11 CET 2014)
[all classes][org.jomc.tools.modlet]

COVERAGE SUMMARY FOR SOURCE FILE [ToolsModelValidator.java]

nameclass, %method, %block, %line, %
ToolsModelValidator.java100% (1/1)88%  (15/17)94%  (4556/4832)86%  (426.2/493)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class ToolsModelValidator100% (1/1)88%  (15/17)94%  (4556/4832)86%  (426.2/493)
setDefaultValidateJava (Boolean): void 0%   (0/1)0%   (0/3)0%   (0/2)
setValidateJava (Boolean): void 0%   (0/1)0%   (0/4)0%   (0/2)
getMessage (Throwable): String 100% (1/1)74%  (14/19)73%  (0.7/1)
validateTemplateParameters (ModelValidationReport, ModelContext, SourceSectio... 100% (1/1)90%  (99/110)87%  (16.5/19)
assertValidToolsTypes (ModelContext, Module, ModelValidationReport): void 100% (1/1)94%  (707/751)87%  (68.6/79)
assertValidToolsTypes (ModelContext, Module, Specification, ModelValidationRe... 100% (1/1)94%  (719/763)86%  (64.6/75)
assertValidToolsTypes (ModelContext, Module, Implementation, ModelValidationR... 100% (1/1)94%  (756/800)87%  (68.6/79)
assertValidToolsTypes (ModelContext, Model, ModelValidationReport): void 100% (1/1)95%  (580/613)88%  (58.2/66)
assertValidToolsTypes (ModelContext, Module, Implementation, Dependencies, Mo... 100% (1/1)95%  (797/841)86%  (64.6/75)
assertValidToolsTypes (ModelContext, Module, Implementation, Messages, ModelV... 100% (1/1)95%  (797/841)86%  (64.6/75)
<static initializer> 100% (1/1)100% (3/3)100% (1/1)
ToolsModelValidator (): void 100% (1/1)100% (3/3)100% (2/2)
assertValidToolsTypes (ModelContext, Modules, ModelValidationReport): void 100% (1/1)100% (21/21)100% (3/3)
getMessage (String, Object []): String 100% (1/1)100% (12/12)100% (1/1)
isDefaultValidateJava (): boolean 100% (1/1)100% (12/12)100% (3/3)
isValidateJava (): boolean 100% (1/1)100% (11/11)100% (3/3)
validateModel (ModelContext, Model): ModelValidationReport 100% (1/1)100% (25/25)100% (7/7)

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: ToolsModelValidator.java 4861 2014-02-13 23:23:29Z schulte $
29 *
30 */
31package org.jomc.tools.modlet;
32 
33import java.text.MessageFormat;
34import java.util.ArrayList;
35import java.util.Arrays;
36import java.util.List;
37import java.util.Locale;
38import java.util.ResourceBundle;
39import java.util.logging.Level;
40import javax.xml.bind.JAXBElement;
41import org.jomc.model.Dependencies;
42import org.jomc.model.Dependency;
43import org.jomc.model.Implementation;
44import org.jomc.model.Message;
45import org.jomc.model.Messages;
46import org.jomc.model.ModelObjectException;
47import org.jomc.model.Module;
48import org.jomc.model.Modules;
49import org.jomc.model.Specification;
50import org.jomc.model.modlet.ModelHelper;
51import org.jomc.modlet.Model;
52import org.jomc.modlet.ModelContext;
53import org.jomc.modlet.ModelException;
54import org.jomc.modlet.ModelValidationReport;
55import org.jomc.modlet.ModelValidator;
56import org.jomc.tools.model.ObjectFactory;
57import org.jomc.tools.model.SourceFileType;
58import org.jomc.tools.model.SourceFilesType;
59import org.jomc.tools.model.SourceSectionType;
60import org.jomc.tools.model.SourceSectionsType;
61import org.jomc.tools.model.TemplateParameterType;
62 
63/**
64 * Object management and configuration tools {@code ModelValidator} implementation.
65 *
66 * @author <a href="mailto:cs@schulte.it">Christian Schulte</a>
67 * @version $JOMC: ToolsModelValidator.java 4861 2014-02-13 23:23:29Z schulte $
68 * @see ModelContext#validateModel(org.jomc.modlet.Model)
69 * @since 1.2
70 */
71public class ToolsModelValidator implements ModelValidator
72{
73 
74    /**
75     * Constant for the name of the model context attribute backing property {@code validateJava}.
76     * @see ModelContext#getAttribute(java.lang.String)
77     * @since 1.6
78     */
79    public static final String VALIDATE_JAVA_ATTRIBUTE_NAME =
80        "org.jomc.tools.modlet.ToolsModelValidator.validateJavaAttribute";
81 
82    /**
83     * Constant for the name of the system property controlling property {@code defaultValidateJava}.
84     * @see #isDefaultValidateJava()
85     * @since 1.6
86     */
87    private static final String DEFAULT_VALIDATE_JAVA_PROPERTY_NAME =
88        "org.jomc.tools.modlet.ToolsModelValidator.defaultValidateJava";
89 
90    /**
91     * Default value of the flag indicating the validator is performing Java related validation by default.
92     * @see #isDefaultValidateJava()
93     * @since 1.6
94     */
95    private static final Boolean DEFAULT_VALIDATE_JAVA = Boolean.TRUE;
96 
97    /**
98     * Flag indicating the validator is performing Java related validation by default.
99     * @since 1.6
100     */
101    private static volatile Boolean defaultValidateJava;
102 
103    /**
104     * Flag indicating the validator is performing Java related validation.
105     * @since 1.6
106     */
107    private Boolean validateJava;
108 
109    /** Creates a new {@code ToolsModelValidator} instance. */
110    public ToolsModelValidator()
111    {
112        super();
113    }
114 
115    /**
116     * Gets a flag indicating the validator is performing Java related validation by default.
117     * <p>
118     * The default validate Java flag is controlled by system property
119     * {@code org.jomc.tools.modlet.ToolsModelValidator.defaultValidateJava} holding a value indicating the validator
120     * is performing Java related validation by default. If that property is not set, the {@code true} default is
121     * returned.</p>
122     *
123     * @return {@code true}, if the validator is performing Java related validation by default; {@code false}, if the
124     * validator is not performing Java related validation by default.
125     *
126     * @see #setDefaultValidateJava(java.lang.Boolean)
127     *
128     * @since 1.6
129     */
130    public static boolean isDefaultValidateJava()
131    {
132        if ( defaultValidateJava == null )
133        {
134            defaultValidateJava = Boolean.valueOf( System.getProperty( DEFAULT_VALIDATE_JAVA_PROPERTY_NAME,
135                                                                       Boolean.toString( DEFAULT_VALIDATE_JAVA ) ) );
136 
137        }
138 
139        return defaultValidateJava;
140    }
141 
142    /**
143     * Sets the flag indicating the validator is performing Java related validation by default.
144     *
145     * @param value The new value of the flag indicating the validator is performing Java related validation by default
146     * or {@code null}.
147     *
148     * @see #isDefaultValidateJava()
149     *
150     * @since 1.6
151     */
152    public static void setDefaultValidateJava( final Boolean value )
153    {
154        defaultValidateJava = value;
155    }
156 
157    /**
158     * Gets a flag indicating the validator is performing Java related validation.
159     *
160     * @return {@code true}, if the validator is performing Java related validation; {@code false}, if the the validator
161     * is not performing Java related validation.
162     *
163     * @see #isDefaultValidateJava()
164     * @see #setValidateJava(java.lang.Boolean)
165     *
166     * @since 1.6
167     */
168    public final boolean isValidateJava()
169    {
170        if ( this.validateJava == null )
171        {
172            this.validateJava = isDefaultValidateJava();
173        }
174 
175        return this.validateJava;
176    }
177 
178    /**
179     * Sets the flag indicating the validator is performing Java related validation.
180     *
181     * @param value The new value of the flag indicating the validator is performing Java related validation or
182     * {@code null}.
183     *
184     * @see #isValidateJava()
185     *
186     * @since 1.6
187     */
188    public final void setValidateJava( final Boolean value )
189    {
190        this.validateJava = value;
191    }
192 
193    public ModelValidationReport validateModel( final ModelContext context, final Model model ) throws ModelException
194    {
195        if ( context == null )
196        {
197            throw new NullPointerException( "context" );
198        }
199        if ( model == null )
200        {
201            throw new NullPointerException( "model" );
202        }
203 
204        final ModelValidationReport report = new ModelValidationReport();
205        this.assertValidToolsTypes( context, model, report );
206        return report;
207    }
208 
209    private void assertValidToolsTypes( final ModelContext context, final Model model,
210                                        final ModelValidationReport report )
211    {
212        final List<SourceFileType> sourceFileType = model.getAnyObjects( SourceFileType.class );
213        final List<SourceFilesType> sourceFilesType = model.getAnyObjects( SourceFilesType.class );
214        final List<SourceSectionType> sourceSectionType = model.getAnyObjects( SourceSectionType.class );
215        final List<SourceSectionsType> sourceSectionsType = model.getAnyObjects( SourceSectionsType.class );
216 
217        if ( sourceFileType != null )
218        {
219            for ( final SourceFileType s : sourceFileType )
220            {
221                report.getDetails().add( new ModelValidationReport.Detail(
222                    "MODEL_SOURCE_FILE_CONSTRAINT", Level.SEVERE, getMessage(
223                        "modelSourceFileConstraint", model.getIdentifier(), s.getIdentifier() ),
224                    new ObjectFactory().createSourceFile( s ) ) );
225 
226                if ( this.isValidateJava() )
227                {
228                    for ( final TemplateParameterType p : s.getTemplateParameter() )
229                    {
230                        try
231                        {
232                            p.getJavaValue( context.getClassLoader() );
233                        }
234                        catch ( final ModelObjectException e )
235                        {
236                            final String message = getMessage( e );
237 
238                            if ( context.isLoggable( Level.FINE ) )
239                            {
240                                context.log( Level.FINE, message, e );
241                            }
242 
243                            report.getDetails().add( new ModelValidationReport.Detail(
244                                "MODEL_SOURCE_FILE_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT", Level.SEVERE, getMessage(
245                                    "modelSourceFileTemplateParameterJavaValueConstraint", model.getIdentifier(),
246                                    s.getIdentifier(), p.getName(),
247                                    message != null && message.length() > 0 ? " " + message : "" ),
248                                new ObjectFactory().createSourceFile( s ) ) );
249 
250                        }
251                    }
252                }
253 
254                this.validateTemplateParameters( report, context, s.getSourceSections(),
255                                                 "MODEL_SOURCE_FILE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
256                                                 new ObjectFactory().createSourceFile( s ),
257                                                 "modelSourceFileSectionTemplateParameterJavaValueConstraint",
258                                                 model.getIdentifier(), s.getIdentifier() );
259 
260            }
261        }
262 
263        if ( sourceFilesType != null )
264        {
265            for ( final SourceFilesType files : sourceFilesType )
266            {
267                for ( final SourceFileType s : files.getSourceFile() )
268                {
269                    report.getDetails().add( new ModelValidationReport.Detail(
270                        "MODEL_SOURCE_FILE_CONSTRAINT", Level.SEVERE, getMessage(
271                            "modelSourceFileConstraint", model.getIdentifier(), s.getIdentifier() ),
272                        new ObjectFactory().createSourceFile( s ) ) );
273 
274                    if ( this.isValidateJava() )
275                    {
276                        for ( final TemplateParameterType p : s.getTemplateParameter() )
277                        {
278                            try
279                            {
280                                p.getJavaValue( context.getClassLoader() );
281                            }
282                            catch ( final ModelObjectException e )
283                            {
284                                final String message = getMessage( e );
285 
286                                if ( context.isLoggable( Level.FINE ) )
287                                {
288                                    context.log( Level.FINE, message, e );
289                                }
290 
291                                report.getDetails().add( new ModelValidationReport.Detail(
292                                    "MODEL_SOURCE_FILE_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT", Level.SEVERE,
293                                    getMessage( "modelSourceFileTemplateParameterJavaValueConstraint",
294                                                model.getIdentifier(), s.getIdentifier(), p.getName(),
295                                                message != null && message.length() > 0 ? " " + message : "" ),
296                                    new ObjectFactory().createSourceFile( s ) ) );
297 
298                            }
299                        }
300                    }
301 
302                    this.validateTemplateParameters(
303                        report, context, s.getSourceSections(),
304                        "MODEL_SOURCE_FILE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
305                        new ObjectFactory().createSourceFile( s ),
306                        "modelSourceFileSectionTemplateParameterJavaValueConstraint",
307                        model.getIdentifier(), s.getIdentifier() );
308 
309                }
310 
311                if ( files.getSourceFile().isEmpty() )
312                {
313                    report.getDetails().add( new ModelValidationReport.Detail(
314                        "MODEL_SOURCE_FILES_CONSTRAINT", Level.SEVERE, getMessage(
315                            "modelSourceFilesConstraint", model.getIdentifier() ),
316                        new ObjectFactory().createSourceFiles( files ) ) );
317 
318                }
319            }
320        }
321 
322        if ( sourceSectionType != null )
323        {
324            for ( final SourceSectionType s : sourceSectionType )
325            {
326                report.getDetails().add( new ModelValidationReport.Detail(
327                    "MODEL_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage(
328                        "modelSourceSectionConstraint", model.getIdentifier(), s.getName() ),
329                    new ObjectFactory().createSourceSection( s ) ) );
330 
331                if ( this.isValidateJava() )
332                {
333                    for ( final TemplateParameterType p : s.getTemplateParameter() )
334                    {
335                        try
336                        {
337                            p.getJavaValue( context.getClassLoader() );
338                        }
339                        catch ( final ModelObjectException e )
340                        {
341                            final String message = getMessage( e );
342 
343                            if ( context.isLoggable( Level.FINE ) )
344                            {
345                                context.log( Level.FINE, message, e );
346                            }
347 
348                            report.getDetails().add( new ModelValidationReport.Detail(
349                                "MODEL_SOURCE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT", Level.SEVERE,
350                                getMessage( "modelSourceSectionTemplateParameterJavaValueConstraint",
351                                            model.getIdentifier(), s.getName(), p.getName(),
352                                            message != null && message.length() > 0 ? " " + message : "" ),
353                                new ObjectFactory().createSourceSection( s ) ) );
354 
355                        }
356                    }
357                }
358 
359                this.validateTemplateParameters( report, context, s.getSourceSections(),
360                                                 "MODEL_SOURCE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
361                                                 new ObjectFactory().createSourceSection( s ),
362                                                 "modelSourceSectionTemplateParameterJavaValueConstraint",
363                                                 model.getIdentifier() );
364 
365            }
366        }
367 
368        if ( sourceSectionsType != null )
369        {
370            for ( final SourceSectionsType sections : sourceSectionsType )
371            {
372                for ( final SourceSectionType s : sections.getSourceSection() )
373                {
374                    report.getDetails().add( new ModelValidationReport.Detail(
375                        "MODEL_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage(
376                            "modelSourceSectionConstraint", model.getIdentifier(), s.getName() ),
377                        new ObjectFactory().createSourceSection( s ) ) );
378 
379                }
380 
381                if ( sections.getSourceSection().isEmpty() )
382                {
383                    report.getDetails().add( new ModelValidationReport.Detail(
384                        "MODEL_SOURCE_SECTIONS_CONSTRAINT", Level.SEVERE, getMessage(
385                            "modelSourceSectionsConstraint", model.getIdentifier() ),
386                        new ObjectFactory().createSourceSections( sections ) ) );
387 
388                }
389 
390                this.validateTemplateParameters( report, context, sections,
391                                                 "MODEL_SOURCE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
392                                                 new ObjectFactory().createSourceSections( sections ),
393                                                 "modelSourceSectionTemplateParameterJavaValueConstraint",
394                                                 model.getIdentifier() );
395 
396            }
397        }
398 
399        final Modules modules = ModelHelper.getModules( model );
400 
401        if ( modules != null )
402        {
403            this.assertValidToolsTypes( context, modules, report );
404        }
405    }
406 
407    private void assertValidToolsTypes( final ModelContext context, final Modules modules,
408                                        final ModelValidationReport report )
409    {
410        for ( int i = 0, s0 = modules.getModule().size(); i < s0; i++ )
411        {
412            this.assertValidToolsTypes( context, modules.getModule().get( i ), report );
413        }
414    }
415 
416    private void assertValidToolsTypes( final ModelContext context, final Module module,
417                                        final ModelValidationReport report )
418    {
419        final List<SourceFileType> sourceFileType = module.getAnyObjects( SourceFileType.class );
420        final List<SourceFilesType> sourceFilesType = module.getAnyObjects( SourceFilesType.class );
421        final List<SourceSectionType> sourceSectionType = module.getAnyObjects( SourceSectionType.class );
422        final List<SourceSectionsType> sourceSectionsType = module.getAnyObjects( SourceSectionsType.class );
423 
424        if ( sourceFileType != null )
425        {
426            for ( final SourceFileType s : sourceFileType )
427            {
428                report.getDetails().add( new ModelValidationReport.Detail(
429                    "MODULE_SOURCE_FILE_CONSTRAINT", Level.SEVERE, getMessage(
430                        "moduleSourceFileConstraint", module.getName(), s.getIdentifier() ),
431                    new ObjectFactory().createSourceFile( s ) ) );
432 
433                if ( this.isValidateJava() )
434                {
435                    for ( final TemplateParameterType p : s.getTemplateParameter() )
436                    {
437                        try
438                        {
439                            p.getJavaValue( context.getClassLoader() );
440                        }
441                        catch ( final ModelObjectException e )
442                        {
443                            final String message = getMessage( e );
444 
445                            if ( context.isLoggable( Level.FINE ) )
446                            {
447                                context.log( Level.FINE, message, e );
448                            }
449 
450                            report.getDetails().add( new ModelValidationReport.Detail(
451                                "MODULE_SOURCE_FILE_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT", Level.SEVERE, getMessage(
452                                    "moduleSourceFileTemplateParameterJavaValueConstraint", module.getName(),
453                                    s.getIdentifier(), p.getName(),
454                                    message != null && message.length() > 0 ? " " + message : "" ),
455                                new ObjectFactory().createSourceFile( s ) ) );
456 
457                        }
458                    }
459                }
460 
461                this.validateTemplateParameters(
462                    report, context, s.getSourceSections(),
463                    "MODULE_SOURCE_FILE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
464                    new ObjectFactory().createSourceFile( s ),
465                    "moduleSourceFileSectionTemplateParameterJavaValueConstraint",
466                    module.getName(), s.getIdentifier() );
467 
468            }
469        }
470 
471        if ( sourceFilesType != null )
472        {
473            for ( final SourceFilesType files : sourceFilesType )
474            {
475                for ( final SourceFileType s : files.getSourceFile() )
476                {
477                    report.getDetails().add( new ModelValidationReport.Detail(
478                        "MODULE_SOURCE_FILE_CONSTRAINT", Level.SEVERE, getMessage(
479                            "moduleSourceFileConstraint", module.getName(), s.getIdentifier() ),
480                        new ObjectFactory().createSourceFile( s ) ) );
481 
482                    if ( this.isValidateJava() )
483                    {
484                        for ( final TemplateParameterType p : s.getTemplateParameter() )
485                        {
486                            try
487                            {
488                                p.getJavaValue( context.getClassLoader() );
489                            }
490                            catch ( final ModelObjectException e )
491                            {
492                                final String message = getMessage( e );
493 
494                                if ( context.isLoggable( Level.FINE ) )
495                                {
496                                    context.log( Level.FINE, message, e );
497                                }
498 
499                                report.getDetails().add( new ModelValidationReport.Detail(
500                                    "MODULE_SOURCE_FILE_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT", Level.SEVERE,
501                                    getMessage( "moduleSourceFileTemplateParameterJavaValueConstraint",
502                                                module.getName(), s.getIdentifier(), p.getName(),
503                                                message != null && message.length() > 0 ? " " + message : "" ),
504                                    new ObjectFactory().createSourceFile( s ) ) );
505 
506                            }
507                        }
508                    }
509 
510                    this.validateTemplateParameters(
511                        report, context, s.getSourceSections(),
512                        "MODULE_SOURCE_FILE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
513                        new ObjectFactory().createSourceFile( s ),
514                        "moduleSourceFileSectionTemplateParameterJavaValueConstraint",
515                        module.getName(), s.getIdentifier() );
516 
517                }
518 
519                if ( files.getSourceFile().isEmpty() )
520                {
521                    report.getDetails().add( new ModelValidationReport.Detail(
522                        "MODULE_SOURCE_FILES_CONSTRAINT", Level.SEVERE, getMessage(
523                            "moduleSourceFilesConstraint", module.getName() ),
524                        new ObjectFactory().createSourceFiles( files ) ) );
525 
526                }
527            }
528        }
529 
530        if ( sourceSectionType != null )
531        {
532            for ( final SourceSectionType s : sourceSectionType )
533            {
534                report.getDetails().add( new ModelValidationReport.Detail(
535                    "MODULE_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage(
536                        "moduleSourceSectionConstraint", module.getName(), s.getName() ),
537                    new ObjectFactory().createSourceSection( s ) ) );
538 
539                if ( this.isValidateJava() )
540                {
541                    for ( final TemplateParameterType p : s.getTemplateParameter() )
542                    {
543                        try
544                        {
545                            p.getJavaValue( context.getClassLoader() );
546                        }
547                        catch ( final ModelObjectException e )
548                        {
549                            final String message = getMessage( e );
550 
551                            if ( context.isLoggable( Level.FINE ) )
552                            {
553                                context.log( Level.FINE, message, e );
554                            }
555 
556                            report.getDetails().add( new ModelValidationReport.Detail(
557                                "MODULE_SOURCE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT", Level.SEVERE,
558                                getMessage( "moduleSourceSectionTemplateParameterJavaValueConstraint",
559                                            module.getName(), s.getName(), p.getName(),
560                                            message != null && message.length() > 0 ? " " + message : "" ),
561                                new ObjectFactory().createSourceSection( s ) ) );
562 
563                        }
564                    }
565                }
566 
567                this.validateTemplateParameters(
568                    report, context, s.getSourceSections(),
569                    "MODULE_SOURCE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
570                    new ObjectFactory().createSourceSection( s ),
571                    "moduleSourceSectionTemplateParameterJavaValueConstraint",
572                    module.getName(), s.getName() );
573 
574            }
575        }
576 
577        if ( sourceSectionsType != null )
578        {
579            for ( final SourceSectionsType sections : sourceSectionsType )
580            {
581                for ( final SourceSectionType s : sections.getSourceSection() )
582                {
583                    report.getDetails().add( new ModelValidationReport.Detail(
584                        "MODULE_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage(
585                            "moduleSourceSectionConstraint", module.getName(), s.getName() ),
586                        new ObjectFactory().createSourceSection( s ) ) );
587 
588                    if ( this.isValidateJava() )
589                    {
590                        for ( final TemplateParameterType p : s.getTemplateParameter() )
591                        {
592                            try
593                            {
594                                p.getJavaValue( context.getClassLoader() );
595                            }
596                            catch ( final ModelObjectException e )
597                            {
598                                final String message = getMessage( e );
599 
600                                if ( context.isLoggable( Level.FINE ) )
601                                {
602                                    context.log( Level.FINE, message, e );
603                                }
604 
605                                report.getDetails().add( new ModelValidationReport.Detail(
606                                    "MODULE_SOURCE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT", Level.SEVERE,
607                                    getMessage( "moduleSourceSectionTemplateParameterJavaValueConstraint",
608                                                module.getName(), s.getName(), p.getName(),
609                                                message != null && message.length() > 0 ? " " + message : "" ),
610                                    new ObjectFactory().createSourceSection( s ) ) );
611 
612                            }
613                        }
614                    }
615 
616                    this.validateTemplateParameters( report, context, s.getSourceSections(),
617                                                     "MODULE_SOURCE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
618                                                     new ObjectFactory().createSourceSection( s ),
619                                                     "moduleSourceSectionTemplateParameterJavaValueConstraint",
620                                                     module.getName(), s.getName() );
621 
622                }
623 
624                if ( sections.getSourceSection().isEmpty() )
625                {
626                    report.getDetails().add( new ModelValidationReport.Detail(
627                        "MODULE_SOURCE_SECTIONS_CONSTRAINT", Level.SEVERE, getMessage(
628                            "moduleSourceSectionsConstraint", module.getName() ),
629                        new ObjectFactory().createSourceSections( sections ) ) );
630 
631                }
632            }
633        }
634 
635        if ( module.getImplementations() != null )
636        {
637            for ( int i = 0, s0 = module.getImplementations().getImplementation().size(); i < s0; i++ )
638            {
639                this.assertValidToolsTypes( context, module, module.getImplementations().getImplementation().get( i ),
640                                            report );
641 
642            }
643        }
644 
645        if ( module.getSpecifications() != null )
646        {
647            for ( int i = 0, s0 = module.getSpecifications().getSpecification().size(); i < s0; i++ )
648            {
649                this.assertValidToolsTypes( context, module, module.getSpecifications().getSpecification().get( i ),
650                                            report );
651 
652            }
653        }
654    }
655 
656    private void assertValidToolsTypes( final ModelContext context, final Module module,
657                                        final Implementation implementation, final ModelValidationReport report )
658    {
659        final List<SourceFileType> sourceFileType = implementation.getAnyObjects( SourceFileType.class );
660        final List<SourceFilesType> sourceFilesType = implementation.getAnyObjects( SourceFilesType.class );
661        final List<SourceSectionType> sourceSectionType = implementation.getAnyObjects( SourceSectionType.class );
662        final List<SourceSectionsType> sourceSectionsType = implementation.getAnyObjects( SourceSectionsType.class );
663 
664        if ( sourceFileType != null )
665        {
666            for ( final SourceFileType s : sourceFileType )
667            {
668                if ( this.isValidateJava() )
669                {
670                    for ( final TemplateParameterType p : s.getTemplateParameter() )
671                    {
672                        try
673                        {
674                            p.getJavaValue( context.getClassLoader() );
675                        }
676                        catch ( final ModelObjectException e )
677                        {
678                            final String message = getMessage( e );
679 
680                            if ( context.isLoggable( Level.FINE ) )
681                            {
682                                context.log( Level.FINE, message, e );
683                            }
684 
685                            report.getDetails().add( new ModelValidationReport.Detail(
686                                "IMPLEMENTATION_SOURCE_FILE_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT", Level.SEVERE,
687                                getMessage( "implementationSourceFileTemplateParameterJavaValueConstraint",
688                                            module.getName(), implementation.getIdentifier(),
689                                            s.getIdentifier(), p.getName(),
690                                            message != null && message.length() > 0 ? " " + message : "" ),
691                                new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
692 
693                        }
694                    }
695                }
696 
697                this.validateTemplateParameters(
698                    report, context, s.getSourceSections(),
699                    "IMPLEMENTATION_SOURCE_FILE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
700                    new org.jomc.model.ObjectFactory().createImplementation( implementation ),
701                    "implementationSourceFileSectionTemplateParameterJavaValueConstraint",
702                    module.getName(), implementation.getIdentifier(), s.getIdentifier() );
703 
704            }
705 
706            if ( sourceFileType.size() > 1 )
707            {
708                report.getDetails().add( new ModelValidationReport.Detail(
709                    "IMPLEMENTATION_SOURCE_FILE_MULTIPLICITY_CONSTRAINT", Level.SEVERE, getMessage(
710                        "implementationSourceFileMultiplicityConstraint", module.getName(),
711                        implementation.getIdentifier(), sourceFileType.size() ),
712                    new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
713 
714            }
715            else if ( sourceFileType.size() == 1 )
716            {
717                report.getDetails().add( new ModelValidationReport.Detail(
718                    "IMPLEMENTATION_SOURCE_FILE_INFORMATION", Level.INFO, getMessage(
719                        "implementationSourceFileInfo", module.getName(), implementation.getIdentifier(),
720                        sourceFileType.get( 0 ).getIdentifier() ),
721                    new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
722 
723            }
724        }
725 
726        if ( sourceFilesType != null )
727        {
728            if ( sourceFilesType.size() > 1 )
729            {
730                report.getDetails().add( new ModelValidationReport.Detail(
731                    "IMPLEMENTATION_SOURCE_FILES_MULTIPLICITY_CONSTRAINT", Level.SEVERE, getMessage(
732                        "implementationSourceFilesMultiplicityConstraint", module.getName(),
733                        implementation.getIdentifier(), sourceFilesType.size() ),
734                    new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
735 
736            }
737 
738            for ( final SourceFilesType l : sourceFilesType )
739            {
740                for ( final SourceFileType s : l.getSourceFile() )
741                {
742                    if ( this.isValidateJava() )
743                    {
744                        for ( final TemplateParameterType p : s.getTemplateParameter() )
745                        {
746                            try
747                            {
748                                p.getJavaValue( context.getClassLoader() );
749                            }
750                            catch ( final ModelObjectException e )
751                            {
752                                final String message = getMessage( e );
753 
754                                if ( context.isLoggable( Level.FINE ) )
755                                {
756                                    context.log( Level.FINE, message, e );
757                                }
758 
759                                report.getDetails().add( new ModelValidationReport.Detail(
760                                    "IMPLEMENTATION_SOURCE_FILE_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT", Level.SEVERE,
761                                    getMessage( "implementationSourceFileTemplateParameterJavaValueConstraint",
762                                                module.getName(), implementation.getIdentifier(),
763                                                s.getIdentifier(), p.getName(),
764                                                message != null && message.length() > 0 ? " " + message : "" ),
765                                    new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
766 
767                            }
768                        }
769                    }
770 
771                    this.validateTemplateParameters(
772                        report, context, s.getSourceSections(),
773                        "IMPLEMENTATION_SOURCE_FILE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
774                        new org.jomc.model.ObjectFactory().createImplementation( implementation ),
775                        "implementationSourceFileSectionTemplateParameterJavaValueConstraint",
776                        module.getName(), implementation.getIdentifier(), s.getIdentifier() );
777 
778                }
779            }
780        }
781 
782        if ( sourceSectionType != null )
783        {
784            for ( final SourceSectionType s : sourceSectionType )
785            {
786                report.getDetails().add( new ModelValidationReport.Detail(
787                    "IMPLEMENTATION_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage(
788                        "implementationSourceSectionConstraint", module.getName(), implementation.getIdentifier(),
789                        s.getName() ), new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
790 
791                if ( this.isValidateJava() )
792                {
793                    for ( final TemplateParameterType p : s.getTemplateParameter() )
794                    {
795                        try
796                        {
797                            p.getJavaValue( context.getClassLoader() );
798                        }
799                        catch ( final ModelObjectException e )
800                        {
801                            final String message = getMessage( e );
802 
803                            if ( context.isLoggable( Level.FINE ) )
804                            {
805                                context.log( Level.FINE, message, e );
806                            }
807 
808                            report.getDetails().add( new ModelValidationReport.Detail(
809                                "IMPLEMENTATION_SOURCE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT", Level.SEVERE,
810                                getMessage( "implementationSourceSectionTemplateParameterJavaValueConstraint",
811                                            module.getName(), implementation.getIdentifier(),
812                                            s.getName(), p.getName(),
813                                            message != null && message.length() > 0 ? " " + message : "" ),
814                                new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
815 
816                        }
817                    }
818                }
819 
820                this.validateTemplateParameters(
821                    report, context, s.getSourceSections(),
822                    "IMPLEMENTATION_SOURCE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
823                    new org.jomc.model.ObjectFactory().createImplementation( implementation ),
824                    "implementationSourceSectionTemplateParameterJavaValueConstraint",
825                    module.getName(), implementation.getIdentifier() );
826 
827            }
828        }
829 
830        if ( sourceSectionsType != null )
831        {
832            for ( final SourceSectionsType sections : sourceSectionsType )
833            {
834                for ( final SourceSectionType s : sections.getSourceSection() )
835                {
836                    report.getDetails().add( new ModelValidationReport.Detail(
837                        "IMPLEMENTATION_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage(
838                            "implementationSourceSectionConstraint", module.getName(), implementation.getIdentifier(),
839                            s.getName() ),
840                        new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
841 
842                    if ( this.isValidateJava() )
843                    {
844                        for ( final TemplateParameterType p : s.getTemplateParameter() )
845                        {
846                            try
847                            {
848                                p.getJavaValue( context.getClassLoader() );
849                            }
850                            catch ( final ModelObjectException e )
851                            {
852                                final String message = getMessage( e );
853 
854                                if ( context.isLoggable( Level.FINE ) )
855                                {
856                                    context.log( Level.FINE, message, e );
857                                }
858 
859                                report.getDetails().add( new ModelValidationReport.Detail(
860                                    "IMPLEMENTATION_SOURCE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
861                                    Level.SEVERE, getMessage(
862                                        "implementationSourceSectionTemplateParameterJavaValueConstraint",
863                                        module.getName(), implementation.getIdentifier(), s.getName(), p.getName(),
864                                        message != null && message.length() > 0 ? " " + message : "" ),
865                                    new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
866 
867                            }
868                        }
869                    }
870 
871                    this.validateTemplateParameters(
872                        report, context, s.getSourceSections(),
873                        "IMPLEMENTATION_SOURCE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
874                        new org.jomc.model.ObjectFactory().createImplementation( implementation ),
875                        "implementationSourceSectionTemplateParameterJavaValueConstraint",
876                        module.getName(), implementation.getIdentifier() );
877 
878                }
879 
880                if ( sections.getSourceSection().isEmpty() )
881                {
882                    report.getDetails().add( new ModelValidationReport.Detail(
883                        "IMPLEMENTATION_SOURCE_SECTIONS_CONSTRAINT", Level.SEVERE, getMessage(
884                            "implementationSourceSectionsConstraint", module.getName(),
885                            implementation.getIdentifier() ),
886                        new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
887 
888                }
889            }
890        }
891 
892        if ( implementation.getDependencies() != null )
893        {
894            this.assertValidToolsTypes( context, module, implementation, implementation.getDependencies(), report );
895        }
896 
897        if ( implementation.getMessages() != null )
898        {
899            this.assertValidToolsTypes( context, module, implementation, implementation.getMessages(), report );
900        }
901    }
902 
903    private void assertValidToolsTypes( final ModelContext context, final Module module,
904                                        final Implementation implementation, final Dependencies dependencies,
905                                        final ModelValidationReport report )
906    {
907        for ( final Dependency d : dependencies.getDependency() )
908        {
909            final List<SourceFileType> sourceFileType = d.getAnyObjects( SourceFileType.class );
910            final List<SourceFilesType> sourceFilesType = d.getAnyObjects( SourceFilesType.class );
911            final List<SourceSectionType> sourceSectionType = d.getAnyObjects( SourceSectionType.class );
912            final List<SourceSectionsType> sourceSectionsType = d.getAnyObjects( SourceSectionsType.class );
913 
914            if ( sourceFileType != null )
915            {
916                for ( final SourceFileType s : sourceFileType )
917                {
918                    report.getDetails().add( new ModelValidationReport.Detail(
919                        "IMPLEMENTATION_DEPENDENCY_SOURCE_FILE_CONSTRAINT", Level.SEVERE, getMessage(
920                            "dependencySourceFileConstraint", module.getName(), implementation.getIdentifier(),
921                            d.getName(), s.getIdentifier() ),
922                        new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
923 
924                    if ( this.isValidateJava() )
925                    {
926                        for ( final TemplateParameterType p : s.getTemplateParameter() )
927                        {
928                            try
929                            {
930                                p.getJavaValue( context.getClassLoader() );
931                            }
932                            catch ( final ModelObjectException e )
933                            {
934                                final String message = getMessage( e );
935 
936                                if ( context.isLoggable( Level.FINE ) )
937                                {
938                                    context.log( Level.FINE, message, e );
939                                }
940 
941                                report.getDetails().add( new ModelValidationReport.Detail(
942                                    "IMPLEMENTATION_DEPENDENCY_SOURCE_FILE_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
943                                    Level.SEVERE, getMessage(
944                                        "dependencySourceFileTemplateParameterJavaValueConstraint",
945                                        module.getName(), implementation.getIdentifier(), d.getName(),
946                                        s.getIdentifier(), p.getName(),
947                                        message != null && message.length() > 0 ? " " + message : "" ),
948                                    new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
949 
950                            }
951                        }
952                    }
953 
954                    this.validateTemplateParameters(
955                        report, context, s.getSourceSections(),
956                        "IMPLEMENTATION_DEPENDENCY_SOURCE_FILE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
957                        new org.jomc.model.ObjectFactory().createImplementation( implementation ),
958                        "dependencySourceFileSectionTemplateParameterJavaValueConstraint",
959                        module.getName(), implementation.getIdentifier(), d.getName(), s.getIdentifier() );
960 
961                }
962            }
963 
964            if ( sourceFilesType != null )
965            {
966                for ( final SourceFilesType files : sourceFilesType )
967                {
968                    for ( final SourceFileType s : files.getSourceFile() )
969                    {
970                        report.getDetails().add( new ModelValidationReport.Detail(
971                            "IMPLEMENTATION_DEPENDENCY_SOURCE_FILE_CONSTRAINT", Level.SEVERE, getMessage(
972                                "dependencySourceFileConstraint", module.getName(), implementation.getIdentifier(),
973                                d.getName(), s.getIdentifier() ),
974                            new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
975 
976                        if ( this.isValidateJava() )
977                        {
978                            for ( final TemplateParameterType p : s.getTemplateParameter() )
979                            {
980                                try
981                                {
982                                    p.getJavaValue( context.getClassLoader() );
983                                }
984                                catch ( final ModelObjectException e )
985                                {
986                                    final String message = getMessage( e );
987 
988                                    if ( context.isLoggable( Level.FINE ) )
989                                    {
990                                        context.log( Level.FINE, message, e );
991                                    }
992 
993                                    report.getDetails().add( new ModelValidationReport.Detail(
994                                        "IMPLEMENTATION_DEPENDENCY_SOURCE_FILE_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
995                                        Level.SEVERE, getMessage(
996                                            "dependencySourceFileTemplateParameterJavaValueConstraint",
997                                            module.getName(), implementation.getIdentifier(), d.getName(),
998                                            s.getIdentifier(), p.getName(),
999                                            message != null && message.length() > 0 ? " " + message : "" ),
1000                                        new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
1001 
1002                                }
1003                            }
1004                        }
1005 
1006                        this.validateTemplateParameters(
1007                            report, context, s.getSourceSections(),
1008                            "IMPLEMENTATION_DEPENDENCY_SOURCE_FILE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
1009                            new org.jomc.model.ObjectFactory().createImplementation( implementation ),
1010                            "dependencySourceFileSectionTemplateParameterJavaValueConstraint",
1011                            module.getName(), implementation.getIdentifier(), d.getName(), s.getIdentifier() );
1012 
1013                    }
1014 
1015                    if ( files.getSourceFile().isEmpty() )
1016                    {
1017                        report.getDetails().add( new ModelValidationReport.Detail(
1018                            "IMPLEMENTATION_DEPENDENCY_SOURCE_FILES_CONSTRAINT", Level.SEVERE, getMessage(
1019                                "dependencySourceFilesConstraint", module.getName(), implementation.getIdentifier(),
1020                                d.getName() ),
1021                            new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
1022 
1023                    }
1024                }
1025            }
1026 
1027            if ( sourceSectionType != null )
1028            {
1029                for ( final SourceSectionType s : sourceSectionType )
1030                {
1031                    report.getDetails().add( new ModelValidationReport.Detail(
1032                        "IMPLEMENTATION_DEPENDENCY_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage(
1033                            "dependencySourceSectionConstraint", module.getName(), implementation.getIdentifier(),
1034                            d.getName(), s.getName() ),
1035                        new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
1036 
1037                    if ( this.isValidateJava() )
1038                    {
1039                        for ( final TemplateParameterType p : s.getTemplateParameter() )
1040                        {
1041                            try
1042                            {
1043                                p.getJavaValue( context.getClassLoader() );
1044                            }
1045                            catch ( final ModelObjectException e )
1046                            {
1047                                final String message = getMessage( e );
1048 
1049                                if ( context.isLoggable( Level.FINE ) )
1050                                {
1051                                    context.log( Level.FINE, message, e );
1052                                }
1053 
1054                                report.getDetails().add( new ModelValidationReport.Detail(
1055                                    "IMPLEMENTATION_DEPENDENCY_SOURCE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
1056                                    Level.SEVERE, getMessage(
1057                                        "dependencySourceSectionTemplateParameterJavaValueConstraint",
1058                                        module.getName(), implementation.getIdentifier(), d.getName(),
1059                                        s.getName(), p.getName(),
1060                                        message != null && message.length() > 0 ? " " + message : "" ),
1061                                    new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
1062 
1063                            }
1064                        }
1065                    }
1066 
1067                    this.validateTemplateParameters(
1068                        report, context, s.getSourceSections(),
1069                        "IMPLEMENTATION_DEPENDENCY_SOURCE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
1070                        new org.jomc.model.ObjectFactory().createImplementation( implementation ),
1071                        "dependencySourceSectionTemplateParameterJavaValueConstraint",
1072                        module.getName(), implementation.getIdentifier(), d.getName() );
1073 
1074                }
1075            }
1076 
1077            if ( sourceSectionsType != null )
1078            {
1079                for ( final SourceSectionsType sections : sourceSectionsType )
1080                {
1081                    for ( final SourceSectionType s : sections.getSourceSection() )
1082                    {
1083                        report.getDetails().add( new ModelValidationReport.Detail(
1084                            "IMPLEMENTATION_DEPENDENCY_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage(
1085                                "dependencySourceSectionConstraint", module.getName(), implementation.getIdentifier(),
1086                                d.getName(), s.getName() ),
1087                            new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
1088 
1089                        if ( this.isValidateJava() )
1090                        {
1091                            for ( final TemplateParameterType p : s.getTemplateParameter() )
1092                            {
1093                                try
1094                                {
1095                                    p.getJavaValue( context.getClassLoader() );
1096                                }
1097                                catch ( final ModelObjectException e )
1098                                {
1099                                    final String message = getMessage( e );
1100 
1101                                    if ( context.isLoggable( Level.FINE ) )
1102                                    {
1103                                        context.log( Level.FINE, message, e );
1104                                    }
1105 
1106                                    report.getDetails().add( new ModelValidationReport.Detail(
1107                                        "IMPLEMENTATION_DEPENDENCY_SOURCE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
1108                                        Level.SEVERE, getMessage(
1109                                            "dependencySourceSectionTemplateParameterJavaValueConstraint",
1110                                            module.getName(), implementation.getIdentifier(), d.getName(),
1111                                            s.getName(), p.getName(),
1112                                            message != null && message.length() > 0 ? " " + message : "" ),
1113                                        new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
1114 
1115                                }
1116                            }
1117                        }
1118 
1119                        this.validateTemplateParameters(
1120                            report, context, s.getSourceSections(),
1121                            "IMPLEMENTATION_DEPENDENCY_SOURCE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
1122                            new org.jomc.model.ObjectFactory().createImplementation( implementation ),
1123                            "dependencySourceSectionTemplateParameterJavaValueConstraint",
1124                            module.getName(), implementation.getIdentifier(), d.getName() );
1125 
1126                    }
1127 
1128                    if ( sections.getSourceSection().isEmpty() )
1129                    {
1130                        report.getDetails().add( new ModelValidationReport.Detail(
1131                            "IMPLEMENTATION_DEPENDENCY_SOURCE_SECTIONS_CONSTRAINT", Level.SEVERE, getMessage(
1132                                "dependencySourceSectionsConstraint", module.getName(), implementation.getIdentifier(),
1133                                d.getName() ),
1134                            new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
1135 
1136                    }
1137                }
1138            }
1139        }
1140    }
1141 
1142    private void assertValidToolsTypes( final ModelContext context, final Module module,
1143                                        final Implementation implementation, final Messages messages,
1144                                        final ModelValidationReport report )
1145    {
1146        for ( final Message m : messages.getMessage() )
1147        {
1148            final List<SourceFileType> sourceFileType = m.getAnyObjects( SourceFileType.class );
1149            final List<SourceFilesType> sourceFilesType = m.getAnyObjects( SourceFilesType.class );
1150            final List<SourceSectionType> sourceSectionType = m.getAnyObjects( SourceSectionType.class );
1151            final List<SourceSectionsType> sourceSectionsType = m.getAnyObjects( SourceSectionsType.class );
1152 
1153            if ( sourceFileType != null )
1154            {
1155                for ( final SourceFileType s : sourceFileType )
1156                {
1157                    report.getDetails().add( new ModelValidationReport.Detail(
1158                        "IMPLEMENTATION_MESSAGE_SOURCE_FILE_CONSTRAINT", Level.SEVERE, getMessage(
1159                            "messageSourceFileConstraint", module.getName(), implementation.getIdentifier(),
1160                            m.getName(), s.getIdentifier() ),
1161                        new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
1162 
1163                    if ( this.isValidateJava() )
1164                    {
1165                        for ( final TemplateParameterType p : s.getTemplateParameter() )
1166                        {
1167                            try
1168                            {
1169                                p.getJavaValue( context.getClassLoader() );
1170                            }
1171                            catch ( final ModelObjectException e )
1172                            {
1173                                final String message = getMessage( e );
1174 
1175                                if ( context.isLoggable( Level.FINE ) )
1176                                {
1177                                    context.log( Level.FINE, message, e );
1178                                }
1179 
1180                                report.getDetails().add( new ModelValidationReport.Detail(
1181                                    "IMPLEMENTATION_MESSAGE_SOURCE_FILE_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
1182                                    Level.SEVERE, getMessage(
1183                                        "messageSourceFileTemplateParameterJavaValueConstraint",
1184                                        module.getName(), implementation.getIdentifier(), m.getName(),
1185                                        s.getIdentifier(), p.getName(),
1186                                        message != null && message.length() > 0 ? " " + message : "" ),
1187                                    new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
1188 
1189                            }
1190                        }
1191                    }
1192 
1193                    this.validateTemplateParameters(
1194                        report, context, s.getSourceSections(),
1195                        "IMPLEMENTATION_MESSAGE_SOURCE_FILE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
1196                        new org.jomc.model.ObjectFactory().createImplementation( implementation ),
1197                        "messageSourceFileSectionTemplateParameterJavaValueConstraint",
1198                        module.getName(), implementation.getIdentifier(), m.getName(), s.getIdentifier() );
1199 
1200                }
1201            }
1202 
1203            if ( sourceFilesType != null )
1204            {
1205                for ( final SourceFilesType files : sourceFilesType )
1206                {
1207                    for ( final SourceFileType s : files.getSourceFile() )
1208                    {
1209                        report.getDetails().add( new ModelValidationReport.Detail(
1210                            "IMPLEMENTATION_MESSAGE_SOURCE_FILE_CONSTRAINT", Level.SEVERE, getMessage(
1211                                "messageSourceFileConstraint", module.getName(), implementation.getIdentifier(),
1212                                m.getName(), s.getIdentifier() ),
1213                            new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
1214 
1215                        if ( this.isValidateJava() )
1216                        {
1217                            for ( final TemplateParameterType p : s.getTemplateParameter() )
1218                            {
1219                                try
1220                                {
1221                                    p.getJavaValue( context.getClassLoader() );
1222                                }
1223                                catch ( final ModelObjectException e )
1224                                {
1225                                    final String message = getMessage( e );
1226 
1227                                    if ( context.isLoggable( Level.FINE ) )
1228                                    {
1229                                        context.log( Level.FINE, message, e );
1230                                    }
1231 
1232                                    report.getDetails().add( new ModelValidationReport.Detail(
1233                                        "IMPLEMENTATION_MESSAGE_SOURCE_FILE_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
1234                                        Level.SEVERE, getMessage(
1235                                            "messageSourceFileTemplateParameterJavaValueConstraint",
1236                                            module.getName(), implementation.getIdentifier(), m.getName(),
1237                                            s.getIdentifier(), p.getName(),
1238                                            message != null && message.length() > 0 ? " " + message : "" ),
1239                                        new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
1240 
1241                                }
1242                            }
1243                        }
1244 
1245                        this.validateTemplateParameters(
1246                            report, context, s.getSourceSections(),
1247                            "IMPLEMENTATION_MESSAGE_SOURCE_FILE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
1248                            new org.jomc.model.ObjectFactory().createImplementation( implementation ),
1249                            "messageSourceFileSectionTemplateParameterJavaValueConstraint",
1250                            module.getName(), implementation.getIdentifier(), m.getName(), s.getIdentifier() );
1251 
1252                    }
1253 
1254                    if ( files.getSourceFile().isEmpty() )
1255                    {
1256                        report.getDetails().add( new ModelValidationReport.Detail(
1257                            "IMPLEMENTATION_MESSAGE_SOURCE_FILES_CONSTRAINT", Level.SEVERE, getMessage(
1258                                "messageSourceFilesConstraint", module.getName(), implementation.getIdentifier(),
1259                                m.getName() ),
1260                            new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
1261 
1262                    }
1263                }
1264            }
1265 
1266            if ( sourceSectionType != null )
1267            {
1268                for ( final SourceSectionType s : sourceSectionType )
1269                {
1270                    report.getDetails().add( new ModelValidationReport.Detail(
1271                        "IMPLEMENTATION_MESSAGE_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage(
1272                            "messageSourceSectionConstraint", module.getName(), implementation.getIdentifier(),
1273                            m.getName(), s.getName() ),
1274                        new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
1275 
1276                    if ( this.isValidateJava() )
1277                    {
1278                        for ( final TemplateParameterType p : s.getTemplateParameter() )
1279                        {
1280                            try
1281                            {
1282                                p.getJavaValue( context.getClassLoader() );
1283                            }
1284                            catch ( final ModelObjectException e )
1285                            {
1286                                final String message = getMessage( e );
1287 
1288                                if ( context.isLoggable( Level.FINE ) )
1289                                {
1290                                    context.log( Level.FINE, message, e );
1291                                }
1292 
1293                                report.getDetails().add( new ModelValidationReport.Detail(
1294                                    "IMPLEMENTATION_MESSAGE_SOURCE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
1295                                    Level.SEVERE, getMessage(
1296                                        "messageSourceSectionTemplateParameterJavaValueConstraint",
1297                                        module.getName(), implementation.getIdentifier(), m.getName(),
1298                                        s.getName(), p.getName(),
1299                                        message != null && message.length() > 0 ? " " + message : "" ),
1300                                    new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
1301 
1302                            }
1303                        }
1304                    }
1305 
1306                    this.validateTemplateParameters(
1307                        report, context, s.getSourceSections(),
1308                        "IMPLEMENTATION_MESSAGE_SOURCE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
1309                        new org.jomc.model.ObjectFactory().createImplementation( implementation ),
1310                        "messageSourceSectionTemplateParameterJavaValueConstraint",
1311                        module.getName(), implementation.getIdentifier(), m.getName() );
1312 
1313                }
1314            }
1315 
1316            if ( sourceSectionsType != null )
1317            {
1318                for ( final SourceSectionsType sections : sourceSectionsType )
1319                {
1320                    for ( final SourceSectionType s : sections.getSourceSection() )
1321                    {
1322                        report.getDetails().add( new ModelValidationReport.Detail(
1323                            "IMPLEMENTATION_MESSAGE_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage(
1324                                "messageSourceSectionConstraint", module.getName(), implementation.getIdentifier(),
1325                                m.getName(), s.getName() ),
1326                            new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
1327 
1328                        if ( this.isValidateJava() )
1329                        {
1330                            for ( final TemplateParameterType p : s.getTemplateParameter() )
1331                            {
1332                                try
1333                                {
1334                                    p.getJavaValue( context.getClassLoader() );
1335                                }
1336                                catch ( final ModelObjectException e )
1337                                {
1338                                    final String message = getMessage( e );
1339 
1340                                    if ( context.isLoggable( Level.FINE ) )
1341                                    {
1342                                        context.log( Level.FINE, message, e );
1343                                    }
1344 
1345                                    report.getDetails().add( new ModelValidationReport.Detail(
1346                                        "IMPLEMENTATION_MESSAGE_SOURCE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
1347                                        Level.SEVERE, getMessage(
1348                                            "messageSourceSectionTemplateParameterJavaValueConstraint",
1349                                            module.getName(), implementation.getIdentifier(), m.getName(),
1350                                            s.getName(), p.getName(),
1351                                            message != null && message.length() > 0 ? " " + message : "" ),
1352                                        new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
1353 
1354                                }
1355                            }
1356                        }
1357 
1358                        this.validateTemplateParameters(
1359                            report, context, s.getSourceSections(),
1360                            "IMPLEMENTATION_MESSAGE_SOURCE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
1361                            new org.jomc.model.ObjectFactory().createImplementation( implementation ),
1362                            "messageSourceSectionTemplateParameterJavaValueConstraint",
1363                            module.getName(), implementation.getIdentifier(), m.getName() );
1364 
1365                    }
1366 
1367                    if ( sections.getSourceSection().isEmpty() )
1368                    {
1369                        report.getDetails().add( new ModelValidationReport.Detail(
1370                            "IMPLEMENTATION_MESSAGE_SOURCE_SECTIONS_CONSTRAINT", Level.SEVERE, getMessage(
1371                                "messageSourceSectionsConstraint", module.getName(), implementation.getIdentifier(),
1372                                m.getName() ),
1373                            new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) );
1374 
1375                    }
1376                }
1377            }
1378        }
1379    }
1380 
1381    private void assertValidToolsTypes( final ModelContext context, final Module module,
1382                                        final Specification specification, final ModelValidationReport report )
1383    {
1384        final List<SourceFileType> sourceFileType = specification.getAnyObjects( SourceFileType.class );
1385        final List<SourceFilesType> sourceFilesType = specification.getAnyObjects( SourceFilesType.class );
1386        final List<SourceSectionType> sourceSectionType = specification.getAnyObjects( SourceSectionType.class );
1387        final List<SourceSectionsType> sourceSectionsType = specification.getAnyObjects( SourceSectionsType.class );
1388 
1389        if ( sourceFileType != null )
1390        {
1391            for ( final SourceFileType s : sourceFileType )
1392            {
1393                if ( this.isValidateJava() )
1394                {
1395                    for ( final TemplateParameterType p : s.getTemplateParameter() )
1396                    {
1397                        try
1398                        {
1399                            p.getJavaValue( context.getClassLoader() );
1400                        }
1401                        catch ( final ModelObjectException e )
1402                        {
1403                            final String message = getMessage( e );
1404 
1405                            if ( context.isLoggable( Level.FINE ) )
1406                            {
1407                                context.log( Level.FINE, message, e );
1408                            }
1409 
1410                            report.getDetails().add( new ModelValidationReport.Detail(
1411                                "SPECIFICATION_SOURCE_FILE_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
1412                                Level.SEVERE, getMessage(
1413                                    "specificationSourceFileTemplateParameterJavaValueConstraint",
1414                                    module.getName(), specification.getIdentifier(), s.getIdentifier(), p.getName(),
1415                                    message != null && message.length() > 0 ? " " + message : "" ),
1416                                new org.jomc.model.ObjectFactory().createSpecification( specification ) ) );
1417 
1418                        }
1419                    }
1420                }
1421 
1422                this.validateTemplateParameters(
1423                    report, context, s.getSourceSections(),
1424                    "SPECIFICATION_SOURCE_FILE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
1425                    new org.jomc.model.ObjectFactory().createSpecification( specification ),
1426                    "specificationSourceFileSectionTemplateParameterJavaValueConstraint",
1427                    module.getName(), specification.getIdentifier(), s.getIdentifier() );
1428 
1429            }
1430 
1431            if ( sourceFileType.size() > 1 )
1432            {
1433                report.getDetails().add( new ModelValidationReport.Detail(
1434                    "SPECIFICATION_SOURCE_FILE_MULTIPLICITY_CONSTRAINT", Level.SEVERE, getMessage(
1435                        "specificationSourceFileMultiplicityConstraint", module.getName(),
1436                        specification.getIdentifier(), sourceFileType.size() ),
1437                    new org.jomc.model.ObjectFactory().createSpecification( specification ) ) );
1438 
1439            }
1440            else if ( sourceFileType.size() == 1 )
1441            {
1442                report.getDetails().add( new ModelValidationReport.Detail(
1443                    "SPECIFICATION_SOURCE_FILE_INFORMATION", Level.INFO, getMessage(
1444                        "specificationSourceFileInfo", module.getName(), specification.getIdentifier(),
1445                        sourceFileType.get( 0 ).getIdentifier() ),
1446                    new org.jomc.model.ObjectFactory().createSpecification( specification ) ) );
1447 
1448            }
1449        }
1450 
1451        if ( sourceFilesType != null )
1452        {
1453            for ( final SourceFilesType l : sourceFilesType )
1454            {
1455                for ( final SourceFileType s : l.getSourceFile() )
1456                {
1457                    if ( this.isValidateJava() )
1458                    {
1459                        for ( final TemplateParameterType p : s.getTemplateParameter() )
1460                        {
1461                            try
1462                            {
1463                                p.getJavaValue( context.getClassLoader() );
1464                            }
1465                            catch ( final ModelObjectException e )
1466                            {
1467                                final String message = getMessage( e );
1468 
1469                                if ( context.isLoggable( Level.FINE ) )
1470                                {
1471                                    context.log( Level.FINE, message, e );
1472                                }
1473 
1474                                report.getDetails().add( new ModelValidationReport.Detail(
1475                                    "SPECIFICATION_SOURCE_FILE_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
1476                                    Level.SEVERE, getMessage(
1477                                        "specificationSourceFileTemplateParameterJavaValueConstraint",
1478                                        module.getName(), specification.getIdentifier(), s.getIdentifier(), p.getName(),
1479                                        message != null && message.length() > 0 ? " " + message : "" ),
1480                                    new org.jomc.model.ObjectFactory().createSpecification( specification ) ) );
1481 
1482                            }
1483                        }
1484                    }
1485 
1486                    this.validateTemplateParameters(
1487                        report, context, s.getSourceSections(),
1488                        "SPECIFICATION_SOURCE_FILE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
1489                        new org.jomc.model.ObjectFactory().createSpecification( specification ),
1490                        "specificationSourceFileSectionTemplateParameterJavaValueConstraint",
1491                        module.getName(), specification.getIdentifier(), s.getIdentifier() );
1492 
1493                }
1494            }
1495 
1496            if ( sourceFilesType.size() > 1 )
1497            {
1498                report.getDetails().add( new ModelValidationReport.Detail(
1499                    "SPECIFICATION_SOURCE_FILES_MULTIPLICITY_CONSTRAINT", Level.SEVERE, getMessage(
1500                        "specificationSourceFilesMultiplicityConstraint", module.getName(),
1501                        specification.getIdentifier(), sourceFilesType.size() ),
1502                    new org.jomc.model.ObjectFactory().createSpecification( specification ) ) );
1503 
1504            }
1505        }
1506 
1507        if ( sourceSectionType != null )
1508        {
1509            for ( final SourceSectionType s : sourceSectionType )
1510            {
1511                report.getDetails().add( new ModelValidationReport.Detail(
1512                    "SPECIFICATION_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage(
1513                        "specificationSourceSectionConstraint", specification.getIdentifier(), s.getName() ),
1514                    new org.jomc.model.ObjectFactory().createSpecification( specification ) ) );
1515 
1516                if ( this.isValidateJava() )
1517                {
1518                    for ( final TemplateParameterType p : s.getTemplateParameter() )
1519                    {
1520                        try
1521                        {
1522                            p.getJavaValue( context.getClassLoader() );
1523                        }
1524                        catch ( final ModelObjectException e )
1525                        {
1526                            final String message = getMessage( e );
1527 
1528                            if ( context.isLoggable( Level.FINE ) )
1529                            {
1530                                context.log( Level.FINE, message, e );
1531                            }
1532 
1533                            report.getDetails().add( new ModelValidationReport.Detail(
1534                                "SPECIFICATION_SOURCE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
1535                                Level.SEVERE, getMessage(
1536                                    "specificationSourceSectionTemplateParameterJavaValueConstraint",
1537                                    module.getName(), specification.getIdentifier(), s.getName(), p.getName(),
1538                                    message != null && message.length() > 0 ? " " + message : "" ),
1539                                new org.jomc.model.ObjectFactory().createSpecification( specification ) ) );
1540 
1541                        }
1542                    }
1543                }
1544 
1545                this.validateTemplateParameters(
1546                    report, context, s.getSourceSections(),
1547                    "SPECIFICATION_SOURCE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
1548                    new org.jomc.model.ObjectFactory().createSpecification( specification ),
1549                    "specificationSourceSectionTemplateParameterJavaValueConstraint",
1550                    module.getName(), specification.getIdentifier() );
1551 
1552            }
1553        }
1554 
1555        if ( sourceSectionsType != null )
1556        {
1557            for ( final SourceSectionsType sections : sourceSectionsType )
1558            {
1559                for ( final SourceSectionType s : sections.getSourceSection() )
1560                {
1561                    report.getDetails().add( new ModelValidationReport.Detail(
1562                        "SPECIFICATION_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage(
1563                            "specificationSourceSectionConstraint", specification.getIdentifier(), s.getName() ),
1564                        new org.jomc.model.ObjectFactory().createSpecification( specification ) ) );
1565 
1566                    if ( this.isValidateJava() )
1567                    {
1568                        for ( final TemplateParameterType p : s.getTemplateParameter() )
1569                        {
1570                            try
1571                            {
1572                                p.getJavaValue( context.getClassLoader() );
1573                            }
1574                            catch ( final ModelObjectException e )
1575                            {
1576                                final String message = getMessage( e );
1577 
1578                                if ( context.isLoggable( Level.FINE ) )
1579                                {
1580                                    context.log( Level.FINE, message, e );
1581                                }
1582 
1583                                report.getDetails().add( new ModelValidationReport.Detail(
1584                                    "SPECIFICATION_SOURCE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
1585                                    Level.SEVERE, getMessage(
1586                                        "specificationSourceSectionTemplateParameterJavaValueConstraint",
1587                                        module.getName(), specification.getIdentifier(), s.getName(), p.getName(),
1588                                        message != null && message.length() > 0 ? " " + message : "" ),
1589                                    new org.jomc.model.ObjectFactory().createSpecification( specification ) ) );
1590 
1591                            }
1592                        }
1593                    }
1594 
1595                    this.validateTemplateParameters(
1596                        report, context, s.getSourceSections(),
1597                        "SPECIFICATION_SOURCE_SECTION_TEMPLATE_PARAMETER_JAVA_VALUE_CONSTRAINT",
1598                        new org.jomc.model.ObjectFactory().createSpecification( specification ),
1599                        "specificationSourceSectionTemplateParameterJavaValueConstraint",
1600                        module.getName(), specification.getIdentifier() );
1601 
1602                }
1603 
1604                if ( sections.getSourceSection().isEmpty() )
1605                {
1606                    report.getDetails().add( new ModelValidationReport.Detail(
1607                        "SPECIFICATION_SOURCE_SECTIONS_CONSTRAINT", Level.SEVERE, getMessage(
1608                            "specificationSourceSectionsConstraint", specification.getIdentifier() ),
1609                        new org.jomc.model.ObjectFactory().createSpecification( specification ) ) );
1610 
1611                }
1612            }
1613        }
1614    }
1615 
1616    private void validateTemplateParameters( final ModelValidationReport report, final ModelContext context,
1617                                             final SourceSectionsType sourceSectionsType,
1618                                             final String detailIdentifier,
1619                                             final JAXBElement<?> detailElement,
1620                                             final String messageKey, final Object... messageArguments )
1621    {
1622        if ( sourceSectionsType != null )
1623        {
1624            if ( this.isValidateJava() )
1625            {
1626                for ( final SourceSectionType s : sourceSectionsType.getSourceSection() )
1627                {
1628                    for ( final TemplateParameterType p : s.getTemplateParameter() )
1629                    {
1630                        try
1631                        {
1632                            p.getJavaValue( context.getClassLoader() );
1633                        }
1634                        catch ( final ModelObjectException e )
1635                        {
1636                            final String message = getMessage( e );
1637 
1638                            if ( context.isLoggable( Level.FINE ) )
1639                            {
1640                                context.log( Level.FINE, message, e );
1641                            }
1642 
1643                            final List<Object> arguments = new ArrayList<Object>( Arrays.asList( messageArguments ) );
1644                            arguments.add( s.getName() );
1645                            arguments.add( p.getName() );
1646                            arguments.add( message != null && message.length() > 0 ? " " + message : "" );
1647 
1648                            report.getDetails().add( new ModelValidationReport.Detail(
1649                                detailIdentifier, Level.SEVERE, getMessage(
1650                                    messageKey, arguments.toArray( new Object[ arguments.size() ] ) ),
1651                                detailElement ) );
1652 
1653                        }
1654                    }
1655 
1656                    this.validateTemplateParameters( report, context, s.getSourceSections(), detailIdentifier,
1657                                                     detailElement, messageKey, messageArguments );
1658 
1659                }
1660            }
1661        }
1662    }
1663 
1664    private static String getMessage( final String key, final Object... args )
1665    {
1666        return MessageFormat.format( ResourceBundle.getBundle(
1667            ToolsModelValidator.class.getName().replace( '.', '/' ), Locale.getDefault() ).getString( key ), args );
1668 
1669    }
1670 
1671    private static String getMessage( final Throwable t )
1672    {
1673        return t != null
1674                   ? t.getMessage() != null && t.getMessage().trim().length() > 0
1675                         ? t.getMessage()
1676                         : getMessage( t.getCause() )
1677                   : null;
1678 
1679    }
1680 
1681}

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