Example usage for javax.xml.stream XMLStreamReader getAttributeCount

List of usage examples for javax.xml.stream XMLStreamReader getAttributeCount

Introduction

In this page you can find the example usage for javax.xml.stream XMLStreamReader getAttributeCount.

Prototype

public int getAttributeCount();

Source Link

Document

Returns the count of attributes on this START_ELEMENT, this method is only valid on a START_ELEMENT or ATTRIBUTE.

Usage

From source file:org.deegree.services.csw.exporthandling.GetCapabilitiesHelper.java

private void writeTemplateElement(XMLStreamWriter writer, XMLStreamReader inStream,
        Map<String, String> varToValue) throws XMLStreamException {

    if (inStream.getEventType() != XMLStreamConstants.START_ELEMENT) {
        throw new XMLStreamException("Input stream does not point to a START_ELEMENT event.");
    }/*from  ww w.  j  a  va  2s .  co m*/
    int openElements = 0;
    boolean firstRun = true;
    while (firstRun || openElements > 0) {
        firstRun = false;
        int eventType = inStream.getEventType();

        switch (eventType) {
        case CDATA: {
            writer.writeCData(inStream.getText());
            break;
        }
        case CHARACTERS: {
            String s = new String(inStream.getTextCharacters(), inStream.getTextStart(),
                    inStream.getTextLength());
            // TODO optimize
            for (String param : varToValue.keySet()) {
                String value = varToValue.get(param);
                s = s.replace(param, value);
            }
            writer.writeCharacters(s);

            break;
        }
        case END_ELEMENT: {
            writer.writeEndElement();
            openElements--;
            break;
        }
        case START_ELEMENT: {
            if (inStream.getNamespaceURI() == "" || inStream.getPrefix() == DEFAULT_NS_PREFIX
                    || inStream.getPrefix() == null) {
                writer.writeStartElement(inStream.getLocalName());
            } else {
                if (writer.getNamespaceContext().getPrefix(inStream.getPrefix()) == "") {
                    // TODO handle special cases for prefix binding, see
                    // http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/javax/xml/namespace/NamespaceContext.html#getNamespaceURI(java.lang.String)
                    writer.setPrefix(inStream.getPrefix(), inStream.getNamespaceURI());
                }
                writer.writeStartElement(inStream.getPrefix(), inStream.getLocalName(),
                        inStream.getNamespaceURI());
            }
            // copy all namespace bindings
            for (int i = 0; i < inStream.getNamespaceCount(); i++) {
                String nsPrefix = inStream.getNamespacePrefix(i);
                String nsURI = inStream.getNamespaceURI(i);
                writer.writeNamespace(nsPrefix, nsURI);
            }

            // copy all attributes
            for (int i = 0; i < inStream.getAttributeCount(); i++) {
                String localName = inStream.getAttributeLocalName(i);
                String nsPrefix = inStream.getAttributePrefix(i);
                String value = inStream.getAttributeValue(i);
                String nsURI = inStream.getAttributeNamespace(i);
                if (nsURI == null) {
                    writer.writeAttribute(localName, value);
                } else {
                    writer.writeAttribute(nsPrefix, nsURI, localName, value);
                }
            }

            openElements++;
            break;
        }
        default: {
            break;
        }
        }
        if (openElements > 0) {
            inStream.next();
        }
    }
}

From source file:org.elissa.web.server.TransformerServlet.java

