/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.geofence.core.dao.impl;
import java.util.List;
import java.util.Set;
import com.googlecode.genericdao.search.ISearch;
import org.geoserver.geofence.core.dao.LayerDetailsDAO;
import org.geoserver.geofence.core.model.LayerAttribute;
import org.geoserver.geofence.core.model.LayerDetails;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.hibernate.Hibernate;
import org.springframework.transaction.annotation.Transactional;
/**
* Public implementation of the RuleLimitsDAO interface
*
* @author Emanuele Tajariol (etj at geo-solutions.it)
*/
@Transactional(value = "geofenceTransactionManager")
public class LayerDetailsDAOImpl extends BaseDAO<LayerDetails, Long> implements LayerDetailsDAO {
private static final Logger LOGGER = LogManager.getLogger(LayerDetailsDAOImpl.class);
@Override
public void persist(LayerDetails... entities) {
for (LayerDetails details : entities) {
if ( details.getRule() == null ) {
throw new NullPointerException("Rule is not set");
}
details.setId(details.getRule().getId());
for (LayerAttribute attr : details.getAttributes()) {
if ( attr.getAccess() == null ) {
throw new NullPointerException("Null access type for attribute " + attr.getName() + " in " + details);
}
}
}
super.persist(entities);
}
// @Override
// public LayerDetails find(Long id) {
// return super.find(id);
// }
@Override
public List<LayerDetails> findAll() {
return super.findAll();
}
@Override
public List<LayerDetails> search(ISearch search) {
return super.search(search);
}
@Override
public LayerDetails merge(LayerDetails entity) {
return super.merge(entity);
}
@Override
public boolean remove(LayerDetails entity) {
return super.remove(entity);
}
@Override
public boolean removeById(Long id) {
return super.removeById(id);
}
// ==========================================================================
@Override
public Set<String> getAllowedStyles(Long id) {
LayerDetails found = find(id);
if ( found != null ) {
Set<String> styles = found.getAllowedStyles();
if ( (styles != null) && !Hibernate.isInitialized(styles) ) {
Hibernate.initialize(styles); // fetch the props
}
return styles;
} else {
throw new IllegalArgumentException("LayerDetails not found");
}
}
@Override
public void setAllowedStyles(Long id, Set<String> styles) {
LayerDetails found = find(id);
if ( found != null ) {
found.setAllowedStyles(styles);
} else {
throw new IllegalArgumentException("LayerDetails not found");
}
}
}