package com.constellio.app.modules.rm.model; import java.io.Serializable; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import com.constellio.app.modules.rm.model.RetentionPeriod.RetentionPeriodRuntimeException.RetentionPeriodRuntimeException_PeriodIsFixed; import com.constellio.app.modules.rm.model.RetentionPeriod.RetentionPeriodRuntimeException.RetentionPeriodRuntimeException_PeriodIsOpened; import com.constellio.app.modules.rm.model.enums.RetentionType; import com.constellio.app.modules.rm.wrappers.type.VariableRetentionPeriod; public class RetentionPeriod implements Serializable { private static String PERIOD_888 = "888"; private static String PERIOD_999 = "999"; private int fixedValue; private int variableRetentionRuleCode = 0; public int getValue() { if (variableRetentionRuleCode != 0) { return variableRetentionRuleCode; } else { return fixedValue; } } public int getFixedValue() { return fixedValue; } public boolean isVariablePeriod() { return variableRetentionRuleCode != 0; } public boolean is888() { return variableRetentionRuleCode != 0 && !is999(); } public boolean is999() { return PERIOD_999.equals("" + variableRetentionRuleCode); } RetentionPeriod(int fixedValue) { if (fixedValue == 888 || fixedValue == 999) { this.variableRetentionRuleCode = fixedValue; } else { this.fixedValue = fixedValue; } } RetentionPeriod(String variablePeriodCode) { this.variableRetentionRuleCode = Integer.valueOf(variablePeriodCode); } public int getFixedPeriod() { if (isVariablePeriod()) { throw new RetentionPeriodRuntimeException_PeriodIsOpened(); } else { return fixedValue; } } // public String getVariablePeriodId() { // if (!isVariablePeriod()) { // throw new RetentionPeriodRuntimeException_PeriodIsFixed(); // } else { // return variableRetentionRuleId; // } // } public String getVariablePeriodCode() { if (!isVariablePeriod()) { throw new RetentionPeriodRuntimeException_PeriodIsFixed(); } else { return "" + variableRetentionRuleCode; } } @Override public String toString() { if (variableRetentionRuleCode != 0) { return "" + variableRetentionRuleCode; } else { return "" + fixedValue; } } @Override public int hashCode() { return HashCodeBuilder.reflectionHashCode(this); } @Override public boolean equals(Object obj) { return EqualsBuilder.reflectionEquals(this, obj); } public static RetentionPeriod fixed(int years) { return new RetentionPeriod(years); } public static RetentionPeriod ZERO = new RetentionPeriod(0); public static RetentionPeriod OPEN_888 = new RetentionPeriod("888"); public static RetentionPeriod OPEN_999 = new RetentionPeriod("999"); public RetentionType getRetentionType() { if (is888()) { return RetentionType.OPEN; } else if (is999()) { return RetentionType.UNTIL_REPLACED; } else { return RetentionType.FIXED; } } public boolean isNotZero() { return !this.equals(RetentionPeriod.ZERO); } public boolean isZero() { return this.equals(RetentionPeriod.ZERO); } public static RetentionPeriod variable(String code) { return new RetentionPeriod(code); } public static RetentionPeriod variable(VariableRetentionPeriod variablePeriod) { return new RetentionPeriod(variablePeriod.getCode()); } public boolean isFixed() { return !isVariablePeriod(); } public static class RetentionPeriodRuntimeException extends RuntimeException { public RetentionPeriodRuntimeException(String message) { super(message); } public static class RetentionPeriodRuntimeException_PeriodIsFixed extends RetentionPeriodRuntimeException { public RetentionPeriodRuntimeException_PeriodIsFixed() { super("The period is fixed"); } } public static class RetentionPeriodRuntimeException_PeriodIsOpened extends RetentionPeriodRuntimeException { public RetentionPeriodRuntimeException_PeriodIsOpened() { super("The period is opened"); } } } }