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));
82 private class DBDateField implements CalculatedField {
83 private String fieldName;
85 public DBDateField(String aFieldName) {
86 fieldName = aFieldName;
89 public Object getValue(EntityAdapter anEntityAdapter) {
91 Map result = new HashMap();
92 String textValue = anEntityAdapter.getEntity().getValue(fieldName);
93 Calendar calendar = GregorianCalendar.getInstance();
102 if (textValue!=null) {
104 year = Integer.parseInt(textValue.substring(0,4));
105 month = Integer.parseInt(textValue.substring(5,7));
106 day = Integer.parseInt(textValue.substring(8,10));
107 hours = Integer.parseInt(textValue.substring(11,13));
108 minutes = Integer.parseInt(textValue.substring(14,16));
110 calendar.set(year, month-1, day, hours, minutes);
111 date = calendar.getTime();
113 result.put("date", date);
114 result.put("formatted", new DateToMapAdapter(date));
115 result.put("raw", textValue);
117 catch (Throwable t) {
126 static protected Object getRelation(StorageObject aStorageObject, String aWhereClause, String anOrderByClause, EntityAdapterDefinition aDefinition) {
129 new CachingRewindableIterator( new EntityIteratorAdapter(
130 new EntityBrowser( aStorageObject, aWhereClause, anOrderByClause, -1),
133 catch (Throwable t) {
134 throw new RuntimeException(t.getMessage());