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

org.nakedobjects.metamodel.facets.propparam.validate.mask.MaskEvaluator Maven / Gradle / Ivy

The newest version!
package org.nakedobjects.metamodel.facets.propparam.validate.mask;

//import java.text.DecimalFormatSymbols;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;


public class MaskEvaluator {

    interface Converter {
        void convert(String str, StringBuilder buf);
    }

    static class RegExConverter implements Converter {
        private final String mask;
        private final String regex;

        public RegExConverter(final String mask, final String regex) {
            this.mask = mask;
            this.regex = regex;
        }

        public String getMask() {
            return mask;
        }

        public String getRegex() {
            return regex;
        }

        public void convert(final String str, final StringBuilder buf) {
            final String convert = str.replace(mask, regex);
            if (!convert.equals(str)) {
                buf.append(convert);
            }
        }
    }

    @SuppressWarnings("serial")
    private static List converters = new ArrayList() {
        {
            add("#", "[0-9]");
            // add(".", "[\\" + DecimalFormatSymbols.getInstance().getDecimalSeparator()+"]");
            // add(",", "["+DecimalFormatSymbols.getInstance().getGroupingSeparator()+"]");
            add("&", "[A-Za-z]");
            add("?", "[A-Za-z]");
            add("A", "[A-Za-z0-9]");
            add("a", "[ A-Za-z0-9]");
            add("9", "[ 0-9]");
            add("U", "[A-Z]");
            add("L", "[a-z]");

            add(new Converter() {
                public void convert(final String str, final StringBuilder buf) {
                    if (buf.length() == 0) {
                        buf.append(str);
                    }
                }
            });
        }

        public void add(final String mask, final String regex) {
            add(new RegExConverter(mask, regex));
        }
    };

    private final String mask;
    private final Pattern pattern;

    public MaskEvaluator(final String mask) {
        this.mask = mask;
        final StringBuilder buf = new StringBuilder();
        for (int i = 0; i < mask.length(); i++) {
            final String charAt = "" + mask.charAt(i);
            for (final Converter converter : converters) {
                converter.convert(charAt, buf);
            }
        }
        pattern = Pattern.compile(buf.toString());
    }

    public boolean evaluate(final String str) {
        return pattern.matcher(str).matches();
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy