package com.constellio.app.ui.framework.data.trees; import static com.constellio.app.services.factories.ConstellioFactories.getInstance; import static com.constellio.model.services.search.query.ReturnedMetadatasFilter.idVersionSchemaTitlePath; import com.constellio.app.ui.application.ConstellioUI; import com.constellio.app.ui.entities.UserVO; import com.constellio.app.ui.pages.base.SessionContext; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.entities.schemas.Schemas; import com.constellio.model.entities.security.Role; import com.constellio.model.services.factories.ModelLayerFactory; import com.constellio.model.services.records.RecordServices; import com.constellio.model.services.search.StatusFilter; import com.constellio.model.services.taxonomies.FastContinueInfos; import com.constellio.model.services.taxonomies.LinkableTaxonomySearchResponse; import com.constellio.model.services.taxonomies.TaxonomiesSearchOptions; import com.constellio.model.services.users.UserServices; public class VisibleRecordTreeNodesDataProvider implements RecordTreeNodesDataProvider { String taxonomyCode; public VisibleRecordTreeNodesDataProvider(String taxonomyCode) { this.taxonomyCode = taxonomyCode; } @Override public LinkableTaxonomySearchResponse getChildrenNodes(String parentId, int start, int maxSize, FastContinueInfos infos) { ModelLayerFactory modelLayerFactory = getInstance().getModelLayerFactory(); User currentUser = getCurrentUser(modelLayerFactory); Record record = getRecord(modelLayerFactory, parentId); TaxonomiesSearchOptions taxonomiesSearchOptions = newTaxonomiesSearchOptions(maxSize, start, infos); return modelLayerFactory.newTaxonomiesSearchService() .getVisibleChildConceptResponse(currentUser, taxonomyCode, record, taxonomiesSearchOptions); } @Override public LinkableTaxonomySearchResponse getRootNodes(int start, int maxSize, FastContinueInfos infos) { ModelLayerFactory modelLayerFactory = getInstance().getModelLayerFactory(); User currentUser = getCurrentUser(modelLayerFactory); TaxonomiesSearchOptions taxonomiesSearchOptions = newTaxonomiesSearchOptions(maxSize, start, infos); return modelLayerFactory.newTaxonomiesSearchService().getVisibleRootConceptResponse( currentUser, currentUser.getCollection(), taxonomyCode, taxonomiesSearchOptions, null); } @Override public String getTaxonomyCode() { return taxonomyCode; } private TaxonomiesSearchOptions newTaxonomiesSearchOptions(int rows, int startRow, FastContinueInfos infos) { TaxonomiesSearchOptions options = new TaxonomiesSearchOptions(rows, startRow, StatusFilter.ACTIVES) .setFastContinueInfos(infos) .setReturnedMetadatasFilter(idVersionSchemaTitlePath().withIncludedMetadata(Schemas.CODE) .withIncludedMetadata(Schemas.DESCRIPTION_TEXT).withIncludedMetadata(Schemas.DESCRIPTION_STRING)); return options; } private User getCurrentUser(ModelLayerFactory modelLayerFactory) { SessionContext sessionContext = ConstellioUI.getCurrentSessionContext(); String currentCollection = sessionContext.getCurrentCollection(); UserVO currentUserVO = sessionContext.getCurrentUser(); UserServices userServices = modelLayerFactory.newUserServices(); return userServices.getUserInCollection(currentUserVO.getUsername(), currentCollection); } private Record getRecord(ModelLayerFactory modelLayerFactory, String id) { RecordServices recordServices = modelLayerFactory.newRecordServices(); return recordServices.getDocumentById(id); } }