Javolution 6.0.0 java
javolution.xml.XMLReferenceResolver Class Reference
Collaboration diagram for javolution.xml.XMLReferenceResolver:
[legend]

Public Member Functions

 XMLReferenceResolver ()
 
void setIdentifierAttribute (String name)
 
void setIdentifierAttribute (String localName, String uri)
 
void setReferenceAttribute (String name)
 
void setReferenceAttribute (String localName, String uri)
 
boolean writeReference (Object obj, XMLFormat.OutputElement xml) throws XMLStreamException
 
Object readReference (XMLFormat.InputElement xml) throws XMLStreamException
 
void createReference (Object obj, XMLFormat.InputElement xml) throws XMLStreamException
 
void reset ()
 

Private Attributes

FastMap< Object, Index_objectToId
 
FastTable< Object > _idToObject = new FastTable<Object>()
 
int _counter
 
String _idName = "id"
 
String _idURI = null
 
String _refName = "ref"
 
String _refURI = null
 
TextBuilder _tmp = new TextBuilder()
 

Detailed Description

This class represents a resolver for XML cross references during the marshalling/unmarshalling process.

Instances of this class may only be shared by XMLObjectReader/ XMLObjectWriter running sequentially (for cross references spawning multiple documents).

Author
Jean-Marie Dautelle
Version
4.0, September 4, 2006

Definition at line 30 of file XMLReferenceResolver.java.

Constructor & Destructor Documentation

◆ XMLReferenceResolver()

javolution.xml.XMLReferenceResolver.XMLReferenceResolver ( )

Default constructor.

Definition at line 71 of file XMLReferenceResolver.java.

71 {}

Member Function Documentation

◆ createReference()

void javolution.xml.XMLReferenceResolver.createReference ( Object  obj,
XMLFormat.InputElement  xml 
) throws XMLStreamException

Creates a reference for the specified object (the identifier being specified by the input XML element). The default implementation reads the identifier attribute (if any) and associates it to the specified object.

Parameters
objthe object being referenced.
xmlthe input XML element holding the reference identifier.

Definition at line 184 of file XMLReferenceResolver.java.

185  {
186  CharArray value = xml._reader.getAttributeValue(_idURI, _idName);
187  if (value == null)
188  return;
189  int i = value.toInt();
190  if (_idToObject.size() != i)
191  throw new XMLStreamException("Identifier discontinuity detected "
192  + "(expected " + _idToObject.size() + " found " + i + ")");
193  _idToObject.add(obj);
194  }

References javolution.xml.XMLReferenceResolver._idName, javolution.xml.XMLReferenceResolver._idToObject, javolution.xml.XMLReferenceResolver._idURI, javolution.util.FastTable< E >.add(), javolution.util.FastTable< E >.size(), and javolution.text.CharArray.toInt().

Referenced by javolution.xml.XMLFormat< T >.InputElement.readInstanceOf().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ readReference()

Object javolution.xml.XMLReferenceResolver.readReference ( XMLFormat.InputElement  xml) throws XMLStreamException

Reads the object referenced by the specified xml input element if any. The default implementation reads the reference attribute to retrieve the object.

Parameters
xmlthe input XML element.
Returns
the referenced object or null if the specified XML input does not have a reference attribute.

Definition at line 164 of file XMLReferenceResolver.java.

165  {
166  CharArray value = xml._reader.getAttributeValue(_refURI, _refName);
167  if (value == null)
168  return null;
169  int ref = value.toInt();
170  if (ref >= _idToObject.size())
171  throw new XMLStreamException("Reference: " + value + " not found");
172  return _idToObject.get(ref);
173  }

References javolution.xml.XMLReferenceResolver._idToObject, javolution.xml.XMLReferenceResolver._refName, javolution.xml.XMLReferenceResolver._refURI, javolution.util.FastTable< E >.get(), javolution.util.FastTable< E >.size(), and javolution.text.CharArray.toInt().

