package com.constellio.app.modules.rm.ui.components.retentionRule; import static com.constellio.app.ui.i18n.i18n.$; import java.util.ArrayList; import java.util.List; import org.apache.commons.lang3.StringUtils; import com.constellio.app.modules.rm.model.CopyRetentionRule; import com.constellio.app.modules.rm.model.RetentionPeriod; import com.constellio.app.modules.rm.model.enums.CopyType; import com.constellio.app.modules.rm.model.enums.DisposalType; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.app.modules.rm.wrappers.RetentionRule; import com.constellio.app.modules.rm.wrappers.type.MediumType; import com.constellio.app.ui.application.ConstellioUI; public class RetentionRuleInfoBuilder { private String info; public RetentionRuleInfoBuilder(RetentionRule retentionRule) { ConstellioUI ui = ConstellioUI.getCurrent(); String collection = ui.getSessionContext().getCurrentCollection(); RMSchemasRecordsServices rmSchemasRecordsServices = new RMSchemasRecordsServices(collection, ui); String code = retentionRule.getCode(); String title = retentionRule.getTitle(); String description = retentionRule.getDescription(); List<String> copyRulesComments = retentionRule.getCopyRulesComment(); List<CopyRetentionRule> copyRetentionRules = retentionRule.getCopyRetentionRules(); List<CopyRetentionRule> principalCopyRetentionRules = new ArrayList<>(); List<CopyRetentionRule> secondaryCopyRetentionRules = new ArrayList<>(); for (CopyRetentionRule copyRetentionRule : copyRetentionRules) { CopyType copyType = copyRetentionRule.getCopyType(); if (CopyType.PRINCIPAL.equals(copyType)) { principalCopyRetentionRules.add(copyRetentionRule); } else { secondaryCopyRetentionRules.add(copyRetentionRule); } } StringBuilder sb = new StringBuilder(); sb.append(code); sb.append("-"); sb.append(title); sb.append(" : "); if (StringUtils.isNotBlank(description)) { //Add br String descriptionWithBr = StringUtils.replace(description, System.getProperty("line.separator"), "<br />"); sb.append(descriptionWithBr); } for (CopyRetentionRule principalCopyRetentionRule : principalCopyRetentionRules) { sb.append("<br />"); appendCopyRetentionRule(principalCopyRetentionRule, sb, true, rmSchemasRecordsServices); } for (CopyRetentionRule secondaryCopyRetentionRule : secondaryCopyRetentionRules) { sb.append("<br />"); appendCopyRetentionRule(secondaryCopyRetentionRule, sb, true, rmSchemasRecordsServices); } if (secondaryCopyRetentionRules.isEmpty()) { sb.append($("RetentionRuleReferenceDisplay.copyType.secondary")); sb.append(" - "); sb.append($("RetentionRuleReferenceDisplay.notApplicable")); } for (String copyRulesComment : copyRulesComments) { sb.append("<br />"); String copyRulesCommentWithBr = StringUtils.replace(copyRulesComment, System.getProperty("line.separator"), "<br />"); sb.append(copyRulesCommentWithBr); } info = sb.toString(); } public RetentionRuleInfoBuilder(RetentionRule retentionRule, CopyRetentionRule copyRetentionRule) { ConstellioUI ui = ConstellioUI.getCurrent(); String collection = ui.getSessionContext().getCurrentCollection(); RMSchemasRecordsServices rmSchemasRecordsServices = new RMSchemasRecordsServices(collection, ui); StringBuilder sb = new StringBuilder(); appendCopyRetentionRule(copyRetentionRule, sb, false, rmSchemasRecordsServices); info = sb.toString(); } private void appendCopyRetentionRule(CopyRetentionRule copyRetentionRule, StringBuilder sb, boolean addLabelAndCode, RMSchemasRecordsServices rmSchemasRecordsServices) { CopyType copyType = copyRetentionRule.getCopyType(); List<String> mediumTypeIds = copyRetentionRule.getMediumTypeIds(); RetentionPeriod activeRetentionPeriod = copyRetentionRule.getActiveRetentionPeriod(); RetentionPeriod semiActiveRetentionPeriod = copyRetentionRule.getSemiActiveRetentionPeriod(); DisposalType inactiveDisposalType = copyRetentionRule.getInactiveDisposalType(); if (addLabelAndCode) { String copyTypeLabel; if (CopyType.PRINCIPAL.equals(copyType)) { copyTypeLabel = $("RetentionRuleReferenceDisplay.copyType.principal"); } else { copyTypeLabel = $("RetentionRuleReferenceDisplay.copyType.secondary"); } sb.append(copyTypeLabel); sb.append(" - "); } boolean firstMediumType = true; for (String mediumTypeId : mediumTypeIds) { MediumType mediumType = rmSchemasRecordsServices.getMediumType(mediumTypeId); String mediumTypeCode = mediumType.getCode(); if (!firstMediumType) { sb.append(","); } firstMediumType = false; sb.append(mediumTypeCode); } sb.append(" : "); // sb.append(activeRetentionPeriod.getRetentionType().getCode()); // sb.append("-"); // if (semiActiveRetentionPeriod != null) { // sb.append(semiActiveRetentionPeriod.getRetentionType().getCode()); // } else { // sb.append("0"); // } // sb.append("-"); // sb.append(inactiveDisposalType.getCode()); if (addLabelAndCode) { sb.append(copyRetentionRule.toString()); } else { sb.append(activeRetentionPeriod == null ? "?" : activeRetentionPeriod.getValue()); sb.append("-"); sb.append(semiActiveRetentionPeriod == null ? "?" : semiActiveRetentionPeriod.getValue()); sb.append("-"); sb.append(inactiveDisposalType == null ? "?" : inactiveDisposalType.getCode()); } } public String getInfo() { return info; } }