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);
}
}
}