package com.constellio.app.modules.rm.ui.pages.containers;
import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.from;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.constellio.app.modules.rm.navigation.RMViews;
import com.constellio.app.modules.rm.services.decommissioning.DecommissioningSecurityService;
import com.constellio.app.modules.rm.ui.pages.containers.ContainersByAdministrativeUnitsView.ContainersViewTab;
import com.constellio.app.modules.rm.wrappers.AdministrativeUnit;
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.Schemas;
import com.constellio.model.services.search.query.logical.LogicalSearchQuery;
public class ContainersByAdministrativeUnitsPresenter extends BasePresenter<ContainersByAdministrativeUnitsView> {
public static final String TAB_TRANSFER_NO_STORAGE_SPACE = "transferNoStorageSpace";
public static final String TAB_DEPOSIT_NO_STORAGE_SPACE = "depositNoStorageSpace";
public static final String TAB_TRANSFER_WITH_STORAGE_SPACE = "transferWithStorageSpace";
public static final String TAB_DEPOSIT_WITH_STORAGE_SPACE = "depositWithStorageSpace";
private ContainersViewTab transferNoStorageSpace;
private ContainersViewTab depositNoStorageSpace;
private ContainersViewTab transferWithStorageSpace;
private ContainersViewTab depositWithStorageSpace;
private List<ContainersViewTab> tabs;
public ContainersByAdministrativeUnitsPresenter(ContainersByAdministrativeUnitsView view) {
super(view);
init();
}
public void init() {
transferNoStorageSpace = new ContainersViewTab(
TAB_TRANSFER_NO_STORAGE_SPACE,
getDataProvider());
depositNoStorageSpace = new ContainersViewTab(
TAB_DEPOSIT_NO_STORAGE_SPACE,
getDataProvider());
transferWithStorageSpace = new ContainersViewTab(
TAB_TRANSFER_WITH_STORAGE_SPACE,
getDataProvider());
depositWithStorageSpace = new ContainersViewTab(
TAB_DEPOSIT_WITH_STORAGE_SPACE,
getDataProvider());
tabs = Arrays.asList(transferNoStorageSpace, depositNoStorageSpace, transferWithStorageSpace, depositWithStorageSpace);
}
RecordVODataProvider getDataProvider() {
List<String> metadataCodes = new ArrayList<String>();
metadataCodes.add(AdministrativeUnit.DEFAULT_SCHEMA + "_id");
metadataCodes.add(AdministrativeUnit.DEFAULT_SCHEMA + "_code");
metadataCodes.add(AdministrativeUnit.DEFAULT_SCHEMA + "_title");
MetadataSchemaVO schemaVO = new MetadataSchemaToVOBuilder()
.build(schema(AdministrativeUnit.DEFAULT_SCHEMA), VIEW_MODE.TABLE, metadataCodes, view.getSessionContext());
RecordToVOBuilder voBuilder = new RecordToVOBuilder();
RecordVODataProvider dataProvider = new RecordVODataProvider(schemaVO, voBuilder, modelLayerFactory,
view.getSessionContext()) {
@Override
protected LogicalSearchQuery getQuery() {
return new LogicalSearchQuery(from(schema(AdministrativeUnit.DEFAULT_SCHEMA))
.where(schema(AdministrativeUnit.DEFAULT_SCHEMA).getMetadata(AdministrativeUnit.PARENT)).isNull()
.andWhere(
Schemas.LOGICALLY_DELETED_STATUS).isFalseOrNull());
}
};
return dataProvider;
}
public void forParams(String params) {
if (view.getTabs().isEmpty()) {
view.setTabs(tabs);
}
String tabName = params;
ContainersViewTab initialTab;
if (TAB_TRANSFER_NO_STORAGE_SPACE.equals(tabName)) {
initialTab = transferNoStorageSpace;
} else if (TAB_DEPOSIT_NO_STORAGE_SPACE.equals(tabName)) {
initialTab = depositNoStorageSpace;
} else if (TAB_TRANSFER_WITH_STORAGE_SPACE.equals(tabName)) {
initialTab = transferWithStorageSpace;
} else if (TAB_DEPOSIT_WITH_STORAGE_SPACE.equals(tabName)) {
initialTab = depositWithStorageSpace;
} else {
initialTab = null;
}
if (initialTab != null) {
view.selectTab(initialTab);
}
}
@Override
protected boolean hasPageAccess(String params, User user) {
DecommissioningSecurityService securityServices = new DecommissioningSecurityService(collection, appLayerFactory);
return securityServices.hasAccessToManageContainersPage(user);
}
public void displayButtonClicked(String tabName, RecordVO entity) {
view.navigate().to(RMViews.class).displayAdminUnitWithContainers(tabName, entity.getId());
}
public void backButtonClicked() {
view.navigate().to(RMViews.class).archiveManagement();
}
}