/**
* generated by Xtext
*/
package net.certware.intent.validation;
import java.util.HashSet;
import java.util.ListIterator;
import net.certware.intent.intentSpecification.Decomposition;
import net.certware.intent.intentSpecification.DecompositionType;
import net.certware.intent.intentSpecification.Intent;
import net.certware.intent.intentSpecification.IntentSpecificationPackage;
import net.certware.intent.intentSpecification.IntentType;
import net.certware.intent.intentSpecification.ListItem;
import net.certware.intent.intentSpecification.ModelItem;
import net.certware.intent.intentSpecification.Refinement;
import net.certware.intent.validation.AbstractIntentSpecificationValidator;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.xtext.validation.Check;
import org.eclipse.xtext.xbase.lib.CollectionLiterals;
/**
* Custom validation rules.
*
* see http://www.eclipse.org/Xtext/documentation.html#validation
*/
@SuppressWarnings("all")
public class IntentSpecificationValidator extends AbstractIntentSpecificationValidator {
public final static String UNIQUE_INTENTS_REFINEMENT = "net.certware.intent.UniqueIntentsRefinement";
public final static String UNIQUE_DECOMPOSITION_INTENT = "net.certware.intent.UniqueDecompositionIntent";
public final static String UNIQUE_LIST_ITEM_DECOMPOSITION = "net.certware.intent.UniqueListItemDecomposition";
public final static String UNIQUE_MODEL_ITEM_DECOMPOSITION = "net.certware.intent.UniqueModelItemDecomposition";
public final static String UNIQUE_LIST_ITEM_LIST_ITEM = "net.certware.intent.UniqueListItemListItem";
public final static String UNIQUE_MODEL_ITEM_LIST_ITEM = "net.certware.intent.UniqueModelItemListItem";
@Check
public void checkUniqueIntentsInRefinement(final Refinement refinement) {
final HashSet<String> visitedIntentTypeNames = CollectionLiterals.<String>newHashSet();
EList<Intent> intents = refinement.getIntents();
ListIterator<Intent> i = intents.listIterator();
while (i.hasNext()) {
{
Intent _next = i.next();
Intent d = ((Intent) _next);
IntentType _type = d.getType();
String typeName = _type.getTypeName();
boolean _contains = visitedIntentTypeNames.contains(typeName);
if (_contains) {
EReference _refinement_Intents = IntentSpecificationPackage.eINSTANCE.getRefinement_Intents();
String _name = d.getName();
this.warning((("duplicate intent type \'" + typeName) + "\' in refinement"), _refinement_Intents,
IntentSpecificationValidator.UNIQUE_INTENTS_REFINEMENT, _name);
}
visitedIntentTypeNames.add(typeName);
}
}
}
@Check
public void checkUniqueDecompositionInIntent(final Intent intent) {
final HashSet<String> visitedDecompositionTypeNames = CollectionLiterals.<String>newHashSet();
EList<Decomposition> decompositions = intent.getDecompositions();
ListIterator<Decomposition> i = decompositions.listIterator();
while (i.hasNext()) {
{
Decomposition _next = i.next();
Decomposition d = ((Decomposition) _next);
DecompositionType _type = d.getType();
String typeName = _type.getTypeName();
boolean _contains = visitedDecompositionTypeNames.contains(typeName);
if (_contains) {
EReference _intent_Decompositions = IntentSpecificationPackage.eINSTANCE.getIntent_Decompositions();
String _name = d.getName();
this.warning((("duplicate decomposition type \'" + typeName) + "\' in intent"), _intent_Decompositions,
IntentSpecificationValidator.UNIQUE_DECOMPOSITION_INTENT, _name);
}
visitedDecompositionTypeNames.add(typeName);
}
}
}
@Check
public void checkUniqueListItemInDecomposition(final Decomposition decomposition) {
final HashSet<ListItem> visitedListItems = CollectionLiterals.<ListItem>newHashSet();
EList<ListItem> items = decomposition.getItems();
ListIterator<ListItem> i = items.listIterator();
while (i.hasNext()) {
{
ListItem d = i.next();
boolean _contains = visitedListItems.contains(d);
if (_contains) {
String _name = d.getName();
String _plus = ("duplicate item reference \'" + _name);
String _plus_1 = (_plus + "\' in list");
EReference _decomposition_Items = IntentSpecificationPackage.eINSTANCE.getDecomposition_Items();
String _name_1 = d.getName();
this.warning(_plus_1, _decomposition_Items,
IntentSpecificationValidator.UNIQUE_LIST_ITEM_DECOMPOSITION, _name_1);
}
visitedListItems.add(d);
}
}
}
@Check
public void checkUniqueModelItemInDecomposition(final Decomposition decomposition) {
final HashSet<ModelItem> visitedModelItems = CollectionLiterals.<ModelItem>newHashSet();
EList<ModelItem> items = decomposition.getModels();
ListIterator<ModelItem> i = items.listIterator();
while (i.hasNext()) {
{
ModelItem _next = i.next();
ModelItem d = ((ModelItem) _next);
boolean _contains = visitedModelItems.contains(d);
if (_contains) {
String _name = d.getName();
String _plus = ("duplicate item reference \'" + _name);
String _plus_1 = (_plus + "\' in models");
EReference _decomposition_Models = IntentSpecificationPackage.eINSTANCE.getDecomposition_Models();
String _name_1 = d.getName();
this.warning(_plus_1, _decomposition_Models,
IntentSpecificationValidator.UNIQUE_MODEL_ITEM_DECOMPOSITION, _name_1);
}
visitedModelItems.add(d);
}
}
}
@Check
public void checkUniqueListItemInListItem(final ListItem item) {
final HashSet<ListItem> visitedListItems = CollectionLiterals.<ListItem>newHashSet();
visitedListItems.add(item);
EList<ListItem> items = item.getItemReferences();
ListIterator<ListItem> i = items.listIterator();
while (i.hasNext()) {
{
ListItem _next = i.next();
ListItem d = ((ListItem) _next);
boolean _contains = visitedListItems.contains(d);
if (_contains) {
String _name = d.getName();
String _plus = ("duplicate item reference \'" + _name);
String _plus_1 = (_plus + "\' in items");
EReference _listItem_ItemReferences = IntentSpecificationPackage.eINSTANCE.getListItem_ItemReferences();
String _name_1 = d.getName();
this.warning(_plus_1, _listItem_ItemReferences,
IntentSpecificationValidator.UNIQUE_LIST_ITEM_LIST_ITEM, _name_1);
}
visitedListItems.add(d);
}
}
}
@Check
public void checkUniqueModelItemInListItem(final ListItem item) {
final HashSet<ModelItem> visitedModelItems = CollectionLiterals.<ModelItem>newHashSet();
EList<ModelItem> items = item.getModelReferences();
ListIterator<ModelItem> i = items.listIterator();
while (i.hasNext()) {
{
ModelItem _next = i.next();
ModelItem d = ((ModelItem) _next);
boolean _contains = visitedModelItems.contains(d);
if (_contains) {
String _name = d.getName();
String _plus = ("duplicate model reference \'" + _name);
String _plus_1 = (_plus + "\' in models");
EReference _listItem_ModelReferences = IntentSpecificationPackage.eINSTANCE.getListItem_ModelReferences();
String _name_1 = d.getName();
this.warning(_plus_1, _listItem_ModelReferences,
IntentSpecificationValidator.UNIQUE_MODEL_ITEM_LIST_ITEM, _name_1);
}
visitedModelItems.add(d);
}
}
}
}