// This software is released into the Public Domain. See copying.txt for details.
package org.openstreetmap.osmosis.apidb.v0_6.impl;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;
import org.openstreetmap.osmosis.core.database.RowMapperListener;
import org.openstreetmap.osmosis.core.domain.v0_6.CommonEntityData;
import org.openstreetmap.osmosis.core.domain.v0_6.OsmUser;
import org.springframework.jdbc.core.RowCallbackHandler;
/**
* Maps entity result set rows into common entity data objects.
*/
public class EntityDataRowMapper implements RowCallbackHandler {
private RowMapperListener<CommonEntityData> listener;
private boolean readAllUsers;
/**
* Creates a new instance.
*
* @param listener
* The destination for result objects.
* @param readAllUsers
* If true, even anonymous users will be returned. Should be false in most cases.
*/
public EntityDataRowMapper(RowMapperListener<CommonEntityData> listener, boolean readAllUsers) {
this.listener = listener;
this.readAllUsers = readAllUsers;
}
/**
* Determines the appropriate user name to add to an entity based upon the user details
* provided.
*
* @param dataPublic
* The value of the public edit flag for the user.
* @param userId
* The unique id of the user.
* @param userName
* The display name of the user.
* @return The appropriate user to add to the entity.
*/
private OsmUser readUserField(boolean dataPublic, int userId, String userName) {
if (userId == OsmUser.NONE.getId()) {
return OsmUser.NONE;
} else if (dataPublic || readAllUsers) {
String correctedUserName;
if (userName == null) {
correctedUserName = "";
} else {
correctedUserName = userName;
}
return new OsmUser(userId, correctedUserName);
} else {
return OsmUser.NONE;
}
}
/**
* {@inheritDoc}
*/
@Override
public void processRow(ResultSet resultSet) throws SQLException {
long id;
int version;
Date timestamp;
OsmUser user;
long changesetId;
CommonEntityData entityData;
id = resultSet.getLong("id");
version = resultSet.getInt("version");
timestamp = new Date(resultSet.getTimestamp("timestamp").getTime());
user = readUserField(resultSet.getBoolean("data_public"), resultSet.getInt("user_id"), resultSet
.getString("display_name"));
changesetId = resultSet.getLong("changeset_id");
//node = new Node(id, version, timestamp, user, changesetId, latitude, longitude);
entityData = new CommonEntityData(id, version, timestamp, user, changesetId);
listener.process(entityData, resultSet);
}
}