package com.constellio.app.modules.rm.extensions.imports;
import java.util.HashMap;
import java.util.Map;
import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import com.constellio.app.modules.rm.model.CopyRetentionRule;
import com.constellio.app.modules.rm.services.RMSchemasRecordsServices;
import com.constellio.app.modules.rm.wrappers.Folder;
import com.constellio.app.modules.rm.wrappers.RetentionRule;
import com.constellio.model.entities.schemas.Schemas;
import com.constellio.model.extensions.behaviors.RecordImportExtension;
import com.constellio.model.extensions.events.recordsImport.BuildParams;
import com.constellio.model.services.factories.ModelLayerFactory;
public class FolderRuleImportExtension extends RecordImportExtension {
RMSchemasRecordsServices rm;
public FolderRuleImportExtension(String collection, ModelLayerFactory modelLayerFactory) {
this.rm = new RMSchemasRecordsServices(collection, modelLayerFactory);
}
@Override
public String getDecoratedSchemaType() {
return Folder.SCHEMA_TYPE;
}
@Override
public void build(BuildParams event) {
Map<String, Object> fields = event.getImportRecord().getFields();
Folder folder = rm.wrapFolder(event.getRecord());
ajustCreationModificationDates(fields, folder);
setEnteredMainCopyId(folder);
ajusteManualDepositAndDestructionDates(folder);
}
private void ajusteManualDepositAndDestructionDates(Folder folder) {
LocalDate manualExpectedDeposit = folder.getManualExpectedDepositDate();
LocalDate manualExpectedDestruction = folder.getManualExpectedDestructionDate();
LocalDate actualTransfer = folder.getActualTransferDate();
LocalDate manualExpectedTransfer = folder.getManualExpecteTransferdDate();
Map<String, Object> errorParams = new HashMap<>();
errorParams.put("idTitle", folder.getId() + "-" + folder.getTitle());
if (manualExpectedDeposit != null && actualTransfer != null && manualExpectedDeposit.isBefore(actualTransfer)) {
folder.setManualExpectedDepositDate(null);
}
if (manualExpectedDeposit != null && manualExpectedTransfer != null
&& manualExpectedDeposit.isBefore(manualExpectedTransfer)) {
folder.setManualExpectedDepositDate(null);
}
if (manualExpectedDestruction != null && actualTransfer != null
&& manualExpectedDestruction.isBefore(actualTransfer)) {
folder.setManualExpectedDestructionDate(null);
}
if (manualExpectedDestruction != null && manualExpectedTransfer != null
&& manualExpectedDestruction.isBefore(manualExpectedTransfer)) {
folder.setManualExpectedDestructionDate(null);
}
}
private void setEnteredMainCopyId(Folder folder) {
String enteredMainCopyId = folder.getMainCopyRuleIdEntered();
if (enteredMainCopyId != null && folder.getRetentionRuleEntered() != null) {
RetentionRule rule = rm.getRetentionRule(folder.getRetentionRuleEntered());
String validId = null;
for (CopyRetentionRule copy : rule.getCopyRetentionRules()) {
if (copy.getId().equals(enteredMainCopyId) || (copy.getCode() != null && copy.getCode()
.equals(enteredMainCopyId))) {
validId = copy.getId();
break;
}
}
folder.setMainCopyRuleEntered(validId);
}
}
private void ajustCreationModificationDates(Map<String, Object> fields, Folder folder) {
if (folder.getFormCreatedBy() == null) {
String createdBy = (String) fields.get(Schemas.CREATED_BY.getLocalCode());
if (createdBy != null) {
folder.setFormCreatedBy(folder.getCreatedBy());
}
}
if (folder.getFormCreatedOn() == null) {
LocalDateTime createdOn = (LocalDateTime) fields.get(Schemas.CREATED_ON.getLocalCode());
folder.setFormCreatedOn(createdOn);
}
if (folder.getFormModifiedBy() == null) {
String modifiedBy = (String) fields.get(Schemas.MODIFIED_BY.getLocalCode());
if (modifiedBy != null) {
folder.setFormModifiedBy(folder.getModifiedBy());
}
}
if (folder.getFormModifiedOn() == null) {
LocalDateTime modifiedOn = (LocalDateTime) fields.get(Schemas.MODIFIED_ON.getLocalCode());
folder.setFormModifiedOn(modifiedOn);
}
}
}