View Javadoc

1   /* (c) Copyright 2003 Caleigo AB, All rights reserved. 
2    * 
3    * This library is free software; you can redistribute it and/or
4    * modify it under the terms of the GNU Lesser General Public
5    * License as published by the Free Software Foundation; either
6    * version 2.1 of the License, or (at your option) any later version.
7    * 
8    * This library is distributed in the hope that it will be useful,
9    * but WITHOUT ANY WARRANTY; without even the implied warranty of
10   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11   * Lesser General Public License for more details.
12   * 
13   * You should have received a copy of the GNU Lesser General Public
14   * License along with this library; if not, write to the Free Software
15   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
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  * WHEN        WHO               WHY & WHAT
34  * ------------------------------------------------------------------------------
35  * 2002-04-17  Mattias Hagstrand    Creation
36  */
37  public class MetaEntityMetaProducer implements IMetaProducer
38  {
39      // Constructors ------------------------------------------------------------
40      public MetaEntityMetaProducer()
41      {
42      }
43      
44      // IMetaProducer implementation --------------------------------------------
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  //            Iterator entityRelations = EntityRelationEntityDescriptor.instance.loadSelection(Qualifier.create(EntityRelationEntityDescriptor.ParentEntitySourceName, currentEntity.getSourceName())).iterator();
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     // Help methods ------------------------------------------------------------
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 }