Print

Print


Author: [log in to unmask]
Date: Fri Apr 17 14:58:38 2015
New Revision: 2742

Log:
Merge trunk changes into conditions dev branch.

Modified:
    java/branches/conditions-HPSJAVA-488/   (props changed)
    java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/AddCommand.java
    java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/CommandLineTool.java
    java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/LoadCommand.java
    java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/PrintCommand.java
    java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/TagCommand.java
    java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java
    java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/database/QueryBuilder.java
    java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/database/TableMetaData.java

Modified: java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/AddCommand.java
 =============================================================================
--- java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/AddCommand.java	(original)
+++ java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/AddCommand.java	Fri Apr 17 14:58:38 2015
@@ -1,7 +1,8 @@
 package org.hps.conditions.cli;
 
-import java.io.PrintStream;
 import java.util.Date;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
@@ -10,6 +11,7 @@
 import org.hps.conditions.api.ConditionsRecord;
 import org.hps.conditions.api.FieldValueMap;
 import org.hps.conditions.database.DatabaseConditionsManager;
+import org.lcsim.util.log.LogUtil;
 
 /**
  * This is a command for the conditions CLI that will add a conditions record, making a conditions set with a particular
@@ -20,9 +22,9 @@
 public class AddCommand extends AbstractCommand {
 
     /**
-     * For printing out messages.
+     * Setup logger.
      */
-    private final PrintStream ps = System.out;
+    private static final Logger LOGGER = LogUtil.create(AddCommand.class);
 
     /**
      * Define command line options.
@@ -50,10 +52,46 @@
     }
 
     /**
+     * Create a conditions record.
+     *
+     * @param runStart the run start
+     * @param runEnd the run end
+     * @param tableName the table name
+     * @param name the key name
+     * @param collectionId the collection ID
+     * @param createdBy the user name
+     * @param tag the conditions tag
+     * @param notes the text notes about the collection
+     * @return the new conditions record
+     */
+    // FIXME: Too many method parameters (max 7 is recommended).
+    private ConditionsRecord createConditionsRecord(final int runStart, final int runEnd, final String tableName,
+            final String name, final int collectionId, final String createdBy, final String tag, final String notes) {
+        final ConditionsRecord conditionsRecord = new ConditionsRecord();
+        final FieldValueMap fieldValues = new FieldValueMap();
+        fieldValues.put("run_start", runStart);
+        fieldValues.put("run_end", runEnd);
+        fieldValues.put("table_name", tableName);
+        fieldValues.put("name", name);
+        fieldValues.put("collection_id", collectionId);
+        fieldValues.put("created_by", createdBy);
+        if (tag != null) {
+            fieldValues.put("tag", tag);
+        }
+        if (notes != null) {
+            fieldValues.put("notes", notes);
+        }
+        conditionsRecord.setFieldValues(fieldValues);
+        fieldValues.put("created", new Date());
+        return conditionsRecord;
+    }
+
+    /**
      * Execute the command with the given arguments.
      *
      * @param arguments the command line arguments
      */
+    @Override
     final void execute(final String[] arguments) {
 
         final CommandLine commandLine = parse(arguments);
@@ -124,45 +162,10 @@
             }
             conditionsRecord.insert();
             manager.closeConnection(createdConnection);
-        } catch (ConditionsObjectException e) {
+        } catch (final ConditionsObjectException e) {
+            LOGGER.log(Level.SEVERE, "Error adding conditions record", e);
             throw new RuntimeException("An error occurred while adding a conditions record.", e);
         }
-        ps.println("successfully added conditions record ...");
-        ps.println(conditionsRecord);
-    }
-
-    /**
-     * Create a conditions record.
-     *
-     * @param runStart the run start
-     * @param runEnd the run end
-     * @param tableName the table name
-     * @param name the key name
-     * @param collectionId the collection ID
-     * @param createdBy the user name
-     * @param tag the conditions tag
-     * @param notes the text notes about the collection
-     * @return the new conditions record
-     */
-    // FIXME: Too many method parameters (max 7 is recommended).
-    private ConditionsRecord createConditionsRecord(final int runStart, final int runEnd, final String tableName,
-            final String name, final int collectionId, final String createdBy, final String tag, final String notes) {
-        final ConditionsRecord conditionsRecord = new ConditionsRecord();
-        final FieldValueMap fieldValues = new FieldValueMap();
-        fieldValues.put("run_start", runStart);
-        fieldValues.put("run_end", runEnd);
-        fieldValues.put("table_name", tableName);
-        fieldValues.put("name", name);
-        fieldValues.put("collection_id", collectionId);
-        fieldValues.put("created_by", createdBy);
-        if (tag != null) {
-            fieldValues.put("tag", tag);
-        }
-        if (notes != null) {
-            fieldValues.put("notes", notes);
-        }
-        conditionsRecord.setFieldValues(fieldValues);
-        fieldValues.put("created", new Date());
-        return conditionsRecord;
+        LOGGER.info("successfully added conditions record ..." + '\n' + conditionsRecord);
     }
 }

Modified: java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/CommandLineTool.java
 =============================================================================
--- java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/CommandLineTool.java	(original)
+++ java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/CommandLineTool.java	Fri Apr 17 14:58:38 2015
@@ -14,7 +14,6 @@
 import org.apache.commons.cli.PosixParser;
 import org.hps.conditions.database.DatabaseConditionsManager;
 import org.lcsim.conditions.ConditionsManager.ConditionsNotFoundException;
-import org.lcsim.util.log.DefaultLogFormatter;
 import org.lcsim.util.log.LogUtil;
 
 /**
@@ -26,18 +25,16 @@
  *
  * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
-// FIXME: Print outs should use conditions manager's log settings and not boolean verbose flag.
 public class CommandLineTool {
 
     /**
      * Setup logging.
      */
-    private static final Logger LOGGER = LogUtil.create(CommandLineTool.class.getSimpleName(),
-            new DefaultLogFormatter(), Level.WARNING);
+    private static final Logger LOGGER = LogUtil.create(CommandLineTool.class);
 
     /**
      * Create a basic instance of this class.
-     * 
+     *
      * @return the instance of this class
      */
     private static CommandLineTool create() {
@@ -112,7 +109,7 @@
 
     /**
      * Register a sub-command handler.
-     * 
+     *
      * @param command the sub-command handler
      */
     private void registerCommand(final AbstractCommand command) {

Modified: java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/LoadCommand.java
 =============================================================================
--- java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/LoadCommand.java	(original)
+++ java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/LoadCommand.java	Fri Apr 17 14:58:38 2015
@@ -7,12 +7,14 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.StringTokenizer;
+import java.util.logging.Logger;
 
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
 import org.apache.commons.cli.Options;
 import org.hps.conditions.database.DatabaseConditionsManager;
 import org.hps.conditions.database.QueryBuilder;
+import org.lcsim.util.log.LogUtil;
 
 /**
  * This is a sub-command to add conditions data using an input text file. The file should be ASCII text that is tab or
@@ -21,6 +23,7 @@
  * exist already in the table. Otherwise, the command will fail. By default, the next collection ID will be found by the
  * conditions manager.
  * <p>
+ *
  * <pre>
  * java -cp hps-distribution-bin.jar org.hps.conditions.cli.CommandLineTool \
  *     -p conditions_dev_local.properties load -t scratch_svt_gains -f ./scratch_svt_gains.txt -c 1
@@ -29,6 +32,11 @@
  * @author <a href="mailto:[log in to unmask]">Jeremy McCormick</a>
  */
 class LoadCommand extends AbstractCommand {
+
+    /**
+     * Setup logger.
+     */
+    private static final Logger LOGGER = LogUtil.create(LoadCommand.class);
 
     /**
      * Define command options.
@@ -62,7 +70,7 @@
         if (fileName == null) {
             throw new IllegalArgumentException("Missing file argument.");
         }
-        if (!(new File(fileName)).exists()) {
+        if (!new File(fileName).exists()) {
             throw new IllegalArgumentException("Input file does not exist: " + fileName);
         }
 
@@ -95,24 +103,24 @@
 
         final String insertSql = QueryBuilder.buildInsert(tableName, collectionID, columnNames, rows);
         if (getVerbose()) {
-            System.out.println(insertSql);
+            LOGGER.info(insertSql);
         }
         // FIXME: This call should go through an object API like ConditionsObjectCollection.insert rather than the
         // manager directly.
         final List<Integer> ids = conditionsManager.updateQuery(insertSql);
-        System.out.println("Inserted " + ids.size() + " new rows into table " + tableName + " with collection_id "
+        LOGGER.info("Inserted " + ids.size() + " new rows into table " + tableName + " with collection_id "
                 + collectionID);
         conditionsManager.closeConnection(openedConnection);
     }
 
     /**
      * Parse an input text file and add column names and row data to the input lists.
+     *
      * @param fileName the name of the text file
      * @param columnNames the list of columns (modified by this method)
      * @param rows the list of rows (modified by this method)
      */
-    private final void parseFile(final String fileName, final List<String> columnNames, 
-            final List<List<String>> rows) {
+    private final void parseFile(final String fileName, final List<String> columnNames, final List<List<String>> rows) {
         final File inputFile = new File(fileName);
         BufferedReader reader = null;
         try {
@@ -134,13 +142,13 @@
                 }
                 rows.add(row);
             }
-        } catch (Exception e) {
+        } catch (final Exception e) {
             throw new RuntimeException(e);
         } finally {
             if (reader != null) {
                 try {
                     reader.close();
-                } catch (IOException e) {
+                } catch (final IOException e) {
                     e.printStackTrace();
                 }
             }

Modified: java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/PrintCommand.java
 =============================================================================
--- java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/PrintCommand.java	(original)
+++ java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/PrintCommand.java	Fri Apr 17 14:58:38 2015
@@ -8,6 +8,7 @@
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
+import java.util.logging.Logger;
 
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
@@ -17,6 +18,7 @@
 import org.hps.conditions.api.ConditionsRecord.ConditionsRecordCollection;
 import org.hps.conditions.database.DatabaseConditionsManager;
 import org.hps.conditions.database.TableMetaData;
+import org.lcsim.util.log.LogUtil;
 
 /**
  * This sub-command of the conditions CLI prints conditions conditions table data by run number to the console or
@@ -27,34 +29,15 @@
 class PrintCommand extends AbstractCommand {
 
     /**
-     * Print stream for output.
-     */
-    private PrintStream ps = System.out;
-
-    /**
-     * Flag to print row IDs.
-     */
-    private boolean printIDs = false;
-
-    /**
-     * Flag to print out column headers.
-     */
-    private boolean printHeaders = true;
-
-    /**
-     * The field delimiter for print output.
-     */
-    private char fieldDelimiter = ' ';
-
-    /**
-     * Output file if printing to a file.
-     */
-    private File outputFile;
-    
+     * Setup logger.
+     */
+    private static final Logger LOGGER = LogUtil.create(PrintCommand.class);
+
     /**
      * Defines command options.
      */
     static Options options = new Options();
+
     static {
         options.addOption(new Option("h", false, "Show help for print command"));
         options.addOption(new Option("t", true, "Set the table name"));
@@ -66,6 +49,31 @@
     }
 
     /**
+     * The field delimiter for print output.
+     */
+    private char fieldDelimiter = ' ';
+
+    /**
+     * Output file if printing to a file.
+     */
+    private File outputFile;
+
+    /**
+     * Flag to print out column headers.
+     */
+    private boolean printHeaders = true;
+
+    /**
+     * Flag to print row IDs.
+     */
+    private boolean printIDs = false;
+
+    /**
+     * This is the <code>PrintStream</code> for printing the collections to the console or a file.
+     */
+    private PrintStream ps = System.out;
+
+    /**
      * Class constructor.
      */
     PrintCommand() {
@@ -77,6 +85,7 @@
      *
      * @param arguments the command line arguments
      */
+    @Override
     final void execute(final String[] arguments) {
 
         final CommandLine commandLine = parse(arguments);
@@ -107,27 +116,27 @@
             if (new File(path).exists()) {
                 throw new IllegalArgumentException("File already exists: " + path);
             }
-            outputFile = new File(path);
+            this.outputFile = new File(path);
             try {
-                ps = new PrintStream(new BufferedOutputStream(new FileOutputStream(outputFile, false)));
-            } catch (FileNotFoundException e) {
+                this.ps = new PrintStream(new BufferedOutputStream(new FileOutputStream(this.outputFile, false)));
+            } catch (final FileNotFoundException e) {
                 throw new IllegalArgumentException(e);
             }
         }
 
         // Print IDs in the output.
         if (commandLine.hasOption("i")) {
-            printIDs = true;
+            this.printIDs = true;
         }
 
         // Print header info. Option turns this off.
         if (commandLine.hasOption("h")) {
-            printHeaders = false;
+            this.printHeaders = false;
         }
 
         // Use tabs instead of spaces for field delimiter.
         if (commandLine.hasOption("d")) {
-            fieldDelimiter = '\t';
+            this.fieldDelimiter = '\t';
         }
 
         // List of conditions records to print.
@@ -135,11 +144,11 @@
 
         // Did the user specify a table to use?
         if (userConditionsKey == null) {
-            System.out.println("printing all conditions");
+            LOGGER.info("printing all conditions");
             // Use all table names if there was not one specified.
             conditionsRecords.addAll(conditionsManager.getConditionsRecords());
         } else {
-            System.out.println("printing conditions with name: " + userConditionsKey);
+            LOGGER.info("printing conditions with name: " + userConditionsKey);
             // Get records only for the user specified table name.
             conditionsRecords.addAll(conditionsManager.findConditionsRecords(userConditionsKey));
         }
@@ -152,12 +161,77 @@
 
         // Print the records and the data.
         printConditionsRecords(conditionsKeys);
-        ps.flush();
-        ps.close();
-
-        if (outputFile != null) {
-            System.out.println("wrote collection data to file " + outputFile.getPath());
-        }
+        this.ps.flush();
+        this.ps.close();
+
+        if (this.outputFile != null) {
+            LOGGER.info("wrote collection data to file " + this.outputFile.getPath());
+        }
+    }
+
+    /**
+     * Print a single collection.
+     *
+     * @param collection the collection to print
+     */
+    private void printCollection(final ConditionsObjectCollection<?> collection) {
+        final StringBuffer buffer = new StringBuffer();
+        for (final Object object : collection) {
+            for (final String columnName : collection.getTableMetaData().getFieldNames()) {
+                buffer.append(((ConditionsObject) object).getFieldValue(columnName));
+                buffer.append(this.fieldDelimiter);
+            }
+            buffer.setLength(buffer.length() - 1);
+            buffer.append('\n');
+        }
+        buffer.setLength(buffer.length() - 1);
+        this.ps.print(buffer.toString());
+        this.ps.flush();
+    }
+
+    /**
+     * Print the header for a collection. This is printed to the log rather than the <code>PrintStream</code>.
+     *
+     * @param collection the collection
+     */
+    private void printCollectionHeader(final ConditionsObjectCollection<?> collection) {
+        LOGGER.info('\n' + "--------------------------------------" + '\n' + collection.getConditionsRecord()
+                + "--------------------------------------");
+    }
+
+    /**
+     * Print the list of collections.
+     *
+     * @param collectionList the list of collections
+     */
+    private void printCollections(final List<ConditionsObjectCollection<?>> collectionList) {
+        // Loop over all the collections and print them.
+        for (final ConditionsObjectCollection<?> collection : collectionList) {
+            if (this.printHeaders) {
+                printCollectionHeader(collection);
+            }
+            printColumnNames(collection.getTableMetaData());
+            printCollection(collection);
+            this.ps.println();
+        }
+        this.ps.flush();
+    }
+
+    /**
+     * Print the column names for a table.
+     *
+     * @param tableMetaData the table meta data
+     */
+    private void printColumnNames(final TableMetaData tableMetaData) {
+        if (this.printIDs) {
+            this.ps.print("id");
+            this.ps.print(this.fieldDelimiter);
+        }
+        for (final String columnName : tableMetaData.getFieldNames()) {
+            this.ps.print(columnName);
+            this.ps.print(this.fieldDelimiter);
+        }
+        this.ps.println();
     }
 
     /**
@@ -169,13 +243,14 @@
 
         final DatabaseConditionsManager conditionsManager = DatabaseConditionsManager.getInstance();
 
-        System.out.print("printing conditions sets: ");
-        for (String conditionsKey : conditionsKeys) {
-            System.out.print(conditionsKey + " ");
-        }
-        System.out.println();
+        final StringBuffer sb = new StringBuffer();
+        for (final String conditionsKey : conditionsKeys) {
+            sb.append(conditionsKey + " ");
+        }
+        LOGGER.info("printing conditions sets: " + sb.toString());
+
         // Loop over the conditions keys from the conditions records.
-        for (String conditionsKey : conditionsKeys) {
+        for (final String conditionsKey : conditionsKeys) {
 
             // The list of collections to print.
             final List<ConditionsObjectCollection<?>> collectionList = new ArrayList<ConditionsObjectCollection<?>>();
@@ -199,68 +274,4 @@
             printCollections(collectionList);
         }
     }
-
-    /**
-     * Print the list of collections.
-     * @param collectionList the list of collections
-     */
-    private void printCollections(final List<ConditionsObjectCollection<?>> collectionList) {
-        // Loop over all the collections and print them.
-        for (ConditionsObjectCollection<?> collection : collectionList) {
-            if (printHeaders) {
-                printCollectionHeader(collection);
-            }
-            printColumnNames(collection.getTableMetaData());
-            printCollection(collection);
-            System.out.println();
-        }
-        ps.flush();
-    }
-
-    /**
-     * Print a single collection.
-     * @param collection the collection to print
-     */
-    private void printCollection(final ConditionsObjectCollection<?> collection) {
-        final StringBuffer buffer = new StringBuffer();
-        for (Object object : collection) {
-            for (String columnName : collection.getTableMetaData().getFieldNames()) {
-                buffer.append(((ConditionsObject) object).getFieldValue(columnName));
-                buffer.append(fieldDelimiter);
-            }
-            buffer.setLength(buffer.length() - 1);
-            buffer.append('\n');
-        }
-        buffer.setLength(buffer.length() - 1);
-        ps.print(buffer.toString());
-        ps.flush();
-    }
-
-    /**
-     * Print the header for a collection.
-     * @param collection the collection
-     */
-    private void printCollectionHeader(final ConditionsObjectCollection<?> collection) {
-        System.out.println("--------------------------------------");
-        System.out.print(collection.getConditionsRecord());
-        System.out.println("--------------------------------------");
-        System.out.println();
-        System.out.flush();
-    }
-
-    /**
-     * Print the column names for a table.
-     * @param tableMetaData the table meta data
-     */
-    private void printColumnNames(final TableMetaData tableMetaData) {
-        if (printIDs) {
-            ps.print("id");
-            ps.print(fieldDelimiter);
-        }
-        for (String columnName : tableMetaData.getFieldNames()) {
-            ps.print(columnName);
-            ps.print(fieldDelimiter);
-        }
-        ps.println();
-    }
 }

Modified: java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/TagCommand.java
 =============================================================================
--- java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/TagCommand.java	(original)
+++ java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/cli/TagCommand.java	Fri Apr 17 14:58:38 2015
@@ -5,6 +5,7 @@
 import java.util.LinkedHashSet;
 import java.util.Set;
 import java.util.logging.Level;
+import java.util.logging.Logger;
 
 import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.Option;
@@ -16,6 +17,7 @@
 import org.hps.conditions.database.DatabaseConditionsManager;
 import org.hps.conditions.database.TableMetaData;
 import org.lcsim.conditions.ConditionsManager.ConditionsNotFoundException;
+import org.lcsim.util.log.LogUtil;
 
 /**
  * Create a conditions system tag.
@@ -28,6 +30,11 @@
      * The default detector name (dummy detector).
      */
     private static final String DETECTOR_NAME = "HPS-dummy-detector";
+
+    /**
+     * Setup logger.
+     */
+    private static final Logger LOGGER = LogUtil.create(TagCommand.class);
 
     /**
      * Defines command options.
@@ -135,15 +142,15 @@
         }
 
         // Print out all the records that were found.
-        System.out.println("found ConditionsRecords for tag " + newTag + " ...");
+        LOGGER.info("found ConditionsRecords for tag " + newTag + " ...");
         for (final ConditionsRecord record : tagRecords) {
-            System.out.println(record.toString());
+            LOGGER.info(record.toString());
         }
 
         // Prompt user to verify with console input.
         boolean makeTag = true;
         if (!dontPrompt) {
-            System.out.println("Create conditions tag " + newTag + " in database?  (Y/N)");
+            LOGGER.info("Create conditions tag " + newTag + " in database?  (Y/N)");
             final String line = System.console().readLine();
             if (!line.equals("Y")) {
                 makeTag = false;

Modified: java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java
 =============================================================================
--- java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java	(original)
+++ java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java	Fri Apr 17 14:58:38 2015
@@ -485,6 +485,18 @@
     }
 
     /**
+     * Get the JDBC connection.
+     *
+     * @return the JDBC connection
+     */
+    public Connection getConnection() {
+        if (!isConnected()) {
+            openConnection();
+        }
+        return this.connection;
+    }
+
+    /**
      * Get the current LCSim compact <code>Detector</code> object with the geometry and detector model.
      *
      * @return the detector object
@@ -714,8 +726,13 @@
                     .next());
             preparedStatement = this.connection.prepareStatement(sql);
             logger.fine("using prepared statement: " + sql);
+            final int collectionId = collection.getCollectionId();
             for (final ConditionsObject object : collection) {
-                int parameterIndex = 1;
+                preparedStatement.setObject(1, collectionId);
+                int parameterIndex = 2;
+                if (object instanceof ConditionsRecord) {
+                    parameterIndex = 1;
+                }
                 for (final Entry<String, Object> entry : object.getFieldValues().entrySet()) {
                     preparedStatement.setObject(parameterIndex, entry.getValue());
                     ++parameterIndex;

Modified: java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/database/QueryBuilder.java
 =============================================================================
--- java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/database/QueryBuilder.java	(original)
+++ java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/database/QueryBuilder.java	Fri Apr 17 14:58:38 2015
@@ -5,6 +5,7 @@
 import java.util.List;
 
 import org.hps.conditions.api.ConditionsObject;
+import org.hps.conditions.api.ConditionsRecord;
 import org.hps.conditions.api.FieldValueMap;
 
 /**
@@ -104,13 +105,20 @@
             throw new IllegalArgumentException("The ConditionsObject has no values set.");
         }
         final StringBuffer buffer = new StringBuffer();
-        buffer.append("INSERT INTO " + tableName + "(");
+        buffer.append("INSERT INTO " + tableName + "( ");
+        // FIXME: Hack for specific type.
+        if (!(object instanceof ConditionsRecord)) {
+            buffer.append("collection_id,");
+        }
         for (final String fieldName : object.getFieldValues().keySet()) {
             buffer.append(" " + fieldName + ",");
         }
         buffer.setLength(buffer.length() - 1);
-        buffer.append(") VALUES (");
-        for (int i = 0; i < object.getFieldValues().keySet().size(); i++) {
+        buffer.append(" ) VALUES ( ");
+        if (!(object instanceof ConditionsRecord)) {
+            buffer.append(" ?,");
+        }
+        for (int i = 0; i < object.getFieldValues().size(); i++) {
             buffer.append(" ?,");
         }
         buffer.setLength(buffer.length() - 1);

Modified: java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/database/TableMetaData.java
 =============================================================================
--- java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/database/TableMetaData.java	(original)
+++ java/branches/conditions-HPSJAVA-488/src/main/java/org/hps/conditions/database/TableMetaData.java	Fri Apr 17 14:58:38 2015
@@ -1,7 +1,7 @@
 package org.hps.conditions.database;
 
 import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
@@ -13,12 +13,11 @@
 
 /**
  * <p>
- * This class provides meta data about a conditions table, including a list of
- * conditions data fields. The list of fields does not include the collection ID
- * or row ID, which are implicitly assumed to exist.
+ * This class provides meta data about a conditions table, including a list of conditions data fields. The list of
+ * fields does not include the collection ID or row ID, which are implicitly assumed to exist.
  * <p>
- * It also has references to the implementation classes which are used for the ORM
- * onto {@link ConditionsObject} and {@link ConditionsObjectCollection}.
+ * It also has references to the implementation classes which are used for the ORM onto {@link ConditionsObject} and
+ * {@link ConditionsObjectCollection}.
  *
  * @see org.hps.conditions.api.ConditionsObject
  * @see org.hps.conditions.api.BaseConditionsObjectCollection
@@ -27,37 +26,60 @@
 public final class TableMetaData {
 
     /**
+     * Find table meta data by object type.
+     *
+     * @param tableMetaDataList the list of table meta data e.g. from the registry
+     * @param objectType the type of the object
+     * @return the list of table meta data that have that object type
+     */
+    public static List<TableMetaData> findByObjectType(final List<TableMetaData> tableMetaDataList,
+            final Class<? extends ConditionsObject> objectType) {
+        final List<TableMetaData> list = new ArrayList<TableMetaData>();
+        for (final TableMetaData tableMetaData : tableMetaDataList) {
+            if (tableMetaData.getObjectClass().equals(objectType)) {
+
+                list.add(tableMetaData);
+            }
+        }
+        return list;
+    }
+
+    /**
+     * The collection class.
+     */
+    private Class<? extends BaseConditionsObjectCollection<?>> collectionClass;
+
+    /**
+     * The set of field names.
+     */
+    private Set<String> fieldNames = new LinkedHashSet<String>();
+
+    /**
+     * The map of field names to their types.
+     */
+    private Map<String, Class<?>> fieldTypes;
+
+    /**
+     * The conditions key named (unused???).
+     */
+    private String key;
+
+    /**
+     * The object class.
+     */
+    private Class<? extends ConditionsObject> objectClass;
+
+    /**
      * The table name.
      */
     private String tableName;
 
-    /**
-     * The conditions key named (unused???).
-     */
-    private String key;
-
-    /**
-     * The object class.
-     */
-    private Class<? extends ConditionsObject> objectClass;
-
-    /**
-     * The collection class.
-     */
-    private Class<? extends BaseConditionsObjectCollection<?>> collectionClass;
-
-    /**
-     * The set of field names.
-     */
-    private Set<String> fieldNames = new LinkedHashSet<String>();
-
-    /**
-     * The map of field names to their types.
-     */
-    private Map<String, Class<?>> fieldTypes;
+    public TableMetaData() {
+    }
 
     /**
      * Fully qualified constructor.
+     *
      * @param key the conditions key
      * @param tableName the table name
      * @param objectClass the object class
@@ -65,12 +87,8 @@
      * @param fieldNames the field names
      * @param fieldTypes the field types
      */
-    public TableMetaData(
-            final String key,
-            final String tableName,
-            final Class<? extends ConditionsObject> objectClass,
-            final Class<? extends BaseConditionsObjectCollection<?>> collectionClass,
-            final Set<String> fieldNames,
+    public TableMetaData(final String key, final String tableName, final Class<? extends ConditionsObject> objectClass,
+            final Class<? extends BaseConditionsObjectCollection<?>> collectionClass, final Set<String> fieldNames,
             final Map<String, Class<?>> fieldTypes) {
         if (key == null) {
             throw new IllegalArgumentException("key is null");
@@ -99,83 +117,83 @@
     }
 
     /**
+     * Get the type of collection this table maps onto.
+     *
+     * @return the collection class
+     */
+    public Class<? extends BaseConditionsObjectCollection<?>> getCollectionClass() {
+        return this.collectionClass;
+    }
+
+    /**
+     * Get the names of the fields. Types are implied from the database tables.
+     *
+     * @return the names of the fields
+     */
+    public String[] getFieldNames() {
+        return this.fieldNames.toArray(new String[] {});
+    }
+
+    /**
+     * Get the type of the field called <code>fieldName</code>.
+     *
+     * @return the type of the field
+     */
+    public Class<?> getFieldType(final String fieldName) {
+        return this.fieldTypes.get(fieldName);
+    }
+
+    /**
+     * Get the key of this conditions type. May be different from table name but is usually the same.
+     *
+     * @return the key name of the conditions type
+     */
+    public String getKey() {
+        return this.key;
+    }
+
+    /**
      * Get the type of object this table maps onto.
+     *
      * @return the type of object
      */
     public Class<? extends ConditionsObject> getObjectClass() {
-        return objectClass;
-    }
-
-    /**
-     * Get the type of collection this table maps onto.
-     * @return the collection class
-     */
-    public Class<? extends BaseConditionsObjectCollection<?>> getCollectionClass() {
-        return collectionClass;
-    }
-
-    /**
-     * Get the names of the fields. Types are implied from the database tables.
-     * @return the names of the fields
-     */
-    public String[] getFieldNames() {
-        return fieldNames.toArray(new String[] {});
-    }
-
-    /**
-     * Get the type of the field called <code>fieldName</code>.
-     * @return the type of the field
-     */
-    public Class<?> getFieldType(final String fieldName) {
-        return fieldTypes.get(fieldName);
+        return this.objectClass;
     }
 
     /**
      * Get the name of the table.
+     *
      * @return the name of the table
      */
     public String getTableName() {
-        return tableName;
-    }
-
-    /**
-     * Get the key of this conditions type. May be different from table name but
-     * is usually the same.
-     * @return the key name of the conditions type
-     */
-    public String getKey() {
-        return key;
-    }
-
-    /**
-     * Find table meta data by object type.
-     * @param tableMetaDataList the list of table meta data e.g. from the registry
-     * @param objectType the type of the object
-     * @return the list of table meta data that have that object type
-     */
-    public static List<TableMetaData> findByObjectType(final List<TableMetaData> tableMetaDataList,
-            final Class<? extends ConditionsObject> objectType) {
-        List<TableMetaData> list = new ArrayList<TableMetaData>();
-        for (TableMetaData tableMetaData : tableMetaDataList) {
-            if (tableMetaData.getObjectClass().equals(objectType)) {
-
-                list.add(tableMetaData);
-            }
-        }
-        return list;
-    }
-    
+        return this.tableName;
+    }
+
+    public void setFieldNames(final String[] fieldNames) {
+        this.fieldNames = new HashSet<String>();
+        for (final String fieldName : fieldNames) {
+            this.fieldNames.add(fieldName);
+        }
+    }
+
+    public void setTableName(final String tableName) {
+        this.tableName = tableName;
+    }
+
     /**
      * Convert to a string.
+     *
      * @return This object converted to a string.
      */
+    @Override
     public String toString() {
         final StringBuffer buff = new StringBuffer();
-        buff.append("tableMetaData: tableName = " + this.getTableName());  
+        buff.append("tableMetaData: tableName = " + this.getTableName());
         buff.append(", objectClass = " + this.getObjectClass().getCanonicalName());
         buff.append(", collectionClass = " + this.getCollectionClass().getCanonicalName());
         buff.append(", fieldNames = ");
-        for (String field : this.getFieldNames()) {
+        for (final String field : this.getFieldNames()) {
             buff.append(field + " ");
         }
         buff.setLength(buff.length() - 1);