1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.sovt.impl;
29
30 import org.sovt.Inspector;
31 import org.sovt.Transformer;
32 import org.sovt.ValidationResult;
33 import org.sovt.Validator;
34
35 import java.util.ArrayList;
36 import java.util.Iterator;
37 import java.util.List;
38
39 /***
40 * This Inspector is used to collect other validators, transformers or
41 * inspectors into a group.
42 *
43 * @author Vilmantas Baranauskas (vilmantas_baranauskas@yahoo.com)
44 */
45 public final class GroupInspector implements Inspector, Cloneable {
46
47
48 /***
49 * List of validators/transformers/inspectors in this group.
50 */
51 private List elements = new ArrayList();
52
53
54 /***
55 * Creates instance of GroupValidator.
56 */
57 public GroupInspector() {
58 }
59
60
61 /***
62 * Adds inspector to the group.
63 *
64 * @param inspector Inspector to add.
65 */
66 public void addInspector(Inspector inspector) {
67 elements.add(inspector);
68 }
69
70 /***
71 * Adds transformer to the group.
72 *
73 * @param transformer Transformer to add.
74 */
75 public void addTransformer(Transformer transformer) {
76 elements.add(transformer);
77 }
78
79 /***
80 * Adds validator to the group.
81 *
82 * @param validator Validator to add.
83 */
84 public void addValidator(Validator validator) {
85 elements.add(validator);
86 }
87
88 /***
89 * Performs a partly deep-cloning. New list of contained elements is created
90 * but elements themselfs are not cloned.
91 *
92 * @return clone of itself.
93 * @throws CloneNotSupportedException never.
94 */
95 public Object clone() throws CloneNotSupportedException {
96 GroupInspector inspector = (GroupInspector) super.clone();
97 inspector.elements = new ArrayList(elements);
98 return inspector;
99 }
100
101 /***
102 * Performs transformation and validation of given object. Transformers,
103 * validators and inspectors are invoked in the order they are registered.
104 *
105 * @param object Object to inspect.
106 * @param result Container for validation results.
107 * @return Transformed or completely new object which is also validated.
108 */
109 public Object inspect(Object object, ValidationResult result) {
110 for (Iterator iterator = elements.iterator(); iterator.hasNext();) {
111 Object element = iterator.next();
112 if (element instanceof Inspector) {
113 Inspector inspector = (Inspector) element;
114 object = inspector.inspect(object, result);
115 } else if (element instanceof Transformer) {
116 Transformer transformer = (Transformer) element;
117 object = transformer.transform(object);
118 } else if (element instanceof Validator) {
119 Validator validator = (Validator) element;
120 validator.validate(object, result);
121 }
122 }
123 return object;
124 }
125
126 }