From 876ea3d3dd2d86c6361ad9959d49b8b02501ffe7 Mon Sep 17 00:00:00 2001 From: LilianaBohus Date: Tue, 22 May 2018 16:19:31 +0200 Subject: Abstract supertype cardinality count --- .../reasoner/dse/CardinalityCalculator.java | 45 +++++++++++++++++----- 1 file changed, 35 insertions(+), 10 deletions(-) diff --git a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/CardinalityCalculator.java b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/CardinalityCalculator.java index 3dd2157e..55ace527 100644 --- a/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/CardinalityCalculator.java +++ b/Solvers/VIATRA-Solver/hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner/src/hu/bme/mit/inf/dslreasoner/viatrasolver/reasoner/dse/CardinalityCalculator.java @@ -1,25 +1,50 @@ package hu.bme.mit.inf.dslreasoner.viatrasolver.reasoner.dse; +import java.util.Map; + import org.eclipse.emf.common.util.EList; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.util.EObjectContainmentEList; import hu.bme.mit.inf.dslreasoner.logic.model.builder.TypeScopes; +import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Iff; import hu.bme.mit.inf.dslreasoner.logic.model.logiclanguage.Type; +import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.Annotation; +import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.AssertionAnnotation; import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.LogicProblem; +import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.RelationAnnotation; +import hu.bme.mit.inf.dslreasoner.logic.model.logicproblem.impl.RelationAnnotationImpl; import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialInterpretation; import hu.bme.mit.inf.dslreasoner.viatrasolver.partialinterpretationlanguage.partialinterpretation.PartialTypeInterpratation; public class CardinalityCalculator { + public boolean isViolated(PartialInterpretation partialInterpretation, TypeScopes typeScopes) { -// LogicProblem problem = partialInterpretation.getProblem(); -// EList types = problem.getTypes(); -// for (Type type : types) { -// type.isIsAbstract() -// } -// problem.getAnnotations(). -// EList partialtypeinterpratation = partialInterpretation.getPartialtypeinterpratation(); -// -// -// typeScopes.minNewElementsByType + + LogicProblem problem = partialInterpretation.getProblem(); + EList types = problem.getTypes(); + + Map minNewElementsByType = typeScopes.minNewElementsByType; + Map maxNewElementsByType = typeScopes.maxNewElementsByType; + + for (Type type : types) { + if (type.isIsAbstract()) { + int sumOfSubtypeMinimumScopes = 0; + int sumOfSubtypeMaximumScopes = 0; + EList subtypesOfAbstract = type.getSubtypes(); + for (Type subtype : subtypesOfAbstract) { + sumOfSubtypeMinimumScopes += minNewElementsByType.get(subtype); + sumOfSubtypeMaximumScopes += maxNewElementsByType.get(subtype); + } + Integer maxNewElementsOfAbstract = maxNewElementsByType.get(type); + Integer minNewElementsOfAbstract = minNewElementsByType.get(type); + if (sumOfSubtypeMinimumScopes > maxNewElementsOfAbstract + || sumOfSubtypeMaximumScopes < minNewElementsOfAbstract) { + return true; + } + } + } return false; } + } -- cgit v1.2.3-54-g00ecf