1 package mir.entity.adapter;
8 public class EntityAdapterDefinition {
11 public EntityAdapterDefinition() {
12 calculatedFields = new HashMap();
15 public EntityAdapter makeEntityAdapter(Entity anEntity) {
16 return new EntityAdapter(anEntity, this);
19 public CalculatedField getCalculatedField(String aFieldName) {
20 return (CalculatedField) calculatedFields.get(aFieldName);
23 public boolean hasCalculatedField(String aFieldName) {
24 return calculatedFields.containsKey(aFieldName);
27 public void addCalculatedField(String aFieldName, CalculatedField aField) {
28 calculatedFields.put(aFieldName, aField);
31 public void addMirDateField(String aDestinationFieldName, String aSourceFieldName) {
32 addCalculatedField(aDestinationFieldName, new MirDateField(aSourceFieldName));
35 public void addDBDateField(String aDestinationFieldName, String aSourceFieldName) {
36 addCalculatedField(aDestinationFieldName, new DBDateField(aSourceFieldName));
39 public interface CalculatedField {
40 public Object getValue(EntityAdapter anEntityAdapter);
43 private class MirDateField implements CalculatedField {
44 private String fieldName;
46 public MirDateField(String aFieldName) {
47 fieldName = aFieldName;
50 public Object getValue(EntityAdapter anEntityAdapter) {
52 Map result = new HashMap();
53 String textValue = anEntityAdapter.getEntity().getValue(fieldName);
54 Calendar calendar = GregorianCalendar.getInstance();
60 if (textValue!=null) {
62 year = Integer.parseInt(textValue.substring(0,4));
63 month = Integer.parseInt(textValue.substring(4,6));
64 day = Integer.parseInt(textValue.substring(6,8));
66 calendar.set(year, month-1, day);
67 date = calendar.getTime();
70 result.put("date", date);
71 result.put("formatted", new DateToMapAdapter(date));
85 private class DBDateField implements CalculatedField {
86 private String fieldName;
88 public DBDateField(String aFieldName) {
89 fieldName = aFieldName;
92 public Object getValue(EntityAdapter anEntityAdapter) {
94 Map result = new HashMap();
95 String textValue = anEntityAdapter.getEntity().getValue(fieldName);
96 Calendar calendar = GregorianCalendar.getInstance();
105 if (textValue!=null) {
107 year = Integer.parseInt(textValue.substring(0,4));
108 month = Integer.parseInt(textValue.substring(5,7));
109 day = Integer.parseInt(textValue.substring(8,10));
110 hours = Integer.parseInt(textValue.substring(11,13));
111 minutes = Integer.parseInt(textValue.substring(14,16));
113 calendar.set(year, month-1, day, hours, minutes);
114 date = calendar.getTime();
116 result.put("date", date);
117 result.put("formatted", new DateToMapAdapter(date));
118 result.put("raw", textValue);
120 catch (Throwable t) {
131 static protected Object getRelation(StorageObject aStorageObject, String aWhereClause, String anOrderByClause, EntityAdapterDefinition aDefinition) {
134 new CachingRewindableIterator( new EntityIteratorAdapter(
135 new EntityBrowser( aStorageObject, aWhereClause, anOrderByClause, -1),
138 catch (Throwable t) {
139 throw new RuntimeException(t.getMessage());