/* * 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.Iterator; import java.util.Map; import org.eclipse.core.runtime.IStatus; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.teiid.core.designer.util.CoreArgCheck; import org.teiid.core.designer.util.StringConstants; import org.teiid.designer.core.ModelerCore; import org.teiid.designer.core.ValidationPreferences; import org.teiid.designer.core.metamodel.aspect.AspectManager; import org.teiid.designer.core.metamodel.aspect.sql.SqlAspect; import org.teiid.designer.core.metamodel.aspect.sql.SqlProcedureAspect; import org.teiid.designer.core.metamodel.aspect.sql.SqlTableAspect; 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.metadata.runtime.MetadataConstants; /** * TargetTransformationRule * * @since 8.0 */ public class TargetTransformationRule implements ResourceValidationRule { /* (non-Javadoc) * @See org.teiid.designer.core.validation.ResourceValidationRule#validate(org.eclipse.emf.ecore.resource.Resource, org.teiid.designer.core.validation.ValidationContext) */ @Override public void validate( final Resource resource, final ValidationContext context ) { CoreArgCheck.isNotNull(resource); CoreArgCheck.isNotNull(context); // run this rule only for XMI resources final URI uri = resource.getURI(); if (uri != null && !uri.lastSegment().endsWith(StringConstants.XMI)) { return; } Map targetTransformMap = context.getTargetTransformMap(); // there are no mapping, meaning no virtual tables in the resource if (targetTransformMap == null || targetTransformMap.isEmpty()) { return; } Iterator targetIter = targetTransformMap.keySet().iterator(); while (targetIter.hasNext()) { EObject target = (EObject)targetIter.next(); // check if this eObject is on the same resource as we are validating Resource targetResource = target.eResource(); if (targetResource != resource) { continue; } if (targetTransformMap.get(target) == null) { SqlAspect targetAspect = AspectManager.getSqlAspect(target); CoreArgCheck.isNotNull(targetAspect); if (targetAspect instanceof SqlTableAspect) { SqlTableAspect tableAspect = (SqlTableAspect)targetAspect; // MyDefect : 17200 Added this logic to make sure document is not xml document, // a document could be a table // but should be able to create an emty document for soap. boolean isXmlDoc = (tableAspect.getTableType(target) == MetadataConstants.TABLE_TYPES.DOCUMENT_TYPE); if (tableAspect.isVirtual(target) && !isXmlDoc) { final int status = getPreferenceStatus(context); if (status == IStatus.OK) { return; } final ValidationResult result = new ValidationResultImpl(target); // create validation problem and addit to the result final String msg = ModelerCore.Util.getString("TargetTransformationRule.The_virtual_table_{0}_does_not_have_any_associated_transformation._1", tableAspect.getName(target)); //$NON-NLS-1$ final ValidationProblem problem = new ValidationProblemImpl(0, status, msg); result.addProblem(problem); context.addResult(result); } } else { SqlProcedureAspect procAspect = (SqlProcedureAspect)targetAspect; if (procAspect.isVirtual(target)) { final int status = getPreferenceStatus(context); if (status == IStatus.OK) { return; } final ValidationResult result = new ValidationResultImpl(target); // create validation problem and addit to the result final String msg = ModelerCore.Util.getString("TargetTransformationRule.The_virtual_procedure_{0}_does_not_have_any_associated_transformation._1", procAspect.getName(target));//$NON-NLS-1$ final ValidationProblem problem = new ValidationProblemImpl(0, status, msg); result.addProblem(problem); context.addResult(result); } } } } } protected int getPreferenceStatus( ValidationContext context ) { return context.getPreferenceStatus(ValidationPreferences.RELATIONAL_EMPTY_TRANSFORMATIONS, IStatus.ERROR); } }