Package org.openstreetmap.osmosis.pgsimple.v0_6.impl

Source Code of org.openstreetmap.osmosis.pgsimple.v0_6.impl.NodeMapper

// This software is released into the Public Domain.  See copying.txt for details.
package org.openstreetmap.osmosis.pgsimple.v0_6.impl;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;

import org.openstreetmap.osmosis.core.OsmosisRuntimeException;
import org.openstreetmap.osmosis.core.domain.v0_6.CommonEntityData;
import org.openstreetmap.osmosis.core.domain.v0_6.Node;
import org.openstreetmap.osmosis.pgsimple.common.PointBuilder;
import org.postgis.PGgeometry;
import org.postgis.Point;


/**
* Reads and writes node attributes to jdbc classes.
*
* @author Brett Henderson
*/
public class NodeMapper extends EntityMapper<Node> {
 
  private PointBuilder pointBuilder;
 
 
  /**
   * Creates a new instance.
   */
  public NodeMapper() {
    pointBuilder = new PointBuilder();
  }
 
 
  /**
   * {@inheritDoc}
   */
  @Override
  public String getEntityName() {
    return "node";
  }
 
 
  /**
   * {@inheritDoc}
   */
  @Override
  public ActionDataType getEntityType() {
    return ActionDataType.NODE;
  }
 
 
  /**
   * {@inheritDoc}
   */
  @Override
  public Class<Node> getEntityClass() {
    return Node.class;
  }
 
 
  /**
   * {@inheritDoc}
   */
  @Override
  protected String[] getTypeSpecificFieldNames() {
    return new String[] {"geom"};
  }
 
 
  /**
   * {@inheritDoc}
   */
  @Override
  public Node parseRecord(ResultSet resultSet) {
    try {
      PGgeometry geom;
      Point point;
     
      geom = (PGgeometry) resultSet.getObject("geom");
      point = (Point) geom.getGeometry();
     
      return new Node(
        new CommonEntityData(
          resultSet.getLong("id"),
          resultSet.getInt("version"),
          new Date(resultSet.getTimestamp("tstamp").getTime()),
          buildUser(resultSet),
          resultSet.getLong("changeset_id")
        ),
        point.y,
        point.x
      );
     
    } catch (SQLException e) {
      throw new OsmosisRuntimeException("Unable to build a node from the current recordset row.", e);
    }
  }
 
 
  /**
   * {@inheritDoc}
   */
  @Override
  public int populateEntityParameters(PreparedStatement statement, int initialIndex, Node node) {
    int prmIndex;
   
    // Populate the entity level parameters.
    prmIndex = populateCommonEntityParameters(statement, initialIndex, node);
   
    try {
      // Set the node level parameters.
      statement.setObject(
          prmIndex++,
          new PGgeometry(pointBuilder.createPoint(node.getLatitude(), node.getLongitude())));
     
    } catch (SQLException e) {
      throw new OsmosisRuntimeException(
          "Unable to set a prepared statement parameter for node " + node.getId() + ".", e);
    }
   
    return prmIndex;
  }
}
TOP

Related Classes of org.openstreetmap.osmosis.pgsimple.v0_6.impl.NodeMapper

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.