Changeset 2587 in josm


Ignore:
Timestamp:
2009-12-06T14:43:18+01:00 (15 years ago)
Author:
jttt
Message:

Added Way.hasIncompletNodes(), Way.isIncomplete() now returns true only if way is not downloaded, not if one of the nodes is missing. Way.isUsable() return false if one of the way nodes is incomplete

Location:
trunk
Files:
5 edited

Legend:

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

    r2578 r2587  
    150150            if (n.isIncomplete()) return;
    151151        }
    152         myWay.setIncomplete(false);
     152        myWay.setHasIncompleteNodes(false);
    153153    }
    154154
     
    168168            throw new RuntimeException(tr("Missing merge target for node with id {0}", other.getUniqueId()));
    169169        if (myNode.isIncomplete() || myNode.isDeleted() || !myNode.isVisible()) return;
    170         wayloop: for (Way w: OsmPrimitive.getFilteredList(myNode.getReferrers(), Way.class)) {
    171             if (w.isDeleted() || ! w.isVisible() || ! w.isIncomplete()) {
    172                 continue;
    173             }
    174             for (Node n: w.getNodes()) {
    175                 if (n.isIncomplete()) {
    176                     continue wayloop;
     170
     171        wayloop:
     172            for (Way w: OsmPrimitive.getFilteredList(myNode.getReferrers(), Way.class)) {
     173                if (w.isDeleted() || ! w.isVisible() || ! w.isIncomplete()) {
     174                    continue;
    177175                }
    178             }
    179             // all nodes are complete - set the way complete too
    180             w.setIncomplete(false);
    181         }
     176                for (Node n: w.getNodes()) {
     177                    if (n.isIncomplete()) {
     178                        continue wayloop;
     179                    }
     180                }
     181                // all nodes are complete - set the way complete too
     182                w.setHasIncompleteNodes(false);
     183            }
    182184    }
    183185
  • trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java

    r2583 r2587  
    11551155    }
    11561156
     1157    //TODO This method should not be necessary, incomplete state should be handled internally by OsmPrimitive
    11571158    public void setIncomplete(boolean incomplete) {
    11581159        this.incomplete = incomplete;
  • trunk/src/org/openstreetmap/josm/data/osm/Way.java

    r2578 r2587  
    2626    private Node[] nodes = new Node[0];
    2727    private BBox bbox;
     28    private boolean hasIncompleteNodes;
    2829
    2930    /**
     
    375376        bbox = new BBox(this);
    376377    }
     378
     379    //TODO This method should not be necessary. hasIncomplete state should be updated automatically when incomplete state of nodes change
     380    public void setHasIncompleteNodes(boolean hasIncompleteNodes) {
     381        this.hasIncompleteNodes = hasIncompleteNodes;
     382    }
     383
     384    public boolean hasIncompleteNodes() {
     385        return hasIncompleteNodes;
     386    }
     387
     388    @Override
     389    public boolean isUsable() {
     390        return super.isUsable() && !hasIncompleteNodes();
     391    }
    377392}
  • trunk/src/org/openstreetmap/josm/io/OsmReader.java

    r2578 r2587  
    418418        for (Long externalWayId: ways.keySet()) {
    419419            Way w = (Way)externalIdMap.get("w" + externalWayId);
    420             boolean incomplete = false;
     420            boolean hasIncompleteNodes = false;
    421421            List<Node> wayNodes = new ArrayList<Node>();
    422422            for (long id : ways.get(externalWayId)) {
     
    438438                        ds.addPrimitive(n);
    439439                    }
    440                     incomplete = true;
     440                    hasIncompleteNodes = true;
    441441                }
    442442                wayNodes.add(n);
    443443            }
    444444            w.setNodes(wayNodes);
    445             if (incomplete) {
     445            if (hasIncompleteNodes) {
    446446                if (logger.isLoggable(Level.FINE)) {
    447447                    logger.fine(tr("Marked way {0} with {1} nodes incomplete because at least one node was missing in the " +
    448448                            "loaded data and is therefore incomplete too.", externalWayId, w.getNodesCount()));
    449449                }
    450                 w.setIncomplete(true);
     450                w.setHasIncompleteNodes(true);
    451451                ds.addPrimitive(w);
    452452            } else {
    453                 w.setIncomplete(false);
     453                w.setHasIncompleteNodes(false);
    454454                ds.addPrimitive(w);
    455455            }
  • trunk/test/unit/org/openstreetmap/josm/data/osm/DataSetMergerTest.java

    r2585 r2587  
    11421142        Way w = (Way)target.getPrimitiveById(3, OsmPrimitiveType.WAY);
    11431143        assertNotNull(w);
    1144         assertFalse(w.isIncomplete());
     1144        assertFalse(w.hasIncompleteNodes());
     1145        assertFalse(w.isUsable());
    11451146        assertEquals(2, w.getNodesCount());
    11461147        assertEquals(1, w.getNode(0).getId());
Note: See TracChangeset for help on using the changeset viewer.