| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * https://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| * |
| */ |
| package org.apache.ivy.osgi.p2; |
| |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.text.ParseException; |
| import java.util.ArrayList; |
| import java.util.Collections; |
| import java.util.LinkedHashSet; |
| import java.util.List; |
| import java.util.Set; |
| |
| import javax.xml.parsers.ParserConfigurationException; |
| |
| import org.apache.ivy.osgi.util.DelegatingHandler; |
| import org.apache.ivy.util.XMLHelper; |
| import org.xml.sax.Attributes; |
| import org.xml.sax.SAXException; |
| |
| public class P2CompositeParser implements XMLInputParser { |
| |
| private Set<String> childLocations = new LinkedHashSet<>(); |
| |
| public Set<String> getChildLocations() { |
| return childLocations; |
| } |
| |
| public void parse(InputStream in) throws IOException, ParseException, SAXException { |
| RepositoryHandler handler = new RepositoryHandler(); |
| try { |
| XMLHelper.parse(in, null, handler, null); |
| } catch (ParserConfigurationException e) { |
| throw new SAXException(e); |
| } |
| childLocations.addAll(handler.childLocations); |
| } |
| |
| private static class RepositoryHandler extends DelegatingHandler { |
| |
| private static final String REPOSITORY = "repository"; |
| |
| // private static final String NAME = "name"; |
| // |
| // private static final String TYPE = "type"; |
| // |
| // private static final String VERSION = "version"; |
| |
| List<String> childLocations = Collections.emptyList(); |
| |
| public RepositoryHandler() { |
| super(REPOSITORY); |
| addChild(new ChildrenHandler(), new ChildElementHandler<ChildrenHandler>() { |
| @Override |
| public void childHandled(ChildrenHandler child) { |
| childLocations = child.childLocations; |
| } |
| }); |
| } |
| // protected void handleAttributes(Attributes atts) { |
| // String name = atts.getValue(NAME); |
| // String type = atts.getValue(TYPE); |
| // String version = atts.getValue(VERSION); |
| // } |
| } |
| |
| private static class ChildrenHandler extends DelegatingHandler { |
| |
| private static final String CHILDREN = "children"; |
| |
| private static final String SIZE = "size"; |
| |
| List<String> childLocations; |
| |
| public ChildrenHandler() { |
| super(CHILDREN); |
| addChild(new ChildHandler(), new ChildElementHandler<ChildHandler>() { |
| @Override |
| public void childHandled(ChildHandler child) { |
| childLocations.add(child.location); |
| } |
| }); |
| } |
| |
| @Override |
| protected void handleAttributes(Attributes atts) { |
| int size = Integer.parseInt(atts.getValue(SIZE)); |
| childLocations = new ArrayList<>(size); |
| } |
| |
| } |
| |
| private static class ChildHandler extends DelegatingHandler { |
| |
| private static final String CHILD = "child"; |
| |
| private static final String LOCATION = "location"; |
| |
| String location; |
| |
| public ChildHandler() { |
| super(CHILD); |
| } |
| |
| @Override |
| protected void handleAttributes(Attributes atts) { |
| location = atts.getValue(LOCATION); |
| } |
| |
| } |
| |
| } |