001package io.ebean.enhance.common; 002 003import java.util.ArrayList; 004import java.util.HashMap; 005 006/** 007 * Collects the annotation information. 008 */ 009public class AnnotationInfo { 010 011 private final HashMap<String,Object> valueMap = new HashMap<String,Object>(); 012 013 private AnnotationInfo parent; 014 015 /** 016 * The parent is typically the class level annotation information 017 * which could be considered to hold default values. 018 */ 019 public AnnotationInfo(AnnotationInfo parent){ 020 this.parent = parent; 021 } 022 023 public String toString() { 024 return valueMap.toString(); 025 } 026 027 028 public AnnotationInfo getParent() { 029 return parent; 030 } 031 032 public void setParent(AnnotationInfo parent) { 033 this.parent = parent; 034 } 035 036 /** 037 * Add a annotation value. 038 */ 039 @SuppressWarnings("unchecked") 040 public void add(String prefix, String name, Object value){ 041 if (name == null){ 042 // this is an array value... 043 ArrayList<Object> list = (ArrayList<Object>)valueMap.get(prefix); 044 if (list == null){ 045 list = new ArrayList<>(); 046 valueMap.put(prefix, list); 047 } 048 //System.out.println("addArrayValue "+prefix+" value:"+value); 049 list.add(value); 050 051 } else { 052 String key = getKey(prefix, name); 053 //System.out.println("addValue "+key+" value:"+value); 054 valueMap.put(key, value); 055 } 056 } 057 058 /** 059 * Add a enum annotation value. 060 */ 061 public void addEnum(String prefix, String name, String desc, String value){ 062 063 add(prefix, name, value); 064 } 065 066 private String getKey(String prefix, String name){ 067 if (prefix == null){ 068 return name; 069 } else { 070 return prefix+"."+name; 071 } 072 } 073 074 /** 075 * Return a value out of the map. 076 */ 077 public Object getValue(String key){ 078 Object o = valueMap.get(key); 079 if (o == null && parent != null){ 080 // try getting value from parent 081 o = parent.getValue(key); 082 } 083 return o; 084 } 085}