Ignore:
Timestamp:
2019-03-24T16:35:33+01:00 (5 years ago)
Author:
gerdp
Message:

see #17514: Allow to paste full changeset URL in fields where a changeset id is expected

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/reverter/src/reverter/ChangesetIdsTextField.java

    r32905 r34938  
    11// License: GPL. For details, see LICENSE file.
    22package reverter;
     3
     4import static org.openstreetmap.josm.tools.I18n.tr;
    35
    46import java.util.Collection;
     
    1012
    1113import org.openstreetmap.josm.gui.widgets.AbstractIdTextField;
    12 import org.openstreetmap.josm.gui.widgets.ChangesetIdTextField;
     14import org.openstreetmap.josm.gui.widgets.AbstractTextComponentValidator;
    1315
     16/**
     17 * A text field designed to enter one or more OSM changeset IDs.
     18 */
    1419public class ChangesetIdsTextField extends AbstractIdTextField<ChangesetIdsTextField.OsmIdsValidator> {
    1520
     21    /**
     22     * Constructs a new {@link ChangesetIdsTextField}
     23     */
    1624    public ChangesetIdsTextField() {
    1725        super(OsmIdsValidator.class);
    1826    }
    1927
     28    /**
     29     * Reads the changeset ids.
     30     * @return true if a list of valid changeset id has been successfully read, false otherwise
     31     */
    2032    @Override
    2133    public boolean readIds() {
    22         return validator.readChangesetId();
     34        return validator.readChangesetIds();
    2335    }
    2436
     37    /**
     38     * @return sorted changeset IDs (highest ID first)
     39     */
    2540    public Collection<Integer> getIdsInReverseOrder() {
    2641        return validator.ids;
    2742    }
    2843
    29     public static class OsmIdsValidator extends ChangesetIdTextField.ChangesetIdValidator {
     44    public static class OsmIdsValidator extends AbstractTextComponentValidator {
    3045
    3146        private Collection<Integer> ids = new TreeSet<>(Collections.reverseOrder());
    3247
     48        /**
     49         * Constructs a new {@link OsmIdsValidator}
     50         */
    3351        public OsmIdsValidator(JTextComponent tc) {
    3452            super(tc);
     
    3654
    3755        @Override
    38         public boolean readChangesetId() {
     56        public void validate() {
     57            String help = tr("Please enter one or more integer values > 0 or full changeset URLs.");
     58            if (!isValid()) {
     59                feedbackInvalid(tr("The current value is not a a list of valid changeset IDs. {0}", help));
     60            } else {
     61                feedbackValid(help);
     62            }
     63        }
     64
     65        /**
     66         * Read list of changeset IDs or changeset URLs.
     67         * @return true if list is valid
     68         */
     69        public boolean readChangesetIds() {
    3970            ids.clear();
    4071            String value = getComponent().getText();
    4172            try {
    42                 final StringTokenizer tokenizer = new StringTokenizer(value, ",.+/ \t\n");
     73                final StringTokenizer tokenizer = new StringTokenizer(value, ",+ \t\n");
    4374                while (tokenizer.hasMoreTokens()) {
    44                     ids.add(Integer.parseInt(tokenizer.nextToken().trim()));
     75                    String token = tokenizer.nextToken().trim();
     76                    if (token.matches("http.*/changeset/[0-9]+")) {
     77                        // full URL given, extract id
     78                        token = token.substring(token.lastIndexOf('/') + 1);
     79                    }
     80                    ids.add(Integer.parseInt(token));
    4581                }
    4682                return true;
     
    5086            }
    5187        }
     88
     89        @Override
     90        public boolean isValid() {
     91            return readChangesetIds();
     92        }
    5293    }
    5394}
Note: See TracChangeset for help on using the changeset viewer.