package net.sf.jabref.sql;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.JOptionPane;
import net.sf.jabref.MetaData;
import net.sf.jabref.sql.DBImportExportDialog.DialogType;
public class DBImporterExporter {
public void removeDB(DBImportExportDialog dialogo, String dbName,
Connection conn, MetaData metadata) throws SQLException {
if (dialogo.removeAction) {
if ((dialogo.selectedInt <= 0)
&& (dialogo.getDialogType().equals(DialogType.EXPORTER))) {
JOptionPane.showMessageDialog(dialogo.getDiag(),
"Please select a DB to be removed", "SQL Export",
JOptionPane.INFORMATION_MESSAGE);
} else {
removeAGivenDB(conn,
getDatabaseIDByName(metadata, conn, dbName));
}
}
}
/**
* Returns a Jabref Database ID from the database in case the DB is already
* exported. In case the bib was already exported before, the method returns
* the id, otherwise it calls the method that inserts a new row and returns
* the ID for this new database
*
* @param metaData
* The MetaData object containing the database information
* @param out
* The output (PrintStream or Connection) object to which the DML
* should be written.
* @return The ID of database row of the jabref database being exported
* @throws SQLException
*/
public int getDatabaseIDByName(MetaData metaData, Object out, String dbName)
throws SQLException {
if (out instanceof Connection) {
Object response = SQLUtil.processQueryWithResults(out,
"SELECT database_id FROM jabref_database WHERE database_name='"
+ dbName + "';");
ResultSet rs = ((Statement) response).getResultSet();
if (rs.next())
return rs.getInt("database_id");
else {
insertJabRefDatabase(metaData, out, dbName);
return getDatabaseIDByName(metaData, out, dbName);
}
}
// in case of text export there will be only 1 bib exported
else {
insertJabRefDatabase(metaData, out, dbName);
return 1;
}
}
public void removeAGivenDB(Object out, int database_id) throws SQLException {
removeAllRecordsForAGivenDB(out, database_id);
SQLUtil.processQuery(out,
"DELETE FROM jabref_database WHERE database_id='" + database_id
+ "';");
}
/**
* Removes all records for the database being exported in case it was
* exported before.
*
* @param out
* The output (PrintStream or Connection) object to which the DML
* should be written.
* @param database_id
* Id of the database being exported.
* @throws SQLException
*/
public void removeAllRecordsForAGivenDB(Object out, int database_id)
throws SQLException {
SQLUtil.processQuery(out, "DELETE FROM entries WHERE database_id='"
+ database_id + "';");
SQLUtil.processQuery(out, "DELETE FROM groups WHERE database_id='"
+ database_id + "';");
SQLUtil.processQuery(out, "DELETE FROM strings WHERE database_id='"
+ database_id + "';");
}
/**
* This method creates a new row into jabref_database table enabling to
* export more than one .bib
*
* @param metaData
* The MetaData object containing the groups information
* @param out
* The output (PrintStream or Connection) object to which the DML
* should be written.
*
* @throws SQLException
*/
private void insertJabRefDatabase(final MetaData metaData, Object out,
String dbName) throws SQLException {
String path = null;
if (null == metaData.getFile())
path = dbName;
else
path = metaData.getFile().getAbsolutePath();
SQLUtil.processQuery(out,
"INSERT INTO jabref_database(database_name, md5_path) VALUES ('"
+ dbName + "', md5('" + path + "'));");
}
}