Package org.nutz.ioc.val

Source Code of org.nutz.ioc.val.MapValue

package org.nutz.ioc.val;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.nutz.ioc.IocMaking;
import org.nutz.ioc.ValueProxy;
import org.nutz.ioc.meta.IocValue;
import org.nutz.lang.Lang;
import org.nutz.lang.Mirror;
import org.nutz.lang.meta.Pair;

public class MapValue implements ValueProxy {

  private Class<? extends Map<String, Object>> type;

  private List<Pair<ValueProxy>> list;

  @SuppressWarnings("unchecked")
  public MapValue(IocMaking ing,
          Map<String, IocValue> map,
          Class<? extends Map<String, Object>> type) {
    this.type = (Class<? extends Map<String, Object>>) (null == type ? HashMap.class : type);
    list = new ArrayList<Pair<ValueProxy>>(map.size());
    for (Entry<String, IocValue> en : map.entrySet()) {
      String name = en.getKey();
      IocValue iv = en.getValue();
      list.add(new Pair<ValueProxy>(name, ing.makeValue(iv)));
    }
  }

  public Object get(IocMaking ing) {
    try {
      Map<String, Object> map = Mirror.me(type).born();
      for (Pair<ValueProxy> p : list)
        map.put(p.getName(), p.getValue().get(ing));
      return map;
    }
    catch (Exception e) {
      throw Lang.wrapThrow(e);
    }
  }

}
TOP

Related Classes of org.nutz.ioc.val.MapValue

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.