All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.duracloud.mill.manifest.jpa.ManifestItemIteratorSource Maven / Gradle / Ivy

There is a newer version: 8.0.0
Show newest version
/*
 * The contents of this file are subject to the license and copyright
 * detailed in the LICENSE and NOTICE files at the root of the source
 * tree and available online at
 *
 *     http://duracloud.org/license/
 */
package org.duracloud.mill.manifest.jpa;

import java.util.Collection;
import java.util.List;

import org.duracloud.common.collection.IteratorSource;
import org.duracloud.mill.db.model.ManifestItem;
import org.duracloud.mill.db.repo.JpaManifestItemRepo;
import org.springframework.util.CollectionUtils;

/**
 * @author Daniel Bernstein
 */
public class ManifestItemIteratorSource implements IteratorSource {

    private JpaManifestItemRepo repo;

    private Long markerId = null;
    private String account;
    private String spaceId;
    private String storeId;
    private int pageSize;

    public ManifestItemIteratorSource(JpaManifestItemRepo repo, String account, String storeId, String spaceId,
                                      int pageSize) {
        this.repo = repo;
        this.account = account;
        this.storeId = storeId;
        this.spaceId = spaceId;
        this.pageSize = pageSize;
    }

    @Override
    public Collection getNext() {
        if (markerId == null) {
            markerId = this.repo.getMinId(this.account, this.storeId, this.spaceId) - 1;
        }

        assert markerId != null;

        List items = this.repo.findByAccountAndStoreIdAndSpaceIdAndDeletedFalse(account, storeId, spaceId,
                                                                                              markerId, pageSize);

        if (!CollectionUtils.isEmpty(items)) {
            this.markerId = items.get(items.size() - 1).getId();
            return items;
        } else {
            return null;
        }
    }
}






© 2015 - 2024 Weber Informatics LLC | Privacy Policy