jai removed from license part 1
[mir.git] / source / mir / entity / adapter / EntityAdapterDefinition.java
index a059ad6..0c5bb63 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2001, 2002  The Mir-coders group
+ * Copyright (C) 2005 The Mir-coders group
  *
  * This file is part of Mir.
  *
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * In addition, as a special exception, The Mir-coders gives permission to link
- * the code of this program with the com.oreilly.servlet library, any library
- * licensed under the Apache Software License, The Sun (tm) Java Advanced
- * Imaging library (JAI), The Sun JIMI library (or with modified versions of
- * the above that use the same license as the above), and distribute linked
- * combinations including the two.  You must obey the GNU General Public
- * License in all respects for all of the code used other than the above
- * mentioned libraries.  If you modify this file, you may extend this exception
- * to your version of the file, but you are not obligated to do so.  If you do
- * not wish to do so, delete this exception statement from your version.
+ * the code of this program with  any library licensed under the Apache Software License.
+ * You must obey the GNU General Public License in all respects for all of the code used
+ * other than the above mentioned libraries.  If you modify this file, you may extend this
+ * exception to your version of the file, but you are not obligated to do so.
+ * If you do not wish to do so, delete this exception statement from your version.
  */
-
 package mir.entity.adapter;
 
-import java.util.*;
-import mir.entity.*;
-import mir.storage.*;
-import mir.util.*;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.TimeZone;
+
+import mir.entity.Entity;
+import mir.misc.StringUtil;
+import mir.util.GeneratorFormatAdapters;
 
