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 }