1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package net.sf.morph.reflect.reflectors;
17
18 import java.util.ArrayList;
19 import java.util.Collection;
20 import java.util.Iterator;
21
22 import net.sf.morph.reflect.ContainerReflector;
23 import net.sf.morph.reflect.GrowableContainerReflector;
24 import net.sf.morph.reflect.InstantiatingReflector;
25 import net.sf.morph.reflect.SizableReflector;
26
27 /**
28 * A reflector for {@link java.util.Collection}s.
29 *
30 * @author Matt Sgarlata
31 * @since Nov 20, 2004
32 */
33 public class CollectionReflector extends BaseContainerReflector implements ContainerReflector, SizableReflector, InstantiatingReflector, GrowableContainerReflector {
34
35 private static final Class[] REFLECTABLE_TYPES = new Class[] {
36 Collection.class
37 };
38
39 protected Collection getCollection(Object container) {
40 return (Collection) container;
41 }
42
43 public Class[] getReflectableClassesImpl() {
44 return REFLECTABLE_TYPES;
45 }
46
47 /**
48 * TODO JDK 1.5 (generics) compatibility
49 */
50 protected Class getContainedTypeImpl(Class clazz) throws Exception {
51 return Object.class;
52 }
53
54 protected int getSizeImpl(Object container) throws Exception {
55 return getCollection(container).size();
56 }
57
58 protected Iterator getIteratorImpl(Object container) throws Exception {
59 return getCollection(container).iterator();
60 }
61
62 protected Object newInstanceImpl(Class clazz, Object parameters) throws Exception {
63 return clazz == Collection.class ? new ArrayList() : super.newInstanceImpl(clazz, parameters);
64 }
65
66 protected boolean addImpl(Object container, Object value) {
67 return ((Collection) container).add(value);
68 }
69
70 }