001 package com.thaiopensource.relaxng.util;
002
003 import com.thaiopensource.util.PropertyMap;
004 import com.thaiopensource.util.PropertyMapBuilder;
005 import com.thaiopensource.validate.ValidateProperty;
006 import com.thaiopensource.validate.ValidationDriver;
007 import com.thaiopensource.validate.rng.CompactSchemaReader;
008 import com.thaiopensource.validate.rng.RngProperty;
009 import com.thaiopensource.xml.sax.XMLReaderCreator;
010 import com.thaiopensource.xml.sax.Sax2XMLReaderCreator;
011 import org.xml.sax.ErrorHandler;
012
013 /**
014 * Provides a compatibility wrapper around ValidationDriver. New applications
015 * should use ValidationDriver directly.
016 *
017 * @author <a href="mailto:jjc@jclark.com">James Clark</a>
018 * @see ValidationDriver
019 * @deprecated
020 */
021 public class ValidationEngine extends ValidationDriver {
022
023 /**
024 * Flag indicating that ID/IDREF/IDREFS should be checked.
025 * @see RngProperty#CHECK_ID_IDREF
026 */
027 public static final int CHECK_ID_IDREF = 01;
028 /**
029 * Flag indicating that the schema is in the RELAX NG compact syntax rather than the XML syntax.
030 * @see CompactSchemaReader
031 */
032 public static final int COMPACT_SYNTAX = 02;
033 /**
034 * @see RngProperty#FEASIBLE
035 */
036 public static final int FEASIBLE = 04;
037
038 /**
039 * Default constructor. Equivalent to <code>ValidationEngine(null, null, CHECK_ID_IDREF)</code>.
040 */
041 public ValidationEngine() {
042 this(null, null, CHECK_ID_IDREF);
043 }
044 /**
045 * Constructs a <code>ValidationEngine</code>.
046 *
047 * @param xrc the <code>XMLReaderCreator</code> to be used for constructing <code>XMLReader</code>s;
048 * if <code>null</code> uses <code>Sax2XMLReaderCreator</code>
049 * @param eh the <code>ErrorHandler</code> to be used for reporting errors; if <code>null</code>
050 * uses <code>DraconianErrorHandler</code>
051 * @param flags bitwise OR of flags selected from <code>CHECK_ID_IDREF</code>, <code>COMPACT_SYNTAX</code>,
052 * <code>FEASIBLE</code>, <code>MNS</code>
053 * @see com.thaiopensource.xml.sax.DraconianErrorHandler
054 * @see com.thaiopensource.xml.sax.Sax2XMLReaderCreator
055 * @see #CHECK_ID_IDREF
056 * @see #COMPACT_SYNTAX
057 * @see #FEASIBLE
058 */
059 public ValidationEngine(XMLReaderCreator xrc,
060 ErrorHandler eh,
061 int flags) {
062 super(makePropertyMap(xrc, eh, flags),
063 (flags & COMPACT_SYNTAX) == 0 ? null : CompactSchemaReader.getInstance());
064 }
065
066 private static PropertyMap makePropertyMap(XMLReaderCreator xrc, ErrorHandler eh, int flags) {
067 PropertyMapBuilder builder = new PropertyMapBuilder();
068 if (xrc == null)
069 xrc = new Sax2XMLReaderCreator();
070 ValidateProperty.XML_READER_CREATOR.put(builder, xrc);
071 if (eh != null)
072 ValidateProperty.ERROR_HANDLER.put(builder, eh);
073 if ((flags & CHECK_ID_IDREF) != 0)
074 RngProperty.CHECK_ID_IDREF.add(builder);
075 if ((flags & FEASIBLE) != 0)
076 RngProperty.FEASIBLE.add(builder);
077 return builder.toPropertyMap();
078 }
079
080 /**
081 * Constructs a <code>ValidationEngine</code>.
082 *
083 * @param xrc the <code>XMLReaderCreator</code> to be used for constructing <code>XMLReader</code>s;
084 * if <code>null</code> uses <code>Sax2XMLReaderCreator</code>
085 * @param eh the <code>ErrorHandler</code> to be used for reporting errors; if <code>null</code>
086 * uses <code>DraconianErrorHandler</code>
087 * @param checkIdIdref <code>true</code> if ID/IDREF/IDREFS should be checked; <code>false</code> otherwise
088 * @see com.thaiopensource.xml.sax.DraconianErrorHandler
089 * @see com.thaiopensource.xml.sax.Sax2XMLReaderCreator
090 */
091 public ValidationEngine(XMLReaderCreator xrc,
092 ErrorHandler eh,
093 boolean checkIdIdref) {
094 this(xrc, eh, checkIdIdref ? CHECK_ID_IDREF : 0);
095 }
096
097 /**
098 * Constructs a <code>ValidationEngine</code>.
099 *
100 * @param xrc the <code>XMLReaderCreator</code> to be used for constructing <code>XMLReader</code>s;
101 * if <code>null</code> uses <code>Sax2XMLReaderCreator</code>
102 * @param eh the <code>ErrorHandler</code> to be used for reporting errors; if <code>null</code>
103 * uses <code>DraconianErrorHandler</code>
104 * @param checkIdIdref <code>true</code> if ID/IDREF/IDREFS should be checked; <code>false</code> otherwise
105 * @param compactSyntax <code>true</code> if the RELAX NG compact syntax should be used to parse the schema;
106 * <code>false</code> if the XML syntax should be used
107 * @see com.thaiopensource.xml.sax.DraconianErrorHandler
108 * @see com.thaiopensource.xml.sax.Sax2XMLReaderCreator
109 */
110 public ValidationEngine(XMLReaderCreator xrc, ErrorHandler eh, boolean checkIdIdref, boolean compactSyntax) {
111 this(xrc,
112 eh,
113 (checkIdIdref ? CHECK_ID_IDREF : 0)
114 | (compactSyntax ? COMPACT_SYNTAX : 0));
115 }
116
117
118 public ValidationEngine(XMLReaderCreator xrc, ErrorHandler eh, boolean checkIdIdref, boolean compactSyntax,
119 boolean feasible) {
120 this(xrc,
121 eh,
122 (checkIdIdref ? CHECK_ID_IDREF : 0)
123 | (compactSyntax ? COMPACT_SYNTAX : 0)
124 | (feasible ? FEASIBLE : 0));
125 }
126
127 }