package de.ovgu.cide.fm.guidsl; import java.util.Collections; import java.util.Set; import org.eclipse.swt.graphics.RGB; import de.ovgu.cide.features.IFeature; import de.ovgu.cide.features.IFeatureWithID; import featureide.fm.core.Feature; public class FeatureAdapter implements IFeatureWithID { private Feature feature; private GuidslFeatureModelWrapper model; public FeatureAdapter(Feature feature, GuidslFeatureModelWrapper model) { this.feature = feature; this.model = model; } public long getId() { return model.extraAttributeStorage.getFeatureId(feature); } public String getName() { return feature.getName(); } public RGB getRGB() { return model.extraAttributeStorage.getFeatureColor(feature); } public Set<IFeature> getRequiredFeatures() { return Collections.EMPTY_SET; } public boolean isVisible() { return model.extraAttributeStorage.isFeatureVisible(feature); } public void setName(String name) throws UnsupportedOperationException { // feature.setName(name); throw new UnsupportedOperationException(); } public void setRGB(RGB color) throws UnsupportedOperationException { model.extraAttributeStorage.setFeatureColor(feature, color); } public void setVisible(boolean isVisible) throws UnsupportedOperationException { model.extraAttributeStorage.setFeatureVisibile(feature, isVisible); } public int compareTo(IFeature o) { return getName().compareTo(o.getName()); } @Override public int hashCode() { long value = getId(); return (int) (value ^ (value >>> 32));// see Long.hashCode; } @Override /** * two features are the same if they have the same ID (no comparison on the name!) */ public boolean equals(Object obj) { if (obj instanceof FeatureAdapter) return getId() == ((FeatureAdapter) obj).getId(); if (obj instanceof Feature) return getId() == model.extraAttributeStorage .getFeatureId((Feature) obj); return super.equals(obj); } @Override public String toString() { return "Feature:" + getName() + "[" + hashCode() + "]"; } public boolean canSetName() { return false; } public boolean canSetRGB() { return true; } public boolean canSetVisible() { return true; } /** * to be used only within this plugin! * * @return */ public Feature getInternalFeature() { return feature; } }