Skip to content

Commit 5edec1f

Browse files
committed
misc: updated changes according to Kevin's review
1 parent 50941df commit 5edec1f

File tree

4 files changed

+49
-98
lines changed

4 files changed

+49
-98
lines changed

src/main/java/de/vill/conversion/ConvertFeatureCardinality.java

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -89,56 +89,14 @@ private void removeFeatureCardinality(Feature feature, FeatureModel featureModel
8989
}
9090
}
9191
}
92-
/*
93-
additional constraint with all cloned versions ored
94-
Set<String> allFeatureNamesInSubTree = new HashSet<>();
95-
getAllSubFeatureNamesRecursively(feature, allFeatureNamesInSubTree);
96-
for (Constraint constraint : constraintsToClone) {
97-
Constraint newConstraint = constraint.clone();
98-
orAdaptedConstraint(newConstraint, allFeatureNamesInSubTree, min, max, featureModel);
99-
featureModel.getOwnConstraints().add(newConstraint);
100-
}
101-
102-
*/
103-
10492

10593
feature.getChildren().removeAll(feature.getChildren());
10694
feature.getChildren().add(newChildren);
10795
newChildren.setParentFeature(feature);
10896
}
10997

110-
private void orAdaptedConstraint(Constraint constraint, Set<String> featuresToReplace, int min, int max, FeatureModel featureModel) {
111-
for (Constraint subPart : constraint.getConstraintSubParts()) {
112-
if (subPart instanceof LiteralConstraint) {
113-
String toReplace = ((LiteralConstraint) subPart).getReference().getIdentifier();
114-
if (featuresToReplace.contains(toReplace)) {
115-
Feature f = featureModel.getFeatureMap().get(toReplace + "-" + (min == 0 ? 1 : min) + "-1");
116-
Constraint newOr = new LiteralConstraint(f);
117-
for (int i = min + 1; i <= max; i++) {
118-
for (int j = 1; j <= i; j++) {
119-
newOr = new OrConstraint(newOr, new LiteralConstraint(featureModel.getFeatureMap().get(toReplace + "-" + i + "-" + j)));
120-
}
121-
}
122-
constraint.replaceConstraintSubPart(subPart, new ParenthesisConstraint(newOr));
123-
}
124-
} else {
125-
orAdaptedConstraint(subPart, featuresToReplace, min, max, featureModel);
126-
}
127-
}
128-
}
129-
130-
private void getAllSubFeatureNamesRecursively(Feature feature, Set<String> names) {
131-
names.add(feature.getFeatureName());
132-
for (Group child : feature.getChildren()) {
133-
for (Feature childFeature : child.getFeatures()) {
134-
getAllSubFeatureNamesRecursively(childFeature, names);
135-
}
136-
}
137-
}
138-
13998
private void addPrefixToNamesRecursively(Feature feature, String prefix, FeatureModel featureModel) {
14099
feature.setFeatureName(feature.getFeatureName() + prefix);
141-
var attributes = feature.getAttributes();
142100
featureModel.getFeatureMap().put(feature.getFeatureName(), feature);
143101
if (!feature.isSubmodelRoot()) {
144102
for (Group group : feature.getChildren()) {

src/main/java/de/vill/conversion/ConvertGroupCardinality.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -85,20 +85,6 @@ private Constraint createDisjunction(Set<Constraint> constraints) {
8585
for (Constraint constraint : constraints) {
8686
orConstraint.add_sub_part(constraint);
8787
}
88-
/*
89-
Constraint orConstraint;
90-
if (constraints.size() == 1) {
91-
Constraint constraint = constraints.iterator().next();
92-
constraints.remove(constraint);
93-
orConstraint = constraint;
94-
} else {
95-
Constraint constraint = constraints.iterator().next();
96-
constraints.remove(constraint);
97-
orConstraint = new OrConstraint(constraint, createDisjunction(constraints));
98-
}
99-
100-
*/
101-
10288
return orConstraint;
10389
}
10490
}

src/main/java/de/vill/conversion/ConvertSMTLevel.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -140,20 +140,6 @@ private Constraint createDisjunction(Set<Constraint> constraints) {
140140
for (Constraint constraint : constraints) {
141141
orConstraint.add_sub_part(constraint);
142142
}
143-
/*
144-
Constraint orConstraint;
145-
if (constraints.size() == 1) {
146-
Constraint constraint = constraints.iterator().next();
147-
constraints.remove(constraint);
148-
orConstraint = constraint;
149-
} else {
150-
Constraint constraint = constraints.iterator().next();
151-
constraints.remove(constraint);
152-
orConstraint = new OrConstraint(constraint, createDisjunction(constraints));
153-
}
154-
155-
*/
156-
157143
return orConstraint;
158144
}
159145

src/main/java/de/vill/model/building/AutomaticBrackets.java

Lines changed: 49 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -20,45 +20,58 @@ private AutomaticBrackets() {}
2020

2121
static Map<Class, Integer> expressionPrecedenceLookup;
2222

23+
public final static int IFF_PRECEDENCE = 0;
24+
public final static int IMPLY_PRECEDENCE = 1;
25+
public final static int OR_PRECEDENCE = 2;
26+
public final static int AND_PRECEDENCE = 3;
27+
public final static int GEQ_LEQ_PRECEDENCE = 4;
28+
public final static int EQUATION_PRECEDENCE = 5;
29+
public final static int CONSTRAINT_UNARY_PRECEDENCE = 6;
30+
31+
public final static int ADD_SUB_PRECEDENCE = 0;
32+
public final static int MULT_DIV_PRECEDENCE = 1;
33+
public final static int UNARY_EXPRESSION_PRECEDENCE = 2;
34+
35+
2336
static {
2437
constraintprecedenceLookup = new HashMap<>();
2538

2639
// n-ary
27-
constraintprecedenceLookup.put(EquivalenceConstraint.class, 0);
28-
constraintprecedenceLookup.put(ImplicationConstraint.class, 1);
29-
constraintprecedenceLookup.put(OrConstraint.class, 2);
30-
constraintprecedenceLookup.put(MultiOrConstraint.class, 2);
31-
constraintprecedenceLookup.put(AndConstraint.class, 3);
32-
constraintprecedenceLookup.put(GreaterEquationConstraint.class, 4);
33-
constraintprecedenceLookup.put(LowerEquationConstraint.class, 4);
34-
constraintprecedenceLookup.put(GreaterEqualsEquationConstraint.class, 4);
35-
constraintprecedenceLookup.put(LowerEqualsEquationConstraint.class, 4);
36-
constraintprecedenceLookup.put(NotEqualsEquationConstraint.class, 5);
37-
constraintprecedenceLookup.put(EqualEquationConstraint.class, 5);
40+
constraintprecedenceLookup.put(EquivalenceConstraint.class, IFF_PRECEDENCE);
41+
constraintprecedenceLookup.put(ImplicationConstraint.class, IMPLY_PRECEDENCE);
42+
constraintprecedenceLookup.put(OrConstraint.class, OR_PRECEDENCE);
43+
constraintprecedenceLookup.put(MultiOrConstraint.class, OR_PRECEDENCE);
44+
constraintprecedenceLookup.put(AndConstraint.class, AND_PRECEDENCE);
45+
constraintprecedenceLookup.put(GreaterEquationConstraint.class, GEQ_LEQ_PRECEDENCE);
46+
constraintprecedenceLookup.put(LowerEquationConstraint.class, GEQ_LEQ_PRECEDENCE);
47+
constraintprecedenceLookup.put(GreaterEqualsEquationConstraint.class, GEQ_LEQ_PRECEDENCE);
48+
constraintprecedenceLookup.put(LowerEqualsEquationConstraint.class, GEQ_LEQ_PRECEDENCE);
49+
constraintprecedenceLookup.put(NotEqualsEquationConstraint.class, EQUATION_PRECEDENCE);
50+
constraintprecedenceLookup.put(EqualEquationConstraint.class, EQUATION_PRECEDENCE);
3851

3952
// Unary
40-
constraintprecedenceLookup.put(LiteralConstraint.class, 6);
41-
constraintprecedenceLookup.put(NotConstraint.class, 6);
42-
constraintprecedenceLookup.put(ParenthesisConstraint.class, 6);
53+
constraintprecedenceLookup.put(LiteralConstraint.class, CONSTRAINT_UNARY_PRECEDENCE);
54+
constraintprecedenceLookup.put(NotConstraint.class, CONSTRAINT_UNARY_PRECEDENCE);
55+
constraintprecedenceLookup.put(ParenthesisConstraint.class, CONSTRAINT_UNARY_PRECEDENCE);
4356

4457
expressionPrecedenceLookup = new HashMap<>();
4558

4659
// n-ary
47-
expressionPrecedenceLookup.put(AddExpression.class, 0);
48-
expressionPrecedenceLookup.put(SubExpression.class, 0);
49-
expressionPrecedenceLookup.put(MulExpression.class, 1);
50-
expressionPrecedenceLookup.put(DivExpression.class, 1);
60+
expressionPrecedenceLookup.put(AddExpression.class, ADD_SUB_PRECEDENCE);
61+
expressionPrecedenceLookup.put(SubExpression.class, ADD_SUB_PRECEDENCE);
62+
expressionPrecedenceLookup.put(MulExpression.class, MULT_DIV_PRECEDENCE);
63+
expressionPrecedenceLookup.put(DivExpression.class, MULT_DIV_PRECEDENCE);
5164

5265
// unary
53-
expressionPrecedenceLookup.put(AvgAggregateFunctionExpression.class, 2);
54-
expressionPrecedenceLookup.put(MaxAggregateFunctionExpression.class, 2);
55-
expressionPrecedenceLookup.put(MinAggregateFunctionExpression.class, 2);
56-
expressionPrecedenceLookup.put(SumAggregateFunctionExpression.class, 2);
57-
expressionPrecedenceLookup.put(ParenthesisExpression.class, 2);
58-
59-
expressionPrecedenceLookup.put(LiteralExpression.class, 2);
60-
expressionPrecedenceLookup.put(NumberExpression.class, 2);
61-
expressionPrecedenceLookup.put(StringExpression.class, 2);
66+
expressionPrecedenceLookup.put(AvgAggregateFunctionExpression.class, UNARY_EXPRESSION_PRECEDENCE);
67+
expressionPrecedenceLookup.put(MaxAggregateFunctionExpression.class, UNARY_EXPRESSION_PRECEDENCE);
68+
expressionPrecedenceLookup.put(MinAggregateFunctionExpression.class, UNARY_EXPRESSION_PRECEDENCE);
69+
expressionPrecedenceLookup.put(SumAggregateFunctionExpression.class, UNARY_EXPRESSION_PRECEDENCE);
70+
expressionPrecedenceLookup.put(ParenthesisExpression.class, UNARY_EXPRESSION_PRECEDENCE);
71+
72+
expressionPrecedenceLookup.put(LiteralExpression.class, UNARY_EXPRESSION_PRECEDENCE);
73+
expressionPrecedenceLookup.put(NumberExpression.class, UNARY_EXPRESSION_PRECEDENCE);
74+
expressionPrecedenceLookup.put(StringExpression.class, UNARY_EXPRESSION_PRECEDENCE);
6275
}
6376

6477
/**
@@ -75,7 +88,15 @@ private static boolean requiresBracketsInExpression(Expression parent, Expressio
7588
return expressionPrecedenceLookup.get(parent.getClass()) >= expressionPrecedenceLookup.get(child.getClass());
7689
}
7790

78-
91+
/**
92+
* Method can be used so that the printed versions of constraints are semantically equivalent to the internal object representation
93+
* @see de.vill.model.building.AutomaticBrackets for the precendences
94+
* @param parent
95+
* @param child
96+
* @param withSubmodels Consider imported submodels
97+
* @param currentAlias Check alias of submodel at hand
98+
* @return
99+
*/
79100
public static String enforceConstraintBracketsIfNecessary(Constraint parent, Constraint child, boolean withSubmodels, String currentAlias) {
80101
if (requiresBracketsInConstraint(parent, child)) {
81102
return "(" + child.toString(withSubmodels, currentAlias) + ")";

0 commit comments

Comments
 (0)