Author: [log in to unmask] Date: Thu Dec 11 11:36:08 2014 New Revision: 1695 Log: Allow connection parameters to be directly set on the manager. Improve the insert method for collections. Modifications to logging levels and messages. Modified: java/trunk/conditions/src/main/java/org/hps/conditions/database/DatabaseConditionsManager.java 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 Thu Dec 11 11:36:08 2014 @@ -401,6 +401,10 @@ throw new IllegalArgumentException("The connection properties file does not exist: " + connectionPropertiesFile.getPath()); connectionParameters = ConnectionParameters.fromProperties(file); } + + public void setConnectionParameters(ConnectionParameters connectionParameters) { + this.connectionParameters = connectionParameters; + } /** * Set the connection parameters from an embedded resource. @@ -416,6 +420,7 @@ * @param tableName The name of the table. * @return The next collection ID. */ + // TODO: If there are no records in the table, this method should simply return 1. (for first collection) public int getNextCollectionID(String tableName) { TableMetaData tableData = findTableMetaData(tableName); if (tableData == null) @@ -612,17 +617,26 @@ this.tag = tag; } - public <ObjectType extends ConditionsObject> void insertCollection(AbstractConditionsObjectCollection<ObjectType> collection) throws SQLException { + public <ObjectType extends ConditionsObject> void insertCollection(AbstractConditionsObjectCollection<ObjectType> collection) throws SQLException, ConditionsObjectException { if (collection == null) { throw new IllegalArgumentException("The collection is null."); } if (collection.size() == 0) { throw new IllegalArgumentException("The collection is empty."); } - if (collection.getTableMetaData() == null) { - throw new RuntimeException("The collection does not have table meta data."); - } + TableMetaData tableMetaData = collection.getTableMetaData(); + if (tableMetaData == null) { + List<TableMetaData> tableMetaDataList = this.findTableMetaData(collection.getClass()); + if (tableMetaDataList.size() == 0) { + throw new ConditionsObjectException("The conditions object collection is missing table meta data and none could be found by the conditions manager."); + } else { + // Use a default meta data object from the manager. + tableMetaData = tableMetaDataList.get(0); + collection.setTableMetaData(tableMetaData); + logger.fine("using default table meta data with table " + tableMetaData.getTableName() + " for collection of type " + collection.getClass().getCanonicalName()); + } + } if (collection.getCollectionId() == -1) { try { collection.setCollectionId(this.getNextCollectionID(tableMetaData.getTableName())); @@ -636,13 +650,14 @@ try { connection.setAutoCommit(false); logger.finest("starting insert transaction"); - String sql = QueryBuilder.buildPreparedInsert(collection.iterator().next()); + String sql = QueryBuilder.buildPreparedInsert(tableMetaData.getTableName(), collection.iterator().next()); PreparedStatement preparedStatement = connection.prepareStatement(sql); logger.finest("using prepared statement: " + sql); logger.finest("preparing updates"); + int collectionId = collection.getCollectionId(); for (ConditionsObject object : collection) { - preparedStatement.setObject(1, object.getCollectionId()); + preparedStatement.setObject(1, collectionId); int parameterIndex = 2; for (Entry<String,Object> entry : object.getFieldValues().entrySet()) { preparedStatement.setObject(parameterIndex, entry.getValue()); @@ -654,6 +669,8 @@ connection.commit(); logger.finest("committed transaction"); } catch (Exception e) { + e.printStackTrace(); + logger.warning(e.getMessage()); logger.warning("rolling back transaction"); connection.rollback(); logger.warning("transaction was rolled back"); @@ -696,6 +713,10 @@ public static String getDefaultEngRunDetectorName() { return DEFAULT_ENG_RUN_DETECTOR; + } + + public void addTableMetaData(TableMetaData tableMetaData) { + this.tableMetaData.add(tableMetaData); } /**