1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.atlassian.jira.rest.client.domain.input;
18
19 import com.google.common.base.Function;
20 import com.google.common.collect.ImmutableList;
21 import com.google.common.collect.Iterables;
22 import com.google.common.collect.Lists;
23
24 import javax.annotation.Nullable;
25 import java.util.List;
26
27
28
29
30
31
32
33 public class ValueTransformerManager implements Function<Object, Object> {
34 public final List<ValueTransformer> valueTransformers = Lists.newArrayList();
35
36 public ValueTransformerManager() {
37 }
38
39
40
41
42
43
44
45 public ValueTransformerManager registerTransformer(final ValueTransformer transformer) {
46 valueTransformers.add(transformer);
47 return this;
48 }
49
50
51
52
53
54
55
56 @SuppressWarnings("unused")
57 public ValueTransformerManager registerTransformerAsFirst(final ValueTransformer transformer) {
58 valueTransformers.add(0, transformer);
59 return this;
60 }
61
62
63
64
65
66
67
68
69 public Object apply(@Nullable Object rawInput) {
70 if (rawInput instanceof Iterable) {
71 @SuppressWarnings("unchecked")
72 final Iterable<Object> rawInputObjects= (Iterable<Object>) rawInput;
73 return ImmutableList.copyOf(Iterables.transform(rawInputObjects, this));
74 }
75
76 for (ValueTransformer valueTransformer : valueTransformers) {
77 final Object transformedValue = valueTransformer.apply(rawInput);
78 if (!ValueTransformer.CANNOT_HANDLE.equals(transformedValue)) {
79 return transformedValue;
80 }
81 }
82
83 throw new CannotTransformValueException("Any of available transformers was able to transform given value. Value is: "
84 + (rawInput == null ? "NULL" : rawInput.getClass().getName() + ": " + rawInput.toString()));
85 }
86 }