blob: 1d357e45b39e369f933e642bb12de3e17a56bd4f [file] [log] [blame]
package de.ids_mannheim.korap.security.ac;
import de.ids_mannheim.korap.config.KustvaktCacheable;
import de.ids_mannheim.korap.exceptions.EmptyResultException;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.exceptions.NotAuthorizedException;
import de.ids_mannheim.korap.exceptions.StatusCodes;
import de.ids_mannheim.korap.resources.KustvaktResource;
import de.ids_mannheim.korap.resources.Permissions;
import de.ids_mannheim.korap.resources.ResourceFactory;
import de.ids_mannheim.korap.user.User;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Collection;
/**
* @author hanl
* @date 23/03/2014
*/
//todo: use interface (maybe a cachable interface?) and bean instanceing
// todo: if cachable, data integrity needs to be checked! either remove caching or check integrity!
@SuppressWarnings("all")
public class ResourceHandler extends KustvaktCacheable {
private static Logger jlog = LoggerFactory.getLogger(ResourceHandler.class);
public ResourceHandler () {
super("resources", "key:resources");
}
@Deprecated
public <T extends KustvaktResource> T getCache (Object id, Class<T> cz) {
Element e = CacheManager.getInstance().getCache("resources").get(id);
if (e != null)
return (T) e.getObjectValue();
else
return null;
}
@Deprecated
public <R extends KustvaktResource> void cache (R resource) {
CacheManager.getInstance().getCache("resources")
.put(new Element(resource.getPersistentID(), resource));
}
/**
* @param id
* @param user
* @return
* @throws KustvaktException
* if there is no handler registered, resource might
* still be valid,
* only Notauthorized exception will cause a parsing
* error here
* @throws NotAuthorizedException
*/
public <T extends KustvaktResource> T findbyIntId (Integer id, User user)
throws KustvaktException, NotAuthorizedException {
SecurityManager<T> p;
try {
p = SecurityManager.findbyId(id, user);
}
catch (EmptyResultException e) {
throw new NotAuthorizedException(StatusCodes.NO_VALUE_FOUND,
String.valueOf(id));
}
return p.getResource();
}
public <T extends KustvaktResource> T findbyStrId (String persistent_id,
User user, String type) throws KustvaktException,
NotAuthorizedException {
return (T) findbyStrId(persistent_id, user,
ResourceFactory.getResourceClass(type));
}
public <T extends KustvaktResource> T findbyStrId (String persistent_id,
User user, Class<T> type) throws KustvaktException,
NotAuthorizedException {
SecurityManager<T> p;
try {
p = SecurityManager.findbyId(persistent_id, user, type);
}
catch (EmptyResultException e) {
throw new NotAuthorizedException(StatusCodes.NO_VALUE_FOUND,
persistent_id);
}
return p.getResource();
}
public <T extends KustvaktResource> Collection<T> findbyPath (String path,
Class type, User user) throws KustvaktException,
NotAuthorizedException {
return ResourceFinder.search(path, false, user, type);
}
public <T extends KustvaktResource> void updateResources (User user,
T ... resources) throws KustvaktException, NotAuthorizedException {
// fixme: what if update fails? then i have a root policy lingering for a resource that is not available?!
// fixme: transaction management
for (T resource : resources) {
SecurityManager policies;
try {
policies = SecurityManager.init(resource.getPersistentID(),
user, Permissions.Permission.WRITE);
}
catch (EmptyResultException e) {
return;
}
policies.updateResource(resource);
}
}
public <T extends KustvaktResource> void storeResources (User user,
T ... resources) throws KustvaktException, NotAuthorizedException {
for (T resource : resources)
SecurityManager.register(resource, user);
}
@Deprecated
public <T extends KustvaktResource> void deleteResources (User user,
String ... ids) throws KustvaktException, NotAuthorizedException {
for (String id : ids) {
SecurityManager policies;
try {
policies = SecurityManager.init(id, user,
Permissions.Permission.DELETE);
}
catch (EmptyResultException e) {
return;
}
policies.deleteResource();
}
}
public <T extends KustvaktResource> void deleteResources (User user,
T ... resources) throws KustvaktException, NotAuthorizedException {
for (T r : resources) {
SecurityManager manager;
try {
manager = SecurityManager.findbyId(r.getPersistentID(), user,
r.getClass(), Permissions.Permission.DELETE);
}
catch (EmptyResultException e) {
return;
}
manager.deleteResource();
}
}
@Deprecated
public <T extends KustvaktResource> void deleteResources (User user,
Integer ... ids) throws KustvaktException, NotAuthorizedException {
for (Integer id : ids) {
SecurityManager policies;
try {
policies = SecurityManager.findbyId(id, user,
Permissions.Permission.DELETE);
}
catch (EmptyResultException e) {
return;
}
policies.deleteResource();
}
}
}