/* * @(#)$Id: HedgeRuleBaseState.java,v 1.6 2001/05/01 18:13:07 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.relax; import com.sun.msv.reader.State; import com.sun.msv.reader.SimpleState; import com.sun.msv.reader.ExpressionOwner; import com.sun.msv.grammar.Expression; import com.sun.msv.util.StartTagInfo; /** * Base implementation for HedgeRuleState and TopLevelState. * * expects one and only one expression as its child. * * @author <a href="mailto:kohsuke.kawaguchi@eng.sun.com">Kohsuke KAWAGUCHI</a> */ public abstract class HedgeRuleBaseState extends SimpleState implements ExpressionOwner { private Expression contentModel = null; public void onEndChild( Expression exp ) {// this method is called after child expression is found and parsed if( contentModel!=null ) reader.reportError( reader.ERR_MORE_THAN_ONE_CHILD_EXPRESSION ); // recover by ignoring previous expression contentModel = exp; } protected final void endSelf() { super.endSelf(); if( contentModel==null ) { reader.reportError( reader.ERR_MISSING_CHILD_EXPRESSION ); return; // recover by ignoring this hedgeRule. } endSelf(contentModel); // do something useful with child expression } /** derived class will receive child expression by this method */ protected abstract void endSelf( Expression contentModel ); protected State createChildState( StartTagInfo tag ) { // particles only return reader.createExpressionChildState(this,tag); } }