Ignore:
Timestamp:
2009-09-07T23:06:19+02:00 (15 years ago)
Author:
Gubaer
Message:

Had to replace DataSet:getPrimitiveById(id) with DataSet:getPrimitiveById(id,type). Primitive ids are not globally unique, only per type of primitive.
Fixed problems in unit test, available unit tests passing again.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/downloadtasks/DownloadOsmTaskList.java

    r2017 r2077  
    125125        final OsmDataLayer editLayer = Main.map.mapView.getEditLayer();
    126126        if (editLayer != null) {
    127             Set<Long> myPrimitiveIds = editLayer.data.getCompletePrimitiveIds();
    128             Set<Long> downloadedIds = getDownloadedIds();
    129             myPrimitiveIds.removeAll(downloadedIds);
    130             myPrimitiveIds.remove(new Long(0)); // ignore new primitives
    131             if (! myPrimitiveIds.isEmpty()) {
    132                 handlePotentiallyDeletedPrimitives(myPrimitiveIds);
    133             }
    134         }
     127            Set<OsmPrimitive> myPrimitives = getCompletePrimitives(editLayer.data);
     128            for (DownloadTask task : osmTasks) {
     129                if(task instanceof DownloadOsmTask) {
     130                    DataSet ds = ((DownloadOsmTask)task).getDownloadedData();
     131                    if (ds != null) {
     132                        myPrimitives.removeAll(ds.nodes);
     133                        myPrimitives.removeAll(ds.ways);
     134                        myPrimitives.removeAll(ds.relations);
     135                    }
     136                }
     137            }
     138            if (! myPrimitives.isEmpty()) {
     139                handlePotentiallyDeletedPrimitives(myPrimitives);
     140            }
     141        }
     142    }
     143
     144
     145    /**
     146     * Replies the set of ids of all complete primitives (i.e. those with
     147     * ! primitive.incomplete)
     148     *
     149     * @return the set of ids of all complete primitives
     150     */
     151    protected Set<OsmPrimitive> getCompletePrimitives(DataSet ds) {
     152        HashSet<OsmPrimitive> ret = new HashSet<OsmPrimitive>();
     153        for (OsmPrimitive primitive : ds.nodes) {
     154            if (!primitive.incomplete && primitive.getId() == 0) {
     155                ret.add(primitive);
     156            }
     157        }
     158        for (OsmPrimitive primitive : ds.ways) {
     159            if (! primitive.incomplete && primitive.getId() == 0) {
     160                ret.add(primitive);
     161            }
     162        }
     163        for (OsmPrimitive primitive : ds.relations) {
     164            if (! primitive.incomplete && primitive.getId() == 0) {
     165                ret.add(primitive);;
     166            }
     167        }
     168        return ret;
    135169    }
    136170
     
    141175     * @param potentiallyDeleted a set of ids to check update from the server
    142176     */
    143     protected void updatePotentiallyDeletedPrimitives(Set<Long> potentiallyDeleted) {
    144         DataSet ds =  Main.map.mapView.getEditLayer().data;
     177    protected void updatePotentiallyDeletedPrimitives(Set<OsmPrimitive> potentiallyDeleted) {
    145178        final ArrayList<OsmPrimitive> toSelect = new ArrayList<OsmPrimitive>();
    146         for (Long id : potentiallyDeleted) {
    147             OsmPrimitive primitive = ds.getPrimitiveById(id);
     179        for (OsmPrimitive primitive : potentiallyDeleted) {
    148180            if (primitive != null) {
    149181                toSelect.add(primitive);
     
    167199     * @param potentiallyDeleted a set of primitives (given by their ids)
    168200     */
    169     protected void handlePotentiallyDeletedPrimitives(Set<Long> potentiallyDeleted) {
     201    protected void handlePotentiallyDeletedPrimitives(Set<OsmPrimitive> potentiallyDeleted) {
    170202        String [] options = {
    171203                "Check on the server",
     
    197229        );
    198230        switch(ret) {
    199             case JOptionPane.CLOSED_OPTION: return;
    200             case JOptionPane.NO_OPTION: return;
    201             case JOptionPane.YES_OPTION: updatePotentiallyDeletedPrimitives(potentiallyDeleted); break;
    202         }
    203     }
    204 
    205     /**
    206      * replies true, if the primitive with id <code>id</code> was downloaded into the
    207      * dataset <code>ds</code>
    208      *
    209      * @param id the id
    210      * @param ds the dataset
    211      * @return true, if the primitive with id <code>id</code> was downloaded into the
    212      * dataset <code>ds</code>; false otherwise
    213      */
    214     protected boolean wasDownloaded(long id, DataSet ds) {
    215         OsmPrimitive primitive = ds.getPrimitiveById(id);
    216         return primitive != null;
    217     }
    218 
    219     /**
    220      * replies true, if the primitive with id <code>id</code> was downloaded into the
    221      * dataset of one of the download tasks
    222      *
    223      * @param id the id
    224      * @return true, if the primitive with id <code>id</code> was downloaded into the
    225      * dataset of one of the download tasks
    226      *
    227      */
    228     public boolean wasDownloaded(long id) {
    229         for (DownloadTask task : osmTasks) {
    230             if(task instanceof DownloadOsmTask) {
    231                 DataSet ds = ((DownloadOsmTask)task).getDownloadedData();
    232                 if(wasDownloaded(id,ds)) return true;
    233             }
    234         }
    235         return false;
     231        case JOptionPane.CLOSED_OPTION: return;
     232        case JOptionPane.NO_OPTION: return;
     233        case JOptionPane.YES_OPTION: updatePotentiallyDeletedPrimitives(potentiallyDeleted); break;
     234        }
    236235    }
    237236
     
    241240     * @return the set of primitive ids which have been downloaded by this task list
    242241     */
    243     public Set<Long> getDownloadedIds() {
    244         HashSet<Long> ret = new HashSet<Long>();
     242    public Set<OsmPrimitive> getDownloadedPrimitives() {
     243        HashSet<OsmPrimitive> ret = new HashSet<OsmPrimitive>();
    245244        for (DownloadTask task : osmTasks) {
    246245            if(task instanceof DownloadOsmTask) {
    247246                DataSet ds = ((DownloadOsmTask)task).getDownloadedData();
    248247                if (ds != null) {
    249                     ret.addAll(ds.getPrimitiveIds());
     248                    ret.addAll(ds.nodes);
     249                    ret.addAll(ds.ways);
     250                    ret.addAll(ds.relations);
    250251                }
    251252            }
Note: See TracChangeset for help on using the changeset viewer.