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 3838 2011-10-08 20:15:41Z schulte2005 $ 029 * 030 */ 031 package org.jomc.tools.modlet; 032 033 import java.text.MessageFormat; 034 import java.util.List; 035 import java.util.Locale; 036 import java.util.ResourceBundle; 037 import java.util.logging.Level; 038 import org.jomc.model.Dependencies; 039 import org.jomc.model.Dependency; 040 import org.jomc.model.Implementation; 041 import org.jomc.model.Message; 042 import org.jomc.model.Messages; 043 import org.jomc.model.Module; 044 import org.jomc.model.Modules; 045 import org.jomc.model.Specification; 046 import org.jomc.model.modlet.ModelHelper; 047 import org.jomc.modlet.Model; 048 import org.jomc.modlet.ModelContext; 049 import org.jomc.modlet.ModelException; 050 import org.jomc.modlet.ModelValidationReport; 051 import org.jomc.modlet.ModelValidator; 052 import org.jomc.tools.model.ObjectFactory; 053 import org.jomc.tools.model.SourceFileType; 054 import org.jomc.tools.model.SourceFilesType; 055 import org.jomc.tools.model.SourceSectionType; 056 import org.jomc.tools.model.SourceSectionsType; 057 058 /** 059 * Object management and configuration tools {@code ModelValidator} implementation. 060 * 061 * @author <a href="mailto:schulte2005@users.sourceforge.net">Christian Schulte</a> 062 * @version $JOMC: ToolsModelValidator.java 3838 2011-10-08 20:15:41Z schulte2005 $ 063 * @see ModelContext#validateModel(org.jomc.modlet.Model) 064 * @since 1.2 065 */ 066 public class ToolsModelValidator implements ModelValidator 067 { 068 069 /** Creates a new {@code ToolsModelValidator} instance. */ 070 public ToolsModelValidator() 071 { 072 super(); 073 } 074 075 public ModelValidationReport validateModel( final ModelContext context, final Model model ) throws ModelException 076 { 077 if ( context == null ) 078 { 079 throw new NullPointerException( "context" ); 080 } 081 if ( model == null ) 082 { 083 throw new NullPointerException( "model" ); 084 } 085 086 final ModelValidationReport report = new ModelValidationReport(); 087 this.assertValidToolsTypes( model, report ); 088 return report; 089 } 090 091 private void assertValidToolsTypes( final Model model, final ModelValidationReport report ) 092 { 093 final List<SourceFileType> sourceFileType = model.getAnyObjects( SourceFileType.class ); 094 final List<SourceFilesType> sourceFilesType = model.getAnyObjects( SourceFilesType.class ); 095 final List<SourceSectionType> sourceSectionType = model.getAnyObjects( SourceSectionType.class ); 096 final List<SourceSectionsType> sourceSectionsType = model.getAnyObjects( SourceSectionsType.class ); 097 098 if ( sourceFileType != null ) 099 { 100 for ( SourceFileType s : sourceFileType ) 101 { 102 report.getDetails().add( new ModelValidationReport.Detail( 103 "MODEL_SOURCE_FILE_CONSTRAINT", Level.SEVERE, getMessage( 104 "modelSourceFileConstraint", model.getIdentifier(), s.getIdentifier() ), 105 new ObjectFactory().createSourceFile( s ) ) ); 106 107 108 } 109 } 110 111 if ( sourceFilesType != null ) 112 { 113 for ( SourceFilesType files : sourceFilesType ) 114 { 115 for ( SourceFileType s : files.getSourceFile() ) 116 { 117 report.getDetails().add( new ModelValidationReport.Detail( 118 "MODEL_SOURCE_FILE_CONSTRAINT", Level.SEVERE, getMessage( 119 "modelSourceFileConstraint", model.getIdentifier(), s.getIdentifier() ), 120 new ObjectFactory().createSourceFile( s ) ) ); 121 122 } 123 124 if ( files.getSourceFile().isEmpty() ) 125 { 126 report.getDetails().add( new ModelValidationReport.Detail( 127 "MODEL_SOURCE_FILES_CONSTRAINT", Level.SEVERE, getMessage( 128 "modelSourceFilesConstraint", model.getIdentifier() ), 129 new ObjectFactory().createSourceFiles( files ) ) ); 130 131 } 132 } 133 } 134 135 if ( sourceSectionType != null ) 136 { 137 for ( SourceSectionType s : sourceSectionType ) 138 { 139 report.getDetails().add( new ModelValidationReport.Detail( 140 "MODEL_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage( 141 "modelSourceSectionConstraint", model.getIdentifier(), s.getName() ), 142 new ObjectFactory().createSourceSection( s ) ) ); 143 144 } 145 } 146 147 if ( sourceSectionsType != null ) 148 { 149 for ( SourceSectionsType sections : sourceSectionsType ) 150 { 151 for ( SourceSectionType s : sections.getSourceSection() ) 152 { 153 report.getDetails().add( new ModelValidationReport.Detail( 154 "MODEL_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage( 155 "modelSourceSectionConstraint", model.getIdentifier(), s.getName() ), 156 new ObjectFactory().createSourceSection( s ) ) ); 157 158 } 159 160 if ( sections.getSourceSection().isEmpty() ) 161 { 162 report.getDetails().add( new ModelValidationReport.Detail( 163 "MODEL_SOURCE_SECTIONS_CONSTRAINT", Level.SEVERE, getMessage( 164 "modelSourceSectionsConstraint", model.getIdentifier() ), 165 new ObjectFactory().createSourceSections( sections ) ) ); 166 167 } 168 } 169 } 170 171 final Modules modules = ModelHelper.getModules( model ); 172 173 if ( modules != null ) 174 { 175 this.assertValidToolsTypes( modules, report ); 176 } 177 } 178 179 private void assertValidToolsTypes( final Modules modules, final ModelValidationReport report ) 180 { 181 for ( int i = 0, s0 = modules.getModule().size(); i < s0; i++ ) 182 { 183 this.assertValidToolsTypes( modules.getModule().get( i ), report ); 184 } 185 } 186 187 private void assertValidToolsTypes( final Module module, final ModelValidationReport report ) 188 { 189 final List<SourceFileType> sourceFileType = module.getAnyObjects( SourceFileType.class ); 190 final List<SourceFilesType> sourceFilesType = module.getAnyObjects( SourceFilesType.class ); 191 final List<SourceSectionType> sourceSectionType = module.getAnyObjects( SourceSectionType.class ); 192 final List<SourceSectionsType> sourceSectionsType = module.getAnyObjects( SourceSectionsType.class ); 193 194 if ( sourceFileType != null ) 195 { 196 for ( SourceFileType s : sourceFileType ) 197 { 198 report.getDetails().add( new ModelValidationReport.Detail( 199 "MODULE_SOURCE_FILE_CONSTRAINT", Level.SEVERE, getMessage( 200 "moduleSourceFileConstraint", module.getName(), s.getIdentifier() ), 201 new ObjectFactory().createSourceFile( s ) ) ); 202 203 204 } 205 } 206 207 if ( sourceFilesType != null ) 208 { 209 for ( SourceFilesType files : sourceFilesType ) 210 { 211 for ( SourceFileType s : files.getSourceFile() ) 212 { 213 report.getDetails().add( new ModelValidationReport.Detail( 214 "MODULE_SOURCE_FILE_CONSTRAINT", Level.SEVERE, getMessage( 215 "moduleSourceFileConstraint", module.getName(), s.getIdentifier() ), 216 new ObjectFactory().createSourceFile( s ) ) ); 217 218 } 219 220 if ( files.getSourceFile().isEmpty() ) 221 { 222 report.getDetails().add( new ModelValidationReport.Detail( 223 "MODULE_SOURCE_FILES_CONSTRAINT", Level.SEVERE, getMessage( 224 "moduleSourceFilesConstraint", module.getName() ), 225 new ObjectFactory().createSourceFiles( files ) ) ); 226 227 } 228 } 229 } 230 231 if ( sourceSectionType != null ) 232 { 233 for ( SourceSectionType s : sourceSectionType ) 234 { 235 report.getDetails().add( new ModelValidationReport.Detail( 236 "MODULE_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage( 237 "moduleSourceSectionConstraint", module.getName(), s.getName() ), 238 new ObjectFactory().createSourceSection( s ) ) ); 239 240 } 241 } 242 243 if ( sourceSectionsType != null ) 244 { 245 for ( SourceSectionsType sections : sourceSectionsType ) 246 { 247 for ( SourceSectionType s : sections.getSourceSection() ) 248 { 249 report.getDetails().add( new ModelValidationReport.Detail( 250 "MODULE_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage( 251 "moduleSourceSectionConstraint", module.getName(), s.getName() ), 252 new ObjectFactory().createSourceSection( s ) ) ); 253 254 } 255 256 if ( sections.getSourceSection().isEmpty() ) 257 { 258 report.getDetails().add( new ModelValidationReport.Detail( 259 "MODULE_SOURCE_SECTIONS_CONSTRAINT", Level.SEVERE, getMessage( 260 "moduleSourceSectionsConstraint", module.getName() ), 261 new ObjectFactory().createSourceSections( sections ) ) ); 262 263 } 264 } 265 } 266 267 if ( module.getImplementations() != null ) 268 { 269 for ( int i = 0, s0 = module.getImplementations().getImplementation().size(); i < s0; i++ ) 270 { 271 this.assertValidToolsTypes( module.getImplementations().getImplementation().get( i ), report ); 272 } 273 } 274 275 if ( module.getSpecifications() != null ) 276 { 277 for ( int i = 0, s0 = module.getSpecifications().getSpecification().size(); i < s0; i++ ) 278 { 279 this.assertValidToolsTypes( module.getSpecifications().getSpecification().get( i ), report ); 280 } 281 } 282 } 283 284 private void assertValidToolsTypes( final Implementation implementation, final ModelValidationReport report ) 285 { 286 final List<SourceFileType> sourceFileType = implementation.getAnyObjects( SourceFileType.class ); 287 final List<SourceFilesType> sourceFilesType = implementation.getAnyObjects( SourceFilesType.class ); 288 final List<SourceSectionType> sourceSectionType = implementation.getAnyObjects( SourceSectionType.class ); 289 final List<SourceSectionsType> sourceSectionsType = implementation.getAnyObjects( SourceSectionsType.class ); 290 291 if ( sourceFileType != null ) 292 { 293 if ( sourceFileType.size() > 1 ) 294 { 295 report.getDetails().add( new ModelValidationReport.Detail( 296 "IMPLEMENTATION_SOURCE_FILE_MULTIPLICITY_CONSTRAINT", Level.SEVERE, getMessage( 297 "implementationSourceFileMultiplicityConstraint", implementation.getIdentifier(), 298 sourceFileType.size() ), 299 new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) ); 300 301 } 302 else if ( sourceFileType.size() == 1 ) 303 { 304 report.getDetails().add( new ModelValidationReport.Detail( 305 "IMPLEMENTATION_SOURCE_FILE_INFORMATION", Level.INFO, getMessage( 306 "implementationSourceFileInfo", implementation.getIdentifier(), 307 sourceFileType.get( 0 ).getIdentifier() ), 308 new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) ); 309 310 } 311 } 312 313 if ( sourceFilesType != null ) 314 { 315 if ( sourceFilesType.size() > 1 ) 316 { 317 report.getDetails().add( new ModelValidationReport.Detail( 318 "IMPLEMENTATION_SOURCE_FILES_MULTIPLICITY_CONSTRAINT", Level.SEVERE, getMessage( 319 "implementationSourceFilesMultiplicityConstraint", implementation.getIdentifier(), 320 sourceFilesType.size() ), 321 new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) ); 322 323 } 324 } 325 326 if ( sourceSectionType != null ) 327 { 328 for ( SourceSectionType s : sourceSectionType ) 329 { 330 report.getDetails().add( new ModelValidationReport.Detail( 331 "IMPLEMENTATION_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage( 332 "implementationSourceSectionConstraint", implementation.getIdentifier(), s.getName() ), 333 new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) ); 334 335 } 336 } 337 338 if ( sourceSectionsType != null ) 339 { 340 for ( SourceSectionsType sections : sourceSectionsType ) 341 { 342 for ( SourceSectionType s : sections.getSourceSection() ) 343 { 344 report.getDetails().add( new ModelValidationReport.Detail( 345 "IMPLEMENTATION_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage( 346 "implementationSourceSectionConstraint", implementation.getIdentifier(), s.getName() ), 347 new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) ); 348 349 } 350 351 if ( sections.getSourceSection().isEmpty() ) 352 { 353 report.getDetails().add( new ModelValidationReport.Detail( 354 "IMPLEMENTATION_SOURCE_SECTIONS_CONSTRAINT", Level.SEVERE, getMessage( 355 "implementationSourceSectionsConstraint", implementation.getIdentifier() ), 356 new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) ); 357 358 } 359 } 360 } 361 362 if ( implementation.getDependencies() != null ) 363 { 364 this.assertValidToolsTypes( implementation, implementation.getDependencies(), report ); 365 } 366 367 if ( implementation.getMessages() != null ) 368 { 369 this.assertValidToolsTypes( implementation, implementation.getMessages(), report ); 370 } 371 } 372 373 private void assertValidToolsTypes( final Implementation implementation, final Dependencies dependencies, 374 final ModelValidationReport report ) 375 { 376 for ( Dependency d : dependencies.getDependency() ) 377 { 378 final List<SourceFileType> sourceFileType = d.getAnyObjects( SourceFileType.class ); 379 final List<SourceFilesType> sourceFilesType = d.getAnyObjects( SourceFilesType.class ); 380 final List<SourceSectionType> sourceSectionType = d.getAnyObjects( SourceSectionType.class ); 381 final List<SourceSectionsType> sourceSectionsType = d.getAnyObjects( SourceSectionsType.class ); 382 383 if ( sourceFileType != null ) 384 { 385 for ( SourceFileType s : sourceFileType ) 386 { 387 report.getDetails().add( new ModelValidationReport.Detail( 388 "IMPLEMENTATION_DEPENDENCY_SOURCE_FILE_CONSTRAINT", Level.SEVERE, getMessage( 389 "dependencySourceFileConstraint", implementation.getIdentifier(), d.getName(), 390 s.getIdentifier() ), 391 new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) ); 392 393 394 } 395 } 396 397 if ( sourceFilesType != null ) 398 { 399 for ( SourceFilesType files : sourceFilesType ) 400 { 401 for ( SourceFileType s : files.getSourceFile() ) 402 { 403 report.getDetails().add( new ModelValidationReport.Detail( 404 "IMPLEMENTATION_DEPENDENCY_SOURCE_FILE_CONSTRAINT", Level.SEVERE, getMessage( 405 "dependencySourceFileConstraint", implementation.getIdentifier(), d.getName(), 406 s.getIdentifier() ), 407 new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) ); 408 409 } 410 411 if ( files.getSourceFile().isEmpty() ) 412 { 413 report.getDetails().add( new ModelValidationReport.Detail( 414 "IMPLEMENTATION_DEPENDENCY_SOURCE_FILES_CONSTRAINT", Level.SEVERE, getMessage( 415 "dependencySourceFilesConstraint", implementation.getIdentifier(), d.getName() ), 416 new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) ); 417 418 } 419 } 420 } 421 422 if ( sourceSectionType != null ) 423 { 424 for ( SourceSectionType s : sourceSectionType ) 425 { 426 report.getDetails().add( new ModelValidationReport.Detail( 427 "IMPLEMENTATION_DEPENDENCY_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage( 428 "dependencySourceSectionConstraint", implementation.getIdentifier(), d.getName(), s.getName() ), 429 new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) ); 430 431 } 432 } 433 434 if ( sourceSectionsType != null ) 435 { 436 for ( SourceSectionsType sections : sourceSectionsType ) 437 { 438 for ( SourceSectionType s : sections.getSourceSection() ) 439 { 440 report.getDetails().add( new ModelValidationReport.Detail( 441 "IMPLEMENTATION_DEPENDENCY_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage( 442 "dependencySourceSectionConstraint", implementation.getIdentifier(), d.getName(), 443 s.getName() ), 444 new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) ); 445 446 } 447 448 if ( sections.getSourceSection().isEmpty() ) 449 { 450 report.getDetails().add( new ModelValidationReport.Detail( 451 "IMPLEMENTATION_DEPENDENCY_SOURCE_SECTIONS_CONSTRAINT", Level.SEVERE, getMessage( 452 "dependencySourceSectionsConstraint", implementation.getIdentifier(), d.getName() ), 453 new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) ); 454 455 } 456 } 457 } 458 } 459 } 460 461 private void assertValidToolsTypes( final Implementation implementation, final Messages messages, 462 final ModelValidationReport report ) 463 { 464 for ( Message m : messages.getMessage() ) 465 { 466 final List<SourceFileType> sourceFileType = m.getAnyObjects( SourceFileType.class ); 467 final List<SourceFilesType> sourceFilesType = m.getAnyObjects( SourceFilesType.class ); 468 final List<SourceSectionType> sourceSectionType = m.getAnyObjects( SourceSectionType.class ); 469 final List<SourceSectionsType> sourceSectionsType = m.getAnyObjects( SourceSectionsType.class ); 470 471 if ( sourceFileType != null ) 472 { 473 for ( SourceFileType s : sourceFileType ) 474 { 475 report.getDetails().add( new ModelValidationReport.Detail( 476 "IMPLEMENTATION_MESSAGE_SOURCE_FILE_CONSTRAINT", Level.SEVERE, getMessage( 477 "messageSourceFileConstraint", implementation.getIdentifier(), m.getName(), 478 s.getIdentifier() ), 479 new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) ); 480 481 482 } 483 } 484 485 if ( sourceFilesType != null ) 486 { 487 for ( SourceFilesType files : sourceFilesType ) 488 { 489 for ( SourceFileType s : files.getSourceFile() ) 490 { 491 report.getDetails().add( new ModelValidationReport.Detail( 492 "IMPLEMENTATION_MESSAGE_SOURCE_FILE_CONSTRAINT", Level.SEVERE, getMessage( 493 "messageSourceFileConstraint", implementation.getIdentifier(), m.getName(), 494 s.getIdentifier() ), 495 new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) ); 496 497 } 498 499 if ( files.getSourceFile().isEmpty() ) 500 { 501 report.getDetails().add( new ModelValidationReport.Detail( 502 "IMPLEMENTATION_MESSAGE_SOURCE_FILES_CONSTRAINT", Level.SEVERE, getMessage( 503 "messageSourceFilesConstraint", implementation.getIdentifier(), m.getName() ), 504 new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) ); 505 506 } 507 } 508 } 509 510 if ( sourceSectionType != null ) 511 { 512 for ( SourceSectionType s : sourceSectionType ) 513 { 514 report.getDetails().add( new ModelValidationReport.Detail( 515 "IMPLEMENTATION_MESSAGE_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage( 516 "messageSourceSectionConstraint", implementation.getIdentifier(), m.getName(), s.getName() ), 517 new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) ); 518 519 } 520 } 521 522 if ( sourceSectionsType != null ) 523 { 524 for ( SourceSectionsType sections : sourceSectionsType ) 525 { 526 for ( SourceSectionType s : sections.getSourceSection() ) 527 { 528 report.getDetails().add( new ModelValidationReport.Detail( 529 "IMPLEMENTATION_MESSAGE_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage( 530 "messageSourceSectionConstraint", implementation.getIdentifier(), m.getName(), 531 s.getName() ), 532 new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) ); 533 534 } 535 536 if ( sections.getSourceSection().isEmpty() ) 537 { 538 report.getDetails().add( new ModelValidationReport.Detail( 539 "IMPLEMENTATION_MESSAGE_SOURCE_SECTIONS_CONSTRAINT", Level.SEVERE, getMessage( 540 "messageSourceSectionsConstraint", implementation.getIdentifier(), m.getName() ), 541 new org.jomc.model.ObjectFactory().createImplementation( implementation ) ) ); 542 543 } 544 } 545 } 546 } 547 } 548 549 private void assertValidToolsTypes( final Specification specification, final ModelValidationReport report ) 550 { 551 final List<SourceFileType> sourceFileType = specification.getAnyObjects( SourceFileType.class ); 552 final List<SourceFilesType> sourceFilesType = specification.getAnyObjects( SourceFilesType.class ); 553 final List<SourceSectionType> sourceSectionType = specification.getAnyObjects( SourceSectionType.class ); 554 final List<SourceSectionsType> sourceSectionsType = specification.getAnyObjects( SourceSectionsType.class ); 555 556 if ( sourceFileType != null ) 557 { 558 if ( sourceFileType.size() > 1 ) 559 { 560 report.getDetails().add( new ModelValidationReport.Detail( 561 "SPECIFICATION_SOURCE_FILE_MULTIPLICITY_CONSTRAINT", Level.SEVERE, getMessage( 562 "specificationSourceFileMultiplicityConstraint", specification.getIdentifier(), 563 sourceFileType.size() ), 564 new org.jomc.model.ObjectFactory().createSpecification( specification ) ) ); 565 566 } 567 else if ( sourceFileType.size() == 1 ) 568 { 569 report.getDetails().add( new ModelValidationReport.Detail( 570 "SPECIFICATION_SOURCE_FILE_INFORMATION", Level.INFO, getMessage( 571 "specificationSourceFileInfo", specification.getIdentifier(), 572 sourceFileType.get( 0 ).getIdentifier() ), 573 new org.jomc.model.ObjectFactory().createSpecification( specification ) ) ); 574 575 } 576 } 577 578 if ( sourceFilesType != null ) 579 { 580 if ( sourceFilesType.size() > 1 ) 581 { 582 report.getDetails().add( new ModelValidationReport.Detail( 583 "SPECIFICATION_SOURCE_FILES_MULTIPLICITY_CONSTRAINT", Level.SEVERE, getMessage( 584 "specificationSourceFilesMultiplicityConstraint", specification.getIdentifier(), 585 sourceFilesType.size() ), 586 new org.jomc.model.ObjectFactory().createSpecification( specification ) ) ); 587 588 } 589 } 590 591 if ( sourceSectionType != null ) 592 { 593 for ( SourceSectionType s : sourceSectionType ) 594 { 595 report.getDetails().add( new ModelValidationReport.Detail( 596 "SPECIFICATION_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage( 597 "specificationSourceSectionConstraint", specification.getIdentifier(), s.getName() ), 598 new org.jomc.model.ObjectFactory().createSpecification( specification ) ) ); 599 600 } 601 } 602 603 if ( sourceSectionsType != null ) 604 { 605 for ( SourceSectionsType sections : sourceSectionsType ) 606 { 607 for ( SourceSectionType s : sections.getSourceSection() ) 608 { 609 report.getDetails().add( new ModelValidationReport.Detail( 610 "SPECIFICATION_SOURCE_SECTION_CONSTRAINT", Level.SEVERE, getMessage( 611 "specificationSourceSectionConstraint", specification.getIdentifier(), s.getName() ), 612 new org.jomc.model.ObjectFactory().createSpecification( specification ) ) ); 613 614 } 615 616 if ( sections.getSourceSection().isEmpty() ) 617 { 618 report.getDetails().add( new ModelValidationReport.Detail( 619 "SPECIFICATION_SOURCE_SECTIONS_CONSTRAINT", Level.SEVERE, getMessage( 620 "specificationSourceSectionsConstraint", specification.getIdentifier() ), 621 new org.jomc.model.ObjectFactory().createSpecification( specification ) ) ); 622 623 } 624 } 625 } 626 } 627 628 private static String getMessage( final String key, final Object... args ) 629 { 630 return MessageFormat.format( ResourceBundle.getBundle( 631 ToolsModelValidator.class.getName().replace( '.', '/' ), Locale.getDefault() ).getString( key ), args ); 632 633 } 634 635 }