package org.jboss.seam.security.permission; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import javax.enterprise.inject.Instance; import javax.enterprise.inject.spi.BeanManager; import javax.inject.Inject; import javax.persistence.Entity; import javax.persistence.EntityManager; import org.jboss.seam.security.annotations.permission.Identifier; import org.jboss.seam.security.util.Strings; /** * An Identifier strategy for entity-based permission checks * * @author Shane Bryzak */ public class EntityIdentifierStrategy implements IdentifierStrategy { private Map<Class<?>, String> identifierNames = new ConcurrentHashMap<Class<?>, String>(); //@Inject PersistenceProvider persistenceProvider; //@Inject Expressions expressions; @Inject BeanManager manager; @Inject Instance<EntityManager> entityManagerInstance; public boolean canIdentify(Class<?> targetClass) { return targetClass.isAnnotationPresent(Entity.class); } public String getIdentifier(Object target) { return String.format("%s:%s", getIdentifierName(target.getClass()), // FIXME null); //persistenceProvider.getId(target, lookupEntityManager()).toString()); } private String getIdentifierName(Class<?> cls) { if (!identifierNames.containsKey(cls)) { String name = null; if (cls.isAnnotationPresent(Identifier.class)) { Identifier identifier = (Identifier) cls.getAnnotation(Identifier.class); if (!Strings.isEmpty(identifier.name())) { name = identifier.name(); } } if (name == null) { name = cls.getName().substring(cls.getName().lastIndexOf('.') + 1); } identifierNames.put(cls, name); return name; } return identifierNames.get(cls); } }