+/**
+ * <code>EntityAdapterDefinition</code> defines the fields for an entity adapter of
+ *  a particular "type". Custom calculated fields can be defined.
+ *
+ */
 public class EntityAdapterDefinition {
-  Map calculatedFields;
+  private Map calculatedFields;
 
   public EntityAdapterDefinition() {
     calculatedFields = new HashMap();
   }
 
+  /**
+   *
+   *
+   * @param anEntity the entity that will be wrapped by the entity adapter
+   * @param aModel the base model
+   * @return the resulting entity adapter
+   */
   public EntityAdapter makeEntityAdapter(Entity anEntity, EntityAdapterModel aModel) {
     return new EntityAdapter(anEntity, this, aModel);
   }
 
+  /**
+   *
+   * @param aFieldName
+   * @return the <code>CalculatedField</code> if it exists. <code>null</code> otherwise
+   */
   public CalculatedField getCalculatedField(String aFieldName) {
     return (CalculatedField) calculatedFields.get(aFieldName);
   }
 
+  /**
+   *
+   * @param aFieldName
+   * @return boolean true if aFieldName is a calculated Field
+   */
   public boolean hasCalculatedField(String aFieldName) {
     return calculatedFields.containsKey(aFieldName);
   }
 
+  /**
+   *
+   * @param aFieldName
+   * @param aField
+   */
   public void addCalculatedField(String aFieldName, CalculatedField aField) {
     calculatedFields.put(aFieldName, aField);
   }
 
-  public void addMirDateField(String aDestinationFieldName, String aSourceFieldName) {
-    addCalculatedField(aDestinationFieldName, new MirDateField(aSourceFieldName));
+  /**
+   * To add a calculated field based on a "mir" date field: a string field of the form yyyyMMdd[hhmm]
+   *
+   * @param aDestinationFieldName
+   * @param aSourceFieldName
+   * @param aDefaultTimezone
+   */
+  public void addMirDateField(String aDestinationFieldName, String aSourceFieldName, String aDefaultTimezone) {
+    addCalculatedField(aDestinationFieldName, new MirDateField(aSourceFieldName, aDefaultTimezone));
   }
 
-  public void addDBDateField(String aDestinationFieldName, String aSourceFieldName) {
-    addCalculatedField(aDestinationFieldName, new DBDateField(aSourceFieldName));
+  /**
+   * Adds a calculated field based on a db date field
+   *
+   * @param aDestinationFieldName the field name of the calculated field
+   * @param aSourceFieldName the field name of the entity (must be a date field)
+   * @param aDefaultTimezone the default timezone to use
+   */
+  public void addDBDateField(String aDestinationFieldName, String aSourceFieldName, String aDefaultTimezone) {
+    addCalculatedField(aDestinationFieldName, new DBDateField(aSourceFieldName, aDefaultTimezone));
   }
 
+  /**
+   * a calculated field: field gets its value from other fields.
+   */
   public interface CalculatedField {
+    /**
+     * Method to retrieve the calculated value of the field.
+     *
+     * @param anEntityAdapter the entity
+     * @return the value of the field.
+     */
     public Object getValue(EntityAdapter anEntityAdapter);
   }
 
   private class MirDateField implements CalculatedField {
     private String fieldName;
+    private String defaultTimezone;
 
-    public MirDateField(String aFieldName) {
+    public MirDateField(String aFieldName, String aDefaultTimezone) {
       fieldName = aFieldName;
+      defaultTimezone = aDefaultTimezone;
     }
 
     public Object getValue(EntityAdapter anEntityAdapter) {
-
-      Map result = new HashMap();
-      String textValue = anEntityAdapter.getEntity().getValue(fieldName);
-      Calendar calendar = GregorianCalendar.getInstance();
-      int year;
-      int month;
-      int day;
-      Date date;
-
-      if (textValue!=null) {
-        try {
-          year = Integer.parseInt(textValue.substring(0,4));
-          month = Integer.parseInt(textValue.substring(4,6));
-          day = Integer.parseInt(textValue.substring(6,8));
-
-          calendar.set(year, month-1, day);
-          date = calendar.getTime();
-          ;
-
-          result.put("date", date);
-          result.put("formatted", new DateToMapAdapter(date));
-
-        }
-        catch (Throwable t) {
-          result=null;
-        }
-      }
-      return result;
-    }
+         Object result = null;
+         String textValue = anEntityAdapter.getEntity().getFieldValue(fieldName);
+         Calendar calendar = GregorianCalendar.getInstance();
+         int year;
+         int month;
+         int day;
+         Date date;
+
+         if (textValue!=null) {
+           try {
+             year = Integer.parseInt(textValue.substring(0,4));
+             month = Integer.parseInt(textValue.substring(4,6));
+             day = Integer.parseInt(textValue.substring(6,8));
+
+             calendar.setTimeZone(TimeZone.getTimeZone(defaultTimezone));
+             calendar.set(year, month-1, day);
+
+             date = calendar.getTime();
+
+             result = new GeneratorFormatAdapters.DateFormatAdapter(date, defaultTimezone);
+           }
+           catch (Throwable t) {
+             result=null;
+           }
+         }
+         return result;
+       }
   }
 
   private class DBDateField implements CalculatedField {
     private String fieldName;
+    private String defaultTimezone;
 
-    public DBDateField(String aFieldName) {
+    public DBDateField(String aFieldName, String aDefaultTimezone) {
       fieldName = aFieldName;
+      defaultTimezone = aDefaultTimezone;
     }
 
     public Object getValue(EntityAdapter anEntityAdapter) {
+      Object result = null;
+      String text = anEntityAdapter.getEntity().getFieldValue(fieldName);
 
-      Map result = new HashMap();
-      String textValue = anEntityAdapter.getEntity().getValue(fieldName);
-      Calendar calendar = GregorianCalendar.getInstance();
-      int year;
-      int month;
-      int day;
-      int hours;
-      int minutes;
-
-      Date date;
-
-      if (textValue!=null) {
+      if (text!=null) {
         try {
-          year = Integer.parseInt(textValue.substring(0,4));
-          month = Integer.parseInt(textValue.substring(5,7));
-          day = Integer.parseInt(textValue.substring(8,10));
-          hours = Integer.parseInt(textValue.substring(11,13));
-          minutes = Integer.parseInt(textValue.substring(14,16));
-
-          calendar.set(year, month-1, day, hours, minutes);
-          date = calendar.getTime();
-
-          result.put("date", date);
-          result.put("formatted", new DateToMapAdapter(date));
-          result.put("raw", textValue);
+          result = new GeneratorFormatAdapters.DateFormatAdapter(StringUtil.convertMirInternalDateToDate(text), defaultTimezone);
         }
         catch (Throwable t) {
-          result=null;
         }
       }