Ignore:
Timestamp:
2012-09-11T09:55:54+02:00 (13 years ago)
Author:
larry0ua
Message:

'RelToolbox: added warning messages to the warning icon hint'

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/reltoolbox/src/relcontext/relationfix/AssociatedStreetFixer.java

    r28693 r28703  
    11package relcontext.relationfix;
     2
     3import static org.openstreetmap.josm.tools.I18n.tr;
    24
    35import java.util.ArrayList;
     
    1517import org.openstreetmap.josm.data.osm.Way;
    1618
    17 import static org.openstreetmap.josm.tools.I18n.tr;
    18 
    1919public class AssociatedStreetFixer extends RelationFixer {
    2020
     
    2626        public boolean isRelationGood(Relation rel) {
    2727                for (RelationMember m : rel.getMembers()) {
    28                 if (m.getType().equals(OsmPrimitiveType.NODE) && !"house".equals(m.getRole()))
     28                if (m.getType().equals(OsmPrimitiveType.NODE) && !"house".equals(m.getRole())) {
     29                    setWarningMessage(tr("Node without 'house' role found"));
    2930                        return false;
    30                 if (m.getType().equals(OsmPrimitiveType.WAY) && !("house".equals(m.getRole()) || "street".equals(m.getRole())))
     31                }
     32                if (m.getType().equals(OsmPrimitiveType.WAY) && !("house".equals(m.getRole()) || "street".equals(m.getRole()))) {
     33                    setWarningMessage(tr("Way without 'house' or 'street' role found"));
     34                    return false;
     35                }
     36                if (m.getType().equals(OsmPrimitiveType.RELATION) && !"house".equals(m.getRole())) {
     37                    setWarningMessage(tr("Relation without 'house' role found"));
    3138                        return false;
    32                 if (m.getType().equals(OsmPrimitiveType.RELATION) && !"house".equals(m.getRole()))
    33                         return false;
     39                }
    3440        }
    3541                // relation should have name
    3642                if (!rel.hasKey("name")) {
     43                    setWarningMessage(tr("Relation does not have name"));
    3744                        return false;
    3845                }
     
    4047                String streetName = rel.get("name");
    4148                for (RelationMember m : rel.getMembers()) {
    42                         if (m.getRole().equals("street") && !m.getWay().get("name").equals(streetName))
    43                                 return false;
     49                        if (m.getRole().equals("street") && !m.getWay().get("name").equals(streetName)) {
     50                            setWarningMessage(tr("Relation has streets with different names"));
     51                            return false;
     52                        }
    4453                }
     54                clearWarningMessage();
    4555                return true;
    4656        }
    4757
    48         @Override
     58    @Override
    4959        public Command fixRelation(Relation source) {
    5060                // any way with highway tag -> street
     
    5464                Relation rel = new Relation(source);
    5565                boolean fixed = false;
    56                
     66
    5767                for (int i = 0; i < rel.getMembersCount(); i++) {
    5868                        RelationMember m = rel.getMember(i);
    59                        
     69
    6070                        if (m.isNode()) {
    6171                                Node node = m.getNode();
    62                                 if (!"house".equals(m.getRole()) && 
     72                                if (!"house".equals(m.getRole()) &&
    6373                                                (node.hasKey("building") || node.hasKey("addr:housenumber"))) {
    6474                                        fixed = true;
     
    7080                                        fixed = true;
    7181                                        rel.setMember(i, new RelationMember("street", way));
    72                                 } else if (!"house".equals(m.getRole()) && 
     82                                } else if (!"house".equals(m.getRole()) &&
    7383                                                (way.hasKey("building") || way.hasKey("addr:housenumber"))) {
    7484                                        fixed = true;
     
    7787                        } else if (m.isRelation()) {
    7888                                Relation relation = m.getRelation();
    79                                 if (!"house".equals(m.getRole()) && 
     89                                if (!"house".equals(m.getRole()) &&
    8090                                                (relation.hasKey("building") || relation.hasKey("addr:housenumber") || "multipolygon".equals(relation.get("type")))) {
    8191                                        fixed = true;
     
    8494                        }
    8595                }
    86                
     96
    8797                // fill relation name
    8898                Map<String, Integer> streetNames = new HashMap<String, Integer>();
    89                 for (RelationMember m : rel.getMembers()) 
     99                for (RelationMember m : rel.getMembers())
    90100                        if ("street".equals(m.getRole()) && m.isWay()) {
    91101                                String name = m.getWay().get("name");
    92102                                if (name == null || name.isEmpty()) continue;
    93                                
     103
    94104                                Integer count = streetNames.get(name);
    95                                
     105
    96106                                streetNames.put(name, count != null? count + 1 : 1);
    97107                        }
     
    104114                        }
    105115                }
    106                
    107                 if (!rel.hasKey("name")) {
     116
     117                if (!rel.hasKey("name") && !commonName.isEmpty()) {
    108118                        fixed = true;
    109119                        rel.put("name", commonName);
     
    111121                        commonName = ""; // set empty common name - if we already have name on relation, do not overwrite it
    112122                }
    113                
     123
    114124                List<Command> commandList = new ArrayList<Command>();
    115125                if (fixed) {
    116126                        commandList.add(new ChangeCommand(source, rel));
    117127                }
    118                
     128
    119129                /*if (!commonName.isEmpty())
    120130                // fill common name to streets
    121                 for (RelationMember m : rel.getMembers()) 
     131                for (RelationMember m : rel.getMembers())
    122132                        if ("street".equals(m.getRole()) && m.isWay()) {
    123133                                String name = m.getWay().get("name");
    124134                                if (commonName.equals(name)) continue;
    125                                
     135
    126136                                // TODO: ask user if he really wants to overwrite street name??
    127                                
     137
    128138                                Way oldWay = m.getWay();
    129139                                Way newWay = new Way(oldWay);
    130140                                newWay.put("name", commonName);
    131                                
     141
    132142                                commandList.add(new ChangeCommand(oldWay, newWay));
    133143                        }
Note: See TracChangeset for help on using the changeset viewer.