/**
*
*/
package org.js.model.feature.csp;
import java.util.Set;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.js.model.feature.Attribute;
import org.js.model.feature.Feature;
import org.js.model.feature.FeatureModel;
import org.js.model.feature.FeatureState;
import org.js.model.feature.edit.FeatureModelHelper;
/**
* A variant feature configuration.
*
* @author <a href="mailto:info@juliaschroeter.de">Julia Schroeter</a>
*
*/
public class FeatureVariant {
FeatureModelHelper helper;
public FeatureVariant(FeatureModel model) {
this.helper = new FeatureModelHelper(model);
}
public FeatureModel getModel(){
return helper.getModel();
}
public Set<Feature> getSelectedFeatures(){
helper.refresh();
return helper.getSelectedFeatures();
}
public void setAttributeValue(String attributeId) {
Attribute attribute = helper.getAttribute(attributeId);
if (attribute != null) {
if (FeatureModelHelper.isAttributeValueSet(attribute)) {
int value = helper.getValue(attributeId);
String attributeValue = FeatureModelHelper.getAttributeValue(value, attribute);
attribute.setValue(attributeValue);
}
}
}
public void setAttributeValue(int value, String attributeId) {
if (value != TranslateFM2CSP.attributeDisabled) {
Attribute attribute = helper.getAttribute(attributeId);
if (attribute != null) {
String attributeValue = FeatureModelHelper.getAttributeValue(value, attribute);
attribute.setValue(attributeValue);
}
}
}
public void selectFeature(String featureId) {
Feature feature = helper.getFeature(featureId);
if (feature != null) {
feature.setConfigurationState(FeatureState.SELECTED);
}
}
public void deselectFeature(String featureId) {
Feature feature = helper.getFeature(featureId);
if (feature != null) {
feature.setConfigurationState(FeatureState.DESELECTED);
}
}
public int getSelectedFeatureCount() {
return helper.getSelectedFeatures().size();
}
public String toString() {
StringBuffer buffer = new StringBuffer();
for (Feature feature : helper.getAllFeatures()) {
if (buffer.length() > 0) {
buffer.append(", ");
}
String featureId = EcoreUtil.getID(feature);
buffer.append(getFeatureSelectionString(feature));
buffer.append(featureId);
EList<Attribute> attributes = feature.getAttributes();
for (Attribute attribute : attributes) {
buffer.append("; ");
buffer.append(attribute.getFeature().getId());
buffer.append(".");
buffer.append(attribute.getName());
buffer.append("=");
buffer.append(attribute.getValue());
buffer.append(" ");
}
}
return buffer.toString();
}
private String getFeatureSelectionString(Feature feature) {
String state;
FeatureState selected = feature.getConfigurationState();
if (FeatureState.UNBOUND.equals(selected)) {
state = "(" + selected.getLiteral() + ")";
}
state = FeatureState.SELECTED.equals(selected) ? "+" : "-";
return state;
}
}