Package aimax.osm.reader

Source Code of aimax.osm.reader.NodeElementProcessor

// License: GPL. Copyright 2007-2008 by Brett Henderson and other contributors.
// Modified by Ruediger Lunde, 2009
package aimax.osm.reader;

import java.util.ArrayList;
import java.util.List;

import org.xml.sax.Attributes;

import aimax.osm.data.EntityAttributeManager;
import aimax.osm.data.MapBuilder;
import aimax.osm.data.entities.EntityAttribute;

/**
* Provides an element processor implementation for a node.
*/
public class NodeElementProcessor extends ElementProcessor implements TagListener {
  private static final String ELEMENT_NAME_TAG = "tag";
  private static final String ATTRIBUTE_NAME_ID = "id";
  private static final String ATTRIBUTE_NAME_LATITUDE = "lat";
  private static final String ATTRIBUTE_NAME_LONGITUDE = "lon";
 
 
  private TagElementProcessor tagElementProcessor;
  private long nodeId;
  private String nodeName;
  private List<EntityAttribute> nodeAttributes;
  private float nodeLat;
  private float nodeLon;
  private boolean skipElement;
 
  /**
   * Creates a new instance.
   *
   * @param parentProcessor
   *            The parent of this element processor.
   * @param mdConsumer
   *            The sink for receiving processed data.
   */
  public NodeElementProcessor(ElementProcessor parentProcessor,
      MapBuilder mdConsumer) {
    super(parentProcessor, mdConsumer);
   
    tagElementProcessor = new TagElementProcessor(this, this);
    nodeAttributes = new ArrayList<EntityAttribute>();
  }
   
  /**
   * {@inheritDoc}
   */
  public void begin(Attributes attributes) {
    nodeId = Long.parseLong(attributes.getValue(ATTRIBUTE_NAME_ID));
    skipElement = getMapBuilder().isNodeDefined(nodeId, null);
    if (!skipElement) {
      nodeName = null;
      nodeAttributes.clear();
      nodeLat = Float.parseFloat(attributes.getValue(ATTRIBUTE_NAME_LATITUDE));
      nodeLon = Float.parseFloat(attributes.getValue(ATTRIBUTE_NAME_LONGITUDE))
    }
  }
 
  /**
   * Retrieves the appropriate child element processor for the newly
   * encountered nested element.
   *
   * @param uri
   *            The element uri.
   * @param localName
   *            The element localName.
   * @param qName
   *            The element qName.
   * @return The appropriate element processor for the nested element.
   */
  @Override
  public ElementProcessor getChild(String uri, String localName, String qName) {
    if (!skipElement)
      if (ELEMENT_NAME_TAG.equals(qName))
        return tagElementProcessor;
   
    return super.getChild(uri, localName, qName);
  }
   
  /**
   * {@inheritDoc}
   */
  public void end() {
    if (!skipElement)
      getMapBuilder().addNode(nodeId, nodeName, nodeAttributes, nodeLat, nodeLon);
  }
 
  /**
   * This is called by child element processors when a tag object is
   * encountered.
   *
   * @param tag
   *            The tag to be processed.
   */
  public void processTag(Tag tag) {
    String key = tag.getKey();
    String value = tag.getValue();
    if (key.equals("name")) {
      nodeName = value;
    } else {
      EntityAttribute att = EntityAttributeManager.instance().intern
      (new EntityAttribute(key, value));
      if (att != null)
        nodeAttributes.add(att);
    }
  }
}
TOP

Related Classes of aimax.osm.reader.NodeElementProcessor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.