private void revisitSequenceFlows(Definitions def, String orig) {
    try {//from w ww  .  j  a v  a  2  s .c  o m
        Map<String, Map<String, String>> sequenceFlowMapping = new HashMap<String, Map<String, String>>();
        XMLInputFactory factory = XMLInputFactory.newInstance();
        XMLStreamReader reader = factory.createXMLStreamReader(new StringReader(orig));
        while (reader.hasNext()) {
            if (reader.next() == XMLStreamReader.START_ELEMENT) {
                if ("sequenceFlow".equals(reader.getLocalName())) {
                    String id = "";
                    String source = "";
                    String target = "";
                    for (int i = 0; i < reader.getAttributeCount(); i++) {
                        if ("id".equals(reader.getAttributeLocalName(i))) {
                            id = reader.getAttributeValue(i);
                        }
                        if ("sourceRef".equals(reader.getAttributeLocalName(i))) {
                            source = reader.getAttributeValue(i);
                        }
                        if ("targetRef".equals(reader.getAttributeLocalName(i))) {
                            target = reader.getAttributeValue(i);
                        }
                    }
                    Map<String, String> valueMap = new HashMap<String, String>();
                    valueMap.put("sourceRef", source);
                    valueMap.put("targetRef", target);
                    sequenceFlowMapping.put(id, valueMap);
                }
            }
        }
        List<RootElement> rootElements = def.getRootElements();
        for (RootElement root : rootElements) {
            if (root instanceof Process) {
                Process process = (Process) root;
                List<FlowElement> flowElements = process.getFlowElements();
                for (FlowElement fe : flowElements) {
                    if (fe instanceof SequenceFlow) {
                        SequenceFlow sf = (SequenceFlow) fe;
                        if (sequenceFlowMapping.containsKey(sf.getId())) {
                            sf.setSourceRef(
                                    getFlowNode(def, sequenceFlowMapping.get(sf.getId()).get("sourceRef")));
                            sf.setTargetRef(
                                    getFlowNode(def, sequenceFlowMapping.get(sf.getId()).get("targetRef")));
                        } else {
                            _logger.error("Could not find mapping for sequenceFlow: " + sf.getId());
                        }
                    }
                }
            }
        }
    } catch (FactoryConfigurationError e) {
        _logger.error(e.getMessage());
        e.printStackTrace();
    } catch (Exception e) {
        _logger.error(e.getMessage());
        e.printStackTrace();
    }
}

From source file:org.elissa.web.server.TransformerServlet.java

private void addBpmnDiInfo(Definitions def, String gpd) {
    try {//from  ww  w . j av  a2 s  .  c  o  m
        Map<String, Bounds> _bounds = new HashMap<String, Bounds>();
        XMLInputFactory factory = XMLInputFactory.newInstance();
        XMLStreamReader reader = factory.createXMLStreamReader(new StringReader(gpd));
        while (reader.hasNext()) {
            if (reader.next() == XMLStreamReader.START_ELEMENT) {
                if ("node".equals(reader.getLocalName())) {
                    Bounds b = DcFactory.eINSTANCE.createBounds();
                    String nodeName = null;
                    String nodeX = null;
                    String nodeY = null;
                    String nodeWidth = null;
                    String nodeHeight = null;
                    for (int i = 0; i < reader.getAttributeCount(); i++) {
                        if ("name".equals(reader.getAttributeLocalName(i))) {
                            nodeName = reader.getAttributeValue(i);
                        } else if ("x".equals(reader.getAttributeLocalName(i))) {
                            nodeX = reader.getAttributeValue(i);
                        } else if ("y".equals(reader.getAttributeLocalName(i))) {
                            nodeY = reader.getAttributeValue(i);
                        } else if ("width".equals(reader.getAttributeLocalName(i))) {
                            nodeWidth = reader.getAttributeValue(i);
                        } else if ("height".equals(reader.getAttributeLocalName(i))) {
                            nodeHeight = reader.getAttributeValue(i);
                        }
                    }
                    b.setX(new Float(nodeX).floatValue());
                    b.setY(new Float(nodeY).floatValue());
                    b.setWidth(new Float(nodeWidth).floatValue());
                    b.setHeight(new Float(nodeHeight).floatValue());
                    _bounds.put(nodeName, b);
                }
            }
        }

        for (RootElement rootElement : def.getRootElements()) {
            if (rootElement instanceof Process) {
                Process process = (Process) rootElement;
                BpmnDiFactory diFactory = BpmnDiFactory.eINSTANCE;
                BPMNDiagram diagram = diFactory.createBPMNDiagram();
                BPMNPlane plane = diFactory.createBPMNPlane();
                plane.setBpmnElement(process);
                diagram.setPlane(plane);
                for (FlowElement flowElement : process.getFlowElements()) {
                    if (flowElement instanceof FlowNode) {
                        Bounds b = _bounds.get(flowElement.getId());
                        if (b != null) {
                            BPMNShape shape = diFactory.createBPMNShape();
                            shape.setBpmnElement(flowElement);
                            shape.setBounds(b);
                            plane.getPlaneElement().add(shape);
                        }
                    } else if (flowElement instanceof SequenceFlow) {
                        SequenceFlow sequenceFlow = (SequenceFlow) flowElement;
                        BPMNEdge edge = diFactory.createBPMNEdge();
                        edge.setBpmnElement(flowElement);
                        DcFactory dcFactory = DcFactory.eINSTANCE;
                        Point point = dcFactory.createPoint();
                        if (sequenceFlow.getSourceRef() != null) {
                            Bounds sourceBounds = _bounds.get(sequenceFlow.getSourceRef().getId());
                            point.setX(sourceBounds.getX() + (sourceBounds.getWidth() / 2));
                            point.setY(sourceBounds.getY() + (sourceBounds.getHeight() / 2));
                        }
                        edge.getWaypoint().add(point);
                        //                      List<Point> dockers = _dockers.get(sequenceFlow.getId());
                        //                      for (int i = 1; i < dockers.size() - 1; i++) {
                        //                         edge.getWaypoint().add(dockers.get(i));
                        //                      }
                        point = dcFactory.createPoint();
                        if (sequenceFlow.getTargetRef() != null) {
                            Bounds targetBounds = _bounds.get(sequenceFlow.getTargetRef().getId());
                            point.setX(targetBounds.getX() + (targetBounds.getWidth() / 2));
                            point.setY(targetBounds.getY() + (targetBounds.getHeight() / 2));
                        }
                        edge.getWaypoint().add(point);
                        plane.getPlaneElement().add(edge);
                    }
                }

                def.getDiagrams().add(diagram);
            }
        }
    } catch (FactoryConfigurationError e) {
        _logger.error("Exception adding bpmndi info: " + e.getMessage());
    } catch (Exception e) {
        _logger.error("Exception adding bpmndi info: " + e.getMessage());
    }
}

