1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package org.org.usurper.handlers.basic;
24
25 import java.lang.reflect.Array;
26 import java.lang.reflect.Field;
27
28 import org.org.usurper.handlers.IHandler;
29 import org.org.usurper.handlers.exceptions.NoHandlerDefinedException;
30 import org.org.usurper.handlers.exceptions.PropertyTypeHandlingException;
31 import org.org.usurper.model.HandledBeanProperty;
32 import org.org.usurper.model.HandledConstructorArg;
33 import org.org.usurper.model.PropertyTypeDefinition;
34 import org.org.usurper.utils.ReflectionUtils;
35
36
37
38
39
40
41 public final class ArrayHandler implements IHandler {
42
43
44
45
46
47 public Object handle(HandledBeanProperty handledBeanProperty) {
48 Object result = null;
49 final Integer ARRAY_ENTRIES = handledBeanProperty.getUsurperGeneratorSetup().getCountCallback().determineCount(handledBeanProperty);
50 try {
51 Field attribute = ReflectionUtils.getField(handledBeanProperty.getTargetObject(), handledBeanProperty.getPropertyName());
52 Class<?> usurpedClass = attribute.getType().getComponentType();
53 result = Array.newInstance(ReflectionUtils.toNotPrimitiveType(usurpedClass), ARRAY_ENTRIES);
54 HandledBeanProperty handledArrayItem = new HandledBeanProperty(handledBeanProperty.getTargetObject(), usurpedClass, handledBeanProperty.getPropertyName(), handledBeanProperty.getUsurperGeneratorSetup());
55 for (int i = 0; i < ARRAY_ENTRIES; i++) {
56 if (handledBeanProperty.getUsurperGeneratorSetup().getAllHandlers().get(new PropertyTypeDefinition(usurpedClass)) != null) {
57 Array.set(result, i, handledBeanProperty.getUsurperGeneratorSetup().getAllHandlers().get(new PropertyTypeDefinition(usurpedClass)).handle(handledArrayItem));
58 } else {
59 if (usurpedClass.isEnum()) {
60 Array.set(result, i, new EnumHandler().handle(handledArrayItem));
61 } else {
62 throw new NoHandlerDefinedException("no handler found for Array property <" + handledArrayItem.getPropertyName() + "> of Class <" + usurpedClass.getName() + ">.");
63 }
64 }
65 }
66 } catch (NoSuchFieldException e) {
67 throw new PropertyTypeHandlingException("Unable to handle property <" + handledBeanProperty.getPropertyName() + "(" + handledBeanProperty.getPropertyClass().getName() + ")> from object " + handledBeanProperty.getTargetObject(), e);
68 }
69 return result;
70 }
71
72
73
74
75 public Object handle(HandledConstructorArg handledConstructorArg) {
76 final Integer ARRAY_ENTRIES = handledConstructorArg.getUsurperGeneratorSetup().getCountCallback().determineCount(handledConstructorArg);
77
78 Class<?> usurpedClass = handledConstructorArg.getConstructorArgClass().getComponentType();
79 Object result = Array.newInstance(usurpedClass, ARRAY_ENTRIES);
80 HandledConstructorArg handledArrayItem = new HandledConstructorArg(handledConstructorArg.getTargetConstructor(), usurpedClass, handledConstructorArg.getConstructorArgOrderingNumber(), handledConstructorArg.getUsurperGeneratorSetup());
81 for (int i = 0; i < ARRAY_ENTRIES; i++) {
82 if (handledConstructorArg.getUsurperGeneratorSetup().getAllHandlers().get(new PropertyTypeDefinition(usurpedClass)) != null) {
83 Array.set(result, i, handledConstructorArg.getUsurperGeneratorSetup().getAllHandlers().get(new PropertyTypeDefinition(usurpedClass)).handle(handledArrayItem));
84 } else {
85 if (usurpedClass.isEnum()) {
86 Array.set(result, i, new EnumHandler().handle(handledArrayItem));
87 } else {
88 throw new NoHandlerDefinedException("no handler found for Array constructor arg <#" + handledArrayItem.getConstructorArgOrderingNumber() + "> of Class <" + usurpedClass.getName() + ">.");
89 }
90 }
91 }
92 return result;
93 }
94
95 }