Print

Print


Author: [log in to unmask]
Date: Tue Apr 21 16:40:21 2015
New Revision: 2777

Log:
Add log and description fields to collections table.  Remove option for supplying a collection ID to load command.

Modified:
    java/trunk/conditions/src/main/java/org/hps/conditions/cli/LoadCommand.java
    java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java
    java/trunk/conditions/src/test/java/org/hps/conditions/database/CollectionIdTest.java

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/cli/LoadCommand.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/cli/LoadCommand.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/cli/LoadCommand.java	Tue Apr 21 16:40:21 2015
@@ -4,6 +4,7 @@
 import java.io.File;
 import java.io.FileReader;
 import java.io.IOException;
+import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.StringTokenizer;
@@ -44,9 +45,9 @@
     private static final Options OPTIONS = new Options();
     static {
         OPTIONS.addOption(new Option("h", false, "Show help for load command"));
-        OPTIONS.addOption(new Option("t", true, "Set the name of the target table in the database"));
-        OPTIONS.addOption(new Option("c", true, "Set the collection ID of this conditions set"));
-        OPTIONS.addOption(new Option("f", true, "Set the input data file"));
+        OPTIONS.addOption(new Option("t", true, "Name of the target table in the database"));
+        OPTIONS.addOption(new Option("f", true, "Input data file"));
+        OPTIONS.addOption(new Option("d", true, "Description of collection data"));
     }
 
     /**
@@ -64,7 +65,7 @@
     @Override
     public void execute(final String[] arguments) {
 
-        final CommandLine commandLine = parse(arguments);
+        final CommandLine commandLine = this.parse(arguments);
 
         final String fileName = commandLine.getOptionValue("f");
         if (fileName == null) {
@@ -86,30 +87,32 @@
             openedConnection = conditionsManager.openConnection();
         }
 
-        int collectionID;
-        if (commandLine.getOptionValue("c") != null) {
-            collectionID = Integer.parseInt(commandLine.getOptionValue("c"));
-            if (conditionsManager.collectionExists(tableName, collectionID)) {
-                throw new IllegalArgumentException("The user supplied collection ID " + collectionID
-                        + " already exists in this table.");
-            }
-        } else {
-            collectionID = conditionsManager.getNextCollectionID(tableName);
+        String collectionDescription = null;
+        if (commandLine.hasOption("d")) {
+            collectionDescription = commandLine.getOptionValue("d");
+        }
+
+        int collectionId;
+        try {
+            collectionId = conditionsManager.addCollection(tableName,
+                    "loaded with command line client by " + System.getProperty("user.name"), collectionDescription);
+        } catch (final SQLException e) {
+            throw new RuntimeException("Error getting new collection ID.", e);
         }
 
         final List<String> columnNames = new ArrayList<String>();
         final List<List<String>> rows = new ArrayList<List<String>>();
-        parseFile(fileName, columnNames, rows);
+        this.parseFile(fileName, columnNames, rows);
 
-        final String insertSql = QueryBuilder.buildInsert(tableName, collectionID, columnNames, rows);
-        if (getVerbose()) {
+        final String insertSql = QueryBuilder.buildInsert(tableName, collectionId, columnNames, rows);
+        if (this.getVerbose()) {
             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);
         LOGGER.info("Inserted " + ids.size() + " new rows into table " + tableName + " with collection_id "
-                + collectionID);
+                + collectionId);
         conditionsManager.closeConnection(openedConnection);
     }
 

Modified: java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java
 =============================================================================
--- java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java	(original)
+++ java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java	Tue Apr 21 16:40:21 2015
@@ -285,7 +285,8 @@
      * @return the collection's ID
      * @throws SQLException
      */
-    public synchronized int addCollection(final String tableName, final String comment) throws SQLException {
+    public synchronized int addCollection(final String tableName, final String log, final String description)
+            throws SQLException {
         if (tableName == null) {
             throw new IllegalArgumentException("The tableName argument is null.");
         }
@@ -295,16 +296,21 @@
         int collectionId = -1;
         try {
             statement = this.connection.prepareStatement(
-                    "INSERT INTO collections (table_name, comment, created) VALUES (?, ?, ?)",
+                    "INSERT INTO collections (table_name, log, description, created) VALUES (?, ?, ?, ?)",
                     Statement.RETURN_GENERATED_KEYS);
             statement.setString(1, tableName);
-            if (comment == null) {
+            if (log == null) {
                 statement.setNull(2, java.sql.Types.VARCHAR);
             } else {
-                statement.setString(2, comment);
-            }
-            statement.setDate(3, new java.sql.Date(Calendar.getInstance().getTime().getTime()));
-            final boolean result = statement.execute();
+                statement.setString(2, log);
+            }
+            if (description == null) {
+                statement.setNull(3, java.sql.Types.VARCHAR);
+            } else {
+                statement.setString(3, description);
+            }
+            statement.setDate(4, new java.sql.Date(Calendar.getInstance().getTime().getTime()));
+            statement.execute();
             resultSet = statement.getGeneratedKeys();
             resultSet.next();
             collectionId = resultSet.getInt(1);

Modified: java/trunk/conditions/src/test/java/org/hps/conditions/database/CollectionIdTest.java
 =============================================================================
--- java/trunk/conditions/src/test/java/org/hps/conditions/database/CollectionIdTest.java	(original)
+++ java/trunk/conditions/src/test/java/org/hps/conditions/database/CollectionIdTest.java	Tue Apr 21 16:40:21 2015
@@ -43,10 +43,10 @@
      * @throws SQLException if there is an error executing SQL queries
      */
     public void testCollectionId() throws SQLException {
-        int collectionId = this.manager.addCollection("dummy", "foo bar baz");
+        int collectionId = this.manager.addCollection("dummy", "test add", "foo bar baz");
         System.out.println("created new collection " + collectionId);
 
-        collectionId = this.manager.addCollection("dummy", null);
+        collectionId = this.manager.addCollection("dummy", null, null);
         System.out.println("created new collection " + collectionId);
     }
 }