Referenced by javolution.xml.XMLFormat< T >.InputElement.readReference().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ reset()

void javolution.xml.XMLReferenceResolver.reset ( )

Definition at line 196 of file XMLReferenceResolver.java.

196  {
197  _idName = "id";
198  _idURI = null;
199  _refName = "ref";
200  _refURI = null;
201  _idToObject.clear();
202  _objectToId.clear();
203  _counter = 0;
204  }

References javolution.xml.XMLReferenceResolver._counter, javolution.xml.XMLReferenceResolver._idName, javolution.xml.XMLReferenceResolver._idToObject, javolution.xml.XMLReferenceResolver._idURI, javolution.xml.XMLReferenceResolver._objectToId, javolution.xml.XMLReferenceResolver._refName, javolution.xml.XMLReferenceResolver._refURI, and javolution.util.FastTable< E >.clear().

Here is the call graph for this function:

◆ setIdentifierAttribute() [1/2]

void javolution.xml.XMLReferenceResolver.setIdentifierAttribute ( String  localName,
String  uri 
)

Sets the local name and namespace URI of the identifier attribute.

Parameters
localNamethe local name of the attribute or null.
urithe URI of the attribute or null if the attribute has no namespace URI.

Definition at line 91 of file XMLReferenceResolver.java.

91  {
92  _idName = localName;
93  _idURI = uri;
94  }

References javolution.xml.XMLReferenceResolver._idName, and javolution.xml.XMLReferenceResolver._idURI.

◆ setIdentifierAttribute() [2/2]

void javolution.xml.XMLReferenceResolver.setIdentifierAttribute ( String  name)

Sets the name of the identifier attribute (by default"id"). If the name is null then the identifier attribute is never read/written (which may prevent unmarshalling).

Parameters
namethe name of the attribute or null.

Definition at line 80 of file XMLReferenceResolver.java.

80  {
81  setIdentifierAttribute(name, null);
82  }

◆ setReferenceAttribute() [1/2]

void javolution.xml.XMLReferenceResolver.setReferenceAttribute ( String  localName,
String  uri 
)

Sets the local name and namespace URI of the identifier attribute.

Parameters
localNamethe local name of the attribute or null.
urithe URI of the attribute or null if the attribute has no namespace URI.

Definition at line 114 of file XMLReferenceResolver.java.

114  {
115  _refName = localName;
116  _refURI = uri;
117  }

References javolution.xml.XMLReferenceResolver._refName, and javolution.xml.XMLReferenceResolver._refURI.

◆ setReferenceAttribute() [2/2]

void javolution.xml.XMLReferenceResolver.setReferenceAttribute ( String  name)

Sets the name of the reference attribute (by default"ref"). If the name is null then the reference attribute is never read/written (which may prevent unmarshalling).

Parameters
namethe name of the attribute or null.

Definition at line 103 of file XMLReferenceResolver.java.

103  {
104  setReferenceAttribute(name, null);
105  }

◆ writeReference()

boolean javolution.xml.XMLReferenceResolver.writeReference ( Object  obj,
XMLFormat.OutputElement  xml 
) throws XMLStreamException

Writes a reference to the specified object into the specified XML element. The default implementation writes the reference into the reference attribute and for the first occurences an identifier (counter starting at 1) is written into the identifier attribute.

Parameters
objthe object for which the reference is written.
xmlthe output XML element.
Returns
true if a reference is written; false if a new identifier is written.

Definition at line 130 of file XMLReferenceResolver.java.

131  {
132  Index id = (Index) _objectToId.get(obj);
133  if (id == null) { // New identifier.
134  id = Index.valueOf(_counter++);
135  _objectToId.put(obj, id);
136  _tmp.clear().append(id.intValue());
137  if (_idURI == null) {
138  xml.getStreamWriter().writeAttribute(_idName, _tmp);
139  } else {
140  xml.getStreamWriter().writeAttribute(_idURI, _idName, _tmp);
141  }
142  return false;
143  }
144  _tmp.clear().append(id.intValue());
145  if (_refURI == null) {
146  xml._writer.writeAttribute(_refName, _tmp);
147  } else {
148  xml._writer.writeAttribute(_refURI, _refName, _tmp);
149  }
150  return true;
151  }

