Changeset 10490 in osm for applications/editors/josm


Ignore:
Timestamp:
2008-09-05T09:02:02+02:00 (16 years ago)
Author:
stoecker
Message:

improved ignore handling

Location:
applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/ErrorTreePanel.java

    r10408 r10490  
    126126
    127127                Map<Severity, Bag<String, TestError>> errorTree = new HashMap<Severity, Bag<String, TestError>>();
     128                Map<Severity, HashMap<String, Bag<String, TestError>>> errorTreeDeep = new HashMap<Severity, HashMap<String, Bag<String, TestError>>>();
    128129                for(Severity s : Severity.values())
    129130                {
    130131                        errorTree.put(s, new Bag<String, TestError>(20));
     132                        errorTreeDeep.put(s, new HashMap<String, Bag<String, TestError>>());
    131133                }
    132134
    133135                for(TestError e : errors)
    134136                {
    135                         errorTree.get(e.getSeverity()).add(e.getMessage(), e);
     137                        Severity s = e.getSeverity();
     138                        String d = e.getDescription();
     139                        String m = e.getMessage();
     140                        if(d != null)
     141                        {
     142                                Bag<String, TestError> b = errorTreeDeep.get(s).get(m);
     143                                if(b == null)
     144                                {
     145                                        b = new Bag<String, TestError>(20);
     146                                        errorTreeDeep.get(s).put(m, b);
     147                                }
     148                                b.add(d, e);
     149                        }
     150                        else
     151                                errorTree.get(s).add(m, e);
    136152                }
    137153
     
    140156                {
    141157                        Bag<String, TestError> severityErrors = errorTree.get(s);
    142                         if( severityErrors.isEmpty() )
     158                        Map<String, Bag<String, TestError>> severityErrorsDeep = errorTreeDeep.get(s);
     159                        if(severityErrors.isEmpty() && severityErrorsDeep.isEmpty())
    143160                                continue;
    144161
     
    168185                                }
    169186                        }
     187                        for(Entry<String, Bag <String, TestError>> bag : severityErrorsDeep.entrySet())
     188                        {
     189                                // Group node
     190                                Bag <String, TestError> errorlist = bag.getValue();
     191                                String nmsg = bag.getKey() + " (" + errorlist.size() + ")";
     192                                DefaultMutableTreeNode groupNode = new DefaultMutableTreeNode(nmsg);
     193                                severityNode.add(groupNode);
     194
     195                                if( oldSelectedRows.contains(bag.getKey()))
     196                                         expandedPaths.add( new TreePath( new Object[] {rootNode, severityNode, groupNode} ) );
     197
     198                                for(Entry<String, List<TestError>> msgErrors : errorlist.entrySet())
     199                                {
     200                                        // Message node
     201                                        List<TestError> errors = msgErrors.getValue();
     202                                        String msg = msgErrors.getKey() + " (" + errors.size() + ")";
     203                                        DefaultMutableTreeNode messageNode = new DefaultMutableTreeNode(msg);
     204                                        groupNode.add(messageNode);
     205
     206                                        if( oldSelectedRows.contains(msgErrors.getKey()))
     207                                                 expandedPaths.add( new TreePath( new Object[] {rootNode, severityNode, groupNode, messageNode} ) );
     208
     209                                        for (TestError error : errors)
     210                                        {
     211                                                // Error node
     212                                                DefaultMutableTreeNode errorNode = new DefaultMutableTreeNode(error);
     213                                                messageNode.add(errorNode);
     214                                        }
     215                                }
     216                        }
    170217                }
    171218
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/Test.java

    r9269 r10490  
    123123        for (OsmPrimitive p : selection)
    124124        {
    125                 if( !p.deleted || !p.incomplete )
     125                if( !p.deleted && !p.incomplete )
    126126                        p.visit(this);
    127127        }
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/TestError.java

    r9684 r10490  
    2626        /** Deeper error description */
    2727        private String description;
     28        private String description_en;
    2829        /** The affected primitives */
    2930        private List<? extends OsmPrimitive> primitives;
     
    4647         * @param code The test error reference code
    4748         */
    48         public TestError(Test tester, Severity severity, String message, String description, int code,
     49        public TestError(Test tester, Severity severity, String message, String description, String description_en, int code,
    4950                        List<? extends OsmPrimitive> primitives, List<?> highlighted) {
    5051                this.tester = tester;
     
    5253                this.message = message;
    5354                this.description = description;
     55                this.description_en = description_en;
    5456                this.primitives = primitives;
    5557                this.highlighted = highlighted;
     
    5860        public TestError(Test tester, Severity severity, String message, int code, List<? extends OsmPrimitive> primitives, List<?> highlighted)
    5961        {
    60                 this(tester, severity, message, null, code, primitives, highlighted);
    61         }
    62         public TestError(Test tester, Severity severity, String message, String description, int code, List<? extends OsmPrimitive> primitives)
    63         {
    64                 this(tester, severity, message, description, code, primitives, primitives);
     62                this(tester, severity, message, null, null, code, primitives, highlighted);
     63        }
     64        public TestError(Test tester, Severity severity, String message, String description, String description_en,
     65        int code, List<? extends OsmPrimitive> primitives)
     66        {
     67                this(tester, severity, message, description, description_en, code, primitives, primitives);
    6568        }
    6669        public TestError(Test tester, Severity severity, String message, int code, List<? extends OsmPrimitive> primitives)
    6770        {
    68                 this(tester, severity, message, null, code, primitives, primitives);
     71                this(tester, severity, message, null, null, code, primitives, primitives);
    6972        }
    7073        public TestError(Test tester, Severity severity, String message, int code, OsmPrimitive primitive)
    7174        {
    72                 this(tester, severity, message, null, code, Collections.singletonList(primitive), Collections.singletonList(primitive));
    73         }
    74         public TestError(Test tester, Severity severity, String message, String description, int code, OsmPrimitive primitive)
    75         {
    76                 this(tester, severity, message, description, code, Collections.singletonList(primitive));
     75                this(tester, severity, message, null, null, code, Collections.singletonList(primitive), Collections.singletonList(primitive));
     76        }
     77        public TestError(Test tester, Severity severity, String message, String description,
     78        String description_en, int code, OsmPrimitive primitive)
     79        {
     80                this(tester, severity, message, description, description_en, code, Collections.singletonList(primitive));
    7781        }
    7882
     
    147151        {
    148152                Collection<String> strings = new TreeSet<String>();
    149                 String ignorestring = Integer.toString(code);
     153                String ignorestring = getIgnoreSubGroup();
    150154                for (OsmPrimitive o : primitives)
    151155                {
     
    164168                }
    165169                return ignorestring;
     170        }
     171
     172        public String getIgnoreSubGroup()
     173        {
     174                String ignorestring = getIgnoreGroup();
     175                if(description_en != null)
     176                        ignorestring += "_"+description_en;
     177                return ignorestring;
     178        }
     179
     180        public String getIgnoreGroup()
     181        {
     182                return Integer.toString(code);
    166183        }
    167184
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/ValidateAction.java

    r9270 r10490  
    103103                        for(TestError error : errors)
    104104                        {
    105                                 String state = error.getIgnoreState();
    106                                 if(state != null && plugin.validationDialog.ignoredErrors.contains(state))
     105                                List<String> s = new ArrayList<String>();
     106                                s.add(error.getIgnoreState());
     107                                s.add(error.getIgnoreGroup());
     108                                s.add(error.getIgnoreSubGroup());
     109                                for(String state : s)
    107110                                {
    108                                         error.setIgnored(true);
     111                                        if(state != null && plugin.validationDialog.ignoredErrors.contains(state))
     112                                        {
     113                                                error.setIgnored(true);
     114                                        }
    109115                                }
    110116                        }
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/ValidateUploadHook.java

    r6388 r10490  
    5252        tests = null;
    5353       
    54         return displaErrorScreen(errors);
     54        return displayErrorScreen(errors);
    5555    }
    5656   
     
    6262     *          if the user requested cancel.
    6363     */
    64     private boolean displaErrorScreen(List<TestError> errors)
     64    private boolean displayErrorScreen(List<TestError> errors)
    6565    {
    6666        if( errors == null || errors.isEmpty() )
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/ValidatorDialog.java

    r9598 r10490  
    3030import org.openstreetmap.josm.plugins.validator.util.Bag;
    3131import org.openstreetmap.josm.plugins.validator.util.Util;
     32import org.openstreetmap.josm.tools.ImageProvider;
    3233
    3334/**
     
    7778                selectButton.setEnabled(false);
    7879                buttonPanel.add(selectButton);
    79                 buttonPanel.add(new SideButton(marktr("Validate"), "refresh", "Validator", tr("Validate the data."), this));
     80                buttonPanel.add(new SideButton(marktr("Validate"), "refresh", "Validator",
     81                tr("Validate either current selection or complete dataset."), this));
    8082                fixButton = new SideButton(marktr("Fix"), "fix", "Validator", tr("Fix the selected errors."), this);
    8183                fixButton.setEnabled(false);
     
    187189        private void ignoreErrors(ActionEvent e)
    188190        {
     191                int asked = JOptionPane.DEFAULT_OPTION;
    189192                boolean changed = false;
    190193                TreePath[] selectionPaths = tree.getSelectionPaths();
     
    198201                        if( node == null )
    199202                                continue;
     203
     204                        Object mainNodeInfo = node.getUserObject();
     205                        if(!(mainNodeInfo instanceof TestError))
     206                        {
     207                                int depth = 1;
     208                                Set<String> state = new HashSet<String>();
     209                                // ask if the whole set should be ignored
     210                                if(asked == JOptionPane.DEFAULT_OPTION)
     211                                {
     212                                        String[] a = new String[]{tr("Whole group"), tr("Single elements"),tr("Nothing")};
     213                                        asked = JOptionPane.showOptionDialog(Main.parent, tr("Ignore whole group or individual elements?"),
     214                                        tr("Ignoring elements"), JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.WARNING_MESSAGE,
     215                                        ImageProvider.get("dialogs", "delete"), a, a[1]);
     216                                }
     217                                if(asked == JOptionPane.YES_NO_OPTION)
     218                                {
     219                                        Enumeration<DefaultMutableTreeNode> children = node.breadthFirstEnumeration();
     220                                        while(children.hasMoreElements())
     221                                        {
     222                                                DefaultMutableTreeNode childNode = children.nextElement();
     223                                                if(processedNodes.contains(childNode))
     224                                                        continue;
     225
     226                                                processedNodes.add(childNode);
     227                                                Object nodeInfo = childNode.getUserObject();
     228                                                if(nodeInfo instanceof TestError)
     229                                                {
     230                                                        TestError err = (TestError)nodeInfo;
     231                                                        err.setIgnored(true);
     232                                                        changed = true;
     233                                                        state.add(node.getDepth() == 1 ? err.getIgnoreSubGroup() : err.getIgnoreGroup());
     234                                                }
     235                                        }
     236                                        for(String s : state)
     237                                                ignoredErrors.add(s);
     238                                        continue;
     239                                }
     240                                else if(asked == JOptionPane.CANCEL_OPTION)
     241                                        continue;
     242                        }
    200243
    201244                        Enumeration<DefaultMutableTreeNode> children = node.breadthFirstEnumeration();
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/TagChecker.java

    r10408 r10490  
    11package org.openstreetmap.josm.plugins.validator.tests;
    22
     3import static org.openstreetmap.josm.tools.I18n.marktr;
    34import static org.openstreetmap.josm.tools.I18n.tr;
    45
     
    1415import java.lang.IllegalStateException;
    1516import java.net.URL;
     17import java.text.MessageFormat;
    1618import java.util.ArrayList;
    1719import java.util.Collection;
     
    298300                                {
    299301                                        errors.add( new TestError(this, d.getSeverity(), tr("Illegal tag/value combinations"),
    300                                         d.getDescription(), d.getCode(), p) );
     302                                        d.getDescription(), d.getDescriptionOrig(), d.getCode(), p) );
    301303                                        withErrors.add(p, "TC");
    302304                                        break;
     
    308310                for(Entry<String, String> prop: props.entrySet() )
    309311                {
     312                        String s = marktr("Key ''{0}'' invalid.");
    310313                        String key = prop.getKey();
    311314                        String value = prop.getValue();
     
    313316                        {
    314317                                errors.add( new TestError(this, Severity.WARNING, tr("Tags with empty values"),
    315                                 tr("Key ''{0}'' invalid.", key), EMPTY_VALUES, p) );
     318                                tr(s, key), MessageFormat.format(s, key), EMPTY_VALUES, p) );
    316319                                withErrors.add(p, "EV");
    317320                        }
     
    319322                        {
    320323                                errors.add( new TestError(this, Severity.WARNING, tr("Invalid property key"),
    321                                 tr("Key ''{0}'' invalid.", key), INVALID_KEY, p) );
     324                                tr(s, key), MessageFormat.format(s, key), INVALID_KEY, p) );
    322325                                withErrors.add(p, "IPK");
    323326                        }
     
    325328                        {
    326329                                errors.add( new TestError(this, Severity.WARNING, tr("Invalid white space in property key"),
    327                                 tr("Key ''{0}'' invalid.", key), INVALID_KEY_SPACE, p) );
     330                                tr(s, key), MessageFormat.format(s, key), INVALID_KEY_SPACE, p) );
    328331                                withErrors.add(p, "IPK");
    329332                        }
     
    331334                        {
    332335                                errors.add( new TestError(this, Severity.OTHER, tr("Property values start or end with white space"),
    333                                 tr("Key ''{0}'' invalid.", key), INVALID_SPACE, p) );
     336                                tr(s, key), MessageFormat.format(s, key), INVALID_SPACE, p) );
    334337                                withErrors.add(p, "SPACE");
    335338                        }
     
    340343                                {
    341344                                        errors.add( new TestError(this, Severity.OTHER, tr("Unknown property values"),
    342                                         tr("Key ''{0}'' invalid.", key), INVALID_VALUE, p) );
     345                                        tr(s, key), MessageFormat.format(s, key), INVALID_VALUE, p) );
    343346                                        withErrors.add(p, "UPV");
    344347                                }
     
    758761                        return tr(description);
    759762                }
     763                public String getDescriptionOrig()
     764                {
     765                        return description;
     766                }
    760767                public Severity getSeverity()
    761768                {
  • applications/editors/josm/plugins/validator/src/org/openstreetmap/josm/plugins/validator/tests/UnclosedWays.java

    r9854 r10490  
    11package org.openstreetmap.josm.plugins.validator.tests;
    22
     3import static org.openstreetmap.josm.tools.I18n.marktr;
    34import static org.openstreetmap.josm.tools.I18n.tr;
    45
    5 import java.util.*;
     6import java.text.MessageFormat;
     7import java.util.ArrayList;
     8import java.util.List;
    69
    710import org.openstreetmap.josm.data.osm.OsmPrimitive;
     
    4447        }
    4548
     49        private String type;
     50        private String etype;
     51        private int mode;
     52        private boolean force;
     53        public void set(boolean f, int m, String text, String desc)
     54        {
     55                etype = MessageFormat.format(text, desc);
     56                type = tr(text, tr(desc));
     57                mode = m;
     58                force = f;
     59        }
     60        public void set(boolean f, int m, String text)
     61        {
     62                etype = text;
     63                type = tr(text);
     64                mode = m;
     65                force = f;
     66        }
     67
    4668        @Override
    4769        public void visit(Way w)
    4870        {
    49                 boolean force = false; /* force even if end-to-end distance is long */
    50                 String type = null, test;
    51                 int mode = 0;
     71                String test;
     72                force = false; /* force even if end-to-end distance is long */
     73                type = etype = null;
     74                mode = 0;
    5275
    5376                if( w.deleted || w.incomplete )
     
    5679                test = w.get("natural");
    5780                if(test != null)
    58                 {
    59                         if(!"coastline".equals(test))
    60                                 force = true;
    61                         type = tr("natural type {0}", tr(test));
    62                         mode = 1101;
    63                 }
     81                        set(!"coastline".equals(test), 1101, marktr("natural type {0}"), test);
    6482                test = w.get("landuse");
    6583                if(test != null)
    66                 {
    67                         force = true;
    68                         type = tr("landuse type {0}", tr(test));
    69                         mode = 1102;
    70                 }
     84                        set(true, 1102, marktr("landuse type {0}"), test);
    7185                test = w.get("amenities");
    7286                if(test != null)
    73                 {
    74                         force = true;
    75                         type = tr("amenities type {0}", tr(test));
    76                         mode = 1103;
    77                 }
     87                        set(true, 1103, marktr("amenities type {0}"), test);
    7888                test = w.get("sport");
    79                 if(test != null)
    80                 {
    81                         force = true;
    82                         type = tr("sport type {0}", tr(test));
    83                         mode = 1104;
    84                 }
     89                if(test != null && !test.equals("water_slide"))
     90                        set(true, 1104, marktr("sport type {0}"), test);
    8591                test = w.get("tourism");
    8692                if(test != null)
    87                 {
    88                         force = true;
    89                         type = tr("tourism type {0}", tr(test));
    90                         mode = 1105;
    91                 }
     93                        set(true, 1105, marktr("tourism type {0}"), test);
    9294                test = w.get("shop");
    9395                if(test != null)
    94                 {
    95                         force = true;
    96                         type = tr("shop type {0}", tr(test));
    97                         mode = 1106;
    98                 }
     96                        set(true, 1106, marktr("shop type {0}"), test);
    9997                test = w.get("leisure");
    10098                if(test != null)
    101                 {
    102                         force = true;
    103                         type = tr("leisure type {0}", tr(test));
    104                         mode = 1107;
    105                 }
     99                        set(true, 1107, marktr("leisure type {0}"), test);
    106100                test = w.get("waterway");
    107101                if(test != null && test.equals("riverbank"))
    108                 {
    109                         force = true;
    110                         type = tr("waterway type {0}", tr(test));
    111                         mode = 1108;
    112                 }
     102                        set(true, 1108, marktr("waterway type {0}"), test);
    113103                Boolean btest = OsmUtils.getOsmBoolean(w.get("building"));
    114104                if (btest != null && btest)
    115                 {
    116                         force = true;
    117                         type = tr("building");
    118                         mode = 1120;
    119                 }
     105                        set(true, 1120, marktr("building"));
    120106                btest = OsmUtils.getOsmBoolean(w.get("area"));
    121107                if (btest != null && btest)
    122                 {
    123                         force = true;
    124                         type = tr("area");
    125                         mode = 1130;
    126                 }
     108                        set(true, 1130, marktr("area"));
    127109
    128110                if(type != null)
     
    135117                                List<OsmPrimitive> primitives = new ArrayList<OsmPrimitive>();
    136118                                primitives.add(w);
    137                                 errors.add(new TestError(this, Severity.WARNING, tr("Unclosed way"), type, mode, primitives));
     119                                errors.add(new TestError(this, Severity.WARNING, tr("Unclosed way"), type, etype, mode, primitives));
    138120                                _errorWays.add(w,w);
    139121                        }
Note: See TracChangeset for help on using the changeset viewer.