// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.data.osm; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; /** * * This class can be used to save properties of OsmPrimitive. The main difference between PrimitiveData * and OsmPrimitive is that PrimitiveData is not part of the dataset and changes in PrimitiveData are not * reported by events * */ public abstract class PrimitiveData implements Tagged, PrimitiveId { // Useful? //private boolean disabled; //private boolean filtered; //private boolean selected; //private boolean highlighted; public PrimitiveData() { id = OsmPrimitive.generateUniqueId(); } public PrimitiveData(PrimitiveData data) { this.keys.putAll(data.keys); this.modified = data.modified; this.visible = data.visible; this.deleted = data.deleted; this.id = data.id; this.user = data.user; this.version = data.version; this.timestamp = data.timestamp; this.incomplete = data.incomplete; } private final Map keys = new HashMap(); private boolean modified; private boolean visible = true; private boolean deleted; private boolean incomplete; private long id; private User user; private int version; private int timestamp; private int changesetId; public boolean isModified() { return modified; } public void setModified(boolean modified) { this.modified = modified; } public boolean isVisible() { return visible; } public void setVisible(boolean visible) { this.visible = visible; } public boolean isDeleted() { return deleted; } public void setDeleted(boolean deleted) { this.deleted = deleted; } public long getId() { return id; } public void setId(long id) { this.id = id; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } public int getVersion() { return version; } public void setVersion(int version) { this.version = version; } public int getTimestamp() { return timestamp; } public void setTimestamp(int timestamp) { this.timestamp = timestamp; } public int getChangesetId() { return changesetId; } public void setChangesetId(int changesetId) { this.changesetId = changesetId; } public Map getKeys() { return keys; } public boolean isIncomplete() { return incomplete; } public void setIncomplete(boolean incomplete) { this.incomplete = incomplete; } public void clearOsmId() { id = OsmPrimitive.generateUniqueId(); } public abstract PrimitiveData makeCopy(); @Override public String toString() { StringBuilder builder = new StringBuilder(); builder.append(id).append(keys); if (modified) { builder.append("M"); } if (visible) { builder.append("V"); } if (deleted) { builder.append("D"); } if (incomplete) { builder.append("I"); } return builder.toString(); } // Tagged implementation public String get(String key) { return keys.get(key); } public boolean hasKeys() { return !keys.isEmpty(); } public Collection keySet() { return keys.keySet(); } public void put(String key, String value) { keys.put(key, value); } public void remove(String key) { keys.remove(key); } public void removeAll() { keys.clear(); } public void setKeys(Map keys) { this.keys.clear(); this.keys.putAll(keys); } @SuppressWarnings("unchecked") static public List getFilteredList(Collection list, OsmPrimitiveType type) { List ret = new ArrayList(); for(PrimitiveData p: list) { if (type.getDataClass().isInstance(p)) { ret.add((T)p); } } return ret; } protected void setKeysAsList(String... keys) { assert keys.length % 2 == 0; for (int i=0; i