001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.widgets; 003 004import static org.openstreetmap.josm.tools.I18n.tr; 005 006import javax.swing.text.JTextComponent; 007 008/** 009 * A text field designed to enter a single OSM changeset ID. 010 * @since 5765 011 */ 012public class ChangesetIdTextField extends AbstractIdTextField<ChangesetIdTextField.ChangesetIdValidator> { 013 014 /** 015 * Constructs a new {@link ChangesetIdTextField} 016 */ 017 public ChangesetIdTextField() { 018 super(ChangesetIdValidator.class, 10); 019 } 020 021 /** 022 * Gets the entered changeset id. 023 * @return The entered changeset id 024 */ 025 public final int getChangesetId() { 026 return validator.id; 027 } 028 029 /** 030 * Reads the changeset id. 031 * @return true if a valid changeset id has been successfully read, false otherwise 032 * @see ChangesetIdValidator#readChangesetId 033 */ 034 @Override 035 public boolean readIds() { 036 return validator.readChangesetId(); 037 } 038 039 /** 040 * Validator for a changeset ID entered in a {@link JTextComponent}. 041 */ 042 public static class ChangesetIdValidator extends AbstractTextComponentValidator { 043 044 private int id = 0; 045 046 /** 047 * Constructs a new {@link ChangesetIdValidator} 048 * @param tc The text component to validate 049 */ 050 public ChangesetIdValidator(JTextComponent tc) { 051 super(tc); 052 } 053 054 @Override 055 public boolean isValid() { 056 return readChangesetId(); 057 } 058 059 @Override 060 public void validate() { 061 if (!isValid()) { 062 feedbackInvalid(tr("The current value is not a valid changeset ID. Please enter an integer value > 0")); 063 } else { 064 feedbackValid(tr("Please enter an integer value > 0")); 065 } 066 } 067 068 /** 069 * Reads the changeset id. 070 * @return true if a valid changeset id has been successfully read, false otherwise 071 */ 072 public boolean readChangesetId() { 073 String value = getComponent().getText(); 074 if (value != null && !value.trim().isEmpty()) { 075 id = 0; 076 try { 077 int changesetId = Integer.parseInt(value.trim()); 078 if (changesetId > 0) { 079 id = changesetId; 080 return true; 081 } 082 } catch(NumberFormatException e) { 083 // Ignored 084 } 085 } 086 return false; 087 } 088 } 089}