001/* 002 * Copyright (C) Christian Schulte, 2005-206 003 * All rights reserved. 004 * 005 * Redistribution and use in source and binary forms, with or without 006 * modification, are permitted provided that the following conditions 007 * are met: 008 * 009 * o Redistributions of source code must retain the above copyright 010 * notice, this list of conditions and the following disclaimer. 011 * 012 * o Redistributions in binary form must reproduce the above copyright 013 * notice, this list of conditions and the following disclaimer in 014 * the documentation and/or other materials provided with the 015 * distribution. 016 * 017 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, 018 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY 019 * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 020 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY DIRECT, INDIRECT, 021 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 022 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 023 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 024 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 025 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 026 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 027 * 028 * $JOMC: ToolsModelValidator.java 4861 2014-02-13 23:23:29Z schulte $ 029 * 030 */ 031package org.jomc.tools.modlet; 032 033import java.text.MessageFormat; 034import java.util.ArrayList; 035import java.util.Arrays; 036import java.util.List; 037import java.util.Locale; 038import java.util.ResourceBundle; 039import java.util.logging.Level; 040import javax.xml.bind.JAXBElement; 041import org.jomc.model.Dependencies; 042import org.jomc.model.Dependency; 043import org.jomc.model.Implementation; 044import org.jomc.model.Message; 045import org.jomc.model.Messages; 046import org.jomc.model.ModelObjectException; 047import org.jomc.model.Module; 048import org.jomc.model.Modules; 049import org.jomc.model.Specification; 050import org.jomc.model.modlet.ModelHelper; 051import org.jomc.modlet.Model; 052import org.jomc.modlet.ModelContext; 053import org.jomc.modlet.ModelException; 054import org.jomc.modlet.ModelValidationReport; 055import org.jomc.modlet.ModelValidator; 056import org.jomc.tools.model.ObjectFactory; 057import org.jomc.tools.model.SourceFileType; 058import org.jomc.tools.model.SourceFilesType; 059import org.jomc.tools.model.SourceSectionType; 060import org.jomc.tools.model.SourceSectionsType; 061import org.jomc.tools.model.TemplateParameterType; 062 063/** 064 * Object management and configuration tools {@code ModelValidator} implementation. 065 * 066 * @author <a href="mailto:cs@schulte.it">Christian Schulte</a> 067 * @version $JOMC: ToolsModelValidator.java 4861 2014-02-13 23:23:29Z schulte $ 068 * @see ModelContext#validateModel(org.jomc.modlet.Model) 069 * @since 1.2 070 */ 071public class ToolsModelValidator implements ModelValidator 072{ 073 074 /** 075 * Constant for the name of the model context attribute backing property {@code validateJava}. 076 * @see ModelContext#getAttribute(java.lang.String) 077 * @since 1.6 078 */ 079 public static final String VALIDATE_JAVA_ATTRIBUTE_NAME = 080 "org.jomc.tools.modlet.ToolsModelValidator.validateJavaAttribute"; 081 082 /** 083 * Constant for the name of the system property controlling property {@code defaultValidateJava}. 084 * @see #isDefaultValidateJava() 085 * @since 1.6 086 */ 087 private static final String DEFAULT_VALIDATE_JAVA_PROPERTY_NAME = 088 "org.jomc.tools.modlet.ToolsModelValidator.defaultValidateJava"; 089 090 /** 091 * Default value of the flag indicating the validator is performing Java related validation by default. 092 * @see #isDefaultValidateJava() 093 * @since 1.6 094 */ 095 private static final Boolean DEFAULT_VALIDATE_JAVA = Boolean.TRUE; 096 097 /** 098 * Flag indicating the validator is performing Java related validation by default. 099 * @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}