1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
package hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.aggregators
import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.Interval
import hu.bme.mit.inf.dslreasoner.viatrasolver.logic2viatra.interval.IntervalHullAggregatorOperator
import java.math.BigDecimal
import java.math.BigInteger
import java.math.MathContext
import org.eclipse.viatra.query.runtime.matchers.psystem.aggregations.AggregatorType
import org.eclipse.viatra.query.runtime.matchers.psystem.aggregations.BoundAggregator
import org.eclipse.viatra.query.runtime.matchers.psystem.aggregations.IAggregatorFactory
@AggregatorType(parameterTypes=#[BigDecimal, BigInteger, Byte, Double, Float, Integer, Long, Short], returnTypes=#[
Interval, Interval, Interval, Interval, Interval, Interval, Interval, Interval])
class intervalHull implements IAggregatorFactory {
override getAggregatorLogic(Class<?> domainClass) {
new BoundAggregator(getAggregationOperator(domainClass), domainClass, Interval)
}
private def getAggregationOperator(Class<?> domainClass) {
switch (domainClass) {
case BigDecimal:
new IntervalHullAggregatorOperator<BigDecimal>() {
override protected toBigDecimal(BigDecimal value, MathContext mc) {
value.round(mc)
}
}
case BigInteger:
new IntervalHullAggregatorOperator<BigInteger>() {
override protected toBigDecimal(BigInteger value, MathContext mc) {
new BigDecimal(value, mc)
}
}
case Byte:
new IntervalHullAggregatorOperator<Byte>() {
override protected toBigDecimal(Byte value, MathContext mc) {
new BigDecimal(value, mc)
}
}
case Double:
new IntervalHullAggregatorOperator<Double>() {
override protected toBigDecimal(Double value, MathContext mc) {
new BigDecimal(value, mc)
}
}
case Float:
new IntervalHullAggregatorOperator<Float>() {
override protected toBigDecimal(Float value, MathContext mc) {
new BigDecimal(value, mc)
}
}
case Integer:
new IntervalHullAggregatorOperator<Integer>() {
override protected toBigDecimal(Integer value, MathContext mc) {
new BigDecimal(value, mc)
}
}
case Long:
new IntervalHullAggregatorOperator<Long>() {
override protected toBigDecimal(Long value, MathContext mc) {
new BigDecimal(value, mc)
}
}
case Short:
new IntervalHullAggregatorOperator<Short>() {
override protected toBigDecimal(Short value, MathContext mc) {
new BigDecimal(value, mc)
}
}
default:
throw new IllegalArgumentException("Unknown domain class: " + domainClass)
}
}
}
|