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

com.parship.roperty.persistence.jpa.RopertyValueDAO Maven / Gradle / Ivy

package com.parship.roperty.persistence.jpa;

import org.apache.commons.lang3.Validate;

import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import java.util.Collections;
import java.util.List;

public class RopertyValueDAO {

    private QueryBuilderDelegate queryBuilderDelegate;

    Long getNumberOfValues(RopertyKey ropertyKey) {
        Validate.notNull(queryBuilderDelegate, "Query builder delegate must not be null");
        EntityManager entityManager = queryBuilderDelegate.createEntityManager();
        Validate.notNull(entityManager, "Entity manager must not be null");
        TypedQuery typedQuery = queryBuilderDelegate.count(ropertyKey);
        if (typedQuery == null) {
            entityManager.close();
            throw new RopertyPersistenceException(String.format("Typed query for counting of key '%s' must not be null", ropertyKey.getId()));
        }
        Long result = typedQuery.getSingleResult();
        if (result == null) {
            throw new RopertyPersistenceException("Single result of query must not be null");
        }
        entityManager.close();
        return result;
    }

    List loadRopertyValues(RopertyKey ropertyKey) {
        Validate.notNull(queryBuilderDelegate, "Query builder delegate must not be null");
        EntityManager entityManager = queryBuilderDelegate.createEntityManager();
        Validate.notNull(entityManager, "Entity manager must not be null");
        EqualsCriterion equalsCriterion = new EqualsCriterion()
                .withAttributeName("key")
                .withComparison(ropertyKey);

        TypedQuery typedQuery = queryBuilderDelegate.equality(equalsCriterion);
        if (typedQuery == null) {
            entityManager.close();
            throw new RopertyPersistenceException(String.format("Typed query for equality of key '%s' must not be null", ropertyKey.getId()));
        }

        List ropertyValues = typedQuery.getResultList();
        entityManager.close();

        Validate.notNull(ropertyValues, "Result list of Roperty values for key '%s' was null", ropertyKey.getId());

        return Collections.unmodifiableList(ropertyValues);
    }

    RopertyValue loadRopertyValue(RopertyKey ropertyKey, String pattern, String changeSet) {
        Validate.notNull(queryBuilderDelegate, "Query builder delegate must not be null");
        EntityManager entityManager = queryBuilderDelegate.createEntityManager();
        Validate.notNull(entityManager, "Entity manager must not be null");

        EqualsCriterion keyCriterion = new EqualsCriterion()
                .withAttributeName("key")
                .withComparison(ropertyKey);

        EqualsCriterion patternCriterion = new EqualsCriterion()
                .withAttributeName("pattern")
                .withComparison(pattern);

        EqualsCriterion changeSetCriterion = new EqualsCriterion()
                .withAttributeName("changeSet")
                .withComparison(changeSet);

        TypedQuery typedQuery = queryBuilderDelegate.equality(
                keyCriterion,
                patternCriterion,
                changeSetCriterion);
        if (typedQuery == null) {
            entityManager.close();
            throw new RopertyPersistenceException(String.format("Typed query for equality of key '%s' must not be null", ropertyKey.getId()));
        }

        List ropertyValues = typedQuery.getResultList();
        int numValues = ropertyValues.size();
        RopertyValue ropertyValue;
        if (numValues == 0) {
            ropertyValue = null;
        } else if (numValues == 1) {
            ropertyValue = ropertyValues.get(0);
        } else {
            throw new RopertyPersistenceException(String.format("More than one database entry found for key '%s' and pattern '%s'", ropertyKey, pattern));
        }

        entityManager.close();

        return ropertyValue;
    }

    public void setQueryBuilderDelegate(QueryBuilderDelegate queryBuilderDelegate) {
        Validate.notNull(queryBuilderDelegate, "Query builder delegate must not be null");
        this.queryBuilderDelegate = queryBuilderDelegate;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy