001    package com.thaiopensource.validate;
002    
003    import com.thaiopensource.util.PropertyMap;
004    import com.thaiopensource.util.PropertyId;
005    import com.thaiopensource.util.PropertyMapBuilder;
006    
007    public abstract class AbstractSchema implements Schema {
008      private final PropertyMap properties;
009    
010      public AbstractSchema() {
011        this(PropertyMap.EMPTY);
012      }
013    
014      public AbstractSchema(PropertyMap properties) {
015        this.properties = properties;
016      }
017    
018      public AbstractSchema(PropertyMap properties, PropertyId[] supportedPropertyIds) {
019        this(filterProperties(properties, supportedPropertyIds));
020      }
021    
022      public PropertyMap getProperties() {
023        return properties;
024      }
025    
026      static public PropertyMap filterProperties(PropertyMap properties, PropertyId[] supportedPropertyIds) {
027        PropertyMapBuilder builder = new PropertyMapBuilder();
028        for (int i = 0; i < supportedPropertyIds.length; i++) {
029          Object value = properties.get(supportedPropertyIds[i]);
030          if (value != null)
031            builder.put(supportedPropertyIds[i], value);
032        }
033        return builder.toPropertyMap();
034      }
035    }