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    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}