Print

Print


Author: [log in to unmask]
Date: Thu Nov 13 11:53:11 2014
New Revision: 1508

Log:
Implement insert command for ConditionsRecord.

Modified:
    java/trunk/conditions/src/main/java/org/hps/conditions/ConditionsRecord.java
    java/trunk/conditions/src/main/java/org/hps/conditions/QueryBuilder.java

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/ConditionsRecord.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/ConditionsRecord.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/ConditionsRecord.java	Thu Nov 13 11:53:11 2014
@@ -1,6 +1,7 @@
 package org.hps.conditions;
 
 import java.util.Date;
+import java.util.List;
 
 /**
  * This class represents a single record from the primary conditions data table,
@@ -9,9 +10,6 @@
  * 
  * @author Jeremy McCormick <[log in to unmask]>
  */
-// TODO: Check behavior of select, delete, update and insert operations.
-// TODO: Override default behavior of methods in super class that don't make
-// sense.
 public final class ConditionsRecord extends AbstractConditionsObject {
 
     /**
@@ -26,13 +24,25 @@
         public void add(ConditionsRecord record) {
             objects.add(record);
         }
-
-        // FIXME: Should probably override more methods here that don't make
-        // sense for
-        // this type!
     }
 
-    protected ConditionsRecord() {
+    public ConditionsRecord() {
+    }
+    
+    public void insert() throws ConditionsObjectException {
+        if (!isNew())
+            throw new ConditionsObjectException("Record already exists in database and cannot be inserted.");
+        if (isReadOnly())
+            throw new ConditionsObjectException("This object is set to read only mode.");
+        if (fieldValues.size() == 0)
+            throw new ConditionsObjectException("There are no field values to insert.");
+        String query = QueryBuilder.buildInsert(getTableMetaData().getTableName(), this.getFieldValues());        
+        System.out.println(query);
+        List<Integer> keys = DatabaseConditionsManager.getInstance().updateQuery(query);
+        if (keys.size() != 1) {
+            throw new ConditionsObjectException("SQL insert returned wrong number of keys: " + keys.size());
+        }
+        rowId = keys.get(0);
     }
 
     /**

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/QueryBuilder.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/QueryBuilder.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/QueryBuilder.java	Thu Nov 13 11:53:11 2014
@@ -1,6 +1,10 @@
 package org.hps.conditions;
 
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.List;
+
+import org.hps.conditions.ConditionsObject.FieldValueMap;
 
 /**
  * This is a static utility class for building SQL queries for the conditions
@@ -64,6 +68,31 @@
         return buff.toString();
     }
 
+    static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd kk:mm:ss");
+    
+    public static String buildInsert(String tableName, FieldValueMap fieldValues) {
+        if (fieldValues.size() == 0) {
+            throw new IllegalArgumentException("The FieldValueMap has no values.");
+        }
+        StringBuffer buff = new StringBuffer();
+        buff.append("INSERT INTO " + tableName + " (");
+        for (String fieldName : fieldValues.keySet()) {
+            buff.append(" " + fieldName + ",");
+        }
+        buff.setLength(buff.length() - 1);
+        buff.append(" ) VALUES (");
+        for (Object value : fieldValues.values()) {
+            String insertValue = value.toString();
+            if (value instanceof Date) {
+                insertValue = dateFormat.format((Date) value);
+            }
+            buff.append(" '" + insertValue + "',");
+        }
+        buff.setLength(buff.length() - 1);
+        buff.append(")");
+        return buff.toString();
+    }
+
     public static String buildInsert(String tableName, int collectionID, List<String> columnNames, List<List<String>> rows) {
         StringBuffer buff = new StringBuffer();
         buff.append("INSERT INTO " + tableName + " ( collection_id");