/*
* @(#)$Id: InlineTagState.java,v 1.2 2001/05/01 18:13:09 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.core;
import com.sun.msv.grammar.Expression;
import com.sun.msv.grammar.relax.TagClause;
import com.sun.msv.grammar.SimpleNameClass;
/**
* parses <tag> element inlined in <elementRule>
*
* @author <a href="mailto:kohsuke.kawaguchi@eng.sun.com">Kohsuke KAWAGUCHI</a>
*/
public class InlineTagState extends ClauseState
{
protected void endSelf()
{
super.endSelf();
String name = startTag.getAttribute("name");
if(name==null)
{// then it defaults to the label of parent state
name = parentState.getStartTag().getAttribute("label");
if(name==null) // label attribute of the parent itself defaults to role attribute.
name = parentState.getStartTag().getAttribute("role");
if(name==null)
// this is an error of elementRule.
// so user will receive an error by ElementRuleBaseState.
// silently ignore this error here.
name = "<undefined>";
}
if(!(parentState instanceof ElementRuleBaseState ))
// inline element must be used as a child of elementRule
throw new Error(); // assertion failed.
TagClause c = new TagClause();
c.nameClass = new SimpleNameClass(
getReader().module.targetNamespace,
name );
c.exp = exp; // exp holds a sequence of AttributeExp
((ElementRuleBaseState)parentState).onEndInlineClause(c);
return;
}
}