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    }