Changeset 32274 in osm for applications/editors/josm


Ignore:
Timestamp:
2016-06-15T23:36:06+02:00 (8 years ago)
Author:
darya
Message:

Clarification

Location:
applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant
Files:
1 added
2 edited

Legend:

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

    r32266 r32274  
    2020import org.openstreetmap.josm.data.validation.TestError;
    2121import org.openstreetmap.josm.gui.dialogs.relation.sort.RelationSorter;
     22import org.openstreetmap.josm.plugins.pt_assistant.actions.FixTask;
    2223import org.openstreetmap.josm.plugins.pt_assistant.actions.IncompleteMembersDownloadThread;
    2324import org.openstreetmap.josm.plugins.pt_assistant.gui.IncompleteMembersDownloadDialog;
     
    3031        public static final int ERROR_CODE_ROAD_TYPE = 3721;
    3132        public static final int ERROR_CODE_DIRECTION = 3731;
    32 
     33       
    3334        public PTAssitantValidatorTest() {
    3435                super(tr("Public Transport Assistant tests"),
     
    5758                this.errors.addAll(wayChecker.getErrors());
    5859
    59                 if (!this.errors.isEmpty()) {
     60                if (this.errors.isEmpty()) {
     61                        proceedWithSorting(r);
     62                } else {
    6063                        this.proceedAfterWayCheckerErrors(r);
    6164                }
    62 
    6365
    6466        }
     
    116118
    117119                if (userInput == 0) {
    118                         for (TestError e : this.errors) {
    119                                 fixError(e);
    120                         }
     120                        this.fixErrorFromPlugin(this.errors);
    121121                        proceedWithSorting(r);
    122122                        return;
     
    130130
    131131                if (userInput == 2) {
     132                        // TODO: should the errors be removed from the error list?
    132133                        proceedWithSorting(r);
    133134                }
     
    137138
    138139        }
    139        
     140
     141        /**
     142         * Carries out the second stage of the testing: sorting
     143         * @param r
     144         */
    140145        private void proceedWithSorting(Relation r) {
     146               
    141147                // Check if the relation is correct, or only has a wrong sorting order:
    142148                RouteChecker routeChecker = new RouteChecker(r, this);
    143                 this.errors.addAll(routeChecker.getErrors());
     149                List<TestError> routeCheckerErrors = routeChecker.getErrors();
     150               
     151                /*- At this point, there are 3 variants:
     152                 *
     153                 * 1) There are no errors => route is correct
     154                 * 2) There is only a sorting error (can only be 1), but otherwise
     155                 * correct.
     156                 * 3) There are some other errors/gaps that cannot be fixed by
     157                 * sorting => start further test (stop-by-stop)
     158                 *
     159                 * */
     160               
     161               
     162                if (!routeCheckerErrors.isEmpty()) {
     163                        // Variant 2
     164                        // If there is only the sorting error, add it and stop testing.
     165                        this.errors.addAll(routeChecker.getErrors());
     166                        return;
     167                }
     168               
     169                if (!routeChecker.getHasGap()) {
     170                        // Variant 1
     171                        // TODO: add the segments of this route to the list correct route segments             
     172                }
     173               
     174                // Variant 3:
     175                proceedAfterSorting(r);
     176               
     177               
     178        }
     179       
     180       
     181        private void proceedAfterSorting(Relation r) {
     182                // TODO
     183                performDummyTest(r);
    144184        }
    145185
     
    158198        @Override
    159199        public Command fixError(TestError testError) {
    160                
    161                 List<Command> commands = new ArrayList<>(50);
    162                
     200
     201                List<Command> commands = new ArrayList<>();
     202
    163203                if (testError.getCode() == ERROR_CODE_DIRECTION || testError.getCode() == ERROR_CODE_ROAD_TYPE) {
    164204                        commands.add(fixErrorByRemovingWay(testError));
    165205                }
    166                
     206
    167207                if (testError.getCode() == ERROR_CODE_SORTING) {
    168208                        commands.add(fixSortingError(testError));
    169209                }
    170                
     210
    171211                if (commands.isEmpty()) {
    172212                        return null;
     
    180220        }
    181221
     222        /**
     223         * This method is the counterpart of the fixError(TestError testError)
     224         * method. The fixError method is invoked from the core validator (e.g. when
     225         * user presses the "Fix" button in the validator). This method is invoken
     226         * when the fix is initiated from within the plugin (e.g. automated fixes).
     227         *
     228         * @return
     229         */
     230        private void fixErrorFromPlugin(List<TestError> testErrors) {
     231
     232                       
     233                        // run fix task asynchronously
     234                        FixTask fixTask = new FixTask(testErrors);
     235//                      Main.worker.submit(fixTask);
     236                       
     237                        Thread t = new Thread(fixTask);
     238                        t.start();
     239                        try {
     240                                t.join();
     241                                errors.removeAll(testErrors);
     242
     243                        } catch (InterruptedException e) {
     244                                JOptionPane.showMessageDialog(null, "Error occurred during fixing");
     245                        }
     246
     247
     248
     249        }
    182250
    183251        private Command fixErrorByRemovingWay(TestError testError) {
    184                
    185        
     252
    186253                if (testError.getCode() != ERROR_CODE_ROAD_TYPE && testError.getCode() != ERROR_CODE_DIRECTION) {
    187254                        return null;
    188255                }
    189                
     256
    190257                List<OsmPrimitive> primitives = (List<OsmPrimitive>) testError.getPrimitives();
    191258                Relation originalRelation = (Relation) primitives.get(0);
     
    236303                ChangeCommand changeCommand = new ChangeCommand(originalRelation, modifiedRelation);
    237304
    238                
    239305                return changeCommand;
    240306        }
  • applications/editors/josm/plugins/pt_assistant/src/org/openstreetmap/josm/plugins/pt_assistant/validation/RouteChecker.java

    r32252 r32274  
    55import java.util.ArrayList;
    66import java.util.List;
     7
     8import javax.swing.JOptionPane;
    79
    810import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
     
    2426        // relation that is checked:
    2527        private Relation relation;
    26        
     28
    2729        // stores all found errors (on way level):
    2830        private ArrayList<TestError> errors = new ArrayList<>();
    2931       
     32        private boolean hasGap;
     33
    3034        List<RelationMember> sortedMembers;
    3135
     
    3539                this.relation = r;
    3640               
     41                this.hasGap = false;
     42
    3743                performSortingTest();
    3844
     
    5258                        return;
    5359                }
    54                
     60
    5561                if (hasGap(waysToCheck)) {
     62                       
     63                        this.hasGap = true;
     64                       
    5665                        RelationSorter sorter = new RelationSorter();
    5766                        sortedMembers = sorter.sortMembers(waysToCheck);
     
    5968                        if (!hasGap(sortedMembers)) {
    6069                                TestError e = new TestError(this.test, Severity.WARNING,
    61                                                 tr("PT: Route contains a gap that can be fixed by sorting"), PTAssitantValidatorTest.ERROR_CODE_SORTING, relation);
     70                                                tr("PT: Route contains a gap that can be fixed by sorting"),
     71                                                PTAssitantValidatorTest.ERROR_CODE_SORTING, relation);
    6272                                this.errors.add(e);
    6373
     
    6575
    6676                }
    67                
    68                
    6977
    7078        }
    71        
     79
    7280        /**
    7381         * Checks if there is a gap for a given list of ways. It does not check if
     
    7684         *
    7785         * @param waysToCheck
    78          * @return true if has gap (in the sense of continuity of ways in the Relation Editor), false otherwise
     86         * @return true if has gap (in the sense of continuity of ways in the
     87         *         Relation Editor), false otherwise
    7988         */
    8089        private boolean hasGap(List<RelationMember> waysToCheck) {
     
    93102                return false;
    94103        }
    95        
     104
     105        /**
     106         * Returns errors
     107         */
    96108        public List<TestError> getErrors() {
    97109
    98110                return errors;
    99111        }
     112
     113        public List<RelationMember> getSortedMembers() {
     114
     115                return sortedMembers;
     116
     117        }
    100118       
    101         public List<RelationMember> getSortedMembers() {
     119        public boolean getHasGap() {
    102120               
    103                 return sortedMembers;
     121                return this.hasGap;
    104122               
    105123        }
Note: See TracChangeset for help on using the changeset viewer.