/**
*
*/
package org.minnal.instrument.entity.metadata;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Set;
import org.minnal.instrument.entity.AggregateRoot;
import org.minnal.instrument.entity.Secure;
import org.minnal.instrument.entity.SecureMultiple;
import org.minnal.instrument.entity.metadata.handler.SecureAnnotationHandler;
import org.minnal.instrument.entity.metadata.handler.SecureMultipleAnnotationHandler;
import org.minnal.instrument.metadata.MetaData;
import org.minnal.utils.reflection.ClassUtils;
/**
* @author ganeshs
*
*/
public class SecurableMetaData extends MetaData {
private Set<PermissionMetaData> permissionMetaData = new HashSet<PermissionMetaData>();
/**
* @param name
*/
public SecurableMetaData(String name) {
super(name);
}
protected void init(AnnotatedElement element) {
Secure secure = null;
SecureMultiple secureMultiple = null;
if (element instanceof Class && ClassUtils.hasAnnotation((Class<?>) element, AggregateRoot.class)) {
secureMultiple = ClassUtils.getAnnotation((Class<?>) element, SecureMultiple.class);
secure = ClassUtils.getAnnotation((Class<?>) element, Secure.class);
} else if (element instanceof Field) {
Field member = (Field) element;
secureMultiple = member.getAnnotation(SecureMultiple.class);
secure = member.getAnnotation(Secure.class);
} else if (element instanceof Method) {
Method member = (Method) element;
secureMultiple = member.getAnnotation(SecureMultiple.class);
secure = member.getAnnotation(Secure.class);
}
if (secure != null) {
new SecureAnnotationHandler().handle(this, secure);
}
if (secureMultiple != null) {
new SecureMultipleAnnotationHandler().handle(this, secureMultiple);
}
}
/**
* @return the permissionMetaData
*/
public Set<PermissionMetaData> getPermissionMetaData() {
return permissionMetaData;
}
/**
* @param data
*/
public void addPermissionMetaData(PermissionMetaData data) {
permissionMetaData.add(data);
}
}