/*
* This file is part of NixNote
* Copyright 2009 Randy Baumgarte
*
* This file may be licensed under the terms of of the
* GNU General Public License Version 2 (the ``GPL'').
*
* Software distributed under the License is distributed
* on an ``AS IS'' basis, WITHOUT WARRANTY OF ANY KIND, either
* express or implied. See the GPL for the specific language
* governing rights and limitations.
*
* You should have received a copy of the GPL along with this
* program. If not, go to http://www.gnu.org/licenses/gpl.html
* or write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*/
package cx.fbn.nevernote.sql;
import java.util.ArrayList;
import java.util.List;
import cx.fbn.nevernote.sql.driver.NSqlQuery;
import cx.fbn.nevernote.utilities.ApplicationLogger;
import cx.fbn.nevernote.utilities.ListManager;
public class WatchFolderTable {
ListManager parent;
private final ApplicationLogger logger;
private final DatabaseConnection db;
// Constructor
public WatchFolderTable(ApplicationLogger l, DatabaseConnection d) {
logger = l;
db = d;
}
// Create the table
public void createTable() {
NSqlQuery query = new NSqlQuery(db.getConnection());
logger.log(logger.HIGH, "Creating table WatchFolder...");
if (!query.exec("Create table WatchFolders (folder varchar primary key, notebook varchar," +
"keep boolean, depth integer)"));
logger.log(logger.HIGH, "Table WatchFolders creation FAILED!!!");
}
// Drop the table
public void dropTable() {
NSqlQuery query = new NSqlQuery(db.getConnection());
query.exec("Drop table WatchFolders");
}
// Add an folder
public void addWatchFolder(String folder, String notebook, boolean keep, int depth) {
if (exists(folder))
expungeWatchFolder(folder);
NSqlQuery query = new NSqlQuery(db.getConnection());
query.prepare("Insert Into WatchFolders (folder, notebook, keep, depth) " +
"values (:folder, :notebook, :keep, :depth)");
query.bindValue(":folder", folder);
query.bindValue(":notebook", notebook);
query.bindValue(":keep", keep);
query.bindValue(":depth", depth);
if (!query.exec()) {
logger.log(logger.MEDIUM, "Insert into WatchFolder failed.");
}
}
// Add an folder
public boolean exists(String folder) {
NSqlQuery query = new NSqlQuery(db.getConnection());
query.prepare("Select folder from WatchFolders where folder=:folder ");
query.bindValue(":folder", folder);
query.exec();
if (!query.next())
return false;
else
return true;
}
// remove an folder
public void expungeWatchFolder(String folder) {
NSqlQuery query = new NSqlQuery(db.getConnection());
query.prepare("delete from WatchFolders where folder=:folder");
query.bindValue(":folder", folder);
if (!query.exec()) {
logger.log(logger.MEDIUM, "Expunge WatchFolder failed.");
logger.log(logger.MEDIUM, query.lastError());
}
}
public void expungeAll() {
NSqlQuery query = new NSqlQuery(db.getConnection());
if (!query.exec("delete from WatchFolders")) {
logger.log(logger.MEDIUM, "Expunge all WatchFolder failed.");
logger.log(logger.MEDIUM, query.lastError());
}
}
public List<WatchFolderRecord> getAll() {
logger.log(logger.HIGH, "Entering RWatchFolders.getAll");
List<WatchFolderRecord> list = new ArrayList<WatchFolderRecord>();
NSqlQuery query = new NSqlQuery(db.getConnection());
query.exec("Select folder, (select name from notebook where guid = notebook), keep, depth from WatchFolders");
while (query.next()) {
WatchFolderRecord record = new WatchFolderRecord();
record.folder = query.valueString(0);
record.notebook = query.valueString(1);
record.keep = new Boolean(query.valueString(2));
record.depth = new Integer(query.valueString(3));
list.add(record);
}
logger.log(logger.HIGH, "Leaving RWatchFolders.getAll");
return list;
}
public String getNotebook(String dir) {
logger.log(logger.HIGH, "Entering RWatchFolders.getNotebook");
NSqlQuery query = new NSqlQuery(db.getConnection());
query.prepare("Select notebook from WatchFolders where folder=:dir");
query.bindValue(":dir", dir);
query.exec();
String response = null;
while (query.next()) {
response = query.valueString(0);
}
logger.log(logger.HIGH, "Leaving RWatchFolders.getNotebook");
return response;
}
}