Javolution 6.0.0 java
XMLReferenceResolver.java
Go to the documentation of this file.
1 /*
2  * Javolution - Java(TM) Solution for Real-Time and Embedded Systems
3  * Copyright (C) 2012 - Javolution (http://javolution.org/)
4  * All rights reserved.
5  *
6  * Permission to use, copy, modify, and distribute this software is
7  * freely granted, provided that this notice is preserved.
8  */
9 package javolution.xml;
10 
13 import javolution.util.FastMap;
15 import javolution.util.Index;
18 
30 public class XMLReferenceResolver {
31 
37 
42 
46  private int _counter;
47 
51  private String _idName = "id";
52 
56  private String _idURI = null;
57 
61  private String _refName = "ref";
62 
66  private String _refURI = null;
67 
72 
80  public void setIdentifierAttribute(String name) {
81  setIdentifierAttribute(name, null);
82  }
83 
91  public void setIdentifierAttribute(String localName, String uri) {
92  _idName = localName;
93  _idURI = uri;
94  }
95 
103  public void setReferenceAttribute(String name) {
104  setReferenceAttribute(name, null);
105  }
106 
114  public void setReferenceAttribute(String localName, String uri) {
115  _refName = localName;
116  _refURI = uri;
117  }
118 
130  public boolean writeReference(Object obj, XMLFormat.OutputElement xml)
131  throws XMLStreamException {
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  }
152 
153  private TextBuilder _tmp = new TextBuilder();
154 
165  throws XMLStreamException {
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  }
174 
184  public void createReference(Object obj, XMLFormat.InputElement xml)
185  throws XMLStreamException {
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  }
195 
196  public void reset() {
197  _idName = "id";
198  _idURI = null;
199  _refName = "ref";
200  _refURI = null;
201  _idToObject.clear();
202  _objectToId.clear();
203  _counter = 0;
204  }
205 
206 }
javolution.util.function.Equalities.IDENTITY
static final Equality< Object > IDENTITY
Definition: Equalities.java:40
javolution.text.CharArray
Definition: CharArray.java:36
javolution.xml.XMLReferenceResolver._objectToId
FastMap< Object, Index > _objectToId
Definition: XMLReferenceResolver.java:35
javolution
javolution.xml.XMLReferenceResolver._idURI
String _idURI
Definition: XMLReferenceResolver.java:56
javolution.text.CharArray.toInt
int toInt()
Definition: CharArray.java:303
javolution.xml.XMLReferenceResolver.createReference
void createReference(Object obj, XMLFormat.InputElement xml)
Definition: XMLReferenceResolver.java:184
javolution.util.FastMap
Definition: FastMap.java:98
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
Definition: TextBuilder.java:29
javolution.text.TextBuilder.clear
final TextBuilder clear()
Definition: TextBuilder.java:725
javolution.xml.XMLReferenceResolver._idName
String _idName
Definition: XMLReferenceResolver.java:51
javolution.xml.XMLReferenceResolver.setReferenceAttribute
void setReferenceAttribute(String localName, String uri)
Definition: XMLReferenceResolver.java:114
javolution.xml.XMLFormat.OutputElement
Definition: XMLFormat.java:622
javolution.xml.XMLReferenceResolver.setIdentifierAttribute
void setIdentifierAttribute(String localName, String uri)
Definition: XMLReferenceResolver.java:91
javolution.util.Index.valueOf
static Index valueOf(int value)
Definition: Index.java:111
javolution.util.FastTable.add
void add(int index, E element)
Definition: FastTable.java:182
javolution.xml.stream.XMLStreamException
Definition: XMLStreamException.java:17
javolution.util.FastTable.size
int size()
Definition: FastTable.java:165
javolution.util.function.Equalities
Definition: Equalities.java:20
javolution.util.FastTable.get
E get(int index)
Definition: FastTable.java:204
javolution.text
Definition: CharArray.java:9
javolution.xml.XMLReferenceResolver.setIdentifierAttribute
void setIdentifierAttribute(String name)
Definition: XMLReferenceResolver.java:80
javolution.util.Index
Definition: Index.java:44
javolution.xml.XMLFormat
Definition: XMLFormat.java:116
javolution.xml.XMLReferenceResolver.setReferenceAttribute
void setReferenceAttribute(String name)
Definition: XMLReferenceResolver.java:103
javolution.util.function
Definition: Consumer.java:9
javolution.xml.XMLReferenceResolver._idToObject
FastTable< Object > _idToObject
Definition: XMLReferenceResolver.java:41
javolution.util.FastTable.clear
void clear()
Definition: FastTable.java:171
javolution.xml.XMLReferenceResolver.writeReference
boolean writeReference(Object obj, XMLFormat.OutputElement xml)
Definition: XMLReferenceResolver.java:130
javolution.xml.XMLReferenceResolver._counter
int _counter
Definition: XMLReferenceResolver.java:46
javolution.xml.XMLReferenceResolver.reset
void reset()
Definition: XMLReferenceResolver.java:196
javolution.xml.XMLReferenceResolver.readReference
Object readReference(XMLFormat.InputElement xml)
Definition: XMLReferenceResolver.java:164
javolution.xml.XMLReferenceResolver._tmp
TextBuilder _tmp
Definition: XMLReferenceResolver.java:153
javolution.xml.XMLFormat.InputElement
Definition: XMLFormat.java:186
javolution.xml
Definition: DefaultXMLFormat.java:9
javolution.xml.stream
Definition: Location.java:9
javolution.xml.XMLReferenceResolver._refName
String _refName
Definition: XMLReferenceResolver.java:61
javolution.util
Definition: FastBitSet.java:9
javolution.xml.XMLReferenceResolver
Definition: XMLReferenceResolver.java:30
javolution.xml.XMLReferenceResolver.XMLReferenceResolver
XMLReferenceResolver()
Definition: XMLReferenceResolver.java:71
javolution.util.FastTable
Definition: FastTable.java:88