// This software is released into the Public Domain. See copying.txt for details.
package org.openstreetmap.osmosis.pgsnapshot.v0_6.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.openstreetmap.osmosis.core.domain.v0_6.Way;
import org.openstreetmap.osmosis.core.domain.v0_6.WayNode;
import org.springframework.jdbc.core.RowMapper;
/**
* Reads and writes way attributes to jdbc classes.
*
* @author Brett Henderson
*/
public class WayMapper extends EntityMapper<Way> {
private boolean supportBboxColumn;
private boolean supportLinestringColumn;
/**
* Creates a new instance.
*/
public WayMapper() {
supportBboxColumn = false;
}
/**
* Creates a new instance.
*
* @param supportBboxColumn
* If true, the bounding box column will be included in updates.
* @param supportLinestringColumn
* If true, the linestring column will be included in updates.
*/
public WayMapper(boolean supportBboxColumn, boolean supportLinestringColumn) {
this.supportBboxColumn = supportBboxColumn;
this.supportLinestringColumn = supportLinestringColumn;
}
/**
* {@inheritDoc}
*/
@Override
public String getEntityName() {
return "way";
}
/**
* {@inheritDoc}
*/
@Override
public ActionDataType getEntityType() {
return ActionDataType.WAY;
}
/**
* {@inheritDoc}
*/
@Override
public Class<Way> getEntityClass() {
return Way.class;
}
/**
* {@inheritDoc}
*/
@Override
protected String[] getTypeSpecificFieldNames() {
List<String> fieldNames;
fieldNames = new ArrayList<String>();
fieldNames.add("nodes");
if (supportBboxColumn) {
fieldNames.add("bbox");
}
if (supportLinestringColumn) {
fieldNames.add("linestring");
}
return fieldNames.toArray(new String[]{});
}
/**
* {@inheritDoc}
*/
@Override
public void populateEntityParameters(Map<String, Object> args, Way entity) {
List<WayNode> wayNodes;
long[] nodeIds;
populateCommonEntityParameters(args, entity);
wayNodes = entity.getWayNodes();
nodeIds = new long[wayNodes.size()];
for (int i = 0; i < nodeIds.length; i++) {
nodeIds[i] = wayNodes.get(i).getNodeId();
}
args.put("nodes", new WayNodesArray(nodeIds));
}
/**
* {@inheritDoc}
*/
@Override
public RowMapper<Way> getRowMapper() {
return new WayRowMapper();
}
}