Changeset 32647 in osm for applications


Ignore:
Timestamp:
2016-07-13T02:49:03+02:00 (8 years ago)
Author:
darya
Message:

RE selection in blue

Location:
applications/editors/josm/plugins/pt_assistant
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/gui/PTAssistantLayer.java

    r32597 r32647  
    3838                implements SelectionChangedListener, PropertyChangeListener, LayerChangeListener {
    3939
     40        private static PTAssistantLayer layer;
    4041        private List<OsmPrimitive> primitives = new ArrayList<>();
    4142        private PTAssistantPaintVisitor paintVisitor;
    42 
    43         public PTAssistantLayer() {
     43       
     44        private PTAssistantLayer() {
    4445                super("pt_assistant layer");
    4546                KeyboardFocusManager.getCurrentKeyboardFocusManager().addPropertyChangeListener(this);
    4647                Main.getLayerManager().addLayerChangeListener(this);
    47 
     48                layer = this;
     49
     50        }
     51       
     52        public static PTAssistantLayer getLayer() {
     53                if (layer == null) {
     54                        new PTAssistantLayer();
     55                }
     56                return layer;
    4857        }
    4958
     
    159168
    160169                                if (RouteUtils.isTwoDirectionRoute(relation)) {
    161 
    162                                         this.primitives.clear();
    163                                         this.primitives.add(relation);
    164                                         if (!Main.getLayerManager().containsLayer(this)) {
    165                                                 Main.getLayerManager().addLayer(this);
    166                                         }
    167 
    168                                         if (paintVisitor == null) {
    169                                                 Graphics g = Main.map.mapView.getGraphics();
    170                                                 MapView mv = Main.map.mapView;
    171                                                 paintVisitor = new PTAssistantPaintVisitor(g, mv);
    172                                         }
    173 
    174                                         for (OsmPrimitive primitive : primitives) {
    175                                                 paintVisitor.visit(primitive);
    176                                         }
    177 
    178                                         Main.map.mapView.repaint();
     170                                       
     171                                        this.repaint(relation);
     172
    179173                                }
    180174
     
    182176                }
    183177        }
    184 
     178       
     179       
     180       
     181        /**
     182         * Repaints the layer in cases when there was no selection change
     183         * @param relation
     184         */
     185        public void repaint(Relation relation) {
     186                this.primitives.clear();
     187                this.primitives.add(relation);
     188                if (!Main.getLayerManager().containsLayer(this)) {
     189                        Main.getLayerManager().addLayer(this);
     190                }
     191
     192                if (paintVisitor == null) {
     193                        Graphics g = Main.map.mapView.getGraphics();
     194                        MapView mv = Main.map.mapView;
     195                        paintVisitor = new PTAssistantPaintVisitor(g, mv);
     196                }
     197
     198                for (OsmPrimitive primitive : primitives) {
     199                        paintVisitor.visit(primitive);
     200                }
     201
     202                Main.map.mapView.repaint();
     203        }
     204       
     205       
    185206        @Override
    186207        public void layerAdded(LayerAddEvent arg0) {
  • applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/utils/RouteUtils.java

    r32632 r32647  
    11package org.openstreetmap.josm.plugins.pt_assistant.utils;
     2
     3import java.util.Collection;
    24
    35import org.openstreetmap.josm.data.osm.Node;
     
    3032         */
    3133        public static boolean isTwoDirectionRoute(Relation r) {
    32                
     34
    3335                if (r == null) {
    3436                        return false;
    3537                }
    36                
     38
    3739                if (!r.hasKey("route") || !r.hasTag("public_transport:version", "2")) {
    3840                        return false;
     
    156158        /**
    157159         * Checks if the ways have a common node
     160         *
    158161         * @param w1
    159162         * @param w2
     
    178181                return false;
    179182        }
    180        
     183
     184        /**
     185         * Checks if any way from the first collection touches any way from the
     186         * second collection
     187         *
     188         * @param c1 first collection
     189         * @param c2 second collection
     190         * @return true if ways touch, false otherwise
     191         */
     192        public static boolean waysTouch(Collection<Way> c1, Collection<Way> c2) {
     193
     194                if (c1 == null || c2 == null) {
     195                        return false;
     196                }
     197
     198                for (Way w1 : c1) {
     199                        for (Way w2 : c2) {
     200                                if (waysTouch(w1, w2)) {
     201                                        return true;
     202                                }
     203                        }
     204                }
     205
     206                return false;
     207        }
     208
    181209        /**
    182210         * Checks if the type of the way is suitable for buses to go on it. The
     
    207235                return false;
    208236        }
    209        
     237
    210238        public static boolean isWaySuitableForPublicTransport(Way way) {
    211                
    212                 if (isWaySuitableForBuses(way) || way.hasTag("railway", "tram")
    213                                 || way.hasTag("railway", "subway") || way.hasTag("raiilway", "subway")
    214                                 || way.hasTag("railway", "light_rail")
     239
     240                if (isWaySuitableForBuses(way) || way.hasTag("railway", "tram") || way.hasTag("railway", "subway")
     241                                || way.hasTag("raiilway", "subway") || way.hasTag("railway", "light_rail")
    215242                                || way.hasTag("railway", "train")) {
    216243                        return true;
    217244                }
    218                
    219                 return false;
    220                
     245
     246                return false;
     247
    221248        }
    222249
  • applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/NodeChecker.java

    r32622 r32647  
    7373                }
    7474        }
     75       
     76        public static void fixError() {
     77               
     78        }
    7579
    7680}
  • applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/PTAssistantValidatorTest.java

    r32632 r32647  
    4444                                tr("Check if route relations are compatible with public transport version 2"));
    4545
    46                 layer = new PTAssistantLayer();
     46                layer = PTAssistantLayer.getLayer();
    4747                DataSet.addSelectionListener(layer);
    4848
     
    333333                if (testError.getCode() == ERROR_CODE_DIRECTION) {
    334334                        commands.add(WayChecker.fixErrorByZooming(testError));
    335 
     335                       
    336336                }
    337337
  • applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/WayChecker.java

    r32622 r32647  
    1616import org.openstreetmap.josm.command.Command;
    1717import org.openstreetmap.josm.command.SelectCommand;
    18 import org.openstreetmap.josm.command.SequenceCommand;
    1918import org.openstreetmap.josm.data.osm.Node;
    2019import org.openstreetmap.josm.data.osm.OsmPrimitive;
     
    2928import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor;
    3029import org.openstreetmap.josm.gui.layer.OsmDataLayer;
     30import org.openstreetmap.josm.plugins.pt_assistant.gui.PTAssistantLayer;
    3131import org.openstreetmap.josm.plugins.pt_assistant.utils.RouteUtils;
    3232
     
    194194                }
    195195
     196                List<Relation> primitives = new ArrayList<>(1);
     197                primitives.add(this.relation);
     198
     199                List<Set<Way>> listOfSets = new ArrayList<>();
    196200                for (Way problematicWay : problematicWays) {
    197 
    198                         List<Relation> primitives = new ArrayList<>(1);
    199                         primitives.add(relation);
    200                         List<Way> highlighted = new ArrayList<>(1);
    201                         // highlighted.add(problematicWay);
    202                         Set<Way> adjacentWays = checkAdjacentWays(problematicWay, new HashSet<Way>());
    203                         adjacentWays.removeAll(problematicWays);
    204                         highlighted.add(problematicWay);
    205                         highlighted.addAll(adjacentWays);
     201                        Set<Way> primitivesToReport = new HashSet<>();
     202                        primitivesToReport.add(problematicWay);
     203                        primitivesToReport.addAll(checkAdjacentWays(problematicWay, new HashSet<Way>()));
     204                        listOfSets.add(primitivesToReport);
     205                }
     206               
     207                boolean changed = true;
     208                while (changed) {
     209                        changed = false;
     210                        for (int i = 0; i < listOfSets.size(); i++) {
     211                                for (int j = i; j < listOfSets.size(); j++) {
     212                                        if (i != j && RouteUtils.waysTouch(listOfSets.get(i), listOfSets.get(j))) {
     213                                                listOfSets.get(i).addAll(listOfSets.get(j));
     214                                                listOfSets.remove(j);
     215                                                j = listOfSets.size();
     216                                                changed = true;
     217                                        }
     218                                }
     219                        }
     220                }
     221
     222                for (Set<Way> currentSet : listOfSets) {
    206223                        TestError e = new TestError(this.test, Severity.WARNING,
    207224                                        tr("PT: Route passes a oneway road in the wrong direction"),
    208                                         PTAssistantValidatorTest.ERROR_CODE_DIRECTION, primitives, highlighted);
     225                                        PTAssistantValidatorTest.ERROR_CODE_DIRECTION, primitives, currentSet);
    209226                        this.errors.add(e);
    210227                }
    211228
    212 //              Set<Way> primitivesToReport = new HashSet<>();
    213 //              primitivesToReport.addAll(problematicWays);
    214 //              for (Way problematicWay : problematicWays) {
    215 //                      Set<Way> adjacentWays = checkAdjacentWays(problematicWay, new HashSet<Way>());
    216 //                      primitivesToReport.addAll(adjacentWays);
    217 //              }
    218 //
    219 //              List<Relation> primitives = new ArrayList<>(1);
    220 //              primitives.add(relation);
    221 //              TestError e = new TestError(this.test, Severity.WARNING,
    222 //                              tr("PT: Route passes a oneway road in the wrong direction"),
    223 //                              PTAssistantValidatorTest.ERROR_CODE_DIRECTION, primitives, primitivesToReport);
    224 //              this.errors.add(e);
    225 
    226229        }
    227230
    228231        /**
    229          * Checks if the current way touches its neighbouring was correctly
     232         * Checks if the current way touches its neighboring was correctly
    230233         *
    231234         * @param prev
     
    454457                }
    455458
    456                 ArrayList<Command> commands = new ArrayList<>();
    457 
    458459                Collection<? extends OsmPrimitive> primitives = testError.getPrimitives();
    459460                Relation originalRelation = (Relation) primitives.iterator().next();
    460                 ArrayList<OsmPrimitive> primitivesToSelect = new ArrayList<>(1);
    461                 primitivesToSelect.add(originalRelation);
    462                 Collection<?> highlighted = testError.getHighlighted();
    463                 Way wayToHighlight = (Way) highlighted.iterator().next();
    464                 ArrayList<OsmPrimitive> primitivesToZoom = new ArrayList<>(1);
    465                 primitivesToZoom.add(wayToHighlight);
    466 
    467                 SelectCommand command1 = new SelectCommand(primitivesToSelect);
    468                 commands.add(command1);
    469                 SelectCommand command2 = new SelectCommand(primitivesToZoom);
    470                 commands.add(command2);
     461                ArrayList<OsmPrimitive> primitivesToZoom = new ArrayList<>();
     462                for (Object primitiveToZoom : testError.getHighlighted()) {
     463                        primitivesToZoom.add((OsmPrimitive) primitiveToZoom);
     464                }
     465
     466                SelectCommand command = new SelectCommand(primitivesToZoom);
    471467
    472468                List<OsmDataLayer> listOfLayers = Main.getLayerManager().getLayersOfType(OsmDataLayer.class);
     
    495491                                }
    496492
    497                                 return new SequenceCommand(null, commands);
     493                                return command;
    498494                        }
    499495                }
     
    507503                // zoom to problem:
    508504                AutoScaleAction.zoomTo(primitives);
    509 
    510                 // create editor:
    511                 GenericRelationEditor editor = (GenericRelationEditor) RelationEditor.getEditor(layer, r,
    512                                 r.getMembersFor(primitives));
    513505
    514506                // put stop-related members to the front and edit roles if necessary:
     
    516508                sortedRelationMembers.addAll(listNotStopMembers(r));
    517509                r.setMembers(sortedRelationMembers);
    518                 editor.reloadDataFromRelation();
     510
     511                // create editor:
     512                GenericRelationEditor editor = (GenericRelationEditor) RelationEditor.getEditor(layer, r,
     513                                r.getMembersFor(primitives));
    519514
    520515                // open editor:
    521516                editor.setVisible(true);
     517                editor.setFocusable(true);
     518                editor.requestFocusInWindow();
     519
     520                // make the current relation purple in the pt_assistant layer:
     521                PTAssistantLayer.getLayer().repaint(r);
    522522
    523523        }
  • applications/editors/josm/plugins/pt_assistant/test/unit/org/openstreetmap/josm/plugins/pt_assistant/validation/DirecionTestTest.java

    r32616 r32647  
    66import java.io.File;
    77import java.util.ArrayList;
     8import java.util.Collection;
    89import java.util.List;
    910
     
    4445                assertEquals(onewayErrorCaught, 2);
    4546
    46                 // fix the direction errors:
    47 
    4847                boolean detectedErrorsAreCorrect = true;
    4948                for (TestError e : errors) {
    5049                        if (e.getCode() == PTAssistantValidatorTest.ERROR_CODE_DIRECTION) {
    5150                                @SuppressWarnings("unchecked")
    52                                 List<OsmPrimitive> highlighted = (List<OsmPrimitive>) e.getHighlighted();
    53                                 if (highlighted.get(0).getId() != 225732678 && highlighted.get(0).getId() != 24215210) {
    54                                         detectedErrorsAreCorrect = false;
     51                                Collection<OsmPrimitive> highlighted = (Collection<OsmPrimitive>) e.getHighlighted();
     52                                for (OsmPrimitive highlightedPrimitive: highlighted) {
     53                                        if (highlightedPrimitive.getId() != 225732678 && highlightedPrimitive.getId() != 24215210) {
     54                                                detectedErrorsAreCorrect = false;
     55                                        }
    5556                                }
    5657                        }
Note: See TracChangeset for help on using the changeset viewer.