References javolution.xml.XMLReferenceResolver._counter, javolution.xml.XMLReferenceResolver._idName, javolution.xml.XMLReferenceResolver._idURI, javolution.xml.XMLReferenceResolver._objectToId, javolution.xml.XMLReferenceResolver._refName, javolution.xml.XMLReferenceResolver._refURI, javolution.xml.XMLReferenceResolver._tmp, javolution.text.TextBuilder.append(), javolution.text.TextBuilder.clear(), and javolution.util.Index.valueOf().

Referenced by javolution.xml.XMLFormat< T >.OutputElement.writeReference().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ _counter

int javolution.xml.XMLReferenceResolver._counter
private

◆ _idName

String javolution.xml.XMLReferenceResolver._idName = "id"
private

◆ _idToObject

FastTable<Object> javolution.xml.XMLReferenceResolver._idToObject = new FastTable<Object>()
private

◆ _idURI

String javolution.xml.XMLReferenceResolver._idURI = null
private

◆ _objectToId

FastMap<Object, Index> javolution.xml.XMLReferenceResolver._objectToId
private
Initial value:
= new FastMap<Object, Index>(
Equalities.IDENTITY)

Holds object to identifier (FastTable.Index) mapping.

Definition at line 35 of file XMLReferenceResolver.java.

Referenced by javolution.xml.XMLReferenceResolver.reset(), and javolution.xml.XMLReferenceResolver.writeReference().

◆ _refName

String javolution.xml.XMLReferenceResolver._refName = "ref"
private

◆ _refURI

String javolution.xml.XMLReferenceResolver._refURI = null
private

◆ _tmp

TextBuilder javolution.xml.XMLReferenceResolver._tmp = new TextBuilder()
private

The documentation for this class was generated from the following file:
javolution.xml.XMLReferenceResolver._objectToId
FastMap< Object, Index > _objectToId
Definition: XMLReferenceResolver.java:35
javolution.xml.XMLReferenceResolver._idURI
String _idURI
Definition: XMLReferenceResolver.java:56
javolution.text.TextBuilder.append
final TextBuilder append(char c)
Definition: TextBuilder.java:202
javolution.xml.XMLReferenceResolver._refURI
String _refURI
Definition: XMLReferenceResolver.java:66
javolution.text.TextBuilder.clear
final TextBuilder clear()
Definition: TextBuilder.java:725
javolution.xml.XMLReferenceResolver._idName
String _idName
Definition: XMLReferenceResolver.java:51
javolution.util.FastTable.add
void add(int index, E element)
Definition: FastTable.java:182
javolution.util.FastTable.size
int size()
Definition: FastTable.java:165
javolution.util.FastTable.get
E get(int index)
Definition: FastTable.java:204
javolution.xml.XMLReferenceResolver.setIdentifierAttribute
void setIdentifierAttribute(String name)
Definition: XMLReferenceResolver.java:80
javolution.xml.XMLReferenceResolver.setReferenceAttribute
void setReferenceAttribute(String name)
Definition: XMLReferenceResolver.java:103
javolution.xml.XMLReferenceResolver._idToObject
FastTable< Object > _idToObject
Definition: XMLReferenceResolver.java:41
javolution.util.FastTable.clear
void clear()
Definition: FastTable.java:171
javolution.xml.XMLReferenceResolver._counter
int _counter
Definition: XMLReferenceResolver.java:46
javolution.xml.XMLReferenceResolver._tmp
TextBuilder _tmp
Definition: XMLReferenceResolver.java:153
javolution.xml.XMLReferenceResolver._refName
String _refName
Definition: XMLReferenceResolver.java:61