/* * @(#)$Id: AttributeState.java,v 1.7 2001/11/28 01:49:59 kk122374 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.trex; import com.sun.msv.grammar.Expression; import com.sun.msv.grammar.AttributeExp; /** * parses <attribute> pattern. * * @author <a href="mailto:kohsuke.kawaguchi@eng.sun.com">Kohsuke KAWAGUCHI</a> */ public class AttributeState extends NameClassAndExpressionState { protected boolean firstChild=true; protected Expression initialExpression() { // <attribute> defaults to <anyString /> return Expression.anyString; } protected String getNamespace() { final String ns = startTag.getAttribute("ns"); final boolean global = "true".equals(startTag.getAttribute("global")); if( ns!=null ) return ns; // "ns" attribute always has precedence. // if global="true" is specified, it defaults to propagated ns attribute. if( global ) return ((TREXBaseReader)reader).targetNamespace; // otherwise, it defaults to "" return ""; } protected Expression castExpression( Expression initialExpression, Expression newChild ) { // <attribute> is allowed to have only one pattern if(!firstChild) reader.reportError( TREXBaseReader.ERR_MORE_THAN_ONE_CHILD_EXPRESSION ); // recover by ignore the error firstChild = false; return newChild; } protected Expression annealExpression( Expression contentModel ) { Expression e = reader.pool.createAttribute( nameClass, contentModel ); if(e instanceof AttributeExp) reader.setDeclaredLocationOf(e); return e; } }