Changeset 1200 in josm


Ignore:
Timestamp:
Jan 1, 2009 5:17:44 PM (4 years ago)
Author:
stoecker
Message:

add error handling for multipolygon drawing

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

Legend:

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

    r1169 r1200  
    9191            name = get("name"); 
    9292            if (name == null) 
    93                 name = id == 0 ? "" : ""+id; 
     93                name = id == 0 ? tr("node") : ""+id; 
    9494            name += " (" + coor.latToString(mCord) + ", " + coor.lonToString(mCord) + ")"; 
    9595        } 
  • trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java

    r1169 r1200  
    11// License: GPL. Copyright 2007 by Immanuel Scholz and others 
    22package org.openstreetmap.josm.data.osm; 
     3 
     4import static org.openstreetmap.josm.tools.I18n.tr; 
    35 
    46import java.text.ParseException; 
    57import java.text.SimpleDateFormat; 
    68import java.util.Arrays; 
     9import java.util.ArrayList; 
    710import java.util.Collection; 
    811import java.util.Collections; 
     
    3437     */ 
    3538    public Map<String, String> keys; 
     39 
     40    /** 
     41     * The key/value list for this primitive. 
     42     */ 
     43    public Collection<String> errors; 
    3644 
    3745    /** 
     
    314322        } 
    315323    } 
     324 
     325    public void putError(String text, Boolean isError) 
     326    { 
     327        if(errors == null) 
     328            errors = new ArrayList<String>(); 
     329        String s = isError ? tr("Error: {0}", text) : tr("Warning: {0}", text); 
     330System.out.println(s); 
     331        errors.add(s); 
     332    } 
     333    public void clearErrors() 
     334    { 
     335        errors = null; 
     336    } 
    316337} 
  • trunk/src/org/openstreetmap/josm/data/osm/Relation.java

    r1169 r1200  
    7878        } else { 
    7979            name = get("type"); 
    80             // FIXME add names of members 
    8180            if (name == null) 
    8281                name = tr("relation"); 
     
    8988            int mbno = members.size(); 
    9089            name += trn("{0} member", "{0} members", mbno, mbno) + ")"; 
     90            if(errors != null) 
     91                name = "*"+name; 
    9192        } 
    9293        return name; 
  • trunk/src/org/openstreetmap/josm/data/osm/Way.java

    r1190 r1200  
    113113 
    114114            int nodesNo = new HashSet<Node>(nodes).size(); 
    115             name += trn(" ({0} node)", " ({0} nodes)", nodesNo, nodesNo); 
     115            String nodes = trn("{0} node", "{0} nodes", nodesNo, nodesNo); 
     116            name += (name.length() > 0) ? " ("+nodes+")" : nodes; 
    116117        } 
    117118        return name; 
  • trunk/src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java

    r1197 r1200  
    33 
    44import static org.openstreetmap.josm.tools.I18n.marktr; 
     5import static org.openstreetmap.josm.tools.I18n.tr; 
    56 
    67import java.awt.BasicStroke; 
     
    212213    } 
    213214 
    214     public Collection<Way> joinWays(Collection<Way> join) 
     215    public Collection<Way> joinWays(Collection<Way> join, OsmPrimitive errs) 
    215216    { 
    216217        Collection<Way> res = new LinkedList<Way>(); 
     
    290291            if(!w.isClosed()) 
    291292            { 
    292 System.out.println("ERROR: multipolygon way is not closed." + w); 
     293                if(errs != null) 
     294                { 
     295                    errs.putError(tr("multipolygon way ''{0}'' is not closed.", 
     296                    w.getName()), true); 
     297                } 
    293298            } 
    294299            res.add(w); 
     
    296301 
    297302        return res; 
     303    } 
     304 
     305    public void drawSelectedRelation(Relation r) 
     306    { 
     307        for (RelationMember m : r.members) 
     308        { 
     309            if (!m.member.incomplete && !m.member.deleted 
     310            && !(m.member instanceof Relation)) 
     311            { 
     312                /* nodes drawn on second call */ 
     313                if(!(m.member instanceof Node)) 
     314                    drawSelected(m.member, styles.get(m.member), true, true); 
     315                alreadyDrawn.add(m.member); 
     316            } 
     317        } 
    298318    } 
    299319 
     
    348368        { 
    349369            if(r.selected) 
    350             { 
    351                 for (RelationMember m : r.members) 
    352                 { 
    353                     if (!m.member.incomplete && !m.member.deleted 
    354                     && !(m.member instanceof Relation)) 
    355                     { 
    356                         /* nodes drawn on second call */ 
    357                         if(!(m.member instanceof Node)) 
    358                             drawSelected(m.member, styles.get(m.member), true, true); 
    359                         alreadyDrawn.add(m.member); 
    360                     } 
    361                 } 
    362             } 
     370                drawSelectedRelation(r); 
    363371            return; 
    364372        } 
     
    368376        Collection<Way> innerclosed = new LinkedList<Way>(); 
    369377        Collection<Way> outerclosed = new LinkedList<Way>(); 
     378        Boolean incomplete = false; 
     379 
     380        r.clearErrors(); 
    370381 
    371382        for (RelationMember m : r.members) 
    372383        { 
    373             if (!m.member.incomplete && !m.member.deleted) 
     384            if(m.member.incomplete) 
     385                incomplete = true; 
     386            else if(m.member.deleted) 
     387                r.putError(tr("Deleted member ''{0}'' in relation.", 
     388                m.member.getName()), true); 
     389            else 
    374390            { 
    375391                if(m.member instanceof Way) 
     
    378394                    if(w.nodes.size() < 2) 
    379395                    { 
    380 System.out.println("ERROR: Way with less than two points " + w); 
     396                        r.putError(tr("Way ''{0}'' with less than two points.", 
     397                        w.getName()), true); 
    381398                    } 
    382399                    else if("inner".equals(m.role)) 
     
    386403                    else 
    387404                    { 
    388 System.out.println("ERROR: No useful role for Way " + w); 
     405                        r.putError(tr("No useful role ''{0}'' for Way ''{1}''.", 
     406                        m.role == null ? "" : m.role, w.getName()), true); 
    389407                        if(m.role == null || m.role.length() == 0) 
    390408                            outer.add(w); 
     
    396414                { 
    397415                    /* nodes drawn on second call */ 
    398 System.out.println("ERROR: Non-Way in multipolygon " + m.member); 
     416                    r.putError(tr("Non-Way ''{0}'' in multipolygon.", 
     417                    m.member.getName()), true); 
    399418                } 
    400419            } 
     
    426445            if(join.size() != 0) 
    427446            { 
    428                 for(Way w : joinWays(join)) 
     447                for(Way w : joinWays(join, incomplete ? null : r)) 
    429448                    outerclosed.add(w); 
    430449            } 
     
    439458            if(join.size() != 0) 
    440459            { 
    441                 for(Way w : joinWays(join)) 
     460                for(Way w : joinWays(join, incomplete ? null : r)) 
    442461                    innerclosed.add(w); 
    443462            } 
     
    504523                    if(wayStyle.equals(innerStyle)) 
    505524                    { 
    506 System.out.println("WARNING: Inner waystyle equals multipolygon for way " + wInner); 
     525                        r.putError(tr("Style for inner way ''{0}'' equals multipolygon.", 
     526                        wInner.getName()), false); 
    507527                        if(!r.selected) 
    508528                            alreadyDrawnAreas.add(wInner); 
     
    528548                    && !wayStyle.equals(outerStyle)) 
    529549                    { 
    530 System.out.println("ERROR: Outer waystyle does not match multipolygon for way " + wOuter); 
     550                        r.putError(tr("Style for outer way ''{0}'' mismatches.", 
     551                        wOuter.getName()), true); 
    531552                    } 
    532553                    if(r.selected) 
     
    540561            } 
    541562        } 
     563        else if(r.selected) 
     564            drawSelectedRelation(r); 
    542565    } 
    543566 
Note: See TracChangeset for help on using the changeset viewer.