package com.constellio.app.modules.rm.ui.pages.containers; import java.util.Arrays; import java.util.List; import com.constellio.app.modules.rm.constants.RMPermissionsTo; import com.constellio.app.modules.rm.model.enums.DecommissioningType; import com.constellio.app.modules.rm.navigation.RMViews; import com.constellio.app.modules.rm.services.decommissioning.DecommissioningSearchConditionFactory; import com.constellio.app.modules.rm.services.decommissioning.DecommissioningSearchConditionFactory.ContainerSearchParameters; import com.constellio.app.modules.rm.services.decommissioning.DecommissioningService; import com.constellio.app.modules.rm.wrappers.AdministrativeUnit; import com.constellio.app.modules.rm.wrappers.ContainerRecord; import com.constellio.app.ui.entities.MetadataSchemaVO; import com.constellio.app.ui.entities.RecordVO; import com.constellio.app.ui.entities.RecordVO.VIEW_MODE; import com.constellio.app.ui.framework.builders.MetadataSchemaToVOBuilder; import com.constellio.app.ui.framework.builders.RecordToVOBuilder; import com.constellio.app.ui.framework.data.RecordVODataProvider; import com.constellio.app.ui.pages.base.BasePresenter; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.entities.schemas.MetadataSchema; import com.constellio.model.entities.schemas.Schemas; import com.constellio.model.services.search.query.logical.LogicalSearchQuery; import com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators; import com.constellio.model.services.search.query.logical.condition.LogicalSearchCondition; public class ContainersInAdministrativeUnitPresenter extends BasePresenter<ContainersInAdministrativeUnitView> { public static final String DEPOSIT_PREFIX = "deposit"; public static final String TRANSFER_PREFIX = "transfer"; public static final String WITH_STORAGE_SPACE_SUFFIX = "WithStorageSpace"; String adminUnitId; String tabName; public ContainersInAdministrativeUnitPresenter(ContainersInAdministrativeUnitView view) { super(view); } public RecordVODataProvider getChildrenAdminUnitsDataProvider() { final MetadataSchemaVO schemaVO = new MetadataSchemaToVOBuilder() .build(schema(AdministrativeUnit.DEFAULT_SCHEMA), VIEW_MODE.TABLE, view.getSessionContext()); RecordVODataProvider dataProvider = new RecordVODataProvider(schemaVO, new RecordToVOBuilder(), modelLayerFactory, view.getSessionContext()) { @Override protected LogicalSearchQuery getQuery() { User user = presenterService().getCurrentUser(view.getSessionContext()); DecommissioningService service = new DecommissioningService( view.getCollection(), appLayerFactory); List<String> visibleAdminUnitsId = service.getChildrenAdministrativeUnit(adminUnitId, user); MetadataSchema schema = schema(schemaVO.getCode()); LogicalSearchCondition condition; if (!visibleAdminUnitsId.isEmpty()) { condition = LogicalSearchQueryOperators.from(schema) .where(schema.getMetadata(AdministrativeUnit.PARENT)).isEqualTo(adminUnitId); } else { condition = LogicalSearchQueryOperators.from(schema).where(Schemas.TOKENS).isContaining(Arrays.asList("A38")); } return new LogicalSearchQuery(condition); } }; return dataProvider; } public RecordVODataProvider getContainersDataProvider() { MetadataSchemaVO schemaVO = new MetadataSchemaToVOBuilder() .build(schema(ContainerRecord.DEFAULT_SCHEMA), VIEW_MODE.TABLE, view.getSessionContext()); RecordVODataProvider dataProvider = new RecordVODataProvider(schemaVO, new RecordToVOBuilder(), modelLayerFactory, view.getSessionContext()) { @Override protected LogicalSearchQuery getQuery() { DecommissioningSearchConditionFactory conditionFactory = new DecommissioningSearchConditionFactory( view.getCollection(), appLayerFactory); ContainerSearchParameters parameters = new ContainerSearchParameters(); parameters.setAdminUnitId(adminUnitId); if (tabName.startsWith(DEPOSIT_PREFIX)) { parameters.setType(DecommissioningType.DEPOSIT); } else if (tabName.startsWith(TRANSFER_PREFIX)) { parameters.setType(DecommissioningType.TRANSFERT_TO_SEMI_ACTIVE); } parameters.setUserId(view.getSessionContext().getCurrentUser().getId()); parameters.setWithStorage(tabName.endsWith(WITH_STORAGE_SPACE_SUFFIX)); return new LogicalSearchQuery(conditionFactory.getVisibleContainersCondition(parameters)); } }; return dataProvider; } public RecordVO getAdministrativeUnit() { return new RecordToVOBuilder() .build(recordServices().getDocumentById(adminUnitId), VIEW_MODE.DISPLAY, view.getSessionContext()); } public void forParams(String params) { String[] splitParams = params.split("/"); tabName = splitParams[0]; adminUnitId = splitParams[1]; } @Override protected boolean hasPageAccess(String params, User user) { return user.has(RMPermissionsTo.MANAGE_CONTAINERS).globally(); } public void displayAdminUnitButtonClicked(String tabName, RecordVO adminUnit) { view.navigate().to(RMViews.class).displayAdminUnitWithContainers(tabName, adminUnit.getId()); } public void displayFilingSpaceButtonClicked(String tabName, RecordVO filingSpace) { view.navigate().to(RMViews.class).displayFilingSpaceWithContainers(tabName, adminUnitId, filingSpace.getId()); } public void displayContainerButtonClicked(RecordVO container) { view.navigate().to(RMViews.class).displayContainer(container.getId()); } }