com.sun.msv.relaxns.verifier.TREXIslandVerifier Maven / Gradle / Ivy
/*
* Copyright (c) 2001-2013 Oracle and/or its affiliates. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* - Neither the name of Oracle nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package com.sun.msv.relaxns.verifier;
import java.util.Map;
import java.util.Set;
import java.util.Vector;
import org.iso_relax.dispatcher.Dispatcher;
import org.iso_relax.dispatcher.ElementDecl;
import org.iso_relax.dispatcher.IslandSchema;
import org.iso_relax.dispatcher.IslandVerifier;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import com.sun.msv.grammar.ElementExp;
import com.sun.msv.grammar.Expression;
import com.sun.msv.relaxns.grammar.ExternalElementExp;
import com.sun.msv.relaxns.grammar.relax.AnyOtherElementExp;
import com.sun.msv.verifier.regexp.ComplexAcceptor;
import com.sun.msv.verifier.regexp.REDocumentDeclaration;
import com.sun.msv.verifier.regexp.SimpleAcceptor;
/**
* IslandVerifier for RELAX Core and TREX.
*
* @author Kohsuke KAWAGUCHI
*/
class TREXIslandVerifier
extends com.sun.msv.verifier.Verifier
implements org.iso_relax.dispatcher.IslandVerifier
{
protected Dispatcher dispatcher;
public void setDispatcher( Dispatcher disp ) {
this.dispatcher = disp;
this.errorHandler = new ErrorHandlerAdaptor( disp );
}
/**
* lazily constructed map from Rule object to ExternalElementExp.
*
* Rule object r
and ExternalElementExp whose rule field
* is r
are registered to this map when child island is found.
*
* this map is used in endChildIsland method.
*/
protected final Map rule2exp = new java.util.HashMap();
TREXIslandVerifier( RulesAcceptor initialAcceptor ) {
super( null, null ); // quick hack.
current = initialAcceptor;
}
public void startElement( String namespaceUri, String localName, String qName, Attributes atts )
throws SAXException {
super.startElement(namespaceUri,localName,qName,atts);
// check current Acceptor object to see if switching is necessary.
if( current instanceof SimpleAcceptor ) {
SimpleAcceptor sa = (SimpleAcceptor)current;
// if sa.owner==null, we are in error recovery mode.
// so don't let another IslandVerifier kick in.
// just continue validation by using the current handler.
if( sa.owner instanceof ExternalElementExp ) {
// switch to the child island.
switchToChildIsland( new ExternalElementExp[]{(ExternalElementExp)sa.owner}, namespaceUri, localName, qName, atts );
return;
}
if( sa.owner instanceof AnyOtherElementExp ) {
// switch to anyOtherElement.
switchToAnyOtherElement( new AnyOtherElementExp[]{(AnyOtherElementExp)sa.owner}, namespaceUri, localName, qName, atts );
return;
}
return;
}
if( current instanceof ComplexAcceptor ) {
ComplexAcceptor ca = (ComplexAcceptor)current;
Vector vec = null;
for( int i=0; i
//
// ...
//
// Even if this is the case, this implementation switches to
// the new child Verifier. Therefore
// ...
// won't be used.
if( vec!=null ) {
// switch to the child island.
ExternalElementExp[] exps = new ExternalElementExp[vec.size()];
vec.toArray(exps);
switchToChildIsland(exps, namespaceUri, localName, qName, atts );
return;
}
// see if there is anyOtherElementExp
for( int i=0; i
© 2015 - 2025 Weber Informatics LLC | Privacy Policy