protected StartElement()

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);
            }
        }