01: /*
02: * Copyright 2006 Sun Microsystems, Inc. All Rights Reserved.
03: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
04: *
05: * This code is free software; you can redistribute it and/or modify it
06: * under the terms of the GNU General Public License version 2 only, as
07: * published by the Free Software Foundation. Sun designates this
08: * particular file as subject to the "Classpath" exception as provided
09: * by Sun in the LICENSE file that accompanied this code.
10: *
11: * This code is distributed in the hope that it will be useful, but WITHOUT
12: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14: * version 2 for more details (a copy is included in the LICENSE file that
15: * accompanied this code).
16: *
17: * You should have received a copy of the GNU General Public License version
18: * 2 along with this work; if not, write to the Free Software Foundation,
19: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20: *
21: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22: * CA 95054 USA or visit www.sun.com if you need additional information or
23: * have any questions.
24: */
25:
26: package com.sun.xml.internal.rngom.ast.util;
27:
28: import com.sun.xml.internal.rngom.ast.builder.BuildException;
29: import com.sun.xml.internal.rngom.ast.builder.SchemaBuilder;
30: import com.sun.xml.internal.rngom.ast.om.ParsedPattern;
31: import com.sun.xml.internal.rngom.binary.SchemaBuilderImpl;
32: import com.sun.xml.internal.rngom.binary.SchemaPatternBuilder;
33: import com.sun.xml.internal.rngom.parse.IllegalSchemaException;
34: import com.sun.xml.internal.rngom.parse.host.ParsedPatternHost;
35: import com.sun.xml.internal.rngom.parse.host.SchemaBuilderHost;
36: import org.relaxng.datatype.DatatypeLibraryFactory;
37: import org.xml.sax.ErrorHandler;
38:
39: /**
40: * Wraps a {@link SchemaBuilder} and does all the semantic checks
41: * required by the RELAX NG spec.
42: *
43: * <h2>Usage</h2>
44: * <p>
45: * Whereas you normally write it as follows:
46: * <pre>
47: * YourParsedPattern r = (YourParsedPattern)parseable.parse(sb);
48: * </pre>
49: * write this as follows:
50: * <pre>
51: * YourParsedPattern r = (YourParsedPattern)parseable.parse(new CheckingSchemaBuilder(sb,eh));
52: * </pre>
53: *
54: * <p>
55: * The checking is done by using the <tt>rngom.binary</tt> package, so if you are using
56: * that package for parsing schemas, then there's no need to use this.
57: *
58: * @author
59: * Kohsuke Kawaguchi (kk@kohsuke.org)
60: */
61: public class CheckingSchemaBuilder extends SchemaBuilderHost {
62: /**
63: *
64: * @param sb
65: * Your {@link SchemaBuilder} that parses RELAX NG schemas.
66: * @param eh
67: * All the errors found will be sent to this handler.
68: */
69: public CheckingSchemaBuilder(SchemaBuilder sb, ErrorHandler eh) {
70: super (new SchemaBuilderImpl(eh), sb);
71: }
72:
73: public CheckingSchemaBuilder(SchemaBuilder sb, ErrorHandler eh,
74: DatatypeLibraryFactory dlf) {
75: super (
76: new SchemaBuilderImpl(eh, dlf,
77: new SchemaPatternBuilder()), sb);
78: }
79:
80: public ParsedPattern expandPattern(ParsedPattern p)
81: throws BuildException, IllegalSchemaException {
82:
83: // just return the result from the user-given SchemaBuilder
84: ParsedPatternHost r = (ParsedPatternHost) super
85: .expandPattern(p);
86: return r.rhs;
87: }
88: }
|