001 // License: GPL. For details, see LICENSE file.
002 package org.openstreetmap.josm.data.osm;
003
004 import java.util.ArrayList;
005 import java.util.Arrays;
006 import java.util.Collection;
007 import java.util.List;
008 import java.util.Map;
009
010 /**
011 *
012 * This class can be used to save properties of OsmPrimitive. The main difference between PrimitiveData
013 * and OsmPrimitive is that PrimitiveData is not part of the dataset and changes in PrimitiveData are not
014 * reported by events
015 *
016 */
017 public abstract class PrimitiveData extends AbstractPrimitive {
018
019 public PrimitiveData() {
020 id = OsmPrimitive.generateUniqueId();
021 }
022
023 public PrimitiveData(PrimitiveData data) {
024 cloneFrom(data);
025 }
026
027 public void setId(long id) {
028 this.id = id;
029 }
030
031 public void setVersion(int version) {
032 this.version = version;
033 }
034
035 /**
036 * override to make it public
037 */
038 @Override
039 public void setIncomplete(boolean incomplete) {
040 super.setIncomplete(incomplete);
041 }
042
043 public abstract PrimitiveData makeCopy();
044
045 @Override
046 public String toString() {
047 StringBuilder builder = new StringBuilder();
048 builder.append(id).append(Arrays.toString(keys)).append(getFlagsAsString());
049 return builder.toString();
050 }
051
052 @SuppressWarnings("unchecked")
053 static public <T extends PrimitiveData> List<T> getFilteredList(Collection<T> list, OsmPrimitiveType type) {
054 List<T> ret = new ArrayList<T>();
055 for(PrimitiveData p: list) {
056 if (type.getDataClass().isInstance(p)) {
057 ret.add((T)p);
058 }
059 }
060 return ret;
061 }
062
063 @Override
064 protected final void keysChangedImpl(Map<String, String> originalKeys) {
065 }
066
067 @Override
068 public abstract OsmPrimitiveType getType();
069 }