package com.constellio.app.ui.pages.search.savedSearch; import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.from; 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.app.ui.pages.search.AdvancedSearchView; import com.constellio.app.ui.pages.search.SimpleSearchView; import com.constellio.model.entities.records.wrappers.SavedSearch; 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; public class SavedSearchPresenter extends SingleSchemaBasePresenter<SavedSearchView> { public SavedSearchPresenter(SavedSearchView view) { super(view, SavedSearch.DEFAULT_SCHEMA); } @Override protected boolean hasPageAccess(String params, User user) { return true; } public RecordVODataProvider getUserSearchesDataProvider() { return new RecordVODataProvider(savedSearchSchemaVO(), new RecordToVOBuilder(), modelLayerFactory, view.getSessionContext()) { @Override protected LogicalSearchQuery getQuery() { MetadataSchema schema = schema(SavedSearch.DEFAULT_SCHEMA); return new LogicalSearchQuery(from(schema) .where(schema.getMetadata(SavedSearch.USER)).isEqualTo(getCurrentUser()) .andWhere(schema.getMetadata(SavedSearch.TEMPORARY)).isFalseOrNull()) .sortAsc(Schemas.TITLE); } }; } public RecordVODataProvider getPublicSearchesDataProvider() { return new RecordVODataProvider(savedSearchSchemaVO(), new RecordToVOBuilder(), modelLayerFactory, view.getSessionContext()) { @Override protected LogicalSearchQuery getQuery() { MetadataSchema schema = schema(SavedSearch.DEFAULT_SCHEMA); return new LogicalSearchQuery(from(schema) .where(schema.getMetadata(SavedSearch.PUBLIC)).isTrue() .andWhere(schema.getMetadata(SavedSearch.USER)).isNotEqual(getCurrentUser()) .andWhere(schema.getMetadata(SavedSearch.TEMPORARY)).isFalseOrNull()) .sortAsc(Schemas.TITLE); } }; } private MetadataSchemaVO savedSearchSchemaVO() { return new MetadataSchemaToVOBuilder() .build(schema(SavedSearch.DEFAULT_SCHEMA), VIEW_MODE.TABLE, view.getSessionContext()); } public void searchModificationRequested(RecordVO recordVO) { SavedSearch savedSearch = new SavedSearch(getRecord(recordVO.getId()), types()); savedSearch.setTitle(recordVO.getTitle()); savedSearch.setPublic((boolean) recordVO.get(SavedSearch.PUBLIC)); addOrUpdate(savedSearch.getWrappedRecord()); view.navigate().to().listSavedSearches(); } public void deleteButtonClicked(RecordVO recordVO) { delete(getRecord(recordVO.getId())); view.navigate().to().listSavedSearches(); } public void searchButtonClicked(RecordVO recordVO) { switch (recordVO.<String>get(SavedSearch.SEARCH_TYPE)) { case SimpleSearchView.SEARCH_TYPE: view.navigate().to().simpleSearchReplay(recordVO.getId()); break; case AdvancedSearchView.SEARCH_TYPE: view.navigate().to().advancedSearchReplay(recordVO.getId()); break; } } }