package com.avaje.ebean.enhance.agent; import java.util.ArrayList; import java.util.HashMap; /** * Collects the annotation information. */ public class AnnotationInfo { final HashMap<String,Object> valueMap = new HashMap<String,Object>(); AnnotationInfo parent; /** * The parent is typically the class level annotation information * which could be considered to hold default values. */ public AnnotationInfo(AnnotationInfo parent){ this.parent = parent; } public String toString() { return valueMap.toString(); } public AnnotationInfo getParent() { return parent; } public void setParent(AnnotationInfo parent) { this.parent = parent; } /** * Add a annotation value. */ @SuppressWarnings("unchecked") public void add(String prefix, String name, Object value){ if (name == null){ // this is an array value... ArrayList<Object> list = (ArrayList<Object>)valueMap.get(prefix); if (list == null){ list = new ArrayList<Object>(); valueMap.put(prefix, list); } //System.out.println("addArrayValue "+prefix+" value:"+value); list.add(value); } else { String key = getKey(prefix, name); //System.out.println("addValue "+key+" value:"+value); valueMap.put(key, value); } } /** * Add a enum annotation value. */ public void addEnum(String prefix, String name, String desc, String value){ add(prefix, name, value); } private String getKey(String prefix, String name){ if (prefix == null){ return name; } else { return prefix+"."+name; } } /** * Return a value out of the map. */ public Object getValue(String key){ Object o = valueMap.get(key); if (o == null && parent != null){ // try getting value from parent o = parent.getValue(key); } return o; } }