RetentionDaysConverter.java
package com.cloudforgeci.api.core.util;
import software.amazon.awscdk.services.logs.RetentionDays;
/**
* Utility for converting integer day values to AWS CDK RetentionDays enum.
*
* Supports all compliance framework retention requirements:
* - PCI-DSS: 1 year minimum (365 days)
* - HIPAA: 6 years minimum (2190 days)
* - SOC2: Varies by policy
* - GDPR: Varies by data classification
*
* This converter maps integer values to the nearest RetentionDays enum value,
* rounding up to ensure compliance requirements are met.
*/
public final class RetentionDaysConverter {
private RetentionDaysConverter() {
// Utility class - prevent instantiation
}
/**
* Convert integer days to RetentionDays enum.
* Rounds up to the nearest available retention period to ensure compliance.
*
* @param days Number of days to retain logs
* @return Corresponding RetentionDays enum value
* @throws IllegalArgumentException if days is negative
*/
public static RetentionDays fromDays(int days) {
if (days < 0) {
throw new IllegalArgumentException("Retention days cannot be negative: " + days);
}
if (days <= 1) {
return RetentionDays.ONE_DAY;
} else if (days <= 3) {
return RetentionDays.THREE_DAYS;
} else if (days <= 5) {
return RetentionDays.FIVE_DAYS;
} else if (days <= 7) {
return RetentionDays.ONE_WEEK;
} else if (days <= 14) {
return RetentionDays.TWO_WEEKS;
} else if (days <= 30) {
return RetentionDays.ONE_MONTH;
} else if (days <= 60) {
return RetentionDays.TWO_MONTHS;
} else if (days <= 90) {
return RetentionDays.THREE_MONTHS;
} else if (days <= 120) {
return RetentionDays.FOUR_MONTHS;
} else if (days <= 150) {
return RetentionDays.FIVE_MONTHS;
} else if (days <= 180) {
return RetentionDays.SIX_MONTHS;
} else if (days <= 365) {
return RetentionDays.ONE_YEAR; // PCI-DSS minimum
} else if (days <= 400) {
return RetentionDays.THIRTEEN_MONTHS;
} else if (days <= 545) {
return RetentionDays.EIGHTEEN_MONTHS;
} else if (days <= 731) {
return RetentionDays.TWO_YEARS; // AWS value: 731 days
} else if (days <= 1096) {
return RetentionDays.THREE_YEARS; // AWS value: 1096 days
} else if (days <= 1827) {
return RetentionDays.FIVE_YEARS;
} else if (days <= 2192) {
return RetentionDays.SIX_YEARS; // HIPAA minimum - AWS value: 2192 days
} else if (days <= 2557) {
return RetentionDays.SEVEN_YEARS; // AWS value: 2557 days
} else if (days <= 2922) {
return RetentionDays.EIGHT_YEARS; // AWS value: 2922 days
} else if (days <= 3288) {
return RetentionDays.NINE_YEARS; // AWS value: 3288 days
} else if (days <= 3653) {
return RetentionDays.TEN_YEARS; // AWS value: 3653 days
} else {
return RetentionDays.INFINITE; // For extreme retention requirements
}
}
/**
* Convert integer days to RetentionDays enum, returning null for null input.
* Useful for optional retention settings.
*
* @param days Number of days to retain logs, or null
* @return Corresponding RetentionDays enum value, or null if input is null
*/
public static RetentionDays fromDaysOrNull(Integer days) {
return days == null ? null : fromDays(days);
}
}