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

com.clickntap.tool.bean.BeanErrors Maven / Gradle / Ivy

There is a newer version: 1.30
Show newest version
package com.clickntap.tool.bean;

import com.clickntap.tool.types.Datetime;
import com.clickntap.utils.AsciiUtils;
import com.clickntap.utils.ConstUtils;
import com.clickntap.utils.SecurityUtils;
import org.krysalis.barcode4j.impl.code39.Code39Bean;
import org.krysalis.barcode4j.output.bitmap.BitmapCanvasProvider;
import org.springframework.validation.Errors;
import org.springframework.web.multipart.MultipartFile;

import java.awt.image.BufferedImage;
import java.sql.Timestamp;
import java.util.List;

public class BeanErrors {
    private final static String mailRegex = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@" + "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";

    private Errors errors;

    private Object target;

    private BeanManager beanManager;

    public BeanErrors(Object target, Errors errors, BeanManager beanManager) {
        this.target = target;
        this.errors = errors;
        this.beanManager = beanManager;
    }

    public Object getTarget() {
        return target;
    }

    // public void assertRule(String rule, String propertyName) throws Exception {
    // if (!beanManager.evaluateRule(rule, target))
    // errors.rejectValue(propertyName, rule);
    // }

    public void assertEmptyList(String propertyName) throws Exception {
        assertEmptyList(propertyName, propertyName);
    }

    public void assertEmptyList(String propertyName, String propertyErrorName) throws Exception {
        Object value = BeanUtils.getValue(target, propertyName);
        if (value != null && value instanceof List) {
            List list = (List) value;
            if (list.size() == 0) {
                errors.rejectValue(propertyErrorName, "listEmpty");
            }
        } else {
            errors.rejectValue(propertyErrorName, "listEmpty");
        }
    }

    public void assertBarcode39(String propertyName) {
        Object value = BeanUtils.getValue(target, propertyName);
        Code39Bean bean = new Code39Bean();
        try {
            BitmapCanvasProvider canvas = new BitmapCanvasProvider(100, BufferedImage.TYPE_INT_RGB, true, 0);
            bean.generateBarcode(canvas, value.toString());
            canvas.finish();
        } catch (Exception e) {
            errors.rejectValue(propertyName, "barcode39");
        }
    }

    public void assertDataIntegrity(String propertyName, String className) throws Exception {
        Object value = BeanUtils.getValue(target, propertyName);
        if (value != null && beanManager.read(((Number) value), findClass(className)) == null)
            errors.rejectValue(propertyName, "dataIntegrity");
    }

    public void assertDataIntegrity(String propertyName, String className, String classPropertyName) throws Exception {
        Object value = BeanUtils.getValue(target, propertyName);
        if (value != null) {
            Class clazz = findClass(className);
            Object bean = clazz.newInstance();
            BeanUtils.setValue(bean, classPropertyName, value);
            if (beanManager.readByFilter((Bean) bean, classPropertyName, clazz) == null)
                errors.rejectValue(propertyName, "dataIntegrity");
        }
    }

    private Class findClass(String className) throws ClassNotFoundException {
        Class clazz = null;
        try {
            clazz = Class.forName(className);
        } catch (ClassNotFoundException e) {
            className = target.getClass().getPackage().getName() + "." + className;
            clazz = Class.forName(className);
        }
        return clazz;
    }

    public void assertWebName(String propertyName) {
        Object value = BeanUtils.getValue(target, propertyName);
        if (value != null) {
            if (!AsciiUtils.isWebized(value.toString()))
                errors.rejectValue(propertyName, "web");
        }
    }

    public void assertTaxCode(String propertyName) {
        Object value = BeanUtils.getValue(target, propertyName);
        if (value != null) {
            String taxCode = value.toString();
            if (taxCode.trim().length() != 16)
                errors.rejectValue(propertyName, "bad");
        }
    }

    public void assertPassword(String propertyName) {
        Object value = BeanUtils.getValue(target, propertyName);
        if (value != null) {
            if (!AsciiUtils.isWebized(value.toString()))
                errors.rejectValue(propertyName, "badPassword");
            else if (value.toString().length() < 4)
                errors.rejectValue(propertyName, "shortPassword");
        }
    }

    public void assertNotNull(String propertyName) {
        Object value = BeanUtils.getValue(target, propertyName);
        if (value == null)
            errors.rejectValue(propertyName, "null");
    }

    public void assertNotEmpty(String propertyName) {
        Object value = BeanUtils.getValue(target, propertyName);
        if (value == null || value.toString().trim().equals(ConstUtils.EMPTY))
            errors.rejectValue(propertyName, "empty");
    }

    public void assertEquals(String propertyName1, String propertyName2) {
        Object value1 = BeanUtils.getValue(target, propertyName1);
        Object value2 = BeanUtils.getValue(target, propertyName2);
        if (value1 == null && value2 == null)
            return;
        if (value1 != null && !value1.equals(value2))
            errors.rejectValue(propertyName1, "different");
    }

    public void assertEqualsMD5(String propertyName1, String propertyName2) throws Exception {
        String value1 = BeanUtils.getValue(target, propertyName1).toString();
        String value2 = BeanUtils.getValue(target, propertyName2).toString();
        value1 = SecurityUtils.md5(value1);
        if (value1 == null && value2 == null)
            return;
        if (value1 != null && !value1.equals(value2))
            errors.rejectValue(propertyName1, "differentMD5");
    }

