<<<<<<< HEAD package hu.bme.mit.inf.dslreasoner.application.validation; import com.google.common.collect.Iterables; import hu.bme.mit.inf.dslreasoner.ecore2logic.EcoreMetamodelDescriptor; import hu.bme.mit.inf.dslreasoner.viatra2logic.ViatraQuerySetDescriptor; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Set; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.EEnum; import org.eclipse.emf.ecore.EEnumLiteral; import org.eclipse.emf.ecore.ENamedElement; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EReference; import org.eclipse.viatra.query.patternlanguage.emf.vql.Pattern; import org.eclipse.xtend2.lib.StringConcatenation; import org.eclipse.xtext.xbase.lib.CollectionLiterals; import org.eclipse.xtext.xbase.lib.Functions.Function1; import org.eclipse.xtext.xbase.lib.IterableExtensions; import org.eclipse.xtext.xbase.lib.IteratorExtensions; import org.eclipse.xtext.xbase.lib.ListExtensions; import org.eclipse.xtext.xbase.lib.Pair; @SuppressWarnings("all") public class QueryAndMetamodelValidator { public LinkedList validateQueryAndMetamodel(final EcoreMetamodelDescriptor metamodel, final Pair> viatra) { final Set patterns = viatra.getValue(); List _classes = metamodel.getClasses(); List _enums = metamodel.getEnums(); Iterable _plus = Iterables.concat(_classes, _enums); List _literals = metamodel.getLiterals(); Iterable _plus_1 = Iterables.concat(_plus, _literals); List _attributes = metamodel.getAttributes(); Iterable _plus_2 = Iterables.concat(_plus_1, _attributes); List _references = metamodel.getReferences(); final Set elementsInMetamodel = IterableExtensions.toSet(Iterables.concat(_plus_2, _references)); final LinkedList errors = new LinkedList(); for (final Pattern pattern : patterns) { { final Iterable elements = this.getReferredNamedElements(pattern); for (final ENamedElement element : elements) { boolean _contains = elementsInMetamodel.contains(element); boolean _not = (!_contains); if (_not) { StringConcatenation _builder = new StringConcatenation(); _builder.append("Pattern \""); String _name = pattern.getName(); _builder.append(_name); _builder.append("\" refers to an element \""); _builder.append(element); _builder.append("\" that is not included to the selected metamodel!"); errors.add(_builder.toString()); } } } } return errors; } public Iterable getReferredNamedElements(final Pattern pattern) { final List elements = IteratorExtensions.toList(pattern.eAllContents()); final Function1> _function = (EObject element) -> { final EList references = element.eClass().getEAllReferences(); final Function1> _function_1 = (EReference r) -> { boolean _isMany = r.isMany(); if (_isMany) { Object _eGet = element.eGet(r); return Iterables.filter(((List) _eGet), ENamedElement.class); } else { final Object value = element.eGet(r); if ((value instanceof ENamedElement)) { return Collections.unmodifiableList(CollectionLiterals.newArrayList(((ENamedElement)value))); } else { return Collections.unmodifiableList(CollectionLiterals.newArrayList()); } } }; return Iterables.filter((Iterables.concat(ListExtensions.>map(references, _function_1))), ENamedElement.class); }; return Iterables.concat(ListExtensions.>map(elements, _function)); } } ======= package hu.bme.mit.inf.dslreasoner.application.validation; import com.google.common.collect.Iterables; import hu.bme.mit.inf.dslreasoner.ecore2logic.EcoreMetamodelDescriptor; import hu.bme.mit.inf.dslreasoner.viatra2logic.ViatraQuerySetDescriptor; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Set; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.EEnum; import org.eclipse.emf.ecore.EEnumLiteral; import org.eclipse.emf.ecore.ENamedElement; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EReference; import org.eclipse.viatra.query.patternlanguage.emf.vql.Pattern; import org.eclipse.xtend2.lib.StringConcatenation; import org.eclipse.xtext.xbase.lib.CollectionLiterals; import org.eclipse.xtext.xbase.lib.Functions.Function1; import org.eclipse.xtext.xbase.lib.IterableExtensions; import org.eclipse.xtext.xbase.lib.IteratorExtensions; import org.eclipse.xtext.xbase.lib.ListExtensions; import org.eclipse.xtext.xbase.lib.Pair; @SuppressWarnings("all") public class QueryAndMetamodelValidator { public LinkedList validateQueryAndMetamodel(final EcoreMetamodelDescriptor metamodel, final Pair> viatra) { final Set patterns = viatra.getValue(); List _classes = metamodel.getClasses(); List _enums = metamodel.getEnums(); Iterable _plus = Iterables.concat(_classes, _enums); List _literals = metamodel.getLiterals(); Iterable _plus_1 = Iterables.concat(_plus, _literals); List _attributes = metamodel.getAttributes(); Iterable _plus_2 = Iterables.concat(_plus_1, _attributes); List _references = metamodel.getReferences(); final Set elementsInMetamodel = IterableExtensions.toSet(Iterables.concat(_plus_2, _references)); final LinkedList errors = new LinkedList(); for (final Pattern pattern : patterns) { { final Iterable elements = this.getReferredNamedElements(pattern); for (final ENamedElement element : elements) { boolean _contains = elementsInMetamodel.contains(element); boolean _not = (!_contains); if (_not) { StringConcatenation _builder = new StringConcatenation(); _builder.append("Pattern \""); String _name = pattern.getName(); _builder.append(_name); _builder.append("\" refers to an element \""); _builder.append(element); _builder.append("\" that is not included to the selected metamodel!"); errors.add(_builder.toString()); } } } } return errors; } public Iterable getReferredNamedElements(final Pattern pattern) { final List elements = IteratorExtensions.toList(pattern.eAllContents()); final Function1> _function = (EObject element) -> { final EList references = element.eClass().getEAllReferences(); final Function1> _function_1 = (EReference r) -> { boolean _isMany = r.isMany(); if (_isMany) { Object _eGet = element.eGet(r); return Iterables.filter(((List) _eGet), ENamedElement.class); } else { final Object value = element.eGet(r); if ((value instanceof ENamedElement)) { return Collections.unmodifiableList(CollectionLiterals.newArrayList(((ENamedElement)value))); } else { return Collections.unmodifiableList(CollectionLiterals.newArrayList()); } } }; return Iterables.filter((Iterables.concat(ListExtensions.>map(references, _function_1))), ENamedElement.class); }; return Iterables.concat(ListExtensions.>map(elements, _function)); } } >>>>>>> 8ecc73c4... VAMPIRE: Rebase on Master