package jp.gr.java_conf.abagames.bulletml;
import org.w3c.dom.*;
import org.xml.sax.*;
import java.io.*;
import java.net.MalformedURLException;
import java.net.URL;
import javax.xml.parsers.*;
/**
* <b>BulletRef</b> is generated by Relaxer based on bulletml.rlx.
* This class is derived from:
*
* <!-- for programmer
* <elementRule role="bulletRef">
* <choice occurs="*">
* <ref label="param"/>
* </choice>
* </elementRule>
*
* <tag name="bulletRef">
* <attribute name="label" required="true" type="string"/>
* </tag>
* -->
* <!-- for javadoc -->
* <pre> <elementRule role="bulletRef">
* <choice occurs="*">
* <ref label="param"/>
* </choice>
* </elementRule>
* <tag name="bulletRef">
* <attribute name="label" required="true" type="string"/>
* </tag>
* </pre>
*
* @version bulletml.rlx 0.21 (Sun Jun 03 09:44:34 JST 2001)
* @author Relaxer 0.13 (http://www.relaxer.org)
*/
public class BulletRef implements java.io.Serializable, IRNSContainer, IRNode, IBulletElmChoice
{
private RNSContext rNSContext_ = new RNSContext(this);
private String label_;
// List<Param>
private java.util.List param_ = new java.util.ArrayList();
private IRNode parentRNode_;
/**
* Creates a <code>BulletRef</code>.
*
*/
public BulletRef()
{
}
/**
* Creates a <code>BulletRef</code> by the Stack <code>stack</code>
* that contains Elements.
* This constructor is supposed to be used internally
* by the Relaxer system.
*
* @param stack
*/
public BulletRef(RStack stack)
{
setup(stack);
}
/**
* Creates a <code>BulletRef</code> by the Document <code>doc</code>.
*
* @param doc
*/
public BulletRef(Document doc)
{
setup(doc.getDocumentElement());
}
/**
* Creates a <code>BulletRef</code> by the Element <code>element</code>.
*
* @param element
*/
public BulletRef(Element element)
{
setup(element);
}
/**
* Creates a <code>BulletRef</code> by the File <code>file</code>.
*
* @param file
* @exception IOException
* @exception SAXException
* @exception ParserConfigurationException
*/
public BulletRef(File file) throws IOException, SAXException, ParserConfigurationException
{
setup(file);
}
/**
* Creates a <code>BulletRef</code>
* by the String representation of URI <code>uri</code>.
*
* @param uri
* @exception IOException
* @exception SAXException
* @exception ParserConfigurationException
*/
public BulletRef(String uri) throws IOException, SAXException, ParserConfigurationException
{
setup(uri);
}
/**
* Creates a <code>BulletRef</code> by the URL <code>url</code>.
*
* @param url
* @exception IOException
* @exception SAXException
* @exception ParserConfigurationException
*/
public BulletRef(URL url) throws IOException, SAXException, ParserConfigurationException
{
setup(url);
}
/**
* Creates a <code>BulletRef</code> by the InputStream <code>in</code>.
*
* @param in
* @exception IOException
* @exception SAXException
* @exception ParserConfigurationException
*/
public BulletRef(InputStream in) throws IOException, SAXException, ParserConfigurationException
{
setup(in);
}
/**
* Creates a <code>BulletRef</code> by the InputSource <code>is</code>.
*
* @param is
* @exception IOException
* @exception SAXException
* @exception ParserConfigurationException
*/
public BulletRef(InputSource is) throws IOException, SAXException, ParserConfigurationException
{
setup(is);
}
/**
* Creates a <code>BulletRef</code> by the Reader <code>reader</code>.
*
* @param reader
* @exception IOException
* @exception SAXException
* @exception ParserConfigurationException
*/
public BulletRef(Reader reader) throws IOException, SAXException, ParserConfigurationException
{
setup(reader);
}
/**
* Initializes the <code>BulletRef</code> by the Document <code>doc</code>.
*
* @param doc
*/
public void setup(Document doc)
{
setup(doc.getDocumentElement());
}
/**
* Initializes the <code>BulletRef</code> by the Element <code>element</code>.
*
* @param element
*/
public void setup(Element element)
{
init(element);
}
/**
* Initializes the <code>BulletRef</code> by the Stack <code>stack</code>
* that contains Elements.
* This constructor is supposed to be used internally
* by the Relaxer system.
*
* @param stack
*/
public void setup(RStack stack)
{
setup(stack.popElement());
}
/**
* @param element
*/
private void init(Element element)
{
RStack stack = new RStack(element);
rNSContext_.declareNamespace(element);
label_ = URelaxer.getAttributePropertyAsString(element, "label");
param_.clear();
while (!stack.isEmptyElement())
{
if (Param.isMatch(stack))
{
addParam(new Param(stack));
}
else
{
break;
}
}
}
/**
* Creates a DOM representation of the object.
* Result is appended to the Node <code>parent</code>.
*
* @param parent
*/
public void makeElement(Node parent)
{
Document doc;
if (parent instanceof Document)
{
doc = (Document) parent;
}
else
{
doc = parent.getOwnerDocument();
}
Element element = doc.createElementNS("http://www.asahi-net.or.jp/~cs8k-cyu/bulletml", "bulletRef");
rNSContext_.setupNamespace(element);
int size;
URelaxer.setAttributePropertyByString(element, "label", this.label_);
size = this.param_.size();
for (int i = 0; i < size; i++)
{
Param value = (Param) this.param_.get(i);
value.makeElement(element);
}
parent.appendChild(element);
}
/**
* Initializes the <code>BulletRef</code> by the File <code>file</code>.
*
* @param file
* @exception IOException
* @exception SAXException
* @exception ParserConfigurationException
*/
public void setup(File file) throws IOException, SAXException, ParserConfigurationException
{
setup(file.toURL());
}
/**
* Initializes the <code>BulletRef</code>
* by the String representation of URI <code>uri</code>.
*
* @param uri
* @exception IOException
* @exception SAXException
* @exception ParserConfigurationException
*/
public void setup(String uri) throws IOException, SAXException, ParserConfigurationException
{
setup(UJAXP.getValidDocument(uri));
}
/**
* Initializes the <code>BulletRef</code> by the URL <code>url</code>.
*
* @param url
* @exception IOException
* @exception SAXException
* @exception ParserConfigurationException
*/
public void setup(URL url) throws IOException, SAXException, ParserConfigurationException
{
setup(UJAXP.getValidDocument(url));
}
/**
* Initializes the <code>BulletRef</code> by the InputStream <code>in</code>.
*
* @param in
* @exception IOException
* @exception SAXException
* @exception ParserConfigurationException
*/
public void setup(InputStream in) throws IOException, SAXException, ParserConfigurationException
{
setup(UJAXP.getValidDocument(in));
}
/**
* Initializes the <code>BulletRef</code> by the InputSource <code>is</code>.
*
* @param is
* @exception IOException
* @exception SAXException
* @exception ParserConfigurationException
*/
public void setup(InputSource is) throws IOException, SAXException, ParserConfigurationException
{
setup(UJAXP.getValidDocument(is));
}
/**
* Initializes the <code>BulletRef</code> by the Reader <code>reader</code>.
*
* @param reader
* @exception IOException
* @exception SAXException
* @exception ParserConfigurationException
*/
public void setup(Reader reader) throws IOException, SAXException, ParserConfigurationException
{
setup(UJAXP.getValidDocument(reader));
}
/**
* Creates a DOM document representation of the object.
*
* @exception ParserConfigurationException
* @return Document
*/
public Document makeDocument() throws ParserConfigurationException
{
Document doc = UJAXP.makeDocument();
makeElement(doc);
return (doc);
}
/**
* Gets the RNSContext property <b>rNSContext</b>.
*
* @return RNSContext
*/
public final RNSContext getRNSContext()
{
return (rNSContext_);
}
/**
* Sets the RNSContext property <b>rNSContext</b>.
*
* @param rNSContext
*/
public final void setRNSContext(RNSContext rNSContext)
{
this.rNSContext_ = rNSContext;
}
/**
* Gets the String property <b>label</b>.
*
* @return String
*/
public final String getLabel()
{
return (label_);
}
/**
* Sets the String property <b>label</b>.
*
* @param label
*/
public final void setLabel(String label)
{
this.label_ = label;
}
/**
* Gets the Param property <b>param</b>.
*
* @return Param[]
*/
public final Param[] getParam()
{
Param[] array = new Param[param_.size()];
return ((Param[]) param_.toArray(array));
}
/**
* Sets the Param property <b>param</b>.
*
* @param param
*/
public final void setParam(Param[] param)
{
this.param_.clear();
this.param_.addAll(java.util.Arrays.asList(param));
for (int i = 0; i < param.length; i++)
{
param[i].setParentRNode(this);
}
}
/**
* Sets the Param property <b>param</b>.
*
* @param param
*/
public final void setParam(Param param)
{
this.param_.clear();
this.param_.add(param);
if (param != null)
{
param.setParentRNode(this);
}
}
/**
* Adds the Param property <b>param</b>.
*
* @param param
*/
public final void addParam(Param param)
{
this.param_.add(param);
if (param != null)
{
param.setParentRNode(this);
}
}
/**
* Gets number of the Param property <b>param</b>.
*
* @return int
*/
public final int getParamCount()
{
return (param_.size());
}
/**
* Gets the Param property <b>param</b> by index.
*
* @param index
* @return Param
*/
public final Param getParam(int index)
{
return ((Param) param_.get(index));
}
/**
* Sets the Param property <b>param</b> by index.
*
* @param index
* @param param
*/
public final void setParam(int index, Param param)
{
this.param_.set(index, param);
}
/**
* Makes a XML text representation.
*
* @return String
*/
public String makeTextDocument()
{
StringBuffer buffer = new StringBuffer();
makeTextElement(buffer);
return (new String(buffer));
}
/**
* Makes a XML text representation.
*
* @param buffer
*/
public void makeTextElement(StringBuffer buffer)
{
int size;
String prefix = rNSContext_.getPrefixByUri("http://www.asahi-net.or.jp/~cs8k-cyu/bulletml");
buffer.append("<");
URelaxer.makeQName(prefix, "bulletRef", buffer);
rNSContext_.makeNSMappings(buffer);
buffer.append(" ");
buffer.append("label");
buffer.append("=\"");
buffer.append(URelaxer.escapeAttrQuot(getLabel()));
buffer.append("\"");
buffer.append(">");
size = this.param_.size();
for (int i = 0; i < size; i++)
{
Param value = (Param) this.param_.get(i);
value.makeTextElement(buffer);
}
buffer.append("</");
URelaxer.makeQName(prefix, "bulletRef", buffer);
buffer.append(">");
}
/**
* Makes a XML text representation.
*
* @param buffer
*/
public void makeTextElement(PrintWriter buffer)
{
int size;
String prefix = rNSContext_.getPrefixByUri("http://www.asahi-net.or.jp/~cs8k-cyu/bulletml");
buffer.print("<");
URelaxer.makeQName(prefix, "bulletRef", buffer);
rNSContext_.makeNSMappings(buffer);
buffer.print(" ");
buffer.print("label");
buffer.print("=\"");
buffer.print(URelaxer.escapeAttrQuot(getLabel()));
buffer.print("\"");
buffer.print(">");
size = this.param_.size();
for (int i = 0; i < size; i++)
{
Param value = (Param) this.param_.get(i);
value.makeTextElement(buffer);
}
buffer.print("</");
URelaxer.makeQName(prefix, "bulletRef", buffer);
buffer.print(">");
}
/**
* Gets the IRNode property <b>parentRNode</b>.
*
* @return IRNode
*/
public final IRNode getParentRNode()
{
return (parentRNode_);
}
/**
* Sets the IRNode property <b>parentRNode</b>.
*
* @param parentRNode
*/
public final void setParentRNode(IRNode parentRNode)
{
this.parentRNode_ = parentRNode;
}
/**
* Gets child RNodes.
*
* @return IRNode[]
*/
public IRNode[] getRNodes()
{
java.util.List classNodes = new java.util.ArrayList();
classNodes.addAll(param_);
IRNode[] nodes = new IRNode[classNodes.size()];
return ((IRNode[]) classNodes.toArray(nodes));
}
/**
* Tests if a Element <code>element</code> is valid
* for the <code>BulletRef</code>.
*
* @param element
* @return boolean
*/
public static boolean isMatch(Element element)
{
if (!URelaxer2.isTargetElement(element, "http://www.asahi-net.or.jp/~cs8k-cyu/bulletml", "bulletRef"))
{
return (false);
}
RStack target = new RStack(element);
Element child;
while (!target.isEmptyElement())
{
if (!Param.isMatchHungry(target))
{
break;
}
}
if (!target.isEmptyElement())
{
return (false);
}
return (true);
}
/**
* Tests if elements contained in a Stack <code>stack</code>
* is valid for the <code>BulletRef</code>.
* This mehtod is supposed to be used internally
* by the Relaxer system.
*
* @param stack
* @return boolean
*/
public static boolean isMatch(RStack stack)
{
Element element = stack.peekElement();
if (element == null)
{
return (false);
}
return (isMatch(element));
}
/**
* Tests if elements contained in a Stack <code>stack</code>
* is valid for the <code>BulletRef</code>.
* This method consumes the stack contents during matching operation.
* This mehtod is supposed to be used internally
* by the Relaxer system.
*
* @param stack
* @return boolean
*/
public static boolean isMatchHungry(RStack stack)
{
Element element = stack.peekElement();
if (element == null)
{
return (false);
}
if (isMatch(element))
{
stack.popElement();
return (true);
}
else
{
return (false);
}
}
}