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    }