From source file:org.erdc.cobie.shared.COBieUtility.java

static public Map<String, String> elementMapFromXMLObject(XmlObject xml) {
    Map<String, String> elementMap = new HashMap<String, String>();
    XMLStreamReader rdr = xml.newXMLStreamReader();
    String keyName = "";
    String keyVal = "";
    boolean lastWasStartElement = false;
    int attCount = 0;
    try {/*from  w w  w .  java2s  .co  m*/

        while (rdr.hasNext()) {
            try {
                attCount = rdr.getAttributeCount();
            } catch (Exception ex) {
                attCount = 0;
            }
            if (attCount > 0) {
                for (int i = 0; i < attCount; i++) {
                    keyName = rdr.getAttributeLocalName(i);
                    keyVal = rdr.getAttributeValue(i);
                    if (!elementMap.containsKey(keyName)) {
                        elementMap.put(keyName, escape(keyVal));
                    }
                    lastWasStartElement = false;
                }
            }
            if (rdr.isStartElement()) {
                keyName = rdr.getLocalName();
                lastWasStartElement = true;

            } else if (rdr.isCharacters() && lastWasStartElement) {
                if (isElementADateTime(xml, keyName)) {
                    keyVal = COBieUtility.stringFromXmlDateTime(xml, keyName);

                } else {
                    keyVal = rdr.getText();
                }
                if (!elementMap.containsKey(keyName)) {
                    elementMap.put(keyName, escape(keyVal));
                }
                lastWasStartElement = false;
            } else {
                lastWasStartElement = false;
            }

            rdr.next();
        }
    } catch (XMLStreamException e) {
        LOGGER.error("", e);
    }
    return elementMap;
}

From source file:org.fcrepo.migration.foxml.FoxmlInputStreamFedoraObjectProcessor.java

private static Map<String, String> getAttributes(final XMLStreamReader r, final String... allowedNames) {
    final HashMap<String, String> result = new HashMap<String, String>();
    final Set<String> allowed = new HashSet<String>(Arrays.asList(allowedNames));
    for (int i = 0; i < r.getAttributeCount(); i++) {
        final String localName = r.getAttributeLocalName(i);
        final String value = r.getAttributeValue(i);
        if (allowed.contains(localName)) {
            result.put(localName, value);
        } else {/*from  ww  w. j a  v  a2 s .  com*/
            System.err.println("Unexpected attribute: " + localName + " = \"" + value + "\"");
        }
    }
    return result;

}

From source file:org.graphipedia.wikipedia.parser.SimpleStaxParser.java

/**
 * Parses the elements in the XML file.//w  w  w  .  j  a v  a 2  s  . c om
 * @param reader The XML stream.
 * @throws XMLStreamException when something goes wrong while parsing the XML file.
 */
