blob: ba473fb82957df3165bde17f9c742c511908a26f (
plain)
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
package com.p4square.grow.ccb;
import com.p4square.ccbapi.CCBAPI;
import com.p4square.ccbapi.model.*;
import org.apache.log4j.Logger;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* CustomFieldCache maintains an index from custom field labels to names.
*/
public class CustomFieldCache {
private static final Logger LOG = Logger.getLogger(CustomFieldCache.class);
private final CCBAPI mAPI;
private CustomFieldCollection<CustomField> mTextFields;
private CustomFieldCollection<CustomField> mDateFields;
private CustomFieldCollection<CustomField> mIndividualPulldownFields;
private CustomFieldCollection<CustomField> mGroupPulldownFields;
private final Map<LookupTableType, Map<String, LookupTableItem>> mItemByNameTable;
public CustomFieldCache(final CCBAPI api) {
mAPI = api;
mTextFields = new CustomFieldCollection<>();
mDateFields = new CustomFieldCollection<>();
mIndividualPulldownFields = new CustomFieldCollection<>();
mGroupPulldownFields = new CustomFieldCollection<>();
mItemByNameTable = new HashMap<>();
}
public CustomField getTextFieldByLabel(final String label) {
if (mTextFields.size() == 0) {
refresh();
}
return mTextFields.getByLabel(label);
}
public CustomField getDateFieldByLabel(final String label) {
if (mDateFields.size() == 0) {
refresh();
}
return mDateFields.getByLabel(label);
}
public CustomField getIndividualPulldownByLabel(final String label) {
if (mIndividualPulldownFields.size() == 0) {
refresh();
}
return mIndividualPulldownFields.getByLabel(label);
}
public CustomField getGroupPulldownByLabel(final String label) {
if (mGroupPulldownFields.size() == 0) {
refresh();
}
return mGroupPulldownFields.getByLabel(label);
}
public LookupTableItem getPulldownItemByName(final LookupTableType type, final String name) {
Map<String, LookupTableItem> items = mItemByNameTable.get(type);
if (items == null) {
if (!cacheLookupTable(type)) {
return null;
}
items = mItemByNameTable.get(type);
}
return items.get(name);
}
private synchronized void refresh() {
try {
// Get all of the custom fields.
final GetCustomFieldLabelsResponse resp = mAPI.getCustomFieldLabels();
final CustomFieldCollection<CustomField> newTextFields = new CustomFieldCollection<>();
final CustomFieldCollection<CustomField> newDateFields = new CustomFieldCollection<>();
final CustomFieldCollection<CustomField> newIndPulldownFields = new CustomFieldCollection<>();
final CustomFieldCollection<CustomField> newGrpPulldownFields = new CustomFieldCollection<>();
for (final CustomField field : resp.getCustomFields()) {
if (field.getName().startsWith("udf_ind_text_")) {
newTextFields.add(field);
} else if (field.getName().startsWith("udf_ind_date_")) {
newDateFields.add(field);
} else if (field.getName().startsWith("udf_ind_pulldown_")) {
newIndPulldownFields.add(field);
} else if (field.getName().startsWith("udf_grp_pulldown_")) {
newGrpPulldownFields.add(field);
} else {
LOG.warn("Unknown custom field type " + field.getName());
}
}
this.mTextFields = newTextFields;
this.mDateFields = newDateFields;
this.mIndividualPulldownFields = newIndPulldownFields;
this.mGroupPulldownFields = newGrpPulldownFields;
} catch (IOException e) {
// Error fetching labels.
LOG.error("Error fetching custom fields: " + e.getMessage(), e);
}
}
private synchronized boolean cacheLookupTable(final LookupTableType type) {
try {
final GetLookupTableResponse resp = mAPI.getLookupTable(new GetLookupTableRequest().withType(type));
mItemByNameTable.put(type,
resp.getItems().stream().collect(Collectors.toMap(LookupTableItem::getName, Function.identity())));
return true;
} catch (IOException e) {
LOG.error("Exception caching lookup table of type " + type, e);
}
return false;
}
}
|