package se.kodapan.osm.domain;
import java.io.Serializable;
import java.util.*;
/**
* @author kalle
* @since 2013-05-01 15:42
*/
public abstract class OsmObject implements Serializable {
private static final long serialVersionUID = 1l;
public abstract <R> R accept(OsmObjectVisitor<R> visitor);
/**
* if true, then this object has not been loaded, it's just a referenced object
*/
private boolean loaded;
private Long id;
private Map<String, String> attributes;
private Integer version;
private Long changeset;
private Long uid;
private String user;
private boolean visible;
private Long timestamp;
private Map<String, String> tags;
private List<RelationMembership> relationMemberships;
public void addRelationMembership(RelationMembership member) {
if (relationMemberships == null) {
relationMemberships = new ArrayList<RelationMembership>(5);
} else {
// don't add membership to the same object twice
for (RelationMembership relationMembership : relationMemberships) {
if (relationMembership.getRelation().equals(member.getRelation())) {
return;
}
}
}
relationMemberships.add(member);
}
public Map<String, String> getAttributes() {
return attributes;
}
public void setAttributes(Map<String, String> attributes) {
this.attributes = attributes;
}
public List<RelationMembership> getRelationMemberships() {
return relationMemberships;
}
public void setRelationMemberships(List<RelationMembership> relationMemberships) {
this.relationMemberships = relationMemberships;
}
public String getAttribute(String key) {
if (attributes == null) {
return null;
}
return attributes.get(key);
}
public String setAttribute(String key, String value) {
if (attributes == null) {
attributes = new HashMap<String, String>(5);
}
return attributes.put(key, value);
}
public String getTag(String key) {
if (tags == null) {
return null;
}
return tags.get(key);
}
public String setTag(String key, String value) {
if (tags == null) {
tags = new LinkedHashMap<String, String>(5);
}
return tags.put(key, value);
}
public Integer getVersion() {
return version;
}
public void setVersion(Integer version) {
this.version = version;
}
public Long getChangeset() {
return changeset;
}
public void setChangeset(Long changeset) {
this.changeset = changeset;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public boolean isVisible() {
return visible;
}
public void setVisible(boolean visible) {
this.visible = visible;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Map<String, String> getTags() {
return tags;
}
public void setTags(Map<String, String> tags) {
this.tags = tags;
}
public Long getTimestamp() {
return timestamp;
}
public void setTimestamp(Long timestamp) {
this.timestamp = timestamp;
}
public Long getUid() {
return uid;
}
public void setUid(Long uid) {
this.uid = uid;
}
public boolean isLoaded() {
return loaded;
}
public void setLoaded(boolean loaded) {
this.loaded = loaded;
}
@Override
public String toString() {
return "OsmObject{" +
"loaded=" + loaded +
", id=" + id +
", attributes=" + attributes +
", version=" + version +
", changeset=" + changeset +
", uid=" + uid +
", user='" + user + '\'' +
", visible=" + visible +
", timestamp=" + timestamp +
", tags=" + tags +
", relationMemberships=" + relationMemberships +
'}';
}
}