FlowSeqGenerator.java

package com.mycim.valueobject.prp;

import com.fa.sesa.exception.Assert;
import com.fa.sesa.exception.Errors;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.math.NumberUtils;

import java.text.DecimalFormat;

/**
 * @author Qiansheng.Wang
 * @since 2020-09-25
 */
public class FlowSeqGenerator {

    private static final String PATTERN = "000000";

    private static final int MIN_SEQUENCE = 0;

    private static final int MAX_SEQUENCE = 999999;

    private FlowSeqGenerator() {
    }

    public static String generate(String sequence) {
        if (StringUtils.isEmpty(sequence)) {
            return StringUtils.EMPTY;
        }

        Assert.isTrue(NumberUtils.isDigits(sequence), Errors.create().content("Flow Seq must be number.").build());

        return generate(NumberUtils.toInt(sequence));
    }

    public static String generate(Integer sequence) {
        Integer sequenceTemp = sequence;
        if (sequenceTemp == null) {
            sequenceTemp = 0;
        }
        Assert.isFalse(sequenceTemp < MIN_SEQUENCE, Errors.create().content("Flow Seq can not be negative.").build());
        Assert.isFalse(sequenceTemp > MAX_SEQUENCE,
                       Errors.create().content("Flow Seq excedded the maximum serial number.").build());
        return new DecimalFormat(PATTERN).format(sequenceTemp);
    }

    public static Boolean isValid(String sequence) {
        return sequence != null && NumberUtils.isDigits(sequence) && sequence.length() == PATTERN.length();
    }

}