blob: d4c50f60c6f071d3dc5f1ec80db23b39b586849d [file] [log] [blame]
/**
* <copyright>
*
* Copyright (c) 2014 Obeo and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Obeo - initial API and implementation
*
* </copyright>
*/
package org.eclipse.ocl.examples.standalone.validity;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.ocl.examples.emf.validation.validity.ConstrainingNode;
import org.eclipse.ocl.examples.emf.validation.validity.LeafConstrainingNode;
import org.eclipse.ocl.examples.emf.validation.validity.Result;
import org.eclipse.ocl.examples.emf.validation.validity.ResultSet;
import org.eclipse.ocl.examples.emf.validation.validity.ResultValidatableNode;
import org.eclipse.ocl.examples.emf.validation.validity.Severity;
import org.eclipse.ocl.examples.emf.validation.validity.ValidatableNode;
import org.eclipse.ocl.examples.emf.validation.validity.locator.ConstraintLocator;
import org.eclipse.ocl.examples.emf.validation.validity.locator.EClassConstraintLocator;
import org.eclipse.ocl.examples.emf.validation.validity.locator.EClassifierConstraintLocator;
import org.eclipse.ocl.examples.emf.validation.validity.locator.EValidatorConstraintLocator;
import org.eclipse.ocl.examples.emf.validation.validity.manager.ValidityModel;
import org.eclipse.ocl.examples.emf.validation.validity.ui.view.IDEValidityManager;
import org.eclipse.ocl.examples.emf.validation.validity.ui.view.ValidityView;
import org.eclipse.ocl.examples.emf.validation.validity.ui.view.ValidityViewRefreshJob;
import org.eclipse.ocl.examples.validity.locator.PivotConstraintLocator;
import org.eclipse.ocl.examples.validity.locator.UMLConstraintLocator;
public class StandaloneValidityManager extends IDEValidityManager
{
private boolean runOCLConstraints = false;
private boolean runJavaConstraints = false;
private boolean runUMLConstraints = false;
public StandaloneValidityManager(ValidityViewRefreshJob refreshJob) {
super(refreshJob);
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.ocl.examples.emf.validation.validity.manager.ValidityManager
* #createModel(java.util.Collection)
*/
@Override
protected @NonNull ValidityModel createModel(@NonNull Collection<Resource> newResources) {
return new StandaloneValidityModel(this, newResources);
}
private static @NonNull List<ConstrainingNode> getConstrainingNodeAncestors(@NonNull ConstrainingNode constraining) {
ConstrainingNode ancestor = constraining.getParent();
List<ConstrainingNode> ancestors = new ArrayList<ConstrainingNode>();
while (ancestor != null) {
ancestors.add(ancestor);
ancestor = ancestor.getParent();
}
return ancestors;
}
public @NonNull List<ConstraintLocator> getInUseConstraintLocators(@NonNull String nsURI) {
List<ConstraintLocator> list = new ArrayList<ConstraintLocator>();
if (runOCLConstraints) {
PivotConstraintLocator pivotConstraintsLocator = new PivotConstraintLocator();
list.add(pivotConstraintsLocator);
}
if (runJavaConstraints) {
EClassConstraintLocator eClassConstraintsLocator = new EClassConstraintLocator();
list.add(eClassConstraintsLocator);
EClassifierConstraintLocator eClassifierConstraintsLocator = new EClassifierConstraintLocator();
list.add(eClassifierConstraintsLocator);
EValidatorConstraintLocator eValidatorConstraintsLocator = new EValidatorConstraintLocator();
list.add(eValidatorConstraintsLocator);
}
if (runUMLConstraints) {
UMLConstraintLocator umlConstraintsLocator = new UMLConstraintLocator();
list.add(umlConstraintsLocator);
}
return list;
}
@Override
public void runValidation(@NonNull ValidityView validityView) {
final ResultSet resultSet = createResultSet(new NullProgressMonitor());
List<Result> results = installResultSet(resultSet,
new NullProgressMonitor());
for (Result result : results) {
try {
ValidatableNode validatable = result.getValidatableNode();
ValidatableNode validatableParent = validatable.getParent();
LeafConstrainingNode constraint = result
.getLeafConstrainingNode();
if (constraint != null) {
List<ConstrainingNode> constrainingAncestors = getConstrainingNodeAncestors(constraint);
boolean isConstrainingNodeEnabled = true;
for (ConstrainingNode constrainingAncestor : constrainingAncestors) {
if (!constrainingAncestor.isEnabled()) {
isConstrainingNodeEnabled = false;
break;
}
}
boolean isEnabledForValidation = false;
if (isConstrainingNodeEnabled) {
if (validatable instanceof ResultValidatableNode) {
if (validatableParent != null
&& validatableParent.isEnabled()) {
isEnabledForValidation = true;
}
} else {
isEnabledForValidation = true;
}
}
if (isEnabledForValidation) {
ConstraintLocator constraintLocator = constraint
.getConstraintLocator();
constraintLocator.validate(result,
StandaloneValidityManager.this, null);
} else {
result.setSeverity(Severity.UNKNOWN);
}
} else {
result.setSeverity(Severity.UNKNOWN);
}
} catch (Exception e) {
result.setException(e);
result.setSeverity(Severity.FATAL);
}
}
}
public void setRunJavaConstraints(boolean runJavaConstraints) {
this.runJavaConstraints = runJavaConstraints;
}
public void setRunOCLConstraints(boolean runOCLConstraints) {
this.runOCLConstraints = runOCLConstraints;
}
public void setRunUMLConstraints(boolean runUMLConstraints) {
this.runUMLConstraints = runUMLConstraints;
}
}