package com.constellio.app.modules.rm.reports.model.decommissioning; import static com.constellio.app.ui.i18n.i18n.$; import java.util.ArrayList; import java.util.List; import com.constellio.app.modules.rm.wrappers.*; import com.constellio.app.modules.rm.wrappers.structures.DecomListFolderDetail; import org.slf4j.LoggerFactory; import com.constellio.app.modules.rm.reports.model.decommissioning.DecommissioningListReportModel.DecommissioningListReportModel_Folder; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.model.conf.FoldersLocator; import com.constellio.model.entities.schemas.MetadataSchemaType; import com.constellio.model.entities.schemas.Schemas; import com.constellio.model.services.factories.ModelLayerFactory; import com.constellio.model.services.search.SearchServices; import com.constellio.model.services.search.query.logical.LogicalSearchQuery; import com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators; public class DecommissioningListReportPresenter { private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(DecommissioningListReportPresenter.class); private String collection; private ModelLayerFactory modelLayerFactory; private SearchServices searchServices; private String decommissioningListId; private RMSchemasRecordsServices rm; public DecommissioningListReportPresenter(String collection, ModelLayerFactory modelLayerFactory, String decommissioningListId) { this.collection = collection; this.modelLayerFactory = modelLayerFactory; this.decommissioningListId = decommissioningListId; this.rm = new RMSchemasRecordsServices(collection, modelLayerFactory); this.searchServices = modelLayerFactory.newSearchServices(); } public DecommissioningListReportModel build() { DecommissioningListReportModel model = new DecommissioningListReportModel(); MetadataSchemaType folderSchemaType = rm.folder.schemaType(); DecommissioningList decommissioningList = rm.getDecommissioningList(decommissioningListId); LogicalSearchQuery foldersQuery = new LogicalSearchQuery() .setCondition(LogicalSearchQueryOperators.from(folderSchemaType) .where(Schemas.IDENTIFIER) .isIn(decommissioningList.getFolders())) .sortAsc(Schemas.CODE); List<Folder> folders = rm.wrapFolders(searchServices.search(foldersQuery)); List<DecommissioningListReportModel_Folder> foldersModel = new ArrayList<>(); int currentFolder = 0; for (Folder folder : folders) { Category category = rm.getCategory(folder.getCategory()); RetentionRule retentionRule = rm.getRetentionRule(folder.getRetentionRule()); String categoryCodeTitle = category.getCode() + " - " + category.getTitle(); String retentionRuleCodeTitle = retentionRule.getCode() + " - " + retentionRule.getTitle(); String containerRecordId = decommissioningList.getFolderDetails().get(currentFolder).getContainerRecordId(); String containerRecordTitle = ""; if(containerRecordId != null){ ContainerRecord containerRecord = rm.getContainerRecord(containerRecordId); containerRecordTitle = containerRecord.getTitle(); } DecommissioningListReportModel_Folder folderModel = new DecommissioningListReportModel_Folder(folder.getId(), folder.getTitle(), retentionRuleCodeTitle, categoryCodeTitle, containerRecordTitle); foldersModel.add(folderModel); currentFolder++; } String decommissioningListType = $( "DecommissioningListType." + decommissioningList.getDecommissioningListType().getCode()); AdministrativeUnit administrativeUnit = rm.getAdministrativeUnit( decommissioningList.getAdministrativeUnit()); String administrativeUnitCode = administrativeUnit.getCode(); String administrativeUnitTitle = administrativeUnit.getTitle(); model.setDecommissioningListTitle(decommissioningList.getTitle()); model.setDecommissioningListType(decommissioningListType); model.setDecommissioningListAdministrativeUnitCodeAndTitle(administrativeUnitCode + " - " + administrativeUnitTitle); model.setFolders(foldersModel); return model; } public FoldersLocator getFoldersLocator() { return modelLayerFactory.getFoldersLocator(); } }