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<>(); 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 @Override 024 public String toString() { 025 return valueMap.toString(); 026 } 027 028 029 public AnnotationInfo getParent() { 030 return parent; 031 } 032 033 public void setParent(AnnotationInfo parent) { 034 this.parent = parent; 035 } 036 037 /** 038 * Add a annotation value. 039 */ 040 @SuppressWarnings("unchecked") 041 public void add(String prefix, String name, Object value){ 042 if (name == null){ 043 // this is an array value... 044 ArrayList<Object> list = (ArrayList<Object>)valueMap.get(prefix); 045 if (list == null){ 046 list = new ArrayList<>(); 047 valueMap.put(prefix, list); 048 } 049 //System.out.println("addArrayValue "+prefix+" value:"+value); 050 list.add(value); 051 052 } else { 053 String key = getKey(prefix, name); 054 //System.out.println("addValue "+key+" value:"+value); 055 valueMap.put(key, value); 056 } 057 } 058 059 /** 060 * Add a enum annotation value. 061 */ 062 public void addEnum(String prefix, String name, String desc, String value){ 063 064 add(prefix, name, value); 065 } 066 067 private String getKey(String prefix, String name){ 068 if (prefix == null){ 069 return name; 070 } else { 071 return prefix+"."+name; 072 } 073 } 074 075 /** 076 * Return a value out of the map. 077 */ 078 public Object getValue(String key){ 079 Object o = valueMap.get(key); 080 if (o == null && parent != null){ 081 // try getting value from parent 082 o = parent.getValue(key); 083 } 084 return o; 085 } 086}