1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.efaps.admin.ui;
22
23
24
25 import java.util.ArrayList;
26 import java.util.HashMap;
27 import java.util.List;
28 import java.util.Map;
29 import java.util.TreeMap;
30
31 import org.efaps.admin.datamodel.Type;
32 import org.efaps.admin.ui.field.Field;
33 import org.efaps.admin.ui.field.FieldChart;
34 import org.efaps.admin.ui.field.FieldClassification;
35 import org.efaps.admin.ui.field.FieldCommand;
36 import org.efaps.admin.ui.field.FieldGroup;
37 import org.efaps.admin.ui.field.FieldHeading;
38 import org.efaps.admin.ui.field.FieldPicker;
39 import org.efaps.admin.ui.field.FieldSet;
40 import org.efaps.admin.ui.field.FieldTable;
41 import org.efaps.ci.CIAdminUserInterface;
42 import org.efaps.db.MultiPrintQuery;
43 import org.efaps.db.QueryBuilder;
44 import org.efaps.util.EFapsException;
45 import org.efaps.util.cache.CacheReloadException;
46
47
48
49
50
51
52 public abstract class AbstractCollection
53 extends AbstractUserInterfaceObject
54 {
55
56
57
58 private static final long serialVersionUID = 1L;
59
60
61
62
63
64
65
66
67 private final Map<String, Integer> allFieldExpr = new HashMap<String, Integer>();
68
69
70
71
72
73
74
75
76 private final Map<Long, Field> fields = new TreeMap<Long, Field>();
77
78
79
80
81 private final Map<String, Field> fieldName2Field = new TreeMap<String, Field>();
82
83
84
85
86
87
88 private int selIndexLen = 1;
89
90
91
92
93
94
95
96 private String select = null;
97
98
99
100
101
102
103
104
105 protected AbstractCollection(final long _id,
106 final String _uuid,
107 final String _name)
108 {
109 super(_id, _uuid, _name);
110 }
111
112
113
114
115
116
117 public void add(final Field _field)
118 {
119 this.fields.put(_field.getId(), _field);
120 this.fieldName2Field.put(_field.getName(), _field);
121 if (_field.getReference() != null && _field.getReference().length() > 0) {
122 final String ref = _field.getReference();
123 int index;
124 int end = 0;
125 while ((index = ref.indexOf("$<", end)) > 0) {
126 index += 2;
127 end = ref.indexOf(">", index);
128 addFieldExpr(ref.substring(index, end));
129 }
130 }
131 _field.setCollectionUUID(getUUID());
132 }
133
134
135
136
137
138
139
140
141
142
143
144
145
146 protected int addFieldExpr(final String _expr)
147 {
148 int ret = -1;
149 if (getAllFieldExpr().containsKey(_expr)) {
150 ret = getFieldExprIndex(_expr);
151 } else {
152 getAllFieldExpr().put(_expr, Integer.valueOf(getSelIndexLen()));
153 if (getSelect() == null) {
154 setSelect(_expr);
155 } else {
156 setSelect(getSelect() + "," + _expr);
157 }
158 ret = getSelIndexLen();
159 this.selIndexLen++;
160 }
161 return ret;
162 }
163
164
165
166
167
168
169
170
171
172
173
174 public int getFieldExprIndex(final String _expr)
175 {
176 int ret = -1;
177 if (getAllFieldExpr().containsKey(_expr)) {
178 final Integer ident = getAllFieldExpr().get(_expr);
179 ret = ident.intValue();
180 }
181 return ret;
182 }
183
184
185
186
187
188
189
190
191 @Override
192 protected void readFromDB()
193 throws CacheReloadException
194 {
195 super.readFromDB();
196 readFromDB4Fields();
197 }
198
199
200
201
202
203
204 private void readFromDB4Fields()
205 throws CacheReloadException
206 {
207 try {
208
209 final QueryBuilder queryBldr = new QueryBuilder(CIAdminUserInterface.Field);
210 queryBldr.addWhereAttrEqValue(CIAdminUserInterface.Field.Collection, getId());
211 final MultiPrintQuery multi = queryBldr.getPrint();
212 multi.addAttribute(CIAdminUserInterface.Field.Type,
213 CIAdminUserInterface.Field.Name);
214 multi.executeWithoutAccessCheck();
215
216 while (multi.next()) {
217 final long id = multi.getCurrentInstance().getId();
218 final String name = multi.<String>getAttribute(CIAdminUserInterface.Field.Name);
219 final Type type = multi.<Type>getAttribute(CIAdminUserInterface.Field.Type);
220 final Field field;
221 if (type.equals(CIAdminUserInterface.FieldCommand.getType())) {
222 field = new FieldCommand(id, null, name);
223 } else if (type.equals(CIAdminUserInterface.FieldHeading.getType())) {
224 field = new FieldHeading(id, null, name);
225 } else if (type.equals(CIAdminUserInterface.FieldTable.getType())) {
226 field = new FieldTable(id, null, name);
227 } else if (type.equals(CIAdminUserInterface.FieldGroup.getType())) {
228 field = new FieldGroup(id, null, name);
229 } else if (type.equals(CIAdminUserInterface.FieldSet.getType())) {
230 field = new FieldSet(id, null, name);
231 } else if (type.equals(CIAdminUserInterface.FieldClassification.getType())) {
232 field = new FieldClassification(id, null, name);
233 } else if (type.equals(CIAdminUserInterface.FieldPicker.getType())) {
234 field = new FieldPicker(id, null, name);
235 } else if (type.equals(CIAdminUserInterface.FieldChart.getType())) {
236 field = new FieldChart(id, null, name);
237 } else {
238 field = new Field(id, null, name);
239 }
240 field.readFromDB();
241 add(field);
242 }
243 } catch (final EFapsException e) {
244 throw new CacheReloadException("could not read fields for '" + getName() + "'", e);
245 }
246 }
247
248
249
250
251
252
253
254
255 public List<Field> getFields()
256 {
257 return new ArrayList<Field>(this.fields.values());
258 }
259
260
261
262
263
264 private Map<String, Integer> getAllFieldExpr()
265 {
266 return this.allFieldExpr;
267 }
268
269
270
271
272
273
274
275 private int getSelIndexLen()
276 {
277 return this.selIndexLen;
278 }
279
280
281
282
283
284
285
286
287 protected void setSelect(final String _select)
288 {
289 this.select = _select;
290 }
291
292
293
294
295
296
297
298
299 public String getSelect()
300 {
301 return this.select;
302 }
303
304
305
306
307
308
309 public Map<Long, Field> getFieldsMap()
310 {
311 return this.fields;
312 }
313
314
315
316
317
318
319 public Field getField(final String _fieldName)
320 {
321 return this.fieldName2Field.get(_fieldName);
322 }
323 }