Ignore:
Timestamp:
2009-11-07T20:28:14+01:00 (14 years ago)
Author:
jttt
Message:

Save reference to dataset in OsmPrimitive

Location:
trunk/src/org/openstreetmap/josm/data/osm
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/DataSet.java

    r2402 r2405  
    190190        }
    191191        allPrimitives.add(primitive);
     192        primitive.setDataset(this);
    192193    }
    193194
     
    195196        OsmPrimitive result;
    196197        if (data instanceof NodeData) {
    197             result = new Node((NodeData)data, this);
     198            result = new Node();
    198199        } else if (data instanceof WayData) {
    199             result = new Way((WayData)data, this);
     200            result = new Way();
    200201        } else if (data instanceof RelationData) {
    201             result = new Relation((RelationData)data, this);
     202            result = new Relation();
    202203        } else
    203204            throw new AssertionError();
     205        result.setDataset(this);
     206        result.load(data);
    204207        addPrimitive(result);
    205208        return result;
     
    228231        selectedPrimitives.remove(primitive);
    229232        allPrimitives.remove(primitive);
     233        primitive.setDataset(null);
    230234    }
    231235
     
    797801                selectedPrimitives.remove(primitive);
    798802                allPrimitives.remove(primitive);
     803                primitive.setDataset(null);
    799804                changed = true;
    800805                it.remove();
     
    811816    public void clear() {
    812817        clearSelection();
     818        for (OsmPrimitive primitive:allPrimitives) {
     819            primitive.setDataset(null);
     820        }
    813821        nodes.clear();
    814822        ways.clear();
  • trunk/src/org/openstreetmap/josm/data/osm/Node.java

    r2399 r2405  
    8585    }
    8686
    87     public Node(NodeData data, DataSet dataSet) {
    88         super(data);
    89         load(data, dataSet);
    90     }
    91 
    9287    @Override public void visit(Visitor visitor) {
    9388        visitor.visit(this);
     
    9994    }
    10095
    101     @Override public void load(PrimitiveData data, DataSet dataSet) {
    102         super.load(data, dataSet);
     96    @Override public void load(PrimitiveData data) {
     97        super.load(data);
    10398        setCoor(((NodeData)data).getCoor());
    10499    }
  • trunk/src/org/openstreetmap/josm/data/osm/NodeData.java

    r2399 r2405  
    5050
    5151    @Override
    52     public Node makePrimitive(DataSet dataSet) {
    53         return new Node(this, dataSet);
    54     }
    55 
    56     @Override
    5752    public String toString() {
    5853        return super.toString() + " NODE " + coor;
  • trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java

    r2399 r2405  
    131131     */
    132132    private long id = 0;
     133
     134    private DataSet dataSet;
     135
     136    /**
     137     * This method should never ever by called from somewhere else than Dataset.addPrimitive or removePrimitive methods
     138     * @param dataSet
     139     */
     140    void setDataset(DataSet dataSet) {
     141        if (this.dataSet != null && dataSet != null && this.dataSet != dataSet)
     142            throw new DataIntegrityProblemException("Primitive cannot be included in more than one Dataset");
     143        this.dataSet = dataSet;
     144    }
     145
     146    /**
     147     *
     148     * @return DataSet this primitive is part of.
     149     * @throws DataIntegrityProblemException when primitive is not part of any dataset
     150     */
     151    public DataSet getDataSet() {
     152        if (dataSet == null)
     153            throw new DataIntegrityProblemException("Primitive must be part of the dataset");
     154        return dataSet;
     155    }
    133156
    134157    private volatile byte flags = FLAG_VISIBLE;   // visible per default
     
    798821     * Loads (clone) this primitive from provided PrimitiveData
    799822     * @param data
    800      * @param dataSet Dataset this primitive is part of. This parameter is used only
    801      * temporarily. OsmPrimitive will have final field dataset in future
    802      */
    803     public void load(PrimitiveData data, DataSet dataSet) {
     823     */
     824    public void load(PrimitiveData data) {
    804825        setKeys(data.getKeys());
    805826        timestamp = data.getTimestamp();
  • trunk/src/org/openstreetmap/josm/data/osm/PrimitiveData.java

    r2404 r2405  
    9999    public abstract PrimitiveData makeCopy();
    100100
    101     public abstract OsmPrimitive makePrimitive(DataSet dataSet);
    102 
    103101    @Override
    104102    public String toString() {
  • trunk/src/org/openstreetmap/josm/data/osm/Relation.java

    r2404 r2405  
    136136        super(id, false);
    137137    }
    138 
    139     public Relation(RelationData data, DataSet dataSet) {
    140         super(data);
    141         load(data, dataSet);
    142     }
    143 
    144138
    145139    @Override public void cloneFrom(OsmPrimitive osm) {
     
    153147    }
    154148
    155     @Override public void load(PrimitiveData data, DataSet dataSet) {
    156         super.load(data, dataSet);
     149    @Override public void load(PrimitiveData data) {
     150        super.load(data);
    157151
    158152        RelationData relationData = (RelationData) data;
     
    160154        List<RelationMember> newMembers = new ArrayList<RelationMember>();
    161155        for (RelationMemberData member : relationData.getMembers()) {
    162             OsmPrimitive primitive = dataSet.getPrimitiveById(member);
     156            OsmPrimitive primitive = getDataSet().getPrimitiveById(member);
    163157            if (primitive == null)
    164158                throw new AssertionError("Data consistency problem - relation with missing member detected");
  • trunk/src/org/openstreetmap/josm/data/osm/RelationData.java

    r2399 r2405  
    2828
    2929    @Override
    30     public Relation makePrimitive(DataSet dataSet) {
    31         return new Relation(this, dataSet);
    32     }
    33 
    34     @Override
    3530    public String toString() {
    3631        return super.toString() + " REL " + members;
  • trunk/src/org/openstreetmap/josm/data/osm/Way.java

    r2404 r2405  
    161161    }
    162162
    163     public Way(WayData data, DataSet dataSet) {
    164         super(data);
    165         load(data, dataSet);
    166     }
    167 
    168163    /**
    169164     *
    170165     * @param data
    171      * @param dataSet Dataset this way is part of. This parameter will be removed in future
    172166     */
    173167    @Override
    174     public void load(PrimitiveData data, DataSet dataSet) {
    175         super.load(data, dataSet);
     168    public void load(PrimitiveData data) {
     169        super.load(data);
    176170
    177171        WayData wayData = (WayData) data;
     
    179173        List<Node> newNodes = new ArrayList<Node>(wayData.getNodes().size());
    180174        for (Long nodeId : wayData.getNodes()) {
    181             Node node = (Node)dataSet.getPrimitiveById(nodeId, OsmPrimitiveType.NODE);
     175            Node node = (Node)getDataSet().getPrimitiveById(nodeId, OsmPrimitiveType.NODE);
    182176            if (node != null) {
    183177                newNodes.add(node);
  • trunk/src/org/openstreetmap/josm/data/osm/WayData.java

    r2399 r2405  
    2828
    2929    @Override
    30     public OsmPrimitive makePrimitive(DataSet dataSet) {
    31         return new Way(this, dataSet);
    32     }
    33 
    34     @Override
    3530    public String toString() {
    3631        return super.toString() + " WAY" + nodes.toString();
Note: See TracChangeset for help on using the changeset viewer.