// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.widgets; import static org.openstreetmap.josm.tools.I18n.tr; import javax.swing.text.JTextComponent; import org.openstreetmap.josm.Main; /** * A text field designed to enter a single OSM changeset ID. * @since 5765 */ public class ChangesetIdTextField extends AbstractIdTextField<ChangesetIdTextField.ChangesetIdValidator> { /** * Constructs a new {@link ChangesetIdTextField} */ public ChangesetIdTextField() { super(ChangesetIdValidator.class, 10); } /** * Gets the entered changeset id. * @return The entered changeset id */ public final int getChangesetId() { return validator.id; } /** * Reads the changeset id. * @return true if a valid changeset id has been successfully read, false otherwise * @see ChangesetIdValidator#readChangesetId */ @Override public boolean readIds() { return validator.readChangesetId(); } /** * Validator for a changeset ID entered in a {@link JTextComponent}. */ public static class ChangesetIdValidator extends AbstractTextComponentValidator { private int id; /** * Constructs a new {@link ChangesetIdValidator} * @param tc The text component to validate */ public ChangesetIdValidator(JTextComponent tc) { super(tc); } @Override public boolean isValid() { return readChangesetId(); } @Override public void validate() { if (!isValid()) { feedbackInvalid(tr("The current value is not a valid changeset ID. Please enter an integer value > 0")); } else { feedbackValid(tr("Please enter an integer value > 0")); } } /** * Reads the changeset id. * @return true if a valid changeset id has been successfully read, false otherwise */ public boolean readChangesetId() { String value = getComponent().getText(); if (value != null && !value.trim().isEmpty()) { id = 0; try { int changesetId = Integer.parseInt(value.trim()); if (changesetId > 0) { id = changesetId; return true; } } catch (NumberFormatException e) { // Ignored Main.trace(e); } } return false; } } }