ExtentIndex.java
/**
* Extent Index
*/
package gov.usgs.earthquake.indexer;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Types;
import java.sql.SQLException;
/**
* ExtentIndex is a type of JDBCProductIndex that can also send updates to the
* extentSummary table.
*/
public class ExtentIndex extends JDBCProductIndex {
/** Table for extentSummary */
public static final String EXTENT_TABLE = "extentSummary";
/** Extent index id - productSummaryIndexId */
public static final String EXTENT_INDEX_ID = "productSummaryIndexId";
/** Extent start time */
public static final String EXTENT_START_TIME = "starttime";
/** Extent end time */
public static final String EXTENT_END_TIME = "endtime";
/** Extent max latitude */
public static final String EXTENT_MAX_LAT = "maximum_latitude";
/** Extent minimum latitude */
public static final String EXTENT_MIN_LAT = "minimum_latitude";
/** Extent max longitude */
public static final String EXTENT_MAX_LONG = "maximum_longitude";
/** Extent min longitude */
public static final String EXTENT_MIN_LONG = "minimum_longitude";
/**
* Default constructor
* @throws Exception if error occurs
*/
public ExtentIndex() throws Exception {
super();
}
/**
* Queries extentSummary table for the largest index id.
*
* @return long last extent index id
* @throws Exception if something goes wrong with database transaction
*/
public long getLastExtentIndexId() throws Exception {
long lastIndex;
//Prepare statement
String sql = "SELECT MAX("
+ EXTENT_INDEX_ID
+ ") AS "
+ EXTENT_INDEX_ID
+ " FROM "
+ EXTENT_TABLE;
beginTransaction();
try (PreparedStatement getLastIndex = getConnection().prepareStatement(sql)) {
//Parse Results
ResultSet results = getLastIndex.executeQuery();
if (results.next()) {
lastIndex = results.getLong(EXTENT_INDEX_ID);
} else {
//No index in extentSummary table
lastIndex = 0;
}
commitTransaction();
} catch (SQLException e) {
try {
rollbackTransaction();
} catch (Exception e2) {}
//Throws exception with SQL for debugging
throw new SQLException(e.getMessage() + ". SQL query was: " + sql, e);
}
return lastIndex;
}
/**
* Inserts valid ExtentSummary products into extentSummary table
*
* @param product the product to be added
*
* @throws Exception if something goes wrong with the database transaction
*/
public void addExtentSummary(ExtentSummary product) throws Exception {
//Prepare statement
String sql = "INSERT INTO " + EXTENT_TABLE +
"(" +
EXTENT_INDEX_ID + "," +
EXTENT_START_TIME + "," +
EXTENT_END_TIME + "," +
EXTENT_MIN_LAT + "," +
EXTENT_MAX_LAT + "," +
EXTENT_MIN_LONG + "," +
EXTENT_MAX_LONG +
") VALUES (?, ?, ?, ?, ?, ?, ?)";
beginTransaction();
try (PreparedStatement addProduct = getConnection().prepareStatement(sql)) {
//Add values
addProduct.setLong(1, product.getIndexId());
if (product.getStartTime() != null) {
addProduct.setLong(2, product.getStartTime().getTime());
} else {
addProduct.setNull(2, Types.BIGINT);
}
if (product.getEndTime() != null) {
addProduct.setLong(3, product.getEndTime().getTime());
} else {
addProduct.setNull(3, Types.BIGINT);
}
if (product.getMinLatitude() != null) {
addProduct.setBigDecimal(4, product.getMinLatitude());
} else {
addProduct.setNull(4, Types.DECIMAL);
}
if (product.getMaxLatitude() != null) {
addProduct.setBigDecimal(5, product.getMaxLatitude());
} else {
addProduct.setNull(5, Types.DECIMAL);
}
if (product.getMinLongitude() != null) {
addProduct.setBigDecimal(6, product.getMinLongitude());
} else {
addProduct.setNull(6, Types.DECIMAL);
}
if (product.getMaxLongitude() != null) {
addProduct.setBigDecimal(7, product.getMaxLongitude());
} else {
addProduct.setNull(7, Types.DECIMAL);
}
//Add to extentSummary table
addProduct.executeUpdate();
addProduct.clearParameters();
commitTransaction();
} catch (Exception e) {
try {
rollbackTransaction();
} catch (Exception e2) {}
throw e;
}
}
}