From e55fc0c91990c1de9cfdc02b5859b7419735abd3 Mon Sep 17 00:00:00 2001 From: OszkarSemerath Date: Wed, 24 Jan 2018 01:06:37 +0100 Subject: New Scope format: #String += 2..* --- .../dslreasoner/application/execution/.gitignore | 2 + .../validation/.MetamodelValidator.xtendbin | Bin 0 -> 5594 bytes .../.QueryAndMetamodelValidator.xtendbin | Bin 0 -> 4266 bytes .../application/execution/validation/.gitignore | 2 + .../execution/validation/MetamodelValidator.java | 167 +++++++++++++++++++++ .../validation/QueryAndMetamodelValidator.java | 93 ++++++++++++ 6 files changed, 264 insertions(+) create mode 100644 Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/validation/.MetamodelValidator.xtendbin create mode 100644 Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/validation/.QueryAndMetamodelValidator.xtendbin create mode 100644 Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/validation/.gitignore create mode 100644 Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/validation/MetamodelValidator.java create mode 100644 Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/validation/QueryAndMetamodelValidator.java (limited to 'Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application') diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/.gitignore b/Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/.gitignore index d1f59103..0d946acb 100644 --- a/Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/.gitignore +++ b/Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/.gitignore @@ -19,3 +19,5 @@ /MetamodelLoader.java /ModelLoader.java /QueryLoader.java +/.MetamodelValidator.java._trace +/.QueryAndMetamodelValidator.java._trace diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/validation/.MetamodelValidator.xtendbin b/Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/validation/.MetamodelValidator.xtendbin new file mode 100644 index 00000000..4b5f1417 Binary files /dev/null and b/Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/validation/.MetamodelValidator.xtendbin differ diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/validation/.QueryAndMetamodelValidator.xtendbin b/Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/validation/.QueryAndMetamodelValidator.xtendbin new file mode 100644 index 00000000..3816ffb2 Binary files /dev/null and b/Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/validation/.QueryAndMetamodelValidator.xtendbin differ diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/validation/.gitignore b/Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/validation/.gitignore new file mode 100644 index 00000000..48aea421 --- /dev/null +++ b/Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/validation/.gitignore @@ -0,0 +1,2 @@ +/.MetamodelValidator.java._trace +/.QueryAndMetamodelValidator.java._trace diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/validation/MetamodelValidator.java b/Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/validation/MetamodelValidator.java new file mode 100644 index 00000000..1e21f6ab --- /dev/null +++ b/Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/validation/MetamodelValidator.java @@ -0,0 +1,167 @@ +package hu.bme.mit.inf.dslreasoner.application.execution.validation; + +import hu.bme.mit.inf.dslreasoner.ecore2logic.EcoreMetamodelDescriptor; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; +import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.EAttribute; +import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EDataType; +import org.eclipse.emf.ecore.EEnum; +import org.eclipse.emf.ecore.EEnumLiteral; +import org.eclipse.emf.ecore.EReference; +import org.eclipse.emf.ecore.EcorePackage; +import org.eclipse.xtend2.lib.StringConcatenation; +import org.eclipse.xtext.xbase.lib.CollectionLiterals; +import org.eclipse.xtext.xbase.lib.Extension; + +@SuppressWarnings("all") +public class MetamodelValidator { + public LinkedList validateMetamodel(final EcoreMetamodelDescriptor descriptor) { + final LinkedList errors = new LinkedList(); + List _classes = descriptor.getClasses(); + this.allSupertypesAreIncluded(_classes, errors); + List _enums = descriptor.getEnums(); + List _literals = descriptor.getLiterals(); + this.allEnumTypesareIncluded(_enums, _literals, errors); + List _classes_1 = descriptor.getClasses(); + List _references = descriptor.getReferences(); + this.referenceEndpointsAreIncluded(_classes_1, _references, errors); + List _classes_2 = descriptor.getClasses(); + List _attributes = descriptor.getAttributes(); + this.attributeSourcePontIsIncluded(_classes_2, _attributes, errors); + List _attributes_1 = descriptor.getAttributes(); + this.attributeTargetIsSupported(_attributes_1, errors); + return errors; + } + + private boolean supportedEDataType(final EDataType dataType) { + @Extension + final EcorePackage l = EcorePackage.eINSTANCE; + EDataType _eInt = l.getEInt(); + EDataType _eBoolean = l.getEBoolean(); + EDataType _eString = l.getEString(); + EDataType _eDouble = l.getEDouble(); + EDataType _eFloat = l.getEFloat(); + return Collections.unmodifiableList(CollectionLiterals.newArrayList(_eInt, _eBoolean, _eString, _eDouble, _eFloat)).contains(dataType); + } + + public void allSupertypesAreIncluded(final List classes, final List errors) { + for (final EClass c : classes) { + EList _eSuperTypes = c.getESuperTypes(); + for (final EClass s : _eSuperTypes) { + boolean _contains = classes.contains(s); + boolean _not = (!_contains); + if (_not) { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("Metamodel contains \""); + String _name = c.getName(); + _builder.append(_name, ""); + _builder.append("\" but not contains its supertype \""); + String _name_1 = s.getName(); + _builder.append(_name_1, ""); + _builder.append("\"!"); + errors.add(_builder.toString()); + } + } + } + } + + public void allEnumTypesareIncluded(final List enums, final List literals, final List errors) { + for (final EEnumLiteral l : literals) { + EEnum _eEnum = l.getEEnum(); + boolean _contains = enums.contains(_eEnum); + boolean _not = (!_contains); + if (_not) { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("Metamodel contains literal \""); + String _name = l.getName(); + _builder.append(_name, ""); + _builder.append("\" but does not contains enum \""); + EEnum _eEnum_1 = l.getEEnum(); + String _name_1 = _eEnum_1.getName(); + _builder.append(_name_1, ""); + _builder.append("\"!"); + errors.add(_builder.toString()); + } + } + } + + public void referenceEndpointsAreIncluded(final List classes, final List references, final List errors) { + for (final EReference reference : references) { + { + final EClass src = reference.getEContainingClass(); + boolean _contains = classes.contains(src); + boolean _not = (!_contains); + if (_not) { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("Metamodel contains reference \""); + String _name = reference.getName(); + _builder.append(_name, ""); + _builder.append("\" but does not contains its source type \""); + String _name_1 = src.getName(); + _builder.append(_name_1, ""); + _builder.append("\"!"); + errors.add(_builder.toString()); + } + final EClass trg = reference.getEReferenceType(); + boolean _contains_1 = classes.contains(trg); + boolean _not_1 = (!_contains_1); + if (_not_1) { + StringConcatenation _builder_1 = new StringConcatenation(); + _builder_1.append("Metamodel contains reference \""); + String _name_2 = reference.getName(); + _builder_1.append(_name_2, ""); + _builder_1.append("\" but does not contains its target type \""); + String _name_3 = trg.getName(); + _builder_1.append(_name_3, ""); + _builder_1.append("\"!"); + errors.add(_builder_1.toString()); + } + } + } + } + + public void attributeSourcePontIsIncluded(final List classes, final List attributes, final List errors) { + for (final EAttribute attribute : attributes) { + { + final Class src = attribute.getContainerClass(); + boolean _contains = classes.contains(src); + boolean _not = (!_contains); + if (_not) { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("Metamodel contains attribute \""); + String _name = attribute.getName(); + _builder.append(_name, ""); + _builder.append("\" but does not contains its source type \""); + String _name_1 = src.getName(); + _builder.append(_name_1, ""); + _builder.append("\"!"); + errors.add(_builder.toString()); + } + } + } + } + + public void attributeTargetIsSupported(final List attributes, final List errors) { + for (final EAttribute attribute : attributes) { + { + final EDataType trg = attribute.getEAttributeType(); + boolean _supportedEDataType = this.supportedEDataType(trg); + boolean _not = (!_supportedEDataType); + if (_not) { + StringConcatenation _builder = new StringConcatenation(); + _builder.append("Metamodels contains attribute \""); + String _name = attribute.getName(); + _builder.append(_name, ""); + _builder.append("\" with unsupported type \""); + String _name_1 = trg.getName(); + _builder.append(_name_1, ""); + _builder.append("\"!"); + errors.add(_builder.toString()); + } + } + } + } +} diff --git a/Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/validation/QueryAndMetamodelValidator.java b/Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/validation/QueryAndMetamodelValidator.java new file mode 100644 index 00000000..ee4567d8 --- /dev/null +++ b/Application/hu.bme.mit.inf.dslreasoner.application/xtend-gen/hu/bme/mit/inf/dslreasoner/application/execution/validation/QueryAndMetamodelValidator.java @@ -0,0 +1,93 @@ +package hu.bme.mit.inf.dslreasoner.application.execution.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-54-g00ecf