All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jidefx.scene.control.field.verifier.ValuesPatternVerifier Maven / Gradle / Ivy

The newest version!
/*
 * @(#)ValuesPatternVerifier.java 5/19/2013
 *
 * Copyright 2002 - 2013 JIDE Software Inc. All rights reserved.
 */

package jidefx.scene.control.field.verifier;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * A special verifier that restricts the input string to be in a String array. The order of the string in the array will
 * be used to implement the getNextValue and getPreviousValue methods.
 */
public abstract class ValuesPatternVerifier extends PatternVerifier implements PatternVerifier.Adjustable,
        PatternVerifier.Parser, PatternVerifier.Formatter, PatternVerifier.Range, PatternVerifier.Value, PatternVerifier.Enums {
    private List values;

    public ValuesPatternVerifier() {
    }

    public ValuesPatternVerifier(T[] values) {
        this.values = new ArrayList<>();
        Collections.addAll(getValues(), values);
    }

    @Override
    public T getMin() {
        List values = getValues();
        return values.size() >= 1 ? values.get(0) : null;
    }

    @Override
    public T getMax() {
        List values = getValues();
        return values.size() >= 1 ? values.get(values.size() - 1) : null;
    }

    @Override
    public T getNextPage(T current, boolean restart) {
        return null;
    }

    @Override
    public T getPreviousPage(T current, boolean restart) {
        return null;
    }

    @Override
    public T getHome(T current) {
        return getMin();
    }

    @Override
    public T getEnd(T current) {
        return getMax();
    }

    @Override
    public T getNextValue(T current, boolean restart) {
        List values = getValues();
        int index = values.indexOf(current);
        if (index != -1) {
            if (index + 1 < values.size())
                return values.get(index + 1);
            else {
                return restart ? values.get(0) : values.get(values.size() - 1);
            }
        }
        for (int i = 0; i < values.size(); i++) {
            T value = values.get(i);
            if (matches(current, value)) {
                if (i + 1 < values.size())
                    return values.get(i + 1);
                else {
                    return restart ? values.get(0) : values.get(values.size() - 1);
                }
            }
        }
        return current;
    }

    @Override
    public T getPreviousValue(T current, boolean restart) {
        List values = getValues();
        int index = values.indexOf(current);
        if (index != -1) {
            if (index - 1 > 0)
                return values.get(index - 1);
            else {
                return restart ? values.get(values.size() - 1) : values.get(0);
            }
        }
        for (int i = 0; i < values.size(); i++) {
            T value = values.get(i);
            if (matches(current, value)) {
                if (i - 1 >= 0)
                    return values.get(i - 1);
                else {
                    return restart ? values.get(values.size() - 1) : values.get(0);
                }
            }
        }
        return current;
    }

    protected boolean matches(T current, T value) {
        return false;
    }

    @Override
    public Boolean call(String text) {
        return getValues().contains(parse(text));
    }

    @Override
    public List getValues() {
        if (values == null) {
            values = createValues();
        }
        return values;
    }

    protected List createValues() {
        return null;
    }

    public void invalidate() {
        values = null;
    }

    private S value;

    @Override
    public void setFieldValue(S fieldValue) {
        value = fieldValue;
    }

    @Override
    public S getFieldValue() {
        return value;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy