in impl/src/main/java/org/apache/tuscany/sdo/util/resource/RecordedEventXMLStreamReader.java [282:364]
protected StartElement(String nameSpace, String local, String prefix, Attributes attributeArray, Locator locator, List bindings,
final NamespaceContext context) {
super(nameSpace, local, prefix, locator);
nameSpaces = bindings;
nameSpaceContext = bindings == null || bindings.isEmpty() ? context : new NamespaceContext() {
public String getNamespaceURI(String prefix) {
for (int index = nameSpaces.size(); index != 0;) {
NameSpace binding = (NameSpace) nameSpaces.get(--index);
if (binding.prefix.equals(prefix))
return binding.uri;
}
return context.getNamespaceURI(prefix);
}
public String getPrefix(String namespaceURI) {
for (int index = nameSpaces.size(); index != 0;) {
NameSpace binding = (NameSpace) nameSpaces.get(--index);
if (binding.uri.equals(namespaceURI))
return binding.prefix;
}
return context.getPrefix(namespaceURI);
}
public Iterator getPrefixes(final String namespaceURI) {
final Iterator iterator = context.getPrefixes(namespaceURI);
return new Iterator() {
Iterator bindings = nameSpaces.iterator();
NameSpace binding/* = null */;
protected final boolean prefix() {
while (bindings.hasNext()) {
binding = (NameSpace) bindings.next();
if (binding.uri.equals(namespaceURI))
return true;
}
bindings = null;
return false;
}
public boolean hasNext() {
return bindings != null && prefix() || iterator.hasNext();
}
protected NameSpace nameSpace;
public Object next() {
if (bindings == null || binding == null && !prefix())
return iterator.next();
nameSpace = binding;
binding = null;
return nameSpace.prefix;
}
public void remove() {
if (bindings == null)
iterator.remove();
else
nameSpaces.remove(nameSpace);
}
};
}
};
int count = attributeArray.getLength();
if (count == 0)
attributes = null;
else {
attributes = new AttributeList(count);
int index = 0;
do {
QName name;
nameSpace = attributeArray.getURI(index);
local = attributeArray.getLocalName(index);
prefix = prefix(attributeArray.getQName(index), nameSpace);
if (prefix == null) {
name = new QName(nameSpace, local, XMLConstants.DEFAULT_NS_PREFIX);
nameSpace = null;
} else
name = new QName(nameSpace, local, prefix);
attributes.attributes.add(new Attribute(attributeArray.getType(index), attributeArray.getValue(index), name, prefix, nameSpace));
} while (++index != count);
}
}