Package aimax.osm.reader

Source Code of aimax.osm.reader.WayElementProcessor

// 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 way.
* @author Ruediger Lunde
*/
public class WayElementProcessor extends ElementProcessor implements TagListener {
  private static final String ELEMENT_NAME_TAG = "tag";
  private static final String ELEMENT_NAME_NODE = "nd";
  private static final String ATTRIBUTE_NAME_ID = "id";
  // private static final String ATTRIBUTE_NAME_TIMESTAMP = "timestamp";
  // private static final String ATTRIBUTE_NAME_USER = "user";
  // private static final String ATTRIBUTE_NAME_USERID = "uid";
  // private static final String ATTRIBUTE_NAME_CHANGESET_ID = "changeset";
  // private static final String ATTRIBUTE_NAME_VERSION = "version";
 
  private TagElementProcessor tagElementProcessor;
  private WayNodeElementProcessor wayNodeElementProcessor;
  private long wayId;
  private String wayName;
  private List<EntityAttribute> wayAttributes;
  private List<Long> wayNodeIds;
  private boolean skipElement;
   
  /**
   * Creates a new instance.
   *
   * @param parentProcessor
   *            The parent of this element processor.
   * @param mdConsumer
   *            The sink for receiving processed data.
   */
  public WayElementProcessor(ElementProcessor parentProcessor,
      MapBuilder mdConsumer) {
    super(parentProcessor, mdConsumer);
   
    tagElementProcessor = new TagElementProcessor(this, this);
    wayNodeElementProcessor = new WayNodeElementProcessor(this, this);
    wayAttributes = new ArrayList<EntityAttribute>();
    wayNodeIds = new ArrayList<Long>();
  }
 
  /**
   * {@inheritDoc}
   */
  public void begin(Attributes attributes) {
    wayId = Long.parseLong(attributes.getValue(ATTRIBUTE_NAME_ID));
    skipElement = getMapBuilder().isWayDefined(wayId);
    if (!skipElement) {
      wayName = null;
      wayAttributes.clear();
      wayNodeIds.clear();
    }
  }
 
  /**
   * 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_NODE.equals(qName))
        return wayNodeElementProcessor;
      else if (ELEMENT_NAME_TAG.equals(qName))
        return tagElementProcessor;
    }
    return super.getChild(uri, localName, qName);
  }
 
  /**
   * {@inheritDoc}
   */
  public void end() {
    if (!skipElement)
      getMapBuilder().addWay(wayId, wayName, wayAttributes, wayNodeIds);
  }
 
  /**
   * 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")) {
      wayName = value;
    } else {
      EntityAttribute att = EntityAttributeManager.instance().intern
      (new EntityAttribute(key, value));
      if (att != null)
        wayAttributes.add(att);
    }
  }
 
  /**
   * This is called by child element processors when a way node object is
   * encountered.
   *
   * @param nodeId
   *            The id of the way node to be processed.
   */
  public void addWayNode(long nodeId) {
    wayNodeIds.add(nodeId);
  }
}
TOP

Related Classes of aimax.osm.reader.WayElementProcessor

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.