    public void assertImage(String propertyName) throws Exception {
        Object value = BeanUtils.getValue(target, propertyName);
        if (value == null)
            errors.rejectValue(propertyName, "empty");
        else {
            MultipartFile file = (MultipartFile) value;
            if (file.getContentType() == null)
                errors.rejectValue(propertyName, "empty");
            else if (!file.getContentType().startsWith("image"))
                errors.rejectValue(propertyName, "badContentType");
        }
    }

    public void assertEmail(String propertyName) throws Exception {
        Object value = BeanUtils.getValue(target, propertyName);
        if (value == null || !value.toString().matches(mailRegex))
            errors.rejectValue(propertyName, "bad");
    }

    public void assertPhoneNumber(String propertyName, int maxLen) throws Exception {
        Object value = BeanUtils.getValue(target, propertyName);
        if (value != null && !value.equals("")) {
            try {
                value = AsciiUtils.phonize(value.toString());
                Double.parseDouble(value.toString());
                if (value.toString().length() > maxLen) {
                    errors.rejectValue(propertyName, "tooLong");
                }
            } catch (Exception e) {
                errors.rejectValue(propertyName, "notNumber");
            }
        }
    }

    public void assertPhoneNumber(String propertyName) throws Exception {
        assertPhoneNumber(propertyName, Integer.MAX_VALUE);
    }

    public void assertRegExp(String propertyName, String regExp) throws Exception {
        Object value = BeanUtils.getValue(target, propertyName);
        if (value == null || !value.toString().matches(regExp))
            errors.rejectValue(propertyName, "bad");
    }

    public void assertOnlyLetters(String propertyName) throws Exception {
        Object value = BeanUtils.getValue(target, propertyName);
        if (value == null || notOnlyLetters(value.toString()))
            errors.rejectValue(propertyName, "onlyletters");
    }

    private boolean notOnlyLetters(String string) {
        for (int i = 0; i < string.length(); i++) {
            if (!Character.isLetter(string.charAt(i)))
                return true;
        }
        return false;
    }

    public void assertEmailIfNotEmpty(String propertyName) throws Exception {
        assertRegExp(propertyName, mailRegex);
    }

    public void assertPositive(String propertyName) throws Exception {
        Object value = BeanUtils.getValue(target, propertyName);
        if (value != null) {
            if (value != null && value.toString().trim().equals(ConstUtils.EMPTY))
                return;
            if (((Number) value).intValue() <= 0)
                errors.rejectValue(propertyName, "negative");
        }
    }

    public void assertPercentage(String propertyName) throws Exception {
        Object value = BeanUtils.getValue(target, propertyName);
        if (value != null) {
            if (value != null && value.toString().trim().equals(ConstUtils.EMPTY))
                return;
            if (((Number) value).intValue() < 0 || ((Number) value).intValue() > 100)
                errors.rejectValue(propertyName, "percentage");
        }
    }

    public void assertTrue(String propertyName) throws Exception {
        Object value = BeanUtils.getValue(target, propertyName);
        if (value != null) {
            if (Boolean.parseBoolean(value.toString()))
                return;
        }
        errors.rejectValue(propertyName, "false");
    }

    public void assertGt(String propertyName1, String propertyName2) throws Exception {
        assertGt(propertyName1, propertyName2, propertyName1, "gt");
    }

    public void assertLt(String propertyName1, String propertyName2) throws Exception {
        assertGt(propertyName2, propertyName1, propertyName1, "lt");
    }

    public void assertUnique(String propertyName) throws Exception {
        Object value = BeanUtils.getValue(target, propertyName);
        if (value == null || value.toString().trim().equals(ConstUtils.EMPTY))
            return;
        if (beanManager.readList((Bean) target, propertyName).size() > 0)
            errors.rejectValue(propertyName, "conflict");
    }

    public void assertExists(String propertyName) throws Exception {
        Object value = BeanUtils.getValue(target, propertyName);
        if (value == null || value.toString().trim().equals(ConstUtils.EMPTY))
            return;
        List ids = beanManager.readList((Bean) target, propertyName);
        if (ids.size() > 0) {

        } else {
            errors.rejectValue(propertyName, "unknown");
        }
    }

    private void assertGt(String propertyName1, String propertyName2, String propertyName, String error) {
        Object value1 = BeanUtils.getValue(target, propertyName1);
        Object value2 = BeanUtils.getValue(target, propertyName2);
        if (value1 == null || value1.toString().trim().equals(ConstUtils.EMPTY))
            return;
        if (value2 == null || value2.toString().trim().equals(ConstUtils.EMPTY))
            return;
        if (value1 instanceof String) {
            if (((String) value1).compareToIgnoreCase((String) value2) < 0)
                errors.rejectValue(propertyName, error);
        }
        if (value1 instanceof Datetime) {
            if (((Datetime) value1).getTimeInMillis() / 1000 < ((Datetime) value2).getTimeInMillis() / 1000)
                errors.rejectValue(propertyName, error);
        }
        if (value1 instanceof Timestamp) {
            long lo1 = ((Timestamp) value1).getTime() / 1000;
            long lo2 = ((Timestamp) value2).getTime() / 1000;
            if (lo1 < lo2)
                errors.rejectValue(propertyName, error);
        }
        if (value1 instanceof Number) {
            if (((Number) value1).longValue() < ((Number) value2).longValue())
                errors.rejectValue(propertyName, error);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy