package com.constellio.app.modules.rm.extensions.imports; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.app.modules.rm.wrappers.ContainerRecord; import com.constellio.app.modules.rm.wrappers.DecommissioningList; import com.constellio.app.modules.rm.wrappers.Folder; import com.constellio.app.modules.rm.wrappers.structures.Comment; import com.constellio.app.modules.rm.wrappers.structures.DecomListContainerDetail; import com.constellio.app.modules.rm.wrappers.structures.DecomListFolderDetail; import com.constellio.model.extensions.behaviors.RecordImportExtension; import com.constellio.model.extensions.events.recordsImport.BuildParams; import com.constellio.model.services.factories.ModelLayerFactory; import org.apache.commons.lang3.StringUtils; import org.joda.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Map; /** * Created by Charles Blanchette on 2017-02-17. */ public class DecommissioningListImportExtension extends RecordImportExtension { public static final String FOLDER_ID = "folderId"; public static final String FOLDER_EXCLUDED = "folderExcluded"; public static final String CONTAINER_RECORD_ID = "containerRecordId"; public static final String REVERSED_SORT = "reversedSort"; public static final String FOLDER_LINEAR_SIZE = "folderLinearSize"; public static final String BOOLEAN_FULL = "full"; public static final String MESSAGE = "message"; public static final String USER_ID = "userId"; public static final String USERNAME = "username"; public static final String DATE_TIME = "dateTime"; private final RMSchemasRecordsServices rm; public DecommissioningListImportExtension(String collection, ModelLayerFactory modelLayerFactory) { this.rm = new RMSchemasRecordsServices(collection, modelLayerFactory); } @Override public String getDecoratedSchemaType() { return DecommissioningList.SCHEMA_TYPE; } @Override public void build(BuildParams buildParams) { List<Map<String, String>> decomListFolderDetails = buildParams.getImportRecord().getList(DecommissioningList.FOLDER_DETAILS); List<Map<String, String>> decomListContainerDetails = buildParams.getImportRecord().getList(DecommissioningList.CONTAINER_DETAILS); List<Map<String, String>> decomListComments = buildParams.getImportRecord().getList(DecommissioningList.COMMENTS); DecommissioningList decommissioningList = new DecommissioningList(buildParams.getRecord(), buildParams.getTypes()); List<DecomListFolderDetail> decomListFolderDetailList = new ArrayList<>(); List<DecomListContainerDetail> decomListContainerDetailList = new ArrayList<>(); List<Comment> decomListCommentList = new ArrayList<>(); for (Map<String, String> decomListFolderDetail : decomListFolderDetails) { decomListFolderDetailList.add(buildDecomListFolderDetails(decomListFolderDetail)); } decommissioningList.setFolderDetails(decomListFolderDetailList); for (Map<String, String> decomListContainerDetail : decomListContainerDetails) { decomListContainerDetailList.add(buildDecomListContainerDetails(decomListContainerDetail)); } decommissioningList.setContainerDetails(decomListContainerDetailList); for (Map<String, String> decomListComment : decomListComments) { decomListCommentList.add(buildDecomListComments(decomListComment)); } decommissioningList.setComments(decomListCommentList); } private DecomListFolderDetail buildDecomListFolderDetails(Map<String, String> mapDecomListFolderDetail) { DecomListFolderDetail decomListFolderDetail; if (mapDecomListFolderDetail.containsKey(FOLDER_ID) && StringUtils .isNotEmpty(mapDecomListFolderDetail.get(FOLDER_ID))) { Folder folder = rm.getFolderWithLegacyId(mapDecomListFolderDetail.get(FOLDER_ID)); decomListFolderDetail = new DecomListFolderDetail(folder); } else { decomListFolderDetail = new DecomListFolderDetail(); } decomListFolderDetail.setFolderExcluded(Boolean.parseBoolean(mapDecomListFolderDetail.get(FOLDER_EXCLUDED))); decomListFolderDetail.setReversedSort(Boolean.parseBoolean(mapDecomListFolderDetail.get(REVERSED_SORT))); if (mapDecomListFolderDetail.containsKey(CONTAINER_RECORD_ID) && StringUtils .isNotEmpty(mapDecomListFolderDetail.get(CONTAINER_RECORD_ID))) { ContainerRecord containerRecord = rm.getContainerRecordWithLegacyId(mapDecomListFolderDetail.get(CONTAINER_RECORD_ID)); decomListFolderDetail.setContainerRecordId(containerRecord.getId()); } if (mapDecomListFolderDetail.get(FOLDER_LINEAR_SIZE) == null) { decomListFolderDetail.setFolderLinearSize(0.0); } else { decomListFolderDetail.setFolderLinearSize(Double.parseDouble(mapDecomListFolderDetail.get(FOLDER_LINEAR_SIZE))); } return decomListFolderDetail; } private DecomListContainerDetail buildDecomListContainerDetails(Map<String, String> mapDecomListContainerDetail) { DecomListContainerDetail decomListContainerDetail; if (mapDecomListContainerDetail.containsKey(CONTAINER_RECORD_ID) && StringUtils .isNotEmpty(mapDecomListContainerDetail.get(CONTAINER_RECORD_ID))) { ContainerRecord containerRecord = rm.getContainerRecordWithLegacyId(mapDecomListContainerDetail.get(CONTAINER_RECORD_ID)); decomListContainerDetail = new DecomListContainerDetail(containerRecord.getId()); } else { decomListContainerDetail = new DecomListContainerDetail(); } decomListContainerDetail.setFull(Boolean.parseBoolean(mapDecomListContainerDetail.get(BOOLEAN_FULL))); return decomListContainerDetail; } private Comment buildDecomListComments(Map<String, String> mapDecomListComments) { Comment comment = new Comment(); comment.setMessage(mapDecomListComments.get(MESSAGE)); comment.setDateTime(new LocalDateTime(mapDecomListComments.get(DATE_TIME))); comment.setUser(rm.newUserWithId(mapDecomListComments.get(USER_ID)).setUsername(mapDecomListComments.get(USERNAME))); return comment; } }