// This software is released into the Public Domain. See copying.txt for details.
package org.openstreetmap.osmosis.core.domain.v0_6;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.openstreetmap.osmosis.core.domain.common.TimestampContainer;
import org.openstreetmap.osmosis.core.store.StoreClassRegister;
import org.openstreetmap.osmosis.core.store.StoreReader;
import org.openstreetmap.osmosis.core.store.StoreWriter;
/**
* Provides the ability to manipulate relations.
*
* @author Brett Henderson
*
* @deprecated Builder classes are not required because entities are now writeable.
*/
@Deprecated
public class RelationBuilder extends EntityBuilder<Relation> {
private List<RelationMember> members;
/**
* Creates a new instance.
*/
public RelationBuilder() {
super();
members = new ArrayList<RelationMember>();
}
/**
* Creates a new instance.
*
* @param entity
* The entity to initialise to.
*/
public RelationBuilder(Relation entity) {
this();
initialize(entity);
}
/**
* Creates a new instance.
*
* @param id
* The unique identifier.
* @param version
* The version of the entity.
* @param timestamp
* The last updated timestamp.
* @param user
* The user that last modified this entity.
* @param changesetId
* The id of the changeset that this version of the entity was created by.
*/
public RelationBuilder(long id, int version, Date timestamp, OsmUser user, long changesetId) {
this();
initialize(id, version, timestamp, user, changesetId);
}
/**
* Creates a new instance.
*
* @param id
* The unique identifier.
* @param version
* The version of the entity.
* @param timestampContainer
* The container holding the timestamp in an alternative
* timestamp representation.
* @param user
* The user that last modified this entity.
* @param changesetId
* The id of the changeset that this version of the entity was created by.
*/
public RelationBuilder(
long id, TimestampContainer timestampContainer, OsmUser user, int version, long changesetId) {
this();
initialize(id, version, timestampContainer, user, changesetId);
}
/**
* 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 RelationBuilder(StoreReader sr, StoreClassRegister scr) {
this();
initialize(new Relation(sr, scr));
}
/**
* {@inheritDoc}
*/
@Override
public void store(StoreWriter sw, StoreClassRegister scr) {
buildEntity().store(sw, scr);
}
/**
* Initialises the state of this sub-class.
*/
private void initializeLocal() {
members.clear();
}
/**
* Initializes the contents of the builder to the specified data.
*
* @param relation
* The entity to initialise to.
* @return This object allowing method chaining.
*/
public RelationBuilder initialize(Relation relation) {
super.initialize(relation);
initializeLocal();
members.addAll(relation.getMembers());
return this;
}
/**
* Initializes the contents of the builder to the specified data.
*
* @param newId
* The unique identifier.
* @param newVersion
* The version of the entity.
* @param newTimestamp
* The last updated timestamp.
* @param newUser
* The user that last modified this entity.
* @param newChangesetId
* The id of the changeset that this version of the entity was created by.
* @return This object allowing method chaining.
*/
@Override
public RelationBuilder initialize(long newId, int newVersion, Date newTimestamp, OsmUser newUser,
long newChangesetId) {
super.initialize(newId, newVersion, newTimestamp, newUser, newChangesetId);
initializeLocal();
return this;
}
/**
* Initializes the contents of the builder to the specified data.
*
* @param newId
* The unique identifier.
* @param newVersion
* The version of the entity.
* @param newTimestampContainer
* The container holding the timestamp in an alternative
* timestamp representation.
* @param newUser
* The user that last modified this entity.
* @param newChangesetId
* The id of the changeset that this version of the entity was created by.
* @return This object allowing method chaining.
*/
@Override
public RelationBuilder initialize(long newId, int newVersion, TimestampContainer newTimestampContainer,
OsmUser newUser, long newChangesetId) {
super.initialize(newId, newVersion, newTimestampContainer, newUser, newChangesetId);
initializeLocal();
return this;
}
/**
* Obtains the members.
*
* @return The members.
*/
public List<RelationMember> getMembers() {
return members;
}
/**
* Remove all existing members.
*
* @return This object allowing method chaining.
*/
public RelationBuilder clearMembers() {
members.clear();
return this;
}
/**
* Sets a new members value.
*
* @param newMembers
* The new relation members.
* @return This object allowing method chaining.
*/
public RelationBuilder setMembers(List<RelationMember> newMembers) {
newMembers.clear();
newMembers.addAll(newMembers);
return this;
}
/**
* Adds a new member.
*
* @param member
* The new member.
* @return This object allowing method chaining.
*/
public RelationBuilder addMember(RelationMember member) {
members.add(member);
return this;
}
/**
* {@inheritDoc}
*/
@Override
public Relation buildEntity() {
return new Relation(id, version, timestampContainer, user, changesetId, tags, members);
}
/**
* ${@inheritDoc}.
*/
@Override
public String toString() {
String type = null;
for (Tag tag : tags) {
if (tag.getKey() != null && tag.getKey().equalsIgnoreCase("type")) {
type = tag.getValue();
break;
}
}
if (type != null) {
return "RelationBuilder(id=" + getId() + ", #tags=" + getTags().size() + ", type='" + type + "')";
}
return "RelationBuilder(id=" + getId() + ", #tags=" + getTags().size() + ")";
}
}