@Override public List<CollectionInfo> getAllCollectionsInfo(long organisationId) { int pageNo = 0; List<CollectionInfo> result = new ArrayList<CollectionInfo>(); Page<CollectionInfo> collectionsPage = null; OrganisationCollectionsQuery query = new OrganisationCollectionsQuery(); query.setPageSize(Integer.parseInt(DEFAULT_PAGE_SIZE)); query.setOrganisationId(organisationId); do { query.setPageNo(pageNo); collectionsPage = licensingService.fetchOrganisationCollections(query); result.addAll(collectionsPage.getResult()); pageNo++; } while (pageNo < collectionsPage.getTotalPages()); return result; }
@Override protected List<Predicate> getPredicates(Root<PersistableGroupTimePeriod> root, CriteriaBuilder cb) { Path<Long> organisationId = root.get("organisation").get("id"); Predicate orgIdEq = cb.equal(organisationId, query.getOrganisationId()); return Arrays.asList(orgIdEq); }
@Override protected Predicate getIdPredicate(Root<PersistableGroupTimePeriod> root, CriteriaBuilder cb) { Join<PersistableGroupTimePeriod, PersistableOrganisationGroup> group = root.join("organisationGroup"); Join<PersistableOrganisationGroup, PersistableCollection> collection = group.join("collections"); Path<Long> collectionId = collection.get("id"); return cb.equal(collectionId, query.getId()); }
@Override public List<GroupTimePeriod> getOrganisationCollectionTimePeriods(long organisationId, long collectionId) { int pageNo = 0; List<GroupTimePeriod> result = new ArrayList<GroupTimePeriod>(); Page<GroupTimePeriod> collectionsPage = null; OrganisationCollectionsQuery query = new OrganisationCollectionsQuery(); query.setPageSize(Integer.parseInt(DEFAULT_PAGE_SIZE)); query.setOrganisationId(organisationId); query.setId(collectionId); do { query.setPageNo(pageNo); collectionsPage = licensingService.fetchOrganisationCollectionTimePeriods(query); result.addAll(collectionsPage.getResult()); pageNo++; } while (pageNo < collectionsPage.getTotalPages()); Collections.sort(result, new Comparator<GroupTimePeriod>() { @Override public int compare(GroupTimePeriod o1, GroupTimePeriod o2) { if (o1.getDateTo() == null || o2.getDateTo() == null) { return 0; } return o1.getDateTo().compareTo(o2.getDateTo()); } }); return result; }
@Override protected List<Predicate> getPredicates(Root<PersistableCollection> root, CriteriaBuilder cb) { Join<PersistableCollection, PersistableOrganisationGroup> group = root.join("organisationGroups"); Join<PersistableCollection, PersistableGroupTimePeriod> period = group.join("periods"); Path<Long> organisationId = period.get("organisation").get("id"); List<Predicate> predicates = Arrays.asList(cb.equal(organisationId, query.getOrganisationId())); return predicates; }
@Override public Page<CollectionInfo> fetchOrganisationCollections(OrganisationCollectionsQuery query) { PageRequest pageRequest = queryTransform.apply(query); org.springframework.data.domain.Page<PersistableCollection> collectionPage = collectionRepository.findAll(new OrganisationCollectionsSpecification(query), pageRequest); CollectionToCollectionInfoFunction function = (CollectionToCollectionInfoFunction) context.getBean("collectionToCollectionInfoFunction", query.getOrganisationId()); PageToPageFunction<PersistableCollection, CollectionInfo> pageMapping = new PageToPageFunction<PersistableCollection, CollectionInfo>(function); return pageMapping.apply(collectionPage); }