private void parseElements(XMLStreamReader reader) throws XMLStreamException {
    LinkedList<String> elementStack = new LinkedList<String>();
    StringBuilder textBuffer = new StringBuilder();
    List<String> attributeValues = new ArrayList<String>();

    while (reader.hasNext()) {
        switch (reader.next()) {
        case XMLEvent.START_ELEMENT:
            String startElement = reader.getName().getLocalPart();
            elementStack.push(startElement);
            attributeValues = new ArrayList<String>();
            if (isInterestingWithAttributes(startElement)) {
                int noAttributes = reader.getAttributeCount();
                for (int i = 0; i < noAttributes; i += 1)
                    attributeValues.add(reader.getAttributeValue(i));
            }
            textBuffer.setLength(0);
            break;
        case XMLEvent.END_ELEMENT:
            String element = elementStack.pop();
            if (isInterestingWithAttributes(element)) {
                if (!handleElement(element, textBuffer.toString().trim(), attributeValues))
                    return;
            } else if (isInteresting(element)) {
                if (!handleElement(element, textBuffer.toString().trim()))
                    return;
            }
            break;
        case XMLEvent.CHARACTERS:
            if (isInteresting(elementStack.peek())) {
                textBuffer.append(reader.getText());
            }
            break;
        }
    }
}

From source file:org.jbpm.designer.web.profile.impl.JbpmProfileImpl.java

private void initializeLocalPlugins(ServletContext context) {
    Map<String, IDiagramPlugin> registry = PluginServiceImpl.getLocalPluginsRegistry(context);
    FileInputStream fileStream = null;
    try {/*  ww  w . j a va 2  s  .c  om*/
        try {
            fileStream = new FileInputStream(new StringBuilder(context.getRealPath("/")).append("/")
                    .append(ConfigurationProvider.getInstance().getDesignerContext()).append("profiles")
                    .append("/").append("jbpm.xml").toString());
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        }
        XMLInputFactory factory = XMLInputFactory.newInstance();
        XMLStreamReader reader = factory.createXMLStreamReader(fileStream, "UTF-8");
        while (reader.hasNext()) {
            if (reader.next() == XMLStreamReader.START_ELEMENT) {
                if ("profile".equals(reader.getLocalName())) {
                    for (int i = 0; i < reader.getAttributeCount(); i++) {
                        if ("stencilset".equals(reader.getAttributeLocalName(i))) {
                            _stencilSet = reader.getAttributeValue(i);
                        }
                    }
                } else if ("plugin".equals(reader.getLocalName())) {
                    String name = null;
                    for (int i = 0; i < reader.getAttributeCount(); i++) {
                        if ("name".equals(reader.getAttributeLocalName(i))) {
                            name = reader.getAttributeValue(i);
                        }
                    }
                    _plugins.put(name, registry.get(name));
                } else if ("localhistory".equals(reader.getLocalName())) {
                    for (int i = 0; i < reader.getAttributeCount(); i++) {
                        if ("enabled".equals(reader.getAttributeLocalName(i))) {
                            String localhistoryenabled = reader.getAttributeValue(i);
                            if (!isEmpty(localhistoryenabled)) {
                                _localHistoryEnabled = localhistoryenabled;
                            } else {
                                _logger.info("Invalid local history enabled");
                            }
                        }
                        if ("timeout".equals(reader.getAttributeLocalName(i))) {
                            String localhistorytimeout = reader.getAttributeValue(i);
                            if (!isEmpty(localhistorytimeout)) {
                                _localHistoryTimeout = localhistorytimeout;
                            } else {
                                _logger.info("Invalid local history timeout");
                            }
                        }
                    }
                } else if ("storesvgonsave".equals(reader.getLocalName())) {
                    for (int i = 0; i < reader.getAttributeCount(); i++) {
                        if ("enabled".equals(reader.getAttributeLocalName(i))) {
                            String storesvgonsaveenabled = reader.getAttributeValue(i);
                            if (!isEmpty(storesvgonsaveenabled)) {
                                _storeSVGonSaveOption = storesvgonsaveenabled;
                            } else {
                                _logger.info("Invalid store svg on save enabled");
                            }
                        }
                    }
                }
            }
        }
    } catch (XMLStreamException e) {
        _logger.error(e.getMessage(), e);
        throw new RuntimeException(e); // stop initialization
    } finally {
        if (fileStream != null) {
            try {
                fileStream.close();
            } catch (IOException e) {
            }
        }
        ;
    }
}

From source file:org.mule.module.xml.util.XMLUtils.java

