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