From 2002dffe76957cbd1d45b7da5c678742053566bd Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Tue, 30 Jan 2018 01:29:00 +0100 Subject: Validators refactored --- .../validation/QueryAndMetamodelValidator.java | 93 ++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/validation/QueryAndMetamodelValidator.java (limited to 'Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/validation/QueryAndMetamodelValidator.java') diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/validation/QueryAndMetamodelValidator.java b/Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/validation/QueryAndMetamodelValidator.java new file mode 100644 index 00000000..1365d64d --- /dev/null +++ b/Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/validation/QueryAndMetamodelValidator.java @@ -0,0 +1,93 @@ +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.common.util.TreeIterator; +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.patternLanguage.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(); + Iterable _plus_3 = Iterables.concat(_plus_2, _references); + final Set elementsInMetamodel = IterableExtensions.toSet(_plus_3); + 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) { + TreeIterator _eAllContents = pattern.eAllContents(); + final List elements = IteratorExtensions.toList(_eAllContents); + final Function1> _function = (EObject element) -> { + EClass _eClass = element.eClass(); + final EList references = _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()); + } + } + }; + List> _map = ListExtensions.>map(references, _function_1); + Iterable _flatten = Iterables.concat(_map); + return Iterables.filter(_flatten, ENamedElement.class); + }; + List> _map = ListExtensions.>map(elements, _function); + return Iterables.concat(_map); + } +} -- cgit v1.2.3-70-g09d2