/** * 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); } } } }