/* (c) 2014 - 2015 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.importer.transform; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.util.logging.Level; import org.geoserver.catalog.DataStoreInfo; import org.geoserver.importer.ImportData; import org.geoserver.importer.ImportTask; import org.geotools.data.DataAccess; import org.geotools.data.Transaction; import org.geotools.jdbc.JDBCDataStore; /** * * @author Ian Schneider <ischneider@opengeo.org> */ public class CreateIndexTransform extends AbstractTransform implements PostTransform, VectorTransform { private static final long serialVersionUID = 1L; private String field; public CreateIndexTransform(String field) { this.field = field; } public String getField() { return field; } public void setField(String field) { this.field = field; } public void apply(ImportTask task, ImportData data) throws Exception { DataStoreInfo storeInfo = (DataStoreInfo) task.getStore(); DataAccess store = storeInfo.getDataStore(null); if (store instanceof JDBCDataStore) { createIndex( task, (JDBCDataStore) store); } else { task.addMessage(Level.WARNING, "Cannot create index on non database target. Not a big deal."); } } private void createIndex(ImportTask item, JDBCDataStore store) throws Exception { Connection conn = null; Statement stmt = null; Exception error = null; String sql = null; try { conn = store.getConnection(Transaction.AUTO_COMMIT); stmt = conn.createStatement(); String tableName = item.getLayer().getResource().getNativeName(); String indexName = "\"" + tableName + "_" + field + "\""; sql = "CREATE INDEX " + indexName + " ON \"" + tableName + "\" (\"" + field + "\")"; stmt.execute(sql); } catch (SQLException sqle) { error = sqle; } finally { store.closeSafe(stmt); store.closeSafe(conn); } if (error != null) { throw new Exception("Error creating index, SQL was : " + sql,error); } } }