001// License: GPL. For details, see LICENSE file. 002package org.openstreetmap.josm.gui.dialogs.changeset.query; 003 004import static org.openstreetmap.josm.tools.I18n.tr; 005 006import javax.swing.text.JTextComponent; 007 008import org.openstreetmap.josm.gui.widgets.AbstractTextComponentValidator; 009 010/** 011 * Validator for user ids entered in a {@link JTextComponent}. 012 * @since 11326 (extracted from AdvancedChangesetQueryPanel) 013 */ 014public class UidInputFieldValidator extends AbstractTextComponentValidator { 015 016 /** 017 * Constructs a new {@code TimeValidator} for the given text component. 018 * @param tc text component 019 */ 020 public UidInputFieldValidator(JTextComponent tc) { 021 super(tc); 022 } 023 024 /** 025 * Decorates the given text component. 026 * @param tc text component to decorate 027 * @return new uid validator attached to {@code tc} 028 */ 029 public static UidInputFieldValidator decorate(JTextComponent tc) { 030 return new UidInputFieldValidator(tc); 031 } 032 033 @Override 034 public boolean isValid() { 035 return getUid() > 0; 036 } 037 038 @Override 039 public void validate() { 040 String value = getComponent().getText(); 041 if (value == null || value.trim().isEmpty()) { 042 feedbackInvalid(""); 043 return; 044 } 045 try { 046 int uid = Integer.parseInt(value); 047 if (uid <= 0) { 048 feedbackInvalid(tr("The current value is not a valid user ID. Please enter an integer value > 0")); 049 return; 050 } 051 } catch (NumberFormatException e) { 052 feedbackInvalid(tr("The current value is not a valid user ID. Please enter an integer value > 0")); 053 return; 054 } 055 feedbackValid(tr("Please enter an integer value > 0")); 056 } 057 058 /** 059 * Returns the user identifier. 060 * @return the user identifier 061 */ 062 public int getUid() { 063 String value = getComponent().getText(); 064 if (value == null || value.trim().isEmpty()) return 0; 065 try { 066 int uid = Integer.parseInt(value.trim()); 067 if (uid > 0) 068 return uid; 069 return 0; 070 } catch (NumberFormatException e) { 071 return 0; 072 } 073 } 074}