package de.FeatureModellingTool.DupHelper.ConstraintTransform;
import java.util.Collection;
import java.util.Iterator;
import de.FeatureModellingTool.Customize.Customization;
import de.FeatureModellingTool.Customize.CustomizationVersion;
import de.FeatureModellingTool.FeatureModel.CFRModifier;
import de.FeatureModellingTool.FeatureModel.CFRelation;
import de.FeatureModellingTool.FeatureModel.CompositeConstraintPortType;
import de.FeatureModellingTool.FeatureModel.Constraint;
import de.FeatureModellingTool.FeatureModel.ConstraintModel;
import de.FeatureModellingTool.FeatureModel.Feature;
import de.FeatureModellingTool.FeatureModel.GroupConstraintType;
public class PredicateHelper {
public static int getCustomizationCount(Collection<Customization> values , Customization cDest) {
int result = 0;
for (Iterator<Customization> it=values.iterator() ; it.hasNext() ; ) {
if (cDest.equals(it.next())) {
result ++;
}
}
return result;
}
public static Customization getCFCustomization(Feature feature , Customization featureValue , Constraint cons , ConstraintModel cm) {
if (Customization.Undecided.equals(featureValue)) {
return featureValue;
}
CFRelation cfr = cm.getCFRelation(feature , cons , true);
if (cfr==null) {
cfr = cm.getCFRelation(feature , cons , false);
}
if (cfr==null) {
return featureValue;
} else {
if (cfr.getModifier().getName().equals(CFRModifier.Affirmation.getName())) {
return featureValue;
} else {
if (Customization.Selected.equals(featureValue)) {
return Customization.Unselected;
} else {
return Customization.Selected;
}
}
}
}
public static Predicate getPredicateByGroupConstraintType(GroupConstraintType gct) {
if (gct.equals(GroupConstraintType.SingleGroup)) {
return new SinglePredicate();
} else if (gct.equals(GroupConstraintType.AllGroup)) {
return new AllPredicate();
} else {
return new MultiPredicate();
}
}
public static Predicate getPredicateByCompositeConstraintPortType(CompositeConstraintPortType ccpt) {
if (ccpt.equals(CompositeConstraintPortType.Single)) {
return new SinglePredicate();
} else if (ccpt.equals(CompositeConstraintPortType.All)) {
return new AllPredicate();
} else {
return new MultiPredicate();
}
}
public static void fillPredicate(Collection<Feature> features , Constraint cons , ConstraintModel cm , CustomizationVersion cv , Predicate pDest) {
for (Iterator<Feature> itFeature = features.iterator() ; itFeature.hasNext() ; ) {
Feature f = itFeature.next();
Customization cus = getCFCustomization(f , cv.getFinalCustomizationById(f.getID()) , cons , cm);
pDest.addValue(cus);
}
}
}