package com.datascience.datastoring.adapters.db; import com.datascience.datastoring.IBackend; import com.datascience.datastoring.IBackendAdapter; import com.datascience.datastoring.backends.db.DBBackend; import com.datascience.datastoring.backends.db.SQLCommandOperator; import org.apache.log4j.Logger; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Collection; import java.util.HashMap; import java.util.LinkedList; import java.util.Map; /** * User: artur * Date: 6/4/13 */ public class DBFullAdapter implements IBackendAdapter { static Logger logger = Logger.getLogger(DBFullAdapter.class); static Collection<String> tableNames; static Map<String, String> tables; static { tableNames = new LinkedList<String>(); tableNames.add("Projects"); tableNames.add("Statuses"); tables = new HashMap<String, String>(); tables.put("Projects", "id VARCHAR(100) NOT NULL PRIMARY KEY, " + "kind VARCHAR(25) NOT NULL, " + "data LONGTEXT NOT NULL, " + "results LONGTEXT, " + "initializationData LONGTEXT, " + "model LONGTEXT, " + "last_use TIMESTAMP"); } static final String GET_DS = "SELECT kind, data, results, initializationData, model FROM Projects WHERE id IN (?);"; static final String INSERT_DS_PARAMS = "(id, kind, data, results, initializationData, model)"; static final String DELETE_DS = "DELETE FROM Projects WHERE id = (?);"; DBBackend backend; public DBFullAdapter(DBBackend backend){ this.backend = backend; } @Override public IBackend getBackend() { return backend; } @Override public void clear() throws SQLException { backend.clear(tableNames); } @Override public void rebuild() throws Exception { backend.rebuild(tables); } @Override public String getID() { return "DB_FULL"; } @Override public void test() throws Exception { backend.test(); backend.checkTables(tables.keySet()); } public String[] get(String id) throws SQLException { logger.debug("Getting job from DB: " + id); ResultSet dsResults = null; SQLCommandOperator sqlCO = backend.getSQLCmdOperator(); PreparedStatement dsStatement = null; try { dsStatement = sqlCO.initStatement(GET_DS); dsStatement.setString(1, id); dsResults = dsStatement.executeQuery(); if (!dsResults.next()) { return null; } String data = dsResults.getString("data"); String kind = dsResults.getString("kind"); String results = dsResults.getString("results"); String initializationData = dsResults.getString("initializationData"); String model = dsResults.getString("model"); dsStatement.close(); logger.debug("Getting job from DB: " + id + " DONE"); return new String[]{kind, initializationData, data, results, model}; } finally { sqlCO.cleanup(dsStatement, dsResults); } } public void add(String[] data) throws SQLException{ logger.debug("Adding job to DB: " + data[0]); SQLCommandOperator sqlCO = backend.getSQLCmdOperator(); PreparedStatement dsStatement = null; try { dsStatement = sqlCO.getPreparedInsertReplacing("Projects", INSERT_DS_PARAMS); int i = 1; for (String s : data){ dsStatement.setString(i++, s); } dsStatement.executeUpdate(); logger.debug("Adding job to DB: " + data[0] + " DONE"); } finally { sqlCO.cleanup(dsStatement, null); } } public void remove(String id) throws Exception { logger.debug("Removing job from DB: " + id); SQLCommandOperator sqlCO = backend.getSQLCmdOperator(); PreparedStatement dsStatement = null; try { dsStatement = sqlCO.initStatement(DELETE_DS); dsStatement.setString(1, id); dsStatement.executeUpdate(); dsStatement.close(); logger.debug("Removing job from DB: " + id + " DONE"); } finally { sqlCO.cleanup(dsStatement, null); } } }