next up previous contents
Next: Comparison of the Code Up: Refactoring Example Previous: Replace Parameter with Query

The Two Subclasses of DatabaseFormat

// PROGRESS 
package emw.metaworks.server;

import emw.metaworks.model.*;
import emw.metaworks.util.*;
import java.util.Date;
import java.util.Hashtable;

public class ProgressFormat extends DatabaseFormat {

  protected static UTCDateFormat dateFormat = new UTCDateFormat("MM/dd/yyyy");

  protected static String DELETE = "delete from";

    public String formatObject(Object obj) {
        if (obj instanceof Boolean) return (((Boolean)obj).booleanValue())?"yes":"no";
        if (obj instanceof java.util.Date || obj instanceof java.sql.Date ) {
            return "date('"+dateFormat.format(obj)+"')";
        }

        return super.formatObject(obj);
    }

    public  String createUpdateStatement(Data data, Object user_oid) {
        DataDescriptor dd = data.getDescriptor();
        String mainTable = dd.getDBTable(dd.getOidId(), false);
        String qualifiedName=createQualifiedName(dd.getDB(),mainTable,null);


        StringBuffer set=null, where = null;

          for (int j = 0 ; j < data.getAttributesCount(); j++){

            String attributTableName = dd.getDBTable(j, false);

            if (!mainTable.equals(attributTableName) || !data.wasChanged(j)){
              continue;
            }

            set=concatExpressions(set,",",
                  getExpression(dd.getAttributeName(j),
                                Kriterium.EQ,
                                data.getAttribute(j)));
          }

          where = createOidExpression(data.getOids(), dd);

          if (data.getLastModify()!=null) {

            set=concatExpressions(set,",",
                  getExpression("geaendert_von",
                                Kriterium.EQ,
                                user_oid));

            set=concatExpressions(set,",",
                  getExpression("geaendert_datum",
                                Kriterium.EQ,
                                new java.sql.Date(System.currentTimeMillis())));

            where=andExpressions(where,
                  getExpression("geaendert_datum",
                                Kriterium.LE,
                                new java.sql.Date(data.getLastModify().getTime())));
          }

          return  UPDATE + " " + qualifiedName      + " " +
                  SET    + " " + notNullString(set) + " " +
                  WHERE  + " " + notNullString(where);

    }

}

// ORACLE

package emw.metaworks.server;

import emw.metaworks.model.*;
import emw.metaworks.util.*;
import java.util.Date;
import java.util.Hashtable;

public class OracleFormat extends DatabaseFormat {

    protected static UTCDateFormat dateFormat = new UTCDateFormat("yyyy-MM-dd HH:mm:ss"); 

  protected static String DELETE = "delete";

    public String formatObject(Object obj) {
        if (obj instanceof java.util.Date) {
            return "to_date('" + dateFormat.format(obj) + 
                            "','YYYY-MM-DD HH24:MI:SS')";
        }
        if (obj instanceof Boolean) return (((Boolean)obj).booleanValue())?"1":"0";
        return super.formatObject(obj);
    }

    public  String createUpdateStatement(Data data, Object user_oid) {
        DataDescriptor dd = data.getDescriptor();
        String mainTable = dd.getDBTable(dd.getOidId(), false);
        String qualifiedName=createQualifiedName(dd.getDB(),mainTable,null);


        StringBuffer set=null, where = null, values=null;

          for (int j = 0 ; j < data.getAttributesCount(); j++){

            String attributTableName = dd.getDBTable(j, false);

            if (!mainTable.equals(attributTableName) || !data.wasChanged(j)){
              continue;
            }

            set=concatExpressions(set,",", dd.getAttributeName(j));

            values=concatExpressions(values,",", formatObject(data.getAttribute(j)));
          }

          where = createOidExpression(data.getOids(), dd);

          if (data.getLastModify()!=null) {

            set=concatExpressions(set,",","geaendert_von");
            values=concatExpressions(values,",",formatObject(user_oid));

            set=concatExpressions(set,",","geaendert_datum");
            values=concatExpressions(values,",",formatObject(
                new java.sql.Date(System.currentTimeMillis())));


            where=andExpressions(where,
                  getExpression("geaendert_datum",
                                Kriterium.LE,
                                new java.sql.Date(data.getLastModify().getTime())));
          }

          return  UPDATE + " " + qualifiedName      + " " +
                  SET    + " (" + notNullString(set) + ") = " +
                  " ( select "  + notNullString(values) + " from dual ) " +
                  WHERE   + " " + notNullString(where);

    }

}


next up previous contents
Next: Comparison of the Code Up: Refactoring Example Previous: Replace Parameter with Query

Michael Hunger
Mit Okt 25 00:48:16 MEST 2000