Ignore:
Timestamp:
2016-08-13T04:10:03+02:00 (8 years ago)
Author:
darya
Message:

3 error messages for stop-by-stop test

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/SegmentChecker.java

    r32801 r32806  
    2626import org.openstreetmap.josm.data.validation.TestError;
    2727import org.openstreetmap.josm.gui.Notification;
     28import org.openstreetmap.josm.gui.dialogs.relation.GenericRelationEditor;
     29import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor;
     30import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    2831import org.openstreetmap.josm.plugins.pt_assistant.data.PTRouteDataManager;
    2932import org.openstreetmap.josm.plugins.pt_assistant.data.PTRouteSegment;
     
    565568
    566569                /*-
    567                  * When is an error fixable?
     570                 * When is an error fixable (outdated)?
    568571                 * - if there is a correct segment
    569572                 * - if it can be fixed by sorting
     
    584587                PTRouteSegment wrongSegment = wrongSegments.get(testError);
    585588                PTRouteSegment correctSegment = null;
    586                 // TODO: now just the first correctSegment is taken over. Change
    587                 // that the segment is selected.
    588589                for (PTRouteSegment segment : correctSegments) {
    589590                        if (wrongSegment.getFirstStop().equalsStop(segment.getFirstStop())
     
    606607        }
    607608
     609        /**
     610         * Finds fixes using sorting and removal. Modifies the messages in the test
     611         * error according to the availability of automatic fixes.
     612         */
    608613        protected void findFixes() {
     614
    609615                for (TestError error : wrongSegments.keySet()) {
     616                        // look for fixes using sorting and removing:
    610617                        findFix(error);
    611                 }
     618
     619                        // change the error code based on the availability of fixes:
     620                        PTRouteSegment wrongSegment = wrongSegments.get(error);
     621                        List<PTRouteSegment> correctSegmentsForThisError = new ArrayList<>();
     622                        for (PTRouteSegment segment : correctSegments) {
     623                                if (wrongSegment.getFirstWay().getId() == segment.getFirstWay().getId()
     624                                                && wrongSegment.getLastWay().getId() == segment.getLastWay().getId()) {
     625                                        correctSegmentsForThisError.add(segment);
     626                                }
     627                        }
     628
     629                        int numberOfFixes = correctSegmentsForThisError.size();
     630
     631                        if (numberOfFixes == 0) {
     632                                numberOfFixes = wrongSegment.getFixVariants().size();
     633                        }
     634                        if (numberOfFixes == 0) {
     635                                for (PTRouteSegment segment : correctSegments) {
     636                                        if (wrongSegment.getFirstStop().equalsStop(segment.getFirstStop())
     637                                                        && wrongSegment.getLastStop().equalsStop(segment.getLastStop())) {
     638                                                correctSegmentsForThisError.add(segment);
     639                                        }
     640                                }
     641                                numberOfFixes = correctSegmentsForThisError.size();
     642                        }
     643
     644                        // change the error code:
     645                        if (numberOfFixes == 0) {
     646                                error.setMessage(tr("PT: Problem in the route segment with no automatic fix"));
     647                        } else if (numberOfFixes == 1) {
     648                                error.setMessage(tr("PT: Problem in the route segment with one automatic fix"));
     649                        } else {
     650                                error.setMessage("PT: Problem in the route segment with several automatic fixes");
     651                        }
     652                }
     653
    612654        }
    613655
     
    627669                Node previousNode = findFirstNodeOfRouteSegmentInDirectionOfTravel(startPTWay);
    628670                if (previousNode == null) {
    629                         // TODO: sort route ways
    630671                        return;
    631672                }
     
    697738                // layer, clear them:
    698739                ((PTAssistantValidatorTest) testError.getTester()).clearFixVariants();
    699                
     740
    700741                PTRouteSegment wrongSegment = wrongSegments.get(testError);
    701742
     
    709750                }
    710751
    711                 // if no correct segment found, apply less strict criteria to look for one:
     752                // if no correct segment found, apply less strict criteria to look for
     753                // one:
    712754                if (correctSegmentsForThisError.isEmpty() && wrongSegment.getFixVariants().isEmpty()) {
    713755                        for (PTRouteSegment segment : correctSegments) {
     
    863905         */
    864906        private static void carryOutSelectedFix(TestError testError, List<PTWay> fix) {
     907                // modify the route:
    865908                Relation route = (Relation) testError.getPrimitives().iterator().next();
    866909                route.setMembers(getModifiedRelationMembers(testError, fix));
     
    869912                wrongSegment.setPTWays(fix);
    870913                addCorrectSegment(wrongSegment);
     914
     915                // get ways for the fix:
     916                List<Way> primitives = new ArrayList<>();
     917                for (PTWay ptway : fix) {
     918                        primitives.addAll(ptway.getWays());
     919                }
     920
     921                // get layer:
     922                OsmDataLayer layer = null;
     923                List<OsmDataLayer> listOfLayers = Main.getLayerManager().getLayersOfType(OsmDataLayer.class);
     924                for (OsmDataLayer osmDataLayer : listOfLayers) {
     925                        if (osmDataLayer.data == route.getDataSet()) {
     926                                layer = osmDataLayer;
     927                                break;
     928                        }
     929                }
     930
     931                // create editor:
     932                GenericRelationEditor editor = (GenericRelationEditor) RelationEditor.getEditor(layer, route,
     933                                route.getMembersFor(primitives));
     934
     935                // open editor:
     936                editor.setVisible(true);
     937
    871938        }
    872939
Note: See TracChangeset for help on using the changeset viewer.