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}