// This software is released into the Public Domain. See copying.txt for details.
package org.openstreetmap.osmosis.core.domain.v0_6;
import org.openstreetmap.osmosis.core.OsmosisRuntimeException;
import org.openstreetmap.osmosis.core.store.StoreClassRegister;
import org.openstreetmap.osmosis.core.store.StoreReader;
import org.openstreetmap.osmosis.core.store.StoreWriter;
import org.openstreetmap.osmosis.core.store.Storeable;
/**
* A value class representing a single OSM user, comprised of user name and id.
*
* This class is immutable, and the static factories are thread-safe.
*
* @author Karl Newman
* @author Brett Henderson
*/
public class OsmUser implements Storeable {
private String name;
private int id;
/**
* User ID value to designate no id available. If this is set to 0, some
* databases (ie. MySQL) will default a non-zero value upon insert. To avoid
* special case code for each database with this issue, this value is made
* negative.
*/
private static final int USER_ID_NONE = -1;
/**
* The user instance representing no user available or no user applicable.
*/
public static final OsmUser NONE = new OsmUser(USER_ID_NONE, "");
/**
* Creates a new instance.
*
* @param id
* The userId associated with the user name.
* @param userName
* The name of the user that this object represents.
*/
public OsmUser(int id, String userName) {
if (userName == null) {
throw new NullPointerException("The user name cannot be null.");
}
// Disallow a user to be created with the "NONE" id.
if (NONE != null && id == USER_ID_NONE) {
throw new OsmosisRuntimeException("A user id of " + USER_ID_NONE + " is not permitted.");
}
this.name = userName;
this.id = id;
}
/**
* Creates a new instance.
*
* @param sr
* The store to read state from.
* @param scr
* Maintains the mapping between classes and their identifiers
* within the store.
*/
public OsmUser(StoreReader sr, StoreClassRegister scr) {
name = sr.readString();
id = sr.readInteger();
}
/**
* Stores all state to the specified store writer.
*
* @param sw
* The writer that persists data to an underlying store.
* @param scr
* Maintains the mapping between classes and their identifiers
* within the store.
*/
public void store(StoreWriter sw, StoreClassRegister scr) {
sw.writeString(name);
sw.writeInteger(id);
}
/**
* {@inheritDoc}
*/
@Override
public boolean equals(Object o) {
OsmUser ou;
if (!(o instanceof OsmUser)) {
return false;
}
ou = (OsmUser) o;
return name.equals(ou.name) && id == ou.id;
}
/**
* {@inheritDoc}
*/
@Override
public int hashCode() {
int result;
result = -17;
result = 31 * result + name.hashCode();
result = 31 * result + id;
return result;
}
/**
* @return The userId.
*/
public int getId() {
return id;
}
/**
* @return The name of the user.
*/
public String getName() {
return name;
}
}