private static void writeStartElement(XMLStreamReader reader, XMLStreamWriter writer)
        throws XMLStreamException {
    String local = reader.getLocalName();
    String uri = reader.getNamespaceURI();
    String prefix = reader.getPrefix();
    if (prefix == null) {
        prefix = "";
    }/*from  w  w w  .  j a v  a  2s  . c o m*/

    //        System.out.println("STAXUTILS:writeStartElement : node name : " + local +  " namespace URI" + uri);
    boolean writeElementNS = false;
    if (uri != null) {
        String boundPrefix = writer.getPrefix(uri);
        if (boundPrefix == null || !prefix.equals(boundPrefix)) {
            writeElementNS = true;
        }
    }

    // Write out the element name
    if (uri != null) {
        if (prefix.length() == 0 && StringUtils.isEmpty(uri)) {
            writer.writeStartElement(local);
            writer.setDefaultNamespace(uri);

        } else {
            writer.writeStartElement(prefix, local, uri);
            writer.setPrefix(prefix, uri);
        }
    } else {
        writer.writeStartElement(local);
    }

    // Write out the namespaces
    for (int i = 0; i < reader.getNamespaceCount(); i++) {
        String nsURI = reader.getNamespaceURI(i);
        String nsPrefix = reader.getNamespacePrefix(i);
        if (nsPrefix == null) {
            nsPrefix = "";
        }

        if (nsPrefix.length() == 0) {
            writer.writeDefaultNamespace(nsURI);
        } else {
            writer.writeNamespace(nsPrefix, nsURI);
        }

        if (nsURI.equals(uri) && nsPrefix.equals(prefix)) {
            writeElementNS = false;
        }
    }

    // Check if the namespace still needs to be written.
    // We need this check because namespace writing works
    // different on Woodstox and the RI.
    if (writeElementNS) {
        if (prefix.length() == 0) {
            writer.writeDefaultNamespace(uri);
        } else {
            writer.writeNamespace(prefix, uri);
        }
    }

    // Write out attributes
    for (int i = 0; i < reader.getAttributeCount(); i++) {
        String ns = reader.getAttributeNamespace(i);
        String nsPrefix = reader.getAttributePrefix(i);
        if (ns == null || ns.length() == 0) {
            writer.writeAttribute(reader.getAttributeLocalName(i), reader.getAttributeValue(i));
        } else if (nsPrefix == null || nsPrefix.length() == 0) {
            writer.writeAttribute(reader.getAttributeNamespace(i), reader.getAttributeLocalName(i),
                    reader.getAttributeValue(i));
        } else {
            writer.writeAttribute(reader.getAttributePrefix(i), reader.getAttributeNamespace(i),
                    reader.getAttributeLocalName(i), reader.getAttributeValue(i));
        }

    }
}

From source file:org.mule.transport.sap.transformer.XmlToJcoFunctionTransformer.java

private String getAttributeValue(String name, XMLStreamReader reader) {
    int count = reader.getAttributeCount();

    if (true) {/*from   w  w w  .  ja v a2s.c om*/
        return reader.getAttributeValue(0);
    }
    for (int i = 0; i < count; i++) {
        if (reader.getAttributeLocalName(i).equals(name)) {
            String value = reader.getAttributeValue(i);
            return value;
        }

    }
    return null;
}

From source file:org.neo4j.gis.spatial.osm.OSMImporter.java

