1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.caleigo.core.meta;
20
21
22 import java.util.*;
23
24 import org.caleigo.core.*;
25
26 /***
27 *
28 * @author Mattias Hagstrand
29 * @version 1.0
30 */
31
32
33
34
35
36
37 public class MetaEntityMetaProducer implements IMetaProducer
38 {
39
40 public MetaEntityMetaProducer()
41 {
42 }
43
44
45
46 /***
47 * Start the production of meta data.
48 *
49 * @param consumer the consumer of the meta data.
50 */
51 public void produce(IMetaConsumer consumer)
52 {
53 MetaDataSourceDescriptorEntity dataSourceEntity = (MetaDataSourceDescriptorEntity) MetaDataSourceDescriptor.instance.loadSelection(null).asList().get(0);
54 consumer.beginDataSource(dataSourceEntity.getCodeName(), dataSourceEntity.getSourceName(),
55 dataSourceEntity.getDisplayName(), dataSourceEntity.getVersion(), dataSourceEntity.isReadOnly());
56
57 Iterator entities = MetaEntityDescriptor.instance.loadSelection(null).iterator();
58 while (entities.hasNext())
59 {
60 MetaEntityDescriptorEntity currentEntity = (MetaEntityDescriptorEntity) entities.next();
61 consumer.beginEntity(currentEntity.getCodeName(),
62 currentEntity.getSourceName(),
63 currentEntity.getDisplayName(),
64 currentEntity.getEntityType(),
65 this.createEntityFlags(currentEntity),
66 currentEntity.getCacheTime());
67
68 Iterator fields = MetaFieldDescriptor.instance.loadSelection(Qualifier.create(MetaFieldDescriptor.Entity, currentEntity.getSourceName())).iterator();
69 while (fields.hasNext())
70 {
71 MetaFieldDescriptorEntity currentField = (MetaFieldDescriptorEntity) fields.next();
72 try
73 {
74 consumer.addField(currentField.getCodeName(),
75 currentField.getSourceName(),
76 currentField.getDisplayName(),
77 DataType.mapDataType(Class.forName(MetaDataType.load(currentField.getDataType()).getObjectTypeClass())),
78 currentField.getLength(),
79 this.createFieldFlags(currentField),
80 currentField.getDefaultValueData());
81 }
82 catch (ClassNotFoundException e) {}
83 }
84
85 List entityRelations = MetaEntityRelation.instance.loadSelection(Qualifier.create(MetaEntityRelation.ReferenceEntity, currentEntity.getSourceName())).asList();
86 entityRelations.addAll(MetaEntityRelation.instance.loadSelection(Qualifier.create(MetaEntityRelation.TargetEntity, currentEntity.getSourceName())).asList());
87
88 Iterator entityRelationsIterator = entityRelations.iterator();
89 while (entityRelationsIterator.hasNext())
90 {
91 MetaEntityRelationEntity currentEntityRelation = (MetaEntityRelationEntity) entityRelationsIterator.next();
92 consumer.beginEntityRelation(currentEntityRelation.getReferenceEntity(), currentEntityRelation.getTargetEntity(), currentEntityRelation.getSourceName(), currentEntityRelation.getCodeName(), currentEntityRelation.getForwardName(), currentEntityRelation.getReverseName());
93
94 Iterator fieldRelations = MetaFieldRelation.instance.loadSelection(Qualifier.create(MetaFieldRelation.EntityRelation, currentEntityRelation.getSourceName())).iterator();
95 while (fieldRelations.hasNext())
96 {
97 MetaFieldRelationEntity currentFieldRelation = (MetaFieldRelationEntity) fieldRelations.next();
98 consumer.addFieldRelation(currentFieldRelation.getReferenceField(), currentFieldRelation.getTargetField());
99 }
100
101 consumer.endEntityRelation();
102 }
103
104
105 consumer.endEntity();
106 }
107
108 consumer.endDataSource();
109 }
110
111
112 private int createEntityFlags(MetaEntityDescriptorEntity entity)
113 {
114 int currentEntityFlags = entity.getSizeType();
115 currentEntityFlags |= (entity.isCreatable() ? AbstractEntityDescriptor.CREATABLE : 0);
116 currentEntityFlags |= (entity.isEditable() ? AbstractEntityDescriptor.EDITABLE : 0);
117 currentEntityFlags |= (entity.isDeletable() ? AbstractEntityDescriptor.DELETABLE : 0);
118 return currentEntityFlags;
119 }
120
121 private int createFieldFlags(MetaFieldDescriptorEntity field)
122 {
123 int currentFieldFlags = 0;
124 currentFieldFlags |= (field.isAutoGenerated() ? IFieldDescriptor.AUTOGEN : 0);
125 currentFieldFlags |= (field.isHidden() ? IFieldDescriptor.HIDDEN_FIELD : 0);
126 currentFieldFlags |= (field.isHintField() ? IFieldDescriptor.HINT_FIELD : 0);
127 currentFieldFlags |= (field.isIdentityField() ? IFieldDescriptor.IDENTITY_FIELD : 0);
128 currentFieldFlags |= (field.isIndexed() ? IFieldDescriptor.INDEXED : 0);
129 currentFieldFlags |= (field.isNameField() ? IFieldDescriptor.NAME_FIELD : 0);
130 currentFieldFlags |= (field.isOverviewField() ? IFieldDescriptor.OVERVIEW_FIELD : 0);
131 currentFieldFlags |= (field.isReadOnly() ? IFieldDescriptor.READ_ONLY_FIELD : 0);
132 currentFieldFlags |= (field.isNaturalOrder() ? IFieldDescriptor.NATURAL_ORDER : 0);
133 currentFieldFlags |= (field.isRequired() ? IFieldDescriptor.REQUIRED : 0);
134 return currentFieldFlags;
135 }
136 }