Ignore:
Timestamp:
2009-01-01T17:17:44+01:00 (15 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.