/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.core.validation.rules; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import org.eclipse.core.runtime.IStatus; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.Resource.Diagnostic; import org.eclipse.xsd.util.XSDResourceImpl; import org.teiid.core.designer.util.CoreArgCheck; import org.teiid.designer.core.util.ModelContents; import org.teiid.designer.core.validation.ResourceValidationRule; import org.teiid.designer.core.validation.ValidationContext; import org.teiid.designer.core.validation.ValidationProblem; import org.teiid.designer.core.validation.ValidationProblemImpl; import org.teiid.designer.core.validation.ValidationResult; import org.teiid.designer.core.validation.ValidationResultImpl; import org.teiid.designer.metamodels.core.ModelAnnotation; /** * @since 8.0 */ public class EmfResourceValidationRule implements ResourceValidationRule { /** * @see org.teiid.designer.core.validation.ResourceValidationRule#validate(org.eclipse.emf.ecore.resource.Resource, org.teiid.designer.core.validation.ValidationContext) * @since 4.2 */ @Override public void validate(final Resource resource, final ValidationContext context) { CoreArgCheck.isNotNull(resource); CoreArgCheck.isNotNull(context); // xsd validator generateds markers for XSDDiagnostics if(resource instanceof XSDResourceImpl) { return; } // get to the modelAnnotation object to create the markers on ModelContents contents = new ModelContents(resource); ModelAnnotation annotation = contents.getModelAnnotation(); if(annotation != null) { final ValidationResult result = new ValidationResultImpl(annotation); Collection errors = resource.getErrors(); // hash set to filter duplicates Collection messages = new HashSet(); if(!errors.isEmpty()) { for(final Iterator errIter = errors.iterator(); errIter.hasNext();) { Diagnostic errDiagnostic = (Diagnostic) errIter.next(); String diagMessage = errDiagnostic.getMessage(); if(!messages.contains(diagMessage)) { // create validation problem and addit to the result final ValidationProblem problem = new ValidationProblemImpl(0, IStatus.ERROR, errDiagnostic.getMessage()); result.addProblem(problem); messages.add(diagMessage); } } } else { Collection warnings = resource.getWarnings(); for(final Iterator warnIter = warnings.iterator(); warnIter.hasNext();) { Diagnostic warnDiagnostic = (Diagnostic) warnIter.next(); String diagMessage = warnDiagnostic.getMessage(); if(!messages.contains(diagMessage)) { // create validation problem and addit to the result final ValidationProblem problem = new ValidationProblemImpl(0, IStatus.WARNING, warnDiagnostic.getMessage()); result.addProblem(problem); messages.add(diagMessage); } } } if(result.hasProblems()) { context.addResult(result); } } } }