Ignore:
Timestamp:
2009-05-18T19:47:22+02:00 (15 years ago)
Author:
framm
Message:
  • secured all methods in Way class against breakage when used with incomplete ways
  • fix relation editor breakage with incomplete objects (closes #2599)
  • less exceptions in AboutAction when run inside develeopment environment
Location:
trunk/src/org/openstreetmap/josm/data/osm
Files:
2 edited

Legend:

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

    r1596 r1598  
    106106    }
    107107
     108    // seems to be different from member "incomplete" - FIXME
    108109    public boolean isIncomplete() {
    109110        for (RelationMember m : members)
     
    114115   
    115116    public RelationMember firstMember() {
     117        if (incomplete) return null;
    116118        return (members.size() == 0) ? null : members.get(0);
    117119    }
    118120    public RelationMember lastMember() {
     121        if (incomplete) return null;
    119122        return (members.size() == 0) ? null : members.get(members.size() -1);
    120123    }
  • trunk/src/org/openstreetmap/josm/data/osm/Way.java

    r1499 r1598  
    3131    public Integer mappaintDrawnAreaCode = 0;
    3232    /* end of mappaint data */
    33     @Override protected void clearCached()
    34     {
     33    @Override protected void clearCached() {
    3534        super.clearCached();
    3635        isMappaintArea = false;
     
    3938
    4039    public void visitNodes(Visitor v) {
     40        if (incomplete) return;
    4141        for (Node n : this.nodes)
    4242            v.visit(n);
     
    4545    public ArrayList<Pair<Node,Node>> getNodePairs(boolean sort) {
    4646        ArrayList<Pair<Node,Node>> chunkSet = new ArrayList<Pair<Node,Node>>();
     47        if (incomplete) return chunkSet;
    4748        Node lastN = null;
    4849        for (Node n : this.nodes) {
     
    7071     */
    7172    public Way(Way clone) {
    72             cloneFrom(clone);
     73        cloneFrom(clone);
    7374    }
    7475
     
    9596
    9697    @Override public String toString() {
     98        if (incomplete) return "{Way id="+id+" version="+version+" (incomplete)}";
    9799        return "{Way id="+id+" version="+version+" nodes="+Arrays.toString(nodes.toArray())+"}";
    98100    }
     
    103105
    104106    public int compareTo(OsmPrimitive o) {
    105         if(o instanceof Relation)
     107        if (o instanceof Relation)
    106108            return 1;
    107109        return o instanceof Way ? Long.valueOf(id).compareTo(o.id) : -1;
     
    132134    }
    133135
    134     public void removeNode(Node n)
    135     {
    136         Boolean closed = (lastNode() == n && firstNode() == n);
     136    public void removeNode(Node n) {
     137        if (incomplete) return;
     138        boolean closed = (lastNode() == n && firstNode() == n);
    137139        int i;
    138         while((i = nodes.indexOf(n)) >= 0)
     140        while ((i = nodes.indexOf(n)) >= 0)
    139141            nodes.remove(i);
    140142        i = nodes.size();
    141         if(closed && i > 2) // close again
     143        if (closed && i > 2) // close again
    142144            addNode(firstNode());
    143145        // prevent closed ways with less than 3 different nodes
    144         else if(i >= 2 && i <= 3 && nodes.get(0) == nodes.get(i-1))
     146        else if (i >= 2 && i <= 3 && nodes.get(0) == nodes.get(i-1))
    145147            nodes.remove(i-1);
    146148    }
    147149
    148     public void removeNodes(Collection<? extends OsmPrimitive> selection)
    149     {
    150        for(OsmPrimitive p : selection)
    151        {
    152            if(p instanceof Node)
    153            {
     150    public void removeNodes(Collection<? extends OsmPrimitive> selection) {
     151        if (incomplete) return;
     152        for(OsmPrimitive p : selection) {
     153           if (p instanceof Node) {
    154154               removeNode((Node)p);
    155155           }
     
    157157    }
    158158
    159     public void addNode(Node n)
    160     {
     159    public void addNode(Node n) {
     160        if (incomplete) return;
    161161        clearCached();
    162162        nodes.add(n);
    163163    }
    164164
    165     public void addNode(int offs, Node n)
    166     {
     165    public void addNode(int offs, Node n) {
     166        if (incomplete) return;
    167167        clearCached();
    168168        nodes.add(offs, n);
    169169    }
    170170
    171     public Boolean isClosed() {
     171    public boolean isClosed() {
     172        if (incomplete) return false;
    172173        return nodes.size() >= 3 && lastNode() == firstNode();
    173174    }
    174175
    175176    public Node lastNode() {
     177        if (incomplete) return null;
    176178        return nodes.get(nodes.size()-1);
    177179    }
    178180
    179181    public Node firstNode() {
     182        if (incomplete) return null;
    180183        return nodes.get(0);
    181184    }
    182185
    183186    public boolean isFirstLastNode(Node n) {
     187        if (incomplete) return false;
    184188        return n == firstNode() || n == lastNode();
    185189    }
Note: See TracChangeset for help on using the changeset viewer.