CMSgov/dpc-app

View on GitHub
dpc-api/src/main/java/gov/cms/dpc/api/jdbi/PublicKeyDAO.java

Summary

Maintainability
A
55 mins
Test Coverage
F
6%
package gov.cms.dpc.api.jdbi;

import gov.cms.dpc.api.entities.PublicKeyEntity;
import gov.cms.dpc.api.entities.PublicKeyEntity_;
import gov.cms.dpc.common.hibernate.auth.DPCAuthManagedSessionFactory;
import io.dropwizard.hibernate.AbstractDAO;

import javax.inject.Inject;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import java.util.List;
import java.util.Optional;
import java.util.UUID;

public class PublicKeyDAO extends AbstractDAO<PublicKeyEntity> {

    @Inject
    PublicKeyDAO(DPCAuthManagedSessionFactory factory) {
        super(factory.getSessionFactory());
    }

    public PublicKeyEntity persistPublicKey(PublicKeyEntity entity) {
        return persist(entity);
    }

    public List<PublicKeyEntity> fetchPublicKeys(UUID organizationID) {
        final CriteriaBuilder builder = currentSession().getCriteriaBuilder();
        final CriteriaQuery<PublicKeyEntity> query = builder.createQuery(PublicKeyEntity.class);
        final Root<PublicKeyEntity> root = query.from(PublicKeyEntity.class);

        query.where(builder.equal(root.get(PublicKeyEntity_.organization_id), organizationID));
        return list(query);
    }

    public Optional<PublicKeyEntity> fetchPublicKey(UUID organizationID, UUID keyID) {

        final CriteriaBuilder builder = currentSession().getCriteriaBuilder();
        final CriteriaQuery<PublicKeyEntity> query = builder.createQuery(PublicKeyEntity.class);
        final Root<PublicKeyEntity> root = query.from(PublicKeyEntity.class);

        query.where(builder.and(builder.equal(root.get(PublicKeyEntity_.organization_id), organizationID),
                builder.equal(root.get(PublicKeyEntity_.id), keyID)));

        final List<PublicKeyEntity> resultList = list(query);

        if (resultList.isEmpty()) {
            return Optional.empty();
        }

        return Optional.of(resultList.get(0));
    }

    public void deletePublicKey(PublicKeyEntity keyEntity) {
        currentSession().delete(keyEntity);
    }

    public PublicKeyEntity findKeyByLabel(String keyLabel) {
        final CriteriaBuilder builder = currentSession().getCriteriaBuilder();
        final CriteriaQuery<PublicKeyEntity> query = builder.createQuery(PublicKeyEntity.class);
        final Root<PublicKeyEntity> root = query.from(PublicKeyEntity.class);

        query.where(builder.equal(root.get(PublicKeyEntity_.label), keyLabel));
        return currentSession().createQuery(query).getSingleResult();
    }

    public List<PublicKeyEntity> publicKeySearch(UUID keyID, UUID organizationID) {
        final CriteriaBuilder builder = currentSession().getCriteriaBuilder();
        final CriteriaQuery<PublicKeyEntity> query = builder.createQuery(PublicKeyEntity.class);
        final Root<PublicKeyEntity> root = query.from(PublicKeyEntity.class);

        query.where(builder.and(
                builder.equal(root.get(PublicKeyEntity_.id), keyID),
                builder.equal(root.get(PublicKeyEntity_.organization_id), organizationID)));
        return list(query);
    }
}