ConfigPropertyRepositoryImpl.java

package com.tradecloud.repository.impl;

import com.tradecloud.authentication.MultiTenantUtil;
import com.tradecloud.domain.base.utils.ObjectUtil;
import com.tradecloud.domain.configuration.ConfigProperty;
import com.tradecloud.repository.ConfigPropertyRepository;
import com.tradecloud.repository.base.impl.RepositoryBaseImpl;
import org.apache.log4j.Logger;
import org.hibernate.query.Query;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Root;
import java.util.List;

/**
 * Default implementation of the {@code ConfigPropertyRepository} interface.
 */
@Repository(value = "configPropertyRepository")
@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
public class ConfigPropertyRepositoryImpl extends RepositoryBaseImpl<ConfigProperty, Object> implements ConfigPropertyRepository {

    private static final long serialVersionUID = 1L;

    private static final Logger log = Logger.getLogger(ConfigPropertyRepositoryImpl.class);

    @Override
    public String getProperty(String name) {
        if (name == null) {
            throw new IllegalArgumentException("Name cannot be null in ConfigPropertyRepositoryImpl.findByName(String name)");
        }

        // Find a property for the key
        ConfigProperty property = findConfigProperty(name);
        if (property != null) {
            return property.getValue();
        } else {
            if (MultiTenantUtil.getActiveClient() != null) {
                log.warn(MultiTenantUtil.getActiveUser().getPrimaryClient() + ": No config property found in the database for key [" + name + "]");
            } else {
                //log.warn("No logged in user.");
            }
            return null;
        }
    }

    @Override
    public ConfigProperty findConfigProperty(String name) {
        CriteriaBuilder criteriaBuilder = getSession().getCriteriaBuilder();
        CriteriaQuery<ConfigProperty> criteriaQuery = criteriaBuilder.createQuery(ConfigProperty.class);
        Root<ConfigProperty> c = criteriaQuery.from(ConfigProperty.class);
        criteriaQuery = criteriaQuery.select(c).where(criteriaBuilder.equal(c.get("name"), name));
        Query<ConfigProperty> q = getSession().createQuery(criteriaQuery);
        q.setMaxResults(1);
        return (ConfigProperty) ObjectUtil.first(q.list());
    }

    @Override
    public List<ConfigProperty> findAll() {
        return super.findAll();
    }

    @Override
    public void setProperties(List<ConfigProperty> properties) {
        for (ConfigProperty configProperty : properties) {
            setProperty(configProperty);
        }
    }

    @Override
    public void setProperty(ConfigProperty property) {
        ConfigProperty cf = findConfigProperty(property.getName());
        if (cf != null) {
            cf.setValue(property.getValue());
            merge(cf);
        } else {
            save(property);
        }
    }
}