1 package org.opendaylight.controller.northbound.commons.query;
3 import java.lang.reflect.ParameterizedType;
4 import java.lang.reflect.Type;
5 import java.util.ArrayList;
6 import java.util.Collection;
7 import java.util.Iterator;
12 /*package*/ class IteratableTypeInfo extends TypeInfo {
14 public IteratableTypeInfo(String name, Accessor accessor) {
15 super(name, accessor.getType(), accessor);
19 public Object retrieve(Object target, String[] query, int index) throws QueryException {
20 if (LOGGER.isDebugEnabled()) {
21 LOGGER.debug("retrieve collection: {}/{} type:{}", index, query.length,
25 Collection<?> c = (Collection<?>) target;
26 Iterator<?> it = c.iterator();
27 List<Object> objects = new ArrayList<Object>();
28 while (it.hasNext()) {
29 Object item = it.next();
30 for (TypeInfo child : _types.values()) {
31 Object val = child.retrieve(item, query, index);
42 public synchronized void explore() {
46 if (LOGGER.isDebugEnabled()) {
47 LOGGER.debug("exploring iteratable type: {} gtype: {}", _class,
48 _accessor.getGenericType());
50 Type t = _accessor.getGenericType();
51 if (t instanceof ParameterizedType) {
52 Type[] pt = ((ParameterizedType) t).getActualTypeArguments();
53 // First type is a child, ignore rest
55 _types.put(_name, new TypeInfo(_name, (Class)pt[0], null));
62 public TypeInfo getCollectionChild(Class<?> childType) {
64 for (TypeInfo ti : _types.values()) {
65 if (ti.getType().equals(childType)) {