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}