gvsig-projects-pool / org.gvsig.vcsgis / trunk / org.gvsig.vcsgis / org.gvsig.vcsgis.lib / org.gvsig.vcsgis.lib.impl / src / main / java / org / gvsig / vcsgis / lib / repository / localdb / tables / EntitiesRepoTable.java @ 3748
History | View | Annotate | Download (18.9 KB)
1 |
package org.gvsig.vcsgis.lib.repository.localdb.tables; |
---|---|
2 |
|
3 |
import java.util.HashMap; |
4 |
import java.util.List; |
5 |
import java.util.Map; |
6 |
import javax.json.JsonObject; |
7 |
import org.apache.commons.lang3.StringUtils; |
8 |
import org.gvsig.fmap.dal.DALLocator; |
9 |
import org.gvsig.fmap.dal.DataManager; |
10 |
import org.gvsig.fmap.dal.feature.EditableFeatureType; |
11 |
import org.gvsig.fmap.dal.feature.Feature; |
12 |
import org.gvsig.fmap.dal.feature.FeatureSet.DisposableFeatureSetIterable; |
13 |
import org.gvsig.fmap.dal.feature.FeatureStore; |
14 |
import org.gvsig.fmap.dal.feature.FeatureType; |
15 |
import org.gvsig.json.Json; |
16 |
import org.gvsig.json.JsonObjectBuilder; |
17 |
import org.gvsig.tools.dataTypes.DataTypes; |
18 |
import org.gvsig.tools.dispose.DisposeUtils; |
19 |
import org.gvsig.tools.dynform.spi.DynFormSPIManager; |
20 |
import org.gvsig.tools.dynobject.DynObjectValueItem; |
21 |
import org.gvsig.vcsgis.lib.VCSGisEntity; |
22 |
import org.gvsig.vcsgis.lib.VCSGisEntityEditable; |
23 |
import static org.gvsig.vcsgis.lib.VCSGisManager.TOPOLOGYPLAN_MODE_MANDATORY; |
24 |
import static org.gvsig.vcsgis.lib.VCSGisManager.TOPOLOGYPLAN_MODE_RECOMMENDED; |
25 |
import static org.gvsig.vcsgis.lib.VCSGisManager.VCSGISCODELEN; |
26 |
import org.gvsig.vcsgis.lib.VCSGisUser; |
27 |
import org.gvsig.vcsgis.lib.VCSGisUtils; |
28 |
import org.gvsig.vcsgis.lib.repository.localdb.VCSGisRepositoryLocaldb; |
29 |
import org.gvsig.vcsgis.lib.requests.RowCreateRequestHelper; |
30 |
import org.gvsig.vcsgis.lib.requests.RowDeleteRequestHelper; |
31 |
import org.gvsig.vcsgis.lib.requests.RowUpdateRequestHelper; |
32 |
|
33 |
/**
|
34 |
*
|
35 |
* @author gvSIG Team
|
36 |
*/
|
37 |
@SuppressWarnings("UseSpecificCatch") |
38 |
public class EntitiesRepoTable extends AbstractRepoTable { |
39 |
|
40 |
public static final String TABLE_NAME = "VCSGISREPO_ENTITIES"; |
41 |
|
42 |
public static final String COD_ENTITY = "COD_ENTITY"; |
43 |
private static final String COD_USER = "COD_USER"; |
44 |
private static final String COD_TOPOLOGYPLAN = "COD_TOPOLOGYPLAN"; |
45 |
private static final String COD_REVISION = "COD_REVISION"; |
46 |
public static final String ENTITY_NAME = "ENT_NAME"; |
47 |
private static final String DATATABLE_NAME = "ENT_DATATABLE"; |
48 |
private static final String FEATUREID_FIELD_NAME = "ENT_FEATURECODE"; |
49 |
private static final String GEOMETRY_FIELD_NAME = "ENT_GEOMNAME"; |
50 |
private static final String DESCRIPTION = "ENT_DESCRIPTION"; |
51 |
private static final String FEATURETYPE = "ENT_FEATURETYPE"; |
52 |
private static final String FIELD_FOR_LABEL = "ENT_FIELDFORLABEL"; |
53 |
private static final String CATEGORY = "ENT_CATEGORY"; |
54 |
private static final String LABEL = "ENT_LABEL"; |
55 |
private static final String AUTHORIZATIONS = "ENT_AUTORIZATIONS"; |
56 |
private static final String TOPOLOGYPLAN_MODE = "ENT_TOPOLOGYPLAN_MODE"; |
57 |
public static final String RESOURCES = "ENT_RESOURCES"; |
58 |
public static final String DATA_MODELS = "ENT_DATA_MODELS"; |
59 |
|
60 |
public static class EntityRepoRow extends AbstractRow implements VCSGisEntityEditable { |
61 |
|
62 |
FeatureType featureType; |
63 |
|
64 |
public EntityRepoRow(VCSGisRepositoryLocaldb repository) {
|
65 |
super(repository, TABLE_NAME, COD_ENTITY, null); |
66 |
} |
67 |
|
68 |
public EntityRepoRow(VCSGisRepositoryLocaldb repository, Feature feature) {
|
69 |
super(repository, TABLE_NAME, COD_ENTITY, feature);
|
70 |
} |
71 |
|
72 |
@Override
|
73 |
public String getEntityCode() { |
74 |
return super.getCode(); |
75 |
} |
76 |
|
77 |
@Override
|
78 |
public VCSGisEntityEditable setEntityCode(String code) { |
79 |
super.setCode(code);
|
80 |
return this; |
81 |
} |
82 |
|
83 |
@Override
|
84 |
public String getEntityName() { |
85 |
return this.feature.getString(ENTITY_NAME); |
86 |
} |
87 |
|
88 |
@Override
|
89 |
public String getRepositoryRevisionCode() { |
90 |
return this.feature.getString(COD_REVISION); |
91 |
} |
92 |
|
93 |
@Override
|
94 |
public String getTopologyPlanCode() { |
95 |
return this.feature.getString(COD_TOPOLOGYPLAN); |
96 |
} |
97 |
|
98 |
@Override
|
99 |
public String getUserCode() { |
100 |
return this.feature.getString(COD_USER); |
101 |
} |
102 |
|
103 |
@Override
|
104 |
public String getDataTableName() { |
105 |
return this.feature.getString(DATATABLE_NAME); |
106 |
} |
107 |
|
108 |
@Override
|
109 |
public String getFeatureIdFieldName() { |
110 |
return this.feature.getString(FEATUREID_FIELD_NAME); |
111 |
} |
112 |
|
113 |
@Override
|
114 |
public String getGeometryFieldName() { |
115 |
return this.feature.getString(GEOMETRY_FIELD_NAME); |
116 |
} |
117 |
|
118 |
@Override
|
119 |
public String getDescription() { |
120 |
return this.feature.getString(DESCRIPTION); |
121 |
} |
122 |
|
123 |
@Override
|
124 |
public String getFieldForLabel() { |
125 |
return this.feature.getString(FIELD_FOR_LABEL); |
126 |
} |
127 |
|
128 |
@Override
|
129 |
public String getCategory() { |
130 |
return this.feature.getString(CATEGORY); |
131 |
} |
132 |
|
133 |
@Override
|
134 |
public List<String> getCategoriesAsList() { |
135 |
String s = getCategory();
|
136 |
return VCSGisUtils.getAsList(s);
|
137 |
} |
138 |
|
139 |
@Override
|
140 |
public String getAuthorizations() { |
141 |
return this.feature.getString(AUTHORIZATIONS); |
142 |
} |
143 |
|
144 |
@Override
|
145 |
public int getTopologyPlanMode() { |
146 |
return this.feature.getIntOrDefault(TOPOLOGYPLAN_MODE, TOPOLOGYPLAN_MODE_RECOMMENDED); |
147 |
} |
148 |
|
149 |
@Override
|
150 |
public String getLabel() { |
151 |
return this.feature.getString(LABEL); |
152 |
} |
153 |
|
154 |
@Override
|
155 |
public String getFeatureTypeAsJson() { |
156 |
return this.feature.getString(FEATURETYPE); |
157 |
} |
158 |
|
159 |
@Override
|
160 |
public FeatureType getFeatureType() {
|
161 |
if( this.featureType==null ) { |
162 |
JsonObject json = Json.createObject(this.getFeatureTypeAsJson());
|
163 |
this.featureType = DALLocator.getDataManager().createFeatureType(json);
|
164 |
} |
165 |
return this.featureType; |
166 |
} |
167 |
|
168 |
@Override
|
169 |
public VCSGisEntityEditable setEntityName(String entityName) { |
170 |
this.feature.set(ENTITY_NAME, entityName);
|
171 |
if( StringUtils.isBlank(this.getLabel())) { |
172 |
this.setLabel(entityName);
|
173 |
} |
174 |
return this; |
175 |
} |
176 |
|
177 |
@Override
|
178 |
public VCSGisEntityEditable setRepositoryRevisionCode(String code) { |
179 |
this.feature.set(COD_REVISION, code);
|
180 |
return this; |
181 |
} |
182 |
|
183 |
@Override
|
184 |
public VCSGisEntityEditable setDataTableName(String dataTableName) { |
185 |
this.feature.set(DATATABLE_NAME, dataTableName);
|
186 |
return this; |
187 |
} |
188 |
|
189 |
@Override
|
190 |
public VCSGisEntityEditable setFeatureIdFieldName(String name) { |
191 |
this.feature.set(FEATUREID_FIELD_NAME, name);
|
192 |
return this; |
193 |
} |
194 |
|
195 |
@Override
|
196 |
public VCSGisEntityEditable setGeometryFieldName(String name) { |
197 |
this.feature.set(GEOMETRY_FIELD_NAME, name);
|
198 |
return this; |
199 |
} |
200 |
|
201 |
@Override
|
202 |
public VCSGisEntityEditable setDescription(String description) { |
203 |
this.feature.set(DESCRIPTION, description);
|
204 |
return this; |
205 |
} |
206 |
|
207 |
@Override
|
208 |
public VCSGisEntityEditable setFieldForLabel(String fieldForLabel) { |
209 |
this.feature.set(FIELD_FOR_LABEL, fieldForLabel);
|
210 |
return this; |
211 |
} |
212 |
|
213 |
@Override
|
214 |
public VCSGisEntityEditable setFeatureTypeAsJson(String json) { |
215 |
this.feature.set(FEATURETYPE, json);
|
216 |
this.featureType = null; |
217 |
return this; |
218 |
} |
219 |
|
220 |
public void setFeatureType(FeatureType featureType) { |
221 |
this.feature.set(FEATURETYPE, featureType.toJson().toString());
|
222 |
this.featureType = featureType;
|
223 |
} |
224 |
|
225 |
@Override
|
226 |
public VCSGisEntityEditable setTopologyPlanCode(String code) { |
227 |
this.feature.set(COD_TOPOLOGYPLAN, code);
|
228 |
return this; |
229 |
} |
230 |
|
231 |
@Override
|
232 |
public VCSGisEntityEditable setUserCode(String code) { |
233 |
this.feature.set(COD_USER, code);
|
234 |
return this; |
235 |
} |
236 |
|
237 |
@Override
|
238 |
public VCSGisEntityEditable setCategory(String category) { |
239 |
this.feature.set(CATEGORY, category);
|
240 |
return this; |
241 |
} |
242 |
|
243 |
@Override
|
244 |
public VCSGisEntityEditable setAuthorizations(String authorizations) { |
245 |
this.feature.set(AUTHORIZATIONS, authorizations);
|
246 |
return this; |
247 |
} |
248 |
|
249 |
@Override
|
250 |
public VCSGisEntityEditable setTopologyPlanMode(int topologyPlanMode) { |
251 |
this.feature.set(TOPOLOGYPLAN_MODE, topologyPlanMode);
|
252 |
return this; |
253 |
} |
254 |
|
255 |
@Override
|
256 |
public VCSGisEntityEditable setLabel(String label) { |
257 |
this.feature.set(LABEL, label);
|
258 |
return this; |
259 |
} |
260 |
|
261 |
@Override
|
262 |
public void copyfrom(VCSGisEntity entity) { |
263 |
VCSGisUtils.copy(entity, this, null); |
264 |
} |
265 |
|
266 |
@Override
|
267 |
public void copyto(VCSGisEntityEditable entity) { |
268 |
VCSGisUtils.copy(this, entity, null); |
269 |
} |
270 |
|
271 |
@Override
|
272 |
public JsonObject toJson() {
|
273 |
return VCSGisUtils.toJsonBuilder(this, null).build(); |
274 |
} |
275 |
|
276 |
@Override
|
277 |
public JsonObjectBuilder toJsonBuilder() {
|
278 |
return VCSGisUtils.toJsonBuilder(this, null); |
279 |
} |
280 |
|
281 |
@Override
|
282 |
public void fromJson(JsonObject json) { |
283 |
VCSGisUtils.fromJson(this, json);
|
284 |
} |
285 |
|
286 |
@Override
|
287 |
public EntityRepoRow getValue() {
|
288 |
return this; |
289 |
} |
290 |
|
291 |
@Override
|
292 |
public String toString() { |
293 |
if( StringUtils.isBlank(this.getLabel()) ) { |
294 |
return this.getEntityName(); |
295 |
} |
296 |
return this.getLabel(); |
297 |
} |
298 |
|
299 |
@Override
|
300 |
public boolean isAuthorized(VCSGisUser user, String operation) { |
301 |
return VCSGisUtils.isAuthorized(this, operation, user); |
302 |
} |
303 |
|
304 |
@Override
|
305 |
public VCSGisEntityEditable setResources(String resources) { |
306 |
this.feature.set(RESOURCES, resources);
|
307 |
return this; |
308 |
} |
309 |
|
310 |
@Override
|
311 |
public VCSGisEntityEditable setDataModels(String dataModels) { |
312 |
this.feature.set(DATA_MODELS, dataModels);
|
313 |
return this; |
314 |
} |
315 |
|
316 |
@Override
|
317 |
public String getResources() { |
318 |
return this.getString(RESOURCES); |
319 |
} |
320 |
|
321 |
@Override
|
322 |
public String getDataModels() { |
323 |
return this.getString(DATA_MODELS); |
324 |
} |
325 |
|
326 |
@Override
|
327 |
public List<String> getDataModelsAsList() { |
328 |
String s = getDataModels();
|
329 |
return VCSGisUtils.getAsList(s, false); |
330 |
} |
331 |
|
332 |
} |
333 |
|
334 |
public EntitiesRepoTable() {
|
335 |
super(TABLE_NAME, featureType());
|
336 |
} |
337 |
|
338 |
public EntityRepoRow getByEntityCode(VCSGisRepositoryLocaldb repository, String entityCode) { |
339 |
FeatureStore store = null;
|
340 |
try {
|
341 |
store = repository.getFeatureStore(TABLE_NAME); |
342 |
Feature f = store.findFirst("\""+COD_ENTITY+"\"='"+entityCode+"'"); |
343 |
if( f==null ) { |
344 |
return null; |
345 |
} |
346 |
EntityRepoRow row = new EntityRepoRow(repository, f);
|
347 |
return row;
|
348 |
} catch (Exception ex) { |
349 |
throw new RuntimeException("Can't retrieve entity '"+entityCode+"'.", ex); |
350 |
} finally {
|
351 |
DisposeUtils.disposeQuietly(store); |
352 |
} |
353 |
} |
354 |
|
355 |
public EntityRepoRow getByEntityName(VCSGisRepositoryLocaldb repository, String entityName) { |
356 |
FeatureStore store = null;
|
357 |
try {
|
358 |
store = repository.getFeatureStore(TABLE_NAME); |
359 |
Feature f = store.findFirst("\""+ENTITY_NAME+"\"='"+entityName+"'"); |
360 |
if( f==null ) { |
361 |
return null; |
362 |
} |
363 |
EntityRepoRow row = new EntityRepoRow(repository, f);
|
364 |
return row;
|
365 |
} catch (Exception ex) { |
366 |
throw new RuntimeException("Can't retrieve entity '"+entityName+"'.", ex); |
367 |
} finally {
|
368 |
DisposeUtils.disposeQuietly(store); |
369 |
} |
370 |
} |
371 |
|
372 |
public Map<String, EntityRepoRow> getAllAsMap(VCSGisRepositoryLocaldb repository) { |
373 |
Map<String, EntityRepoRow> entitiesMap = new HashMap<>(); |
374 |
|
375 |
DisposableFeatureSetIterable entities = this.getAll(repository);
|
376 |
for (Feature fentity : entities) {
|
377 |
EntityRepoRow entity = new EntityRepoRow(repository, fentity);
|
378 |
entitiesMap.put(entity.getCode(), entity); |
379 |
} |
380 |
entities = null;
|
381 |
DisposeUtils.disposeQuietly(entities); |
382 |
return entitiesMap;
|
383 |
} |
384 |
|
385 |
public DisposableFeatureSetIterable getAll(VCSGisRepositoryLocaldb repository) {
|
386 |
FeatureStore store = null;
|
387 |
try {
|
388 |
store = repository.getFeatureStore(TABLE_NAME); |
389 |
DisposableFeatureSetIterable changes = store.getFeatureSet().iterable(); |
390 |
return changes;
|
391 |
} catch (Exception ex) { |
392 |
throw new RuntimeException("Can't retrieve all entities.", ex); |
393 |
} finally {
|
394 |
if( store!=null ) { |
395 |
DisposeUtils.dispose(store); |
396 |
} |
397 |
} |
398 |
} |
399 |
|
400 |
public static final FeatureType featureType() { |
401 |
DataManager dataManager = DALLocator.getDataManager(); |
402 |
EditableFeatureType ft = dataManager.createFeatureType(); |
403 |
ft.setLabel("VCSGIS Entities");
|
404 |
ft.getTags().set("ID", TABLE_NAME);
|
405 |
ft.getTags().set(DynFormSPIManager.TAG_DYNFORM_HEIGHT, 475);
|
406 |
ft.getTags().set(DynFormSPIManager.TAG_DYNFORM_WIDTH, 570);
|
407 |
ft.getTags().set(DynFormSPIManager.TAG_DYNFORM_LAYOUTMODE, DynFormSPIManager.TAG_DYNFORM_LAYOUTMODE_VALUE_TABS); |
408 |
ft.add(COD_ENTITY, DataTypes.STRING) |
409 |
.setSize(VCSGISCODELEN) |
410 |
.setIsPrimaryKey(true)
|
411 |
.setLabel("Code")
|
412 |
.setOrder(10);
|
413 |
ft.add(COD_REVISION, DataTypes.STRING) |
414 |
.setForeingkey( |
415 |
true,
|
416 |
false,
|
417 |
RevisionsRepoTable.TABLE_NAME, |
418 |
RevisionsRepoTable.COD_REVISION, |
419 |
"FORMAT('r%d %s', REV_NUMBER, REV_OPERATIONDATE)"
|
420 |
) |
421 |
.setIsIndexed(true)
|
422 |
.setAllowIndexDuplicateds(true)
|
423 |
.setSize(VCSGISCODELEN) |
424 |
.setLabel("Head revision of this entity")
|
425 |
.setOrder(40);
|
426 |
ft.add(COD_USER, DataTypes.STRING) |
427 |
.setForeingkey( |
428 |
true,
|
429 |
false,
|
430 |
UsersRepoTable.TABLE_NAME, |
431 |
UsersRepoTable.COD_USER, |
432 |
UsersRepoTable.USER_ID |
433 |
) |
434 |
.setIsIndexed(true)
|
435 |
.setAllowIndexDuplicateds(true)
|
436 |
.setSize(VCSGISCODELEN) |
437 |
.setLabel("Cod. user")
|
438 |
.setOrder(30);
|
439 |
ft.add(COD_TOPOLOGYPLAN, DataTypes.STRING) |
440 |
.setForeingkey( |
441 |
true,
|
442 |
false,
|
443 |
TopologyplanRepoTable.TABLE_NAME, |
444 |
TopologyplanRepoTable.COD_TOPOLOGYPLAN, |
445 |
TopologyplanRepoTable.TOPPLAN_NAME |
446 |
) |
447 |
.setSize(VCSGISCODELEN) |
448 |
.setIsIndexed(true)
|
449 |
.setAllowIndexDuplicateds(true)
|
450 |
.setLabel("Topology plan")
|
451 |
.setOrder(90);
|
452 |
ft.add(ENTITY_NAME, DataTypes.STRING) |
453 |
.setIsIndexed(true)
|
454 |
.setAllowIndexDuplicateds(false)
|
455 |
.setSize(200)
|
456 |
.setLabel("Name")
|
457 |
.setOrder(20);
|
458 |
ft.add(DATATABLE_NAME, DataTypes.STRING) |
459 |
.setSize(200)
|
460 |
.setLabel("Name of the table in which the data is stored")
|
461 |
.setOrder(50);
|
462 |
ft.add(FEATUREID_FIELD_NAME, DataTypes.STRING) |
463 |
.setSize(200)
|
464 |
.setLabel("Name of the primary key attribute.")
|
465 |
.setOrder(60);
|
466 |
ft.add(GEOMETRY_FIELD_NAME, DataTypes.STRING) |
467 |
.setSize(200)
|
468 |
.setLabel("Name of the geometry attribute.")
|
469 |
.setOrder(70);
|
470 |
ft.add(FIELD_FOR_LABEL, DataTypes.STRING) |
471 |
.setSize(200)
|
472 |
.setLabel("Field for label")
|
473 |
.setOrder(10);
|
474 |
ft.add(CATEGORY, DataTypes.STRING) |
475 |
.setSize(200)
|
476 |
.setLabel("Category")
|
477 |
.setOrder(80);
|
478 |
ft.add(LABEL, DataTypes.STRING) |
479 |
.setSize(200)
|
480 |
.setLabel("Label")
|
481 |
.setOrder(25);
|
482 |
ft.add(AUTHORIZATIONS, DataTypes.STRING) |
483 |
.setTag(DynFormSPIManager.TAG_DYNFORM_RESIZEWEIGHT, 60)
|
484 |
.setTag(DynFormSPIManager.TAG_DYNFORM_LABEL_EMPTY, true)
|
485 |
.setDataProfileName("Text")
|
486 |
.setSize(10240)
|
487 |
.setLabel("Authorizations")
|
488 |
.setGroup("Authorizations")
|
489 |
.setOrder(10)
|
490 |
.setDefaultFieldValue("{\n" +
|
491 |
" \"checkout\": [ \"*\" ],\n" +
|
492 |
" \"commit\": [ \"*\" ],\n" +
|
493 |
" \"view\": [ \"*\" ],\n" +
|
494 |
" \"history\": [ \"*\" ],\n" +
|
495 |
" \"update\": [ \"*\" ]\n" +
|
496 |
"}")
|
497 |
.setDescription("Json with the information of what operations the different users can do.\nExample:\n{\n" +
|
498 |
" \"checkout\": [ \"user1\", \"user2\"],\n" +
|
499 |
" \"commit\": [ \"user1\" ],\n" +
|
500 |
" \"view\": [ \"user1\", \"user2\"],\n" +
|
501 |
" \"history\": [ \"user1\" ],\n" +
|
502 |
" \"update\": [ \"user1\", \"user2\"],\n" +
|
503 |
" \""+RowCreateRequestHelper.REQUEST_NAME+"\": [ \"batchuser1\"],\n" + |
504 |
" \""+RowUpdateRequestHelper.REQUEST_NAME+"\": [ \"batchuser1\"],\n" + |
505 |
" \""+RowDeleteRequestHelper.REQUEST_NAME+"\": [ \"batchuser1\"],\n" + |
506 |
"}\n\n" +
|
507 |
"use $ before the name to indicate a role name instead of a username."
|
508 |
); |
509 |
ft.add(DESCRIPTION, DataTypes.STRING) |
510 |
.setTag(DynFormSPIManager.TAG_DYNFORM_RESIZEWEIGHT, 60)
|
511 |
.setDataProfileName("Text")
|
512 |
.setSize(10240)
|
513 |
.setLabel("Description")
|
514 |
.setOrder(110);
|
515 |
ft.add(FEATURETYPE, DataTypes.STRING) |
516 |
.setTag(DynFormSPIManager.TAG_DYNFORM_RESIZEWEIGHT, 60)
|
517 |
.setTag(DynFormSPIManager.TAG_DYNFORM_LABEL_EMPTY, true)
|
518 |
.setDataProfileName("Text")
|
519 |
.setSize(10240)
|
520 |
.setLabel("Feature type")
|
521 |
.setGroup("Feature type")
|
522 |
.setOrder(10);
|
523 |
ft.add(TOPOLOGYPLAN_MODE, DataTypes.INTEGER) |
524 |
.setLabel("Topology plan mode")
|
525 |
.setAvailableValues(new DynObjectValueItem[] { |
526 |
new DynObjectValueItem(TOPOLOGYPLAN_MODE_RECOMMENDED, "Recommended"), |
527 |
new DynObjectValueItem(TOPOLOGYPLAN_MODE_MANDATORY, "Mandatory") |
528 |
}) |
529 |
.setOrder(100);
|
530 |
ft.add(RESOURCES, DataTypes.STRING) |
531 |
.setSize(200)
|
532 |
.setLabel("Resources");
|
533 |
ft.add(DATA_MODELS, DataTypes.STRING) |
534 |
.setSize(200)
|
535 |
.setLabel("Data models");
|
536 |
|
537 |
return ft.getNotEditableCopy();
|
538 |
} |
539 |
|
540 |
} |