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