package com.constellio.app.ui.pages.management.facet; import static com.constellio.app.ui.i18n.i18n.$; 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.pages.base.BasePresenter; import com.constellio.app.ui.pages.base.SchemaPresenterUtils; import com.constellio.data.utils.ImpossibleRuntimeException; 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.entities.records.wrappers.structure.FacetType; import com.constellio.model.entities.structures.MapStringStringStructure; public class DisplayFacetConfigurationPresenter extends BasePresenter<DisplayFacetConfigurationView> { private RecordVO displayRecordVO; private RecordVO recordVO; FacetConfigurationPresenterService service; public DisplayFacetConfigurationPresenter(DisplayFacetConfigurationView 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 deleteButtonClicked() { Record record = recordServices().getDocumentById(recordVO.getId()); recordServices().logicallyDelete(record, User.GOD); recordServices().physicallyDelete(record, User.GOD); view.navigate().to().listFacetConfiguration(); } public void editButtonClicked() { view.navigate().to().editFacetConfiguration(displayRecordVO.getId()); } public void setDisplayRecordVO(String id) { Record record = recordServices().getDocumentById(id); List<String> metadatas = new ArrayList<>(); metadatas.add(Facet.TITLE); metadatas.add(Facet.FACET_TYPE); metadatas.add(Facet.ORDER_RESULT); metadatas.add(Facet.FIELD_VALUES_LABEL); metadatas.add(Facet.LIST_QUERIES); final MetadataSchemaVO facetDefaultVO = new MetadataSchemaToVOBuilder().build(schema(Facet.DEFAULT_SCHEMA), VIEW_MODE.TABLE, metadatas, view.getSessionContext()); displayRecordVO = new RecordToVOBuilder().build(record, VIEW_MODE.DISPLAY, facetDefaultVO, view.getSessionContext()); recordVO = new RecordToVOBuilder().build(record, VIEW_MODE.DISPLAY, view.getSessionContext()); } public RecordVO getDisplayRecordVO() { return displayRecordVO; } public MapStringStringStructure getValues() { FacetType type = recordVO.get(Facet.FACET_TYPE); switch (type) { case FIELD: return recordVO.get(Facet.FIELD_VALUES_LABEL); case QUERY: return recordVO.get(Facet.LIST_QUERIES); default: throw new ImpossibleRuntimeException("Unknown type"); } } public String getTypePostfix() { FacetType type = recordVO.get(Facet.FACET_TYPE); return type.getCode(); } public void backButtonClicked() { view.navigate().to().listFacetConfiguration(); } public Record toRecord(RecordVO recordVO) { SchemaPresenterUtils schemaPresenterUtils = new SchemaPresenterUtils(recordVO.getSchema().getCode(), view.getConstellioFactories(), view.getSessionContext()); return schemaPresenterUtils.toRecord(recordVO); } public void activate() { try { service.activate(recordVO.getId()); view.navigate().to().displayFacetConfiguration(recordVO.getId()); } catch (Exception e) { view.showErrorMessage($("DisplayFacetConfiguration.cannotActivateFacet", recordVO.getTitle())); } } public void deactivate() { try { service.deactivate(recordVO.getId()); view.navigate().to().displayFacetConfiguration(recordVO.getId()); } catch (Exception e) { view.showErrorMessage($("DisplayFacetConfiguration.cannotDeactivateFacet", recordVO.getTitle())); } } public boolean isActive() { return service.isActive(recordVO); } }