001    package com.thaiopensource.validate;
002    
003    import com.thaiopensource.util.PropertyId;
004    import com.thaiopensource.util.PropertyMap;
005    import com.thaiopensource.util.PropertyMapBuilder;
006    import com.thaiopensource.xml.sax.XMLReaderCreator;
007    import org.xml.sax.ErrorHandler;
008    import org.xml.sax.EntityResolver;
009    
010    /**
011     * Provides common properties to control reading schemas and validation.
012     *
013     * @see Schema#createValidator
014     * @see SchemaReader#createSchema
015     * @see PropertyMap
016     * @see PropertyId
017     * @see com.thaiopensource.validate.rng.RngProperty
018     * @see com.thaiopensource.validate.schematron.SchematronProperty
019     */
020    public class ValidateProperty {
021      /**
022       * Property specifying ErrorHandler to be used for reporting errors.  The value
023       * to which this PropertyId maps must be an instance of ErrorHandler.
024       *
025       * @see ErrorHandler
026       */
027      public static final ErrorHandlerPropertyId ERROR_HANDLER = new ErrorHandlerPropertyId("ERROR_HANDLER");
028    
029      /**
030       * Property specifying EntityResolver to be used for resolving entities. The value
031       * to which this PropertyId maps must be an instance of EntityResolver.
032       *
033       * @see EntityResolver
034       */
035      public static final EntityResolverPropertyId ENTITY_RESOLVER = new EntityResolverPropertyId("ENTITY_RESOLVER");
036    
037      /**
038       * Property specifying XMLReaderCreator used to create XMLReader objects needed for
039       * parsing XML documents.  The value to which this PropertyId maps must be an
040       * instance of XMLReaderCreator.
041       */
042      public static final XMLReaderCreatorPropertyId XML_READER_CREATOR
043              = new XMLReaderCreatorPropertyId("XML_READER_CREATOR");
044    
045      private ValidateProperty() { }
046    
047      /**
048       * A PropertyId whose value is constrained to be an instance of
049       * ErrorHandler.
050       *
051       * @see ErrorHandler
052       */
053      public static class ErrorHandlerPropertyId extends PropertyId {
054        public ErrorHandlerPropertyId(String name) {
055          super(name, ErrorHandler.class);
056        }
057    
058        /**
059         * Returns the value of the property.  This is a typesafe
060         * version of <code>PropertyMap.get</code>.
061         *
062         * @param properties the PropertyMap to be used
063         * @return the ErrorHandler to which the PropertyMap maps this PropertyId,
064         * or <code>null</code> if this PropertyId is not in the PropertyMap
065         * @see PropertyMap#get
066         */
067        public ErrorHandler get(PropertyMap properties) {
068          return (ErrorHandler)properties.get(this);
069        }
070    
071        /**
072         * Sets the value of the property. Modifies the PropertyMapBuilder
073         * so that this PropertyId is mapped to the specified value. This
074         * is a typesafe version of PropertyMapBuilder.put.
075         *
076         * @param builder the PropertyMapBuilder to be modified
077         * @param value the ErrorHandler to which this PropertyId is to be mapped
078         * @return the ErrorHandler to which this PropertyId was mapped before,
079         * or <code>null</code> if it was not mapped
080         *
081         * @see PropertyMapBuilder#put
082         */
083        public ErrorHandler put(PropertyMapBuilder builder, ErrorHandler value) {
084          return (ErrorHandler)builder.put(this, value);
085        }
086      }
087    
088      /**
089       * A PropertyId whose value is constrained to be an instance of
090       * EntityResolver.
091       *
092       * @see EntityResolver
093       */
094      public static class EntityResolverPropertyId extends PropertyId {
095        public EntityResolverPropertyId(String name) {
096          super(name, EntityResolver.class);
097        }
098    
099        /**
100         * Returns the value of the property.  This is a typesafe
101         * version of <code>PropertyMap.get</code>.
102         *
103         * @param properties the PropertyMap to be used
104         * @return the EntityResolver to which the PropertyMap maps this PropertyId,
105         * or <code>null</code> if this PropertyId is not in the PropertyMap
106         * @see PropertyMap#get
107         */
108        public EntityResolver get(PropertyMap properties) {
109          return (EntityResolver)properties.get(this);
110        }
111    
112        /**
113         * Sets the value of the property. Modifies the PropertyMapBuilder
114         * so that this PropertyId is mapped to the specified value. This
115         * is a typesafe version of PropertyMapBuilder.put.
116         *
117         * @param builder the PropertyMapBuilder to be modified
118         * @param value the EntityResolver to which this PropertyId is to be mapped
119         * @return the EntityResolver to which this PropertyId was mapped before,
120         * or <code>null</code> if it was not mapped
121         *
122         * @see PropertyMapBuilder#put
123         */
124        public EntityResolver put(PropertyMapBuilder builder, EntityResolver value) {
125          return (EntityResolver)builder.put(this, value);
126        }
127      }
128    
129      /**
130       * A PropertyId whose value is constrained to be an instance of
131       * XMLReaderCreator.
132       *
133       * @see XMLReaderCreator
134       */
135      public static class XMLReaderCreatorPropertyId extends PropertyId {
136        public XMLReaderCreatorPropertyId(String name) {
137          super(name, XMLReaderCreator.class);
138        }
139    
140        /**
141         * Returns the value of the property.  This is a typesafe
142         * version of <code>PropertyMap.get</code>.
143         *
144         * @param properties the PropertyMap to be used
145         * @return the XMLReaderCreator to which the PropertyMap maps this PropertyId,
146         * or <code>null</code> if this PropertyId is not in the PropertyMap
147         * @see PropertyMap#get
148         */
149        public XMLReaderCreator get(PropertyMap properties) {
150          return (XMLReaderCreator)properties.get(this);
151        }
152    
153        /**
154         * Sets the value of the property. Modifies the PropertyMapBuilder
155         * so that this PropertyId is mapped to the specified value. This
156         * is a typesafe version of PropertyMapBuilder.put.
157         *
158         * @param builder the PropertyMapBuilder to be modified
159         * @param value the XMLReaderCreator to which this PropertyId is to be mapped
160         * @return the XMLReaderCreator to which this PropertyId was mapped before,
161         * or <code>null</code> if it was not mapped
162         *
163         * @see PropertyMapBuilder#put
164         */
165        public XMLReaderCreator put(PropertyMapBuilder builder, XMLReaderCreator value) {
166          return (XMLReaderCreator)builder.put(this, value);
167        }
168      }
169    }