public static XmlRepository parse()

in repository/service/src/main/java/org/apache/karaf/cave/repository/service/bundlerepository/StaxParser.java [190:253]


    public static XmlRepository parse(URI repositoryUrl, InputStream is, XmlRepository previous) throws XMLStreamException {
        XMLStreamReader reader = getInputFactory().createXMLStreamReader(is);
        try {
            int event = reader.nextTag();
            if (event != START_ELEMENT || !REPOSITORY.equals(reader.getLocalName())) {
                throw new IllegalStateException("Expected element 'repository' at the root of the document");
            }
            XmlRepository repo = new XmlRepository();
            for (int i = 0, nb = reader.getAttributeCount(); i < nb; i++) {
                String attrName = reader.getAttributeLocalName(i);
                String attrValue = reader.getAttributeValue(i);
                switch (attrName) {
                    case REPO_NAME:
                        repo.name = attrValue;
                        break;
                    case INCREMENT:
                        repo.increment = Long.parseLong(attrValue);
                        break;
                    default:
                        throw new IllegalStateException("Unexpected attribute '" + attrName + "'");
                }
            }
            if (previous != null && repo.increment == previous.increment) {
                return previous;
            }
            while ((event = reader.nextTag()) == START_ELEMENT) {
                String element = reader.getLocalName();
                switch (element) {
                    case REFERRAL:
                        Referral referral = new Referral();
                        for (int i = 0, nb = reader.getAttributeCount(); i < nb; i++) {
                            String attrName = reader.getAttributeLocalName(i);
                            String attrValue = reader.getAttributeValue(i);
                            switch (attrName) {
                                case DEPTH:
                                    referral.depth = Integer.parseInt(attrValue);
                                    break;
                                case URL:
                                    referral.url = attrValue;
                                    break;
                                default:
                                    throw new IllegalStateException("Unexpected attribute '" + attrName + "'");
                            }
                        }
                        if (referral.url == null) {
                            throw new IllegalStateException("Expected attribute '" + URL + "'");
                        }
                        repo.referrals.add(referral);
                        sanityCheckEndElement(reader, reader.nextTag(), REFERRAL);
                        break;
                    case RESOURCE:
                        repo.resources.add(parseResource(repositoryUrl, reader));
                        break;
                    default:
                        throw new IllegalStateException("Unsupported element '" + element + "'. Expected 'referral' or 'resource'");
                }
            }
            // Sanity check
            sanityCheckEndElement(reader, event, REPOSITORY);
            return repo;
        } finally {
            reader.close();
        }
    }