package org.teiid.designer.core.validation.rules;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.emf.ecore.resource.Resource;
import org.teiid.core.designer.util.CoreArgCheck;
import org.teiid.designer.core.ModelerCore;
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.core.workspace.ModelResource;
import org.teiid.designer.core.workspace.ModelUtil;
import org.teiid.designer.core.workspace.WorkspaceResourceFinderUtil;
public final class CircularDependenciesRule implements ResourceValidationRule {
/**
* {@inheritDoc}
*
* @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);
try {
final ModelResource modelResource = ModelUtil.getModel(resource);
if (modelResource != null) {
final IResource model = modelResource.getResource();
if (model != null) {
final IFile circularDependency = WorkspaceResourceFinderUtil.getFirstResourceHavingCircularDependency(model);
if (circularDependency != null) {
final ValidationResult result = new ValidationResultImpl(resource, resource);
final String msg = ModelerCore.Util.getString("CircularDependenciesRule.errorMsg",
model.getName(),
circularDependency.getName());
final ValidationProblem problem = new ValidationProblemImpl(IStatus.OK, IStatus.ERROR, msg);
result.addProblem(problem);
context.addResult(result);
}
}
}
} catch (final Exception e) {
final ValidationResult result = new ValidationResultImpl(resource, resource);
final ValidationProblem problem = new ValidationProblemImpl(IStatus.OK, IStatus.ERROR, e.getLocalizedMessage());
result.addProblem(problem);
context.addResult(result);
}
}
}