package org.openstreetmap.josm.gui.mappaint;
import java.util.Collection;
import org.openstreetmap.josm.data.osm.OsmPrimitive;
import org.openstreetmap.josm.data.osm.OsmUtils;
import org.openstreetmap.josm.data.osm.visitor.paint.MapPaintSettings;
import org.openstreetmap.josm.data.osm.visitor.paint.MapPainter;
abstract public class ElemStyle {
// zoom range to display the feature
public long minScale;
public long maxScale;
public int priority;
public String code;
Collection<Rule> rules = null;
@Override
public boolean equals(Object o) {
return (o instanceof ElemStyle) && (((ElemStyle) o).getCode().equals(getCode()));
}
@Override
public int hashCode() {
return getClass().hashCode();
}
public String getCode() {
if(code == null) {
code = "";
if (rules != null) {
for(Rule r: rules) {
code += r.toCode();
}
}
}
return code;
}
public boolean check(OsmPrimitive primitive)
{
if(rules == null)
return true;
for(Rule r : rules)
{
String k = primitive.get(r.key);
String bv = OsmUtils.getNamedOsmBoolean(r.boolValue);
if(k == null || (r.value != null && !k.equals(r.value))
|| (bv != null && !bv.equals(OsmUtils.getNamedOsmBoolean(k))))
return false;
}
return true;
}
public abstract void paintPrimitive(OsmPrimitive primitive, MapPaintSettings paintSettings, MapPainter painter, boolean selected);
}