/*
* 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 com.trolltech.qt.core.QByteArray;
import cx.fbn.nevernote.sql.driver.NSqlQuery;
import cx.fbn.nevernote.utilities.ApplicationLogger;
public class InkImagesTable {
private final ApplicationLogger logger;
DatabaseConnection db;
// Constructor
public InkImagesTable(ApplicationLogger l,DatabaseConnection d) {
logger = l;
db = d;
}
// Create the table
public void createTable() {
NSqlQuery query = new NSqlQuery(db.getConnection());
// Create the NoteTag table
logger.log(logger.HIGH, "Creating table InkImage...");
if (!query.exec("Create table InkImages (guid varchar, " +
"slice integer, primary key(guid, slice), image blob)"))
logger.log(logger.HIGH, "Table InkImage creation FAILED!!!");
}
// Drop the table
public void dropTable() {
NSqlQuery query = new NSqlQuery(db.getConnection());
query.exec("drop table InkImages");
}
// Delete an image
public void expungeImage(String guid) {
NSqlQuery query = new NSqlQuery(db.getConnection());
if (!query.prepare("Delete from InkImages where guid=:guid ")) {
logger.log(logger.EXTREME, "InkImage SQL prepare has failed.");
logger.log(logger.MEDIUM, query.lastError());
return;
}
query.bindValue(":guid", guid);
if (!query.exec()) {
logger.log(logger.EXTREME, "InkImage SQL delete has failed.");
logger.log(logger.MEDIUM, query.lastError());
return;
}
return;
}
// Get a note tags by the note's Guid
public List<QByteArray> getImage(String guid) {
List<QByteArray> data = new ArrayList<QByteArray>();
NSqlQuery query = new NSqlQuery(db.getConnection());
if (!query.prepare("Select image from InkImages where guid = :guid order by slice")) {
logger.log(logger.EXTREME, "InkImage SQL prepare has failed.");
logger.log(logger.MEDIUM, query.lastError());
return null;
}
query.bindValue(":guid", guid);
if (!query.exec()) {
logger.log(logger.EXTREME, "InkImage SQL exec has failed.");
logger.log(logger.MEDIUM, query.lastError());
return null;
}
while (query.next()) {
data.add(new QByteArray(query.getBlob(0)));
}
return data;
}
// Save an ink note image
public void saveImage(String guid, int slice, QByteArray data) {
logger.log(logger.HIGH, "Entering inkImageTable.saveImage");
boolean check;
NSqlQuery query = new NSqlQuery(db.getConnection());
check = query.prepare("Insert Into InkImages ("
+"guid, slice, image) Values("
+":guid, :slice, :data)");
if (!check) {
logger.log(logger.EXTREME, "InkImages SQL insert prepare has failed.");
logger.log(logger.MEDIUM, query.lastError());
return;
}
query.bindValue(":guid", guid);
query.bindValue(":slice", slice);
query.bindBlob(":data", data.toByteArray());
check = query.exec();
if (!check) {
logger.log(logger.MEDIUM, "*** InkImages Table insert failed.");
logger.log(logger.MEDIUM, query.lastError());
}
logger.log(logger.HIGH, "Leaving InkImages.saveImage");
}
}