package com.constellio.app.modules.rm.extensions.app;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import com.constellio.app.api.extensions.RecordExportExtension;
import com.constellio.app.api.extensions.params.OnWriteRecordParams;
import com.constellio.app.modules.rm.extensions.imports.RetentionRuleImportExtension;
import com.constellio.app.modules.rm.model.CopyRetentionRule;
import com.constellio.app.modules.rm.model.enums.CopyType;
import com.constellio.app.modules.rm.services.RMSchemasRecordsServices;
import com.constellio.app.modules.rm.wrappers.RetentionRule;
import com.constellio.app.services.factories.AppLayerFactory;
import com.constellio.model.extensions.behaviors.RecordExtension;
public class RMRecordExportExtension extends RecordExportExtension {
String collection;
AppLayerFactory appLayerFactory;
public RMRecordExportExtension(String collection, AppLayerFactory appLayerFactory) {
this.collection = collection;
this.appLayerFactory = appLayerFactory;
}
@Override
public void onWriteRecord(OnWriteRecordParams params) {
if (params.isRecordOfType(RetentionRule.SCHEMA_TYPE)) {
RMSchemasRecordsServices rm = new RMSchemasRecordsServices(collection, appLayerFactory);
RetentionRule retentionRule = rm.wrapRetentionRule(params.getRecord());
List<Map<String, String>> importedCopyRetentionRules = new ArrayList<>();
for (CopyRetentionRule copyRetentionRule : retentionRule.getCopyRetentionRules()) {
//copyRetentionRule.etc
Map<String, String> map = writeCopyRetentionRule(rm, copyRetentionRule);
importedCopyRetentionRules.add(map);
}
params.getModifiableImportRecord().addField(RetentionRule.COPY_RETENTION_RULES, importedCopyRetentionRules);
}
}
private Map<String, String> writeCopyRetentionRule(RMSchemasRecordsServices rm, CopyRetentionRule copyRetentionRule) {
Map<String, String> map = new HashMap<>();
List<String> mediumTypesCodes = new ArrayList<>();
for (String mediumTypeId : copyRetentionRule.getMediumTypeIds()) {
mediumTypesCodes.add(rm.getMediumType(mediumTypeId).getCode());
}
map.put(RetentionRuleImportExtension.CODE, copyRetentionRule.getCode());
map.put(RetentionRuleImportExtension.TITLE, copyRetentionRule.getTitle());
map.put(RetentionRuleImportExtension.COPY_TYPE, copyTypeToString(copyRetentionRule.getCopyType()));
map.put(RetentionRuleImportExtension.DESCRIPTION, copyRetentionRule.getDescription());
map.put(RetentionRuleImportExtension.CONTENT_TYPES_COMMENT, copyRetentionRule.getContentTypesComment());
map.put(RetentionRuleImportExtension.ACTIVE_RETENTION_PERIOD,
Integer.toString(copyRetentionRule.getActiveRetentionPeriod().getValue()));
map.put(RetentionRuleImportExtension.SEMI_ACTIVE_RETENTION_PERIOD_COMMENT,
copyRetentionRule.getSemiActiveRetentionComment());
map.put(RetentionRuleImportExtension.SEMI_ACTIVE_RETENTION_PERIOD,
Integer.toString(copyRetentionRule.getSemiActiveRetentionPeriod().getValue()));
map.put(RetentionRuleImportExtension.INACTIVE_DISPOSAL_COMMENT, copyRetentionRule.getInactiveDisposalComment());
map.put(RetentionRuleImportExtension.INACTIVE_DISPOSAL_TYPE, copyRetentionRule.getInactiveDisposalType().getCode());
map.put(RetentionRuleImportExtension.OPEN_ACTIVE_RETENTION_PERIOD,
Integer.toString(copyRetentionRule.getActiveRetentionPeriod().getValue()));
map.put(RetentionRuleImportExtension.REQUIRED_COPYRULE_FIELD, Boolean.toString(copyRetentionRule.isEssential()));
map.put(RetentionRuleImportExtension.COPY_RETENTION_RULE_ID, copyRetentionRule.getId());
map.put(RetentionRuleImportExtension.MEDIUM_TYPES, StringUtils.join(mediumTypesCodes, ','));
map.put(RetentionRuleImportExtension.IGNORE_ACTIVE_PERIOD, Boolean.toString(copyRetentionRule.isIgnoreActivePeriod()));
if (copyRetentionRule.getTypeId() != null) {
map.put(RetentionRuleImportExtension.TYPE_ID, rm.getFolderType(copyRetentionRule.getTypeId()).getCode());
}
return map;
}
public static String copyTypeToString(CopyType copyType) {
String copyTypeStr = "NOTHING";
if (copyType == CopyType.PRINCIPAL) {
copyTypeStr = "P";
} else if (copyType == CopyType.SECONDARY) {
copyTypeStr = "S";
}
return copyTypeStr;
}
}