package com.constellio.app.modules.rm.ui.pages.retentionRule;
import static com.constellio.app.ui.i18n.i18n.$;
import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.from;
import com.constellio.app.modules.rm.navigation.RMViews;
import com.constellio.app.modules.rm.constants.RMPermissionsTo;
import com.constellio.app.modules.rm.wrappers.RetentionRule;
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.SingleSchemaBasePresenter;
import com.constellio.model.entities.records.Record;
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.records.RecordServices;
import com.constellio.model.services.search.StatusFilter;
import com.constellio.model.services.search.query.logical.LogicalSearchQuery;
public class SearchRetentionRulesPresenter extends SingleSchemaBasePresenter<SearchRetentionRulesView> {
private RecordToVOBuilder voBuilder = new RecordToVOBuilder();
private MetadataSchemaVO schemaVO;
private String queryExpression;
private RecordVODataProvider dataProvider;
public SearchRetentionRulesPresenter(SearchRetentionRulesView view) {
super(view, RetentionRule.DEFAULT_SCHEMA);
schemaVO = new MetadataSchemaToVOBuilder().build(defaultSchema(), VIEW_MODE.TABLE, view.getSessionContext());
}
public void forParams(String parameters) {
String[] splitParams = parameters.split("/");
queryExpression = splitParams[0];
}
public void viewAssembled() {
dataProvider = new RecordVODataProvider(schemaVO, voBuilder, modelLayerFactory, view.getSessionContext()) {
@Override
protected LogicalSearchQuery getQuery() {
MetadataSchema schema = defaultSchema();
return new LogicalSearchQuery(from(schema).returnAll())
.filteredByStatus(StatusFilter.ACTIVES)
.setFreeTextQuery(queryExpression)
.sortAsc(schema.getMetadata(RetentionRule.CODE));
}
};
view.setDataProvider(dataProvider);
}
public void backButtonClicked() {
view.navigate().to(RMViews.class).listRetentionRules();
}
public void displayButtonClicked(RecordVO recordVO) {
view.navigate().to(RMViews.class).displayRetentionRule(recordVO.getId());
}
public void editButtonClicked(RecordVO recordVO) {
view.navigate().to(RMViews.class).editRetentionRule(recordVO.getId());
}
public void deleteButtonClicked(RecordVO recordVO) {
if (isDeletable(recordVO)) {
Record record = getRecord(recordVO.getId());
delete(record, false);
view.navigate().to(RMViews.class).listRetentionRules();
} else {
view.showErrorMessage($("ListRetentionRulesView.cannotDelete"));
}
}
@Override
protected boolean hasPageAccess(String params, User user) {
return user.has(RMPermissionsTo.MANAGE_RETENTIONRULE).globally();
}
@Override
public boolean isDeletable(RecordVO entity) {
RecordServices recordService = modelLayerFactory.newRecordServices();
Record record = getRecord(entity.getId());
User user = getCurrentUser();
return recordService.isLogicallyDeletable(record, user);
}
public String getDefaultOrderField() {
return Schemas.CODE.getLocalCode();
}
public void search(String freeText) {
view.navigate().to(RMViews.class).retentionRuleSearch(freeText);
}
public String getQueryExpression() {
return queryExpression;
}
public RecordVODataProvider getDataProvider() {
return dataProvider;
}
}