001 // License: GPL. For details, see LICENSE file. 002 package org.openstreetmap.josm.gui.mappaint.xml; 003 004 import java.util.Collection; 005 006 import org.openstreetmap.josm.data.osm.OsmPrimitive; 007 import org.openstreetmap.josm.data.osm.OsmUtils; 008 import org.openstreetmap.josm.gui.mappaint.Range; 009 010 abstract public class Prototype { 011 // zoom range to display the feature 012 public Range range; 013 014 public int priority; 015 public String code; 016 public Collection<XmlCondition> conditions = null; 017 018 public Prototype(Range range) { 019 this.range = range; 020 } 021 022 public Prototype() { 023 } 024 025 public String getCode() { 026 if(code == null) { 027 code = ""; 028 if (conditions != null) { 029 for(XmlCondition r: conditions) { 030 code += r.toCode(); 031 } 032 } 033 } 034 return code; 035 } 036 037 public boolean check(OsmPrimitive primitive) 038 { 039 if(conditions == null) 040 return true; 041 for(XmlCondition r : conditions) 042 { 043 String k = primitive.get(r.key); 044 String bv = OsmUtils.getNamedOsmBoolean(r.boolValue); 045 if(k == null || (r.value != null && !k.equals(r.value)) 046 || (bv != null && !bv.equals(OsmUtils.getNamedOsmBoolean(k)))) 047 return false; 048 } 049 return true; 050 } 051 052 }