{
if (nsURI == null) {
throw new IllegalArgumentException(ErrorConsts.ERR_NULL_ARG);
}
if (nsURI.equals(XMLConstants.XML_NS_URI)) {
return new SingletonIterator(XMLConstants.XML_NS_PREFIX);
}
if (nsURI.equals(XMLConstants.XMLNS_ATTRIBUTE_NS_URI)) {
return new SingletonIterator(XMLConstants.XMLNS_ATTRIBUTE);
}
ArrayList<String> l = null;
// First, the default ns?
if (nsURI.equals(_defaultNs.mURI)) {
l = new ArrayList<String>();
l.add("");
}
main_loop:
for (NsDeclaration nsDecl = _lastNsDecl; nsDecl != null;
nsDecl = nsDecl.getPrev()) {
if (nsDecl.hasNsURI(nsURI)) {
// Ok: but is prefix masked?
String prefix = nsDecl.getPrefix();
// Plus, default ns wouldn't do (since current one was already checked)
if (prefix != null) {
for (NsDeclaration decl2 = _lastNsDecl; decl2 != nsDecl;
decl2 = decl2.getPrev()) {
if (decl2.hasPrefix(prefix)) {
continue main_loop;
}
}
if (l == null) {
l = new ArrayList<String>();
}
l.add(prefix);
}
}
}
if (l == null) {
return EmptyIterator.getInstance();
}
if (l.size() == 1) {
return new SingletonIterator(l.get(0));
}
return l.iterator();
}