package com.constellio.app.ui.pages.management.facet;
import static com.constellio.app.ui.i18n.i18n.$;
import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.from;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
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.app.ui.pages.base.SchemaPresenterUtils;
import com.constellio.model.entities.CorePermissions;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.records.wrappers.Facet;
import com.constellio.model.entities.records.wrappers.User;
import com.constellio.model.services.records.RecordServicesRuntimeException.RecordServicesRuntimeException_CannotPhysicallyDeleteRecord;
import com.constellio.model.services.records.SchemasRecordsServices;
import com.constellio.model.services.search.query.logical.LogicalSearchQuery;
public class ListFacetConfigurationPresenter extends BasePresenter<ListFacetConfigurationView> {
private FacetConfigurationPresenterService service;
public ListFacetConfigurationPresenter(ListFacetConfigurationView view) {
super(view);
init();
}
private void readObject(java.io.ObjectInputStream stream)
throws IOException, ClassNotFoundException {
stream.defaultReadObject();
init();
}
private void init() {
service = new FacetConfigurationPresenterService(view.getConstellioFactories(), view.getSessionContext());
}
@Override
protected boolean hasPageAccess(String params, User user) {
return user.has(CorePermissions.MANAGE_FACETS).globally();
}
public void addButtonClicked() {
view.navigate().to().addFacetConfiguration();
}
public void orderButtonClicked() {
view.navigate().to().orderFacetConfiguration();
}
public void displayButtonClicked(RecordVO recordVO) {
view.navigate().to().displayFacetConfiguration(recordVO.getId());
}
public void deleteButtonClicked(RecordVO recordVO) {
Record record = recordServices().getDocumentById(recordVO.getId());
recordServices().logicallyDelete(record, User.GOD);
try {
recordServices().physicallyDelete(record, User.GOD);
} catch (RecordServicesRuntimeException_CannotPhysicallyDeleteRecord e) {
recordServices().restore(record, User.GOD);
throw new RuntimeException(e);
}
view.navigate().to().listFacetConfiguration();
}
public void editButtonClicked(RecordVO recordVO) {
view.navigate().to().editFacetConfiguration(recordVO.getId());
}
public RecordVODataProvider getDataProvider() {
List<String> metadatas = new ArrayList<>();
metadatas.add(Facet.TITLE);
metadatas.add(Facet.FACET_TYPE);
metadatas.add(Facet.ORDER_RESULT);
final MetadataSchemaVO facetDefaultVO = new MetadataSchemaToVOBuilder().build(schema(Facet.DEFAULT_SCHEMA),
VIEW_MODE.TABLE, metadatas, view.getSessionContext());
return new RecordVODataProvider(facetDefaultVO, new RecordToVOBuilder(), modelLayerFactory, view.getSessionContext()) {
@Override
protected LogicalSearchQuery getQuery() {
SchemasRecordsServices schemasRecords = new SchemasRecordsServices(collection, modelLayerFactory);
LogicalSearchQuery query = new LogicalSearchQuery();
query.setCondition(from(schemasRecords.facetSchemaType()).returnAll())
.sortAsc(schemasRecords.defaultFacet().get(Facet.ORDER));
return query;
}
};
}
public Record toRecord(RecordVO recordVO) {
SchemaPresenterUtils schemaPresenterUtils = new SchemaPresenterUtils(recordVO.getSchema().getCode(),
view.getConstellioFactories(), view.getSessionContext());
return schemaPresenterUtils.toRecord(recordVO);
}
public void activate(RecordVO recordVO) {
try {
service.activate(recordVO.getId());
view.refreshTable();
} catch (Exception e) {
view.showErrorMessage($("ListFacetConfigurationView.cannotActivateFacet", recordVO.getTitle()));
}
}
public void deactivate(RecordVO recordVO) {
try {
service.deactivate(recordVO.getId());
view.refreshTable();
} catch (Exception e) {
view.showErrorMessage($("ListFacetConfigurationView.cannotDeactivateFacet", recordVO.getTitle()));
}
}
public boolean isActive(RecordVO recordVO) {
return service.isActive(recordVO);
}
public void backButtonClicked() {
view.navigate().to().adminModule();
}
}