public void importFile(OSMWriter<?> osmWriter, String dataset, boolean allPoints, Charset charset)
        throws IOException, XMLStreamException {
    System.out.println("Importing with osm-writer: " + osmWriter);
    osmWriter.getOrCreateOSMDataset(layerName);
    osm_dataset = osmWriter.getDatasetId();

    long startTime = System.currentTimeMillis();
    long[] times = new long[] { 0L, 0L, 0L, 0L };
    javax.xml.stream.XMLInputFactory factory = javax.xml.stream.XMLInputFactory.newInstance();
    CountedFileReader reader = new CountedFileReader(dataset, charset);
    javax.xml.stream.XMLStreamReader parser = factory.createXMLStreamReader(reader);
    int countXMLTags = 0;
    beginProgressMonitor(100);//from   w ww.  j a  va 2  s.  c om
    setLogContext(dataset);
    boolean startedWays = false;
    boolean startedRelations = false;
    try {
        ArrayList<String> currentXMLTags = new ArrayList<String>();
        int depth = 0;
        Map<String, Object> wayProperties = null;
        ArrayList<Long> wayNodes = new ArrayList<Long>();
        Map<String, Object> relationProperties = null;
        ArrayList<Map<String, Object>> relationMembers = new ArrayList<Map<String, Object>>();
        LinkedHashMap<String, Object> currentNodeTags = new LinkedHashMap<String, Object>();
        while (true) {
            updateProgressMonitor(reader.getPercentRead());
            incrLogContext();
            int event = parser.next();
            if (event == javax.xml.stream.XMLStreamConstants.END_DOCUMENT) {
                break;
            }
            switch (event) {
            case javax.xml.stream.XMLStreamConstants.START_ELEMENT:
                currentXMLTags.add(depth, parser.getLocalName());
                String tagPath = currentXMLTags.toString();
                if (tagPath.equals("[osm]")) {
                    osmWriter.setDatasetProperties(extractProperties(parser));
                } else if (tagPath.equals("[osm, bounds]")) {
                    osmWriter.addOSMBBox(extractProperties("bbox", parser));
                } else if (tagPath.equals("[osm, node]")) {
                    // <node id="269682538" lat="56.0420950"
                    // lon="12.9693483" user="sanna" uid="31450"
                    // visible="true" version="1" changeset="133823"
                    // timestamp="2008-06-11T12:36:28Z"/>
                    osmWriter.createOSMNode(extractProperties("node", parser));
                } else if (tagPath.equals("[osm, way]")) {
                    // <way id="27359054" user="spull" uid="61533"
                    // visible="true" version="8" changeset="4707351"
                    // timestamp="2010-05-15T15:39:57Z">
                    if (!startedWays) {
                        startedWays = true;
                        times[0] = System.currentTimeMillis();
                        osmWriter.optimize();
                        times[1] = System.currentTimeMillis();
                    }
                    wayProperties = extractProperties("way", parser);
                    wayNodes.clear();
                } else if (tagPath.equals("[osm, way, nd]")) {
                    Map<String, Object> properties = extractProperties(parser);
                    wayNodes.add(Long.parseLong(properties.get("ref").toString()));
                } else if (tagPath.endsWith("tag]")) {
                    Map<String, Object> properties = extractProperties(parser);
                    currentNodeTags.put(properties.get("k").toString(), properties.get("v").toString());
                } else if (tagPath.equals("[osm, relation]")) {
                    // <relation id="77965" user="Grillo" uid="13957"
                    // visible="true" version="24" changeset="5465617"
                    // timestamp="2010-08-11T19:25:46Z">
                    if (!startedRelations) {
                        startedRelations = true;
                        times[2] = System.currentTimeMillis();
                        osmWriter.optimize();
                        times[3] = System.currentTimeMillis();
                    }
                    relationProperties = extractProperties("relation", parser);
                    relationMembers.clear();
                } else if (tagPath.equals("[osm, relation, member]")) {
                    relationMembers.add(extractProperties(parser));
                }
                if (startedRelations) {
                    if (countXMLTags < 10) {
                        log("Starting tag at depth " + depth + ": " + currentXMLTags.get(depth) + " - "
                                + currentXMLTags.toString());
                        for (int i = 0; i < parser.getAttributeCount(); i++) {
                            log("\t" + currentXMLTags.toString() + ": " + parser.getAttributeLocalName(i) + "["
                                    + parser.getAttributeNamespace(i) + "," + parser.getAttributePrefix(i) + ","
                                    + parser.getAttributeType(i) + "," + "] = " + parser.getAttributeValue(i));
                        }
                    }
                    countXMLTags++;
                }
                depth++;
                break;
            case javax.xml.stream.XMLStreamConstants.END_ELEMENT:
                if (currentXMLTags.toString().equals("[osm, node]")) {
                    osmWriter.addOSMNodeTags(allPoints, currentNodeTags);
                } else if (currentXMLTags.toString().equals("[osm, way]")) {
                    osmWriter.createOSMWay(wayProperties, wayNodes, currentNodeTags);
                } else if (currentXMLTags.toString().equals("[osm, relation]")) {
                    osmWriter.createOSMRelation(relationProperties, relationMembers, currentNodeTags);
                }
                depth--;
                currentXMLTags.remove(depth);
                // log("Ending tag at depth "+depth+": "+currentTags.get(depth));
                break;
            default:
                break;
            }
        }
    } finally {
        endProgressMonitor();
        parser.close();
        osmWriter.finish();
        this.osm_dataset = osmWriter.getDatasetId();
    }
    describeTimes(startTime, times);
    osmWriter.describeMissing();
    osmWriter.describeLoaded();

    long stopTime = System.currentTimeMillis();
    log("info | Elapsed time in seconds: " + (1.0 * (stopTime - startTime) / 1000.0));
    stats.dumpGeomStats();
    stats.printTagStats();
}