/*
* @(#)$Id: SchemaState.java,v 1.6 2001/05/01 18:13:20 Bear Exp $
*
* Copyright 2001 Sun Microsystems, Inc. All Rights Reserved.
*
* This software is the proprietary information of Sun Microsystems, Inc.
* Use is subject to license terms.
*
*/
package com.sun.msv.reader.xmlschema;
import com.sun.msv.grammar.xmlschema.XMLSchemaSchema;
/**
* used to parse <schema> element.
*
* @author <a href="mailto:kohsuke.kawaguchi@eng.sun.com">Kohsuke KAWAGUCHI</a>
*/
public class SchemaState extends SchemaIncludedState {
protected SchemaState( String expectedTargetNamespace ) {
super(expectedTargetNamespace);
}
private XMLSchemaSchema old;
protected void onTargetNamespaceResolved( String targetNs ) {
super.onTargetNamespaceResolved(targetNs);
final XMLSchemaReader reader = (XMLSchemaReader)this.reader;
// sets new XMLSchemaGrammar object.
old = reader.currentSchema;
reader.currentSchema = reader.getOrCreateSchema(targetNs);
if( reader.isSchemaDefined(reader.currentSchema) ) {
reader.reportError( reader.ERR_DUPLICATE_SCHEMA_DEFINITION, targetNs );
// recover by providing dummy grammar object.
// this object is not registered to the map,
// so it cannot be referenced.
reader.currentSchema = new XMLSchemaSchema(targetNs,reader.grammar);
}
reader.markSchemaAsDefined(reader.currentSchema);
}
protected void endSelf() {
final XMLSchemaReader reader = (XMLSchemaReader)this.reader;
reader.currentSchema = old;
super.endSelf();
}
}