com.ctc.wstx.dtd
Class DTDAttribute

java.lang.Object
  extended by com.ctc.wstx.dtd.DTDAttribute
Direct Known Subclasses:
DTDCdataAttr, DTDEntitiesAttr, DTDEntityAttr, DTDEnumAttr, DTDIdAttr, DTDIdRefAttr, DTDIdRefsAttr, DTDNmTokenAttr, DTDNmTokensAttr, DTDNotationAttr

public abstract class DTDAttribute
extends Object

Base class for objects that contain attribute definitions from DTD. Sub-classes exists for specific typed attributes (enumeration-valued, non-CDATA ones); base class itself is used for attributes of type CDATA.


Field Summary
protected  boolean mCfgNsAware
           
protected  boolean mCfgXml11
           
protected  DefaultAttrValue mDefValue
           
protected  PrefixedName mName
           
protected  int mSpecialIndex
          Index number amongst "special" attributes (required ones, attributes that have default values), if attribute is one: -1 if not.
static int TYPE_CDATA
           
static int TYPE_ENTITIES
           
static int TYPE_ENTITY
           
static int TYPE_ENUMERATED
           
static int TYPE_ID
           
static int TYPE_IDREF
           
static int TYPE_IDREFS
           
static int TYPE_NMTOKEN
           
static int TYPE_NMTOKENS
           
static int TYPE_NOTATION
           
 
Constructor Summary
DTDAttribute(PrefixedName name, DefaultAttrValue defValue, int specIndex, boolean nsAware, boolean xml11)
           
 
Method Summary
protected  void checkEntity(InputProblemReporter rep, String id, EntityDecl ent)
           
abstract  DTDAttribute cloneWith(int specIndex)
           
protected  EntityDecl findEntityDecl(DTDValidatorBase v, char[] ch, int start, int len, int hash)
           
 String getDefaultValue(ValidationContext ctxt, XMLValidator dtd)
           
 PrefixedName getName()
           
 int getSpecialIndex()
           
 int getValueType()
          Returns the value type of this attribute as an enumerated int to match type (CDATA, ...)
 String getValueTypeString()
           
 boolean hasDefaultValue()
           
 boolean isFixed()
           
 boolean isRequired()
           
 boolean isSpecial()
          Method used by the element to figure out if attribute needs "special" checking; basically if it's required, and/or has a default value.
 boolean needsValidation()
           
 String normalize(DTDValidatorBase v, char[] cbuf, int start, int end)
          Method called when no validation is to be done, but value is still to be normalized as much as it can.
 void normalizeDefault()
          Method called to do initial normalization of the default attribute value, without trying to verify its validity.
protected  String reportInvalidChar(DTDValidatorBase v, char c, String msg)
           
protected  String reportValidationProblem(DTDValidatorBase v, String msg)
           
protected  String reportValidationProblem(InputProblemReporter rep, String msg)
          Method called during parsing of DTD schema, to report a problem.
 String toString()
           
 boolean typeIsId()
           
 boolean typeIsNotation()
           
abstract  String validate(DTDValidatorBase v, char[] cbuf, int start, int end, boolean normalize)
           
 String validate(DTDValidatorBase v, String value, boolean normalize)
           Note: the default implementation is not optimized, as it does a potentially unnecessary copy of the contents.
abstract  void validateDefault(InputProblemReporter rep, boolean normalize)
          Method called by the DTDValidator to ask attribute to verify that the default it has (if any) is valid for such type.
protected  String validateDefaultName(InputProblemReporter rep, boolean normalize)
           
protected  String validateDefaultNames(InputProblemReporter rep, boolean normalize)
           
protected  String validateDefaultNmToken(InputProblemReporter rep, boolean normalize)
           
 String validateEnumValue(char[] cbuf, int start, int end, boolean normalize, WordResolver res)
          Method called by validation/normalization code for enumeration-valued attributes, to trim specified attribute value (full normalization not needed -- called for values that CAN NOT have spaces inside; such values can not be legal), and then check whether it is included in set of words (tokens) passed in.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

TYPE_CDATA

public static final int TYPE_CDATA
See Also:
Constant Field Values

TYPE_ENUMERATED

public static final int TYPE_ENUMERATED
See Also:
Constant Field Values

TYPE_ID

public static final int TYPE_ID
See Also:
Constant Field Values

TYPE_IDREF

public static final int TYPE_IDREF
See Also:
Constant Field Values

TYPE_IDREFS

public static final int TYPE_IDREFS
See Also:
Constant Field Values

TYPE_ENTITY

public static final int TYPE_ENTITY
See Also:
Constant Field Values

TYPE_ENTITIES

public static final int TYPE_ENTITIES
See Also:
Constant Field Values

TYPE_NOTATION

public static final int TYPE_NOTATION
See Also:
Constant Field Values

TYPE_NMTOKEN

public static final int TYPE_NMTOKEN
See Also:
Constant Field Values

TYPE_NMTOKENS

public static final int TYPE_NMTOKENS
See Also:
Constant Field Values

mName

protected final PrefixedName mName

mSpecialIndex

protected final int mSpecialIndex
Index number amongst "special" attributes (required ones, attributes that have default values), if attribute is one: -1 if not.


mDefValue

protected final DefaultAttrValue mDefValue

mCfgNsAware

protected final boolean mCfgNsAware

mCfgXml11

protected final boolean mCfgXml11
Constructor Detail

DTDAttribute

public DTDAttribute(PrefixedName name,
                    DefaultAttrValue defValue,
                    int specIndex,
                    boolean nsAware,
                    boolean xml11)
Method Detail

cloneWith

public abstract DTDAttribute cloneWith(int specIndex)

getName

public final PrefixedName getName()

toString

public final String toString()
Overrides:
toString in class Object

getDefaultValue

public final String getDefaultValue(ValidationContext ctxt,
                                    XMLValidator dtd)
                             throws XMLStreamException
Throws:
XMLStreamException

getSpecialIndex

public final int getSpecialIndex()

needsValidation

public final boolean needsValidation()

isFixed

public final boolean isFixed()

isRequired

public final boolean isRequired()

isSpecial

public final boolean isSpecial()
Method used by the element to figure out if attribute needs "special" checking; basically if it's required, and/or has a default value. In both cases missing the attribute has specific consequences, either exception or addition of a default value.


hasDefaultValue

public final boolean hasDefaultValue()

getValueType

public int getValueType()
Returns the value type of this attribute as an enumerated int to match type (CDATA, ...)

Note:


getValueTypeString

public String getValueTypeString()

typeIsId

public boolean typeIsId()

typeIsNotation

public boolean typeIsNotation()

validate

public abstract String validate(DTDValidatorBase v,
                                char[] cbuf,
                                int start,
                                int end,
                                boolean normalize)
                         throws XMLStreamException
Throws:
XMLStreamException

validate

public String validate(DTDValidatorBase v,
                       String value,
                       boolean normalize)
                throws XMLStreamException

Note: the default implementation is not optimized, as it does a potentially unnecessary copy of the contents. It is expected that this method is seldom called (Woodstox never directly calls it; it only gets called for chained validators when one validator normalizes the value, and then following validators are passed a String, not char array)

Throws:
XMLStreamException

validateDefault

public abstract void validateDefault(InputProblemReporter rep,
                                     boolean normalize)
                              throws XMLStreamException
Method called by the DTDValidator to ask attribute to verify that the default it has (if any) is valid for such type.

Throws:
XMLStreamException

normalize

public String normalize(DTDValidatorBase v,
                        char[] cbuf,
                        int start,
                        int end)
Method called when no validation is to be done, but value is still to be normalized as much as it can. What this usually means is that all regular space (parser earlier on converts other white space to spaces, except for specific character entities; and these special cases are NOT to be normalized).

The only exception is that CDATA will not do any normalization. But for now, let's implement basic functionality that CDTA instance will override

Returns:
Normalized value as a String, if any changes were done; null if input was normalized

normalizeDefault

public void normalizeDefault()
Method called to do initial normalization of the default attribute value, without trying to verify its validity. Thus, it's called independent of whether we are fully validating the document.


validateDefaultName

protected String validateDefaultName(InputProblemReporter rep,
                                     boolean normalize)
                              throws XMLStreamException
Throws:
XMLStreamException

validateDefaultNames

protected String validateDefaultNames(InputProblemReporter rep,
                                      boolean normalize)
                               throws XMLStreamException
Throws:
XMLStreamException

validateDefaultNmToken

protected String validateDefaultNmToken(InputProblemReporter rep,
                                        boolean normalize)
                                 throws XMLStreamException
Throws:
XMLStreamException

validateEnumValue

public String validateEnumValue(char[] cbuf,
                                int start,
                                int end,
                                boolean normalize,
                                WordResolver res)
Method called by validation/normalization code for enumeration-valued attributes, to trim specified attribute value (full normalization not needed -- called for values that CAN NOT have spaces inside; such values can not be legal), and then check whether it is included in set of words (tokens) passed in. If actual value was included, will return the normalized word (as well as store shared String locally); otherwise will return null.


findEntityDecl

protected EntityDecl findEntityDecl(DTDValidatorBase v,
                                    char[] ch,
                                    int start,
                                    int len,
                                    int hash)
                             throws XMLStreamException
Throws:
XMLStreamException

checkEntity

protected void checkEntity(InputProblemReporter rep,
                           String id,
                           EntityDecl ent)
                    throws XMLStreamException
Throws:
XMLStreamException

reportInvalidChar

protected String reportInvalidChar(DTDValidatorBase v,
                                   char c,
                                   String msg)
                            throws XMLStreamException
Throws:
XMLStreamException

reportValidationProblem

protected String reportValidationProblem(DTDValidatorBase v,
                                         String msg)
                                  throws XMLStreamException
Throws:
XMLStreamException

reportValidationProblem

protected String reportValidationProblem(InputProblemReporter rep,
                                         String msg)
                                  throws XMLStreamException
Method called during parsing of DTD schema, to report a problem. Note that unlike during actual validation, we have no option of just gracefully listing problems and ignoring them; an exception is always thrown.

Throws:
XMLStreamException