Package cx.fbn.nevernote.sql

Source Code of cx.fbn.nevernote.sql.SavedSearchTable

/*
* 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.HashMap;
import java.util.List;

import com.evernote.edam.type.QueryFormat;
import com.evernote.edam.type.SavedSearch;
import com.trolltech.qt.core.QBuffer;
import com.trolltech.qt.core.QByteArray;
import com.trolltech.qt.core.QIODevice;
import com.trolltech.qt.gui.QIcon;
import com.trolltech.qt.gui.QImage;
import com.trolltech.qt.gui.QPixmap;

import cx.fbn.nevernote.sql.driver.NSqlQuery;
import cx.fbn.nevernote.utilities.ApplicationLogger;

public class SavedSearchTable {
  private final ApplicationLogger     logger;
  private final DatabaseConnection    db;

 
  // Constructor
  public SavedSearchTable(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 SavedSearch...");
        if (!query.exec("Create table SavedSearch (guid varchar primary key, " +
            "name varchar, query varchar, format integer, sequence integer, isDirty boolean)"))
          logger.log(logger.HIGH, "Table SavedSearch creation FAILED!!!");
  }
  // Drop the table
  public void dropTable() {
    NSqlQuery query = new NSqlQuery(db.getConnection());
    query.exec("Drop table SavedSearch");
  }
  // get all tags
  public List<SavedSearch> getAll() {
    SavedSearch tempSearch;
    List<SavedSearch> index = new ArrayList<SavedSearch>();
    boolean check;
           
        NSqlQuery query = new NSqlQuery(db.getConnection());
                       
    check = query.exec("Select guid, name, query, format, sequence"
        +" from SavedSearch");
    if (!check)
      logger.log(logger.EXTREME, "SavedSearch SQL retrieve has failed in getAll().");
    while (query.next()) {
      tempSearch = new SavedSearch();
      tempSearch.setGuid(query.valueString(0));
      tempSearch.setName(query.valueString(1));
      tempSearch.setQuery(query.valueString(2));
      int fmt = new Integer(query.valueString(3));
      if (fmt == 1)
        tempSearch.setFormat(QueryFormat.USER);
      else
        tempSearch.setFormat(QueryFormat.SEXP);
      int sequence = new Integer(query.valueString(4)).intValue();
      tempSearch.setUpdateSequenceNum(sequence);
      index.add(tempSearch);
   
    return index;
  }
  public SavedSearch getSavedSearch(String guid) {
    SavedSearch tempSearch = null;
    boolean check;
     
        NSqlQuery query = new NSqlQuery(db.getConnection());
                       
    check = query.prepare("Select guid, name, query, format, sequence"
        +" from SavedSearch where guid=:guid");
    if (!check)
      logger.log(logger.EXTREME, "SavedSearch SQL prepare has failed in getSavedSearch.");
    query.bindValue(":guid", guid);
    query.exec();
    if (!check)
      logger.log(logger.EXTREME, "SavedSearch SQL retrieve has failed in getSavedSearch.");
    if (query.next()) {
      tempSearch = new SavedSearch();
      tempSearch.setGuid(query.valueString(0));
      tempSearch.setName(query.valueString(1));
      tempSearch.setQuery(query.valueString(2));
      int fmt = new Integer(query.valueString(3));
      if (fmt == 1)
        tempSearch.setFormat(QueryFormat.USER);
      else
        tempSearch.setFormat(QueryFormat.SEXP);
      int sequence = new Integer(query.valueInteger(4));
      tempSearch.setUpdateSequenceNum(sequence);
    }
    return tempSearch;
  }
  // Update a tag
  public void updateSavedSearch(SavedSearch search, boolean isDirty) {
    boolean check;
        NSqlQuery query = new NSqlQuery(db.getConnection());
    check = query.prepare("Update SavedSearch set sequence=:sequence, "+
      "name=:name, isDirty=:isDirty, query=:query, format=:format "
      +"where guid=:guid");
      
    if (!check) {
      logger.log(logger.EXTREME, "SavedSearch SQL update prepare has failed.");
      logger.log(logger.EXTREME, query.lastError().toString());
    }
    query.bindValue(":sequence", search.getUpdateSequenceNum());
    query.bindValue(":name", search.getName());
    query.bindValue(":isDirty", isDirty);
    query.bindValue(":query", search.getQuery());
    if (search.getFormat() == QueryFormat.USER)
      query.bindValue(":format", 1);
    else
      query.bindValue(":format", 2);
   
    query.bindValue(":guid", search.getGuid());
   
    check = query.exec();
    if (!check) {
      logger.log(logger.MEDIUM, "Tag Table update failed.");
      logger.log(logger.EXTREME, query.lastError().toString());
    }
  }
  // Delete a tag
  public void expungeSavedSearch(String guid, boolean needsSync) {
    boolean check;
    SavedSearch s = getSavedSearch(guid);
        NSqlQuery query = new NSqlQuery(db.getConnection());

         check = query.prepare("delete from SavedSearch "
           +"where guid=:guid");
    if (!check) {
      logger.log(logger.EXTREME, "SavedSearch SQL delete prepare has failed.");
      logger.log(logger.EXTREME, query.lastError().toString());
    }
    query.bindValue(":guid", guid);
    check = query.exec();
    if (!check) {
      logger.log(logger.MEDIUM, "Saved Search delete failed.");
      logger.log(logger.EXTREME, query.lastError().toString());
    }

    // Add the work to the parent queue
    if (needsSync && s != null && s.getUpdateSequenceNum() > 0) {
      DeletedTable del = new DeletedTable(logger, db);
      del.addDeletedItem(guid, "SavedSearch");
    }
  }
  // Save a tag
  public void addSavedSearch(SavedSearch search, boolean isDirty) {
    boolean check;
        NSqlQuery query = new NSqlQuery(db.getConnection());
    check = query.prepare("Insert Into SavedSearch (guid, query, sequence, format, name, isDirty)"
        +" Values(:guid, :query, :sequence, :format, :name, :isDirty)");
    if (!check) {
      logger.log(logger.EXTREME, "Search SQL insert prepare has failed.");
      logger.log(logger.EXTREME, query.lastError().toString());
    }
    query.bindValue(":guid", search.getGuid());
    query.bindValue(":query", search.getQuery());
    query.bindValue(":sequence", search.getUpdateSequenceNum());
    if (search.getFormat() == QueryFormat.USER)
      query.bindValue(":format", 1);
    else
      query.bindValue(":format", 2);
    query.bindValue(":name", search.getName());
    query.bindValue(":isDirty", isDirty);
 
    check = query.exec();
    if  (!check) {
      logger.log(logger.MEDIUM, "Search Table insert failed.");
      logger.log(logger.MEDIUM, query.lastError().toString());
    }
  }
  // Update a tag sequence number
  public void updateSavedSearchSequence(String guid, int sequence) {
    boolean check;
     ;
        NSqlQuery query = new NSqlQuery(db.getConnection());
    check = query.prepare("Update SavedSearch set sequence=:sequence where guid=:guid");
    query.bindValue(":sequence", sequence);
    query.bindValue(":guid", guid);
    query.exec();
    if (!check) {
      logger.log(logger.MEDIUM, "SavedSearch sequence update failed.");
      logger.log(logger.MEDIUM, query.lastError());
    }
  }
  // Update a tag sequence number
  public void updateSavedSearchGuid(String oldGuid, String newGuid) {
    boolean check;
        NSqlQuery query = new NSqlQuery(db.getConnection());
    check = query.prepare("Update SavedSearch set guid=:newGuid where guid=:oldGuid");
    query.bindValue(":newGuid", newGuid);
    query.bindValue(":oldGuid", oldGuid);
    query.exec();
    if (!check) {
      logger.log(logger.MEDIUM, "SavedSearch guid update failed.");
      logger.log(logger.MEDIUM, query.lastError());
    }
  }
  // Get dirty tags
  public List<SavedSearch> getDirty() {
    SavedSearch search;
    List<SavedSearch> index = new ArrayList<SavedSearch>();
    boolean check;
           
        NSqlQuery query = new NSqlQuery(db.getConnection());
                       
    check = query.exec("Select guid, query, sequence, name, format"
        +" from SavedSearch where isDirty = true");
    if (!check)
      logger.log(logger.EXTREME, "SavedSearch getDirty prepare has failed.");
    while (query.next()) {
      search = new SavedSearch();
      search.setGuid(query.valueString(0));
      search.setQuery(query.valueString(1));
      int sequence = new Integer(query.valueString(2)).intValue();
      search.setUpdateSequenceNum(sequence);
      search.setName(query.valueString(3));
      int fmt = new Integer(query.valueString(4)).intValue();
      if (fmt == 1)
        search.setFormat(QueryFormat.USER);
      else
        search.setFormat(QueryFormat.SEXP);
      index.add(search);
   
    return index;
  }
  // Find a guid based upon the name
  public String findSavedSearchByName(String name) {
    NSqlQuery query = new NSqlQuery(db.getConnection());
   
    query.prepare("Select guid from SavedSearch where name=:name");
    query.bindValue(":name", name);
    if (!query.exec())
      logger.log(logger.EXTREME, "SavedSearch SQL retrieve has failed in findSavedSearchByName().");
    String val = null;
    if (query.next())
      val = query.valueString(0);
    return val;
  }
  // given a guid, does the tag exist
  public boolean exists(String guid) {
    NSqlQuery query = new NSqlQuery(db.getConnection());
    query.prepare("Select guid from SavedSearch where guid=:guid");
    query.bindValue(":guid", guid);
    if (!query.exec())
      logger.log(logger.EXTREME, "SavedSearch SQL retrieve has failed in exists().");
    boolean retval = query.next();
    return retval;
  }
  // This is a convience method to check if a tag exists & update/create based upon it
  public void syncSavedSearch(SavedSearch search, boolean isDirty) {
    if (exists(search.getGuid()))
      updateSavedSearch(search, isDirty);
    else
      addSavedSearch(search, isDirty);
  }
  public void  resetDirtyFlag(String guid) {
    NSqlQuery query = new NSqlQuery(db.getConnection());
   
    query.prepare("Update SavedSearch set isdirty=false where guid=:guid");
    query.bindValue(":guid", guid);
    if (!query.exec())
      logger.log(logger.EXTREME, "Error resetting SavedSearch dirty field in resetDirtyFlag().");
  }

 
  // Get the custom icon
  public QIcon getIcon(String guid) {
    NSqlQuery query = new NSqlQuery(db.getConnection());
   
    if (!query.prepare("Select icon from SavedSearch where guid=:guid"))
      logger.log(logger.EXTREME, "Error preparing saved search icon select.");
    query.bindValue(":guid", guid);
    if (!query.exec())
      logger.log(logger.EXTREME, "Error finding saved search icon.");
    if (!query.next() || query.getBlob(0) == null)
      return null;
   
    QByteArray blob = new QByteArray(query.getBlob(0));
    QIcon icon = new QIcon(QPixmap.fromImage(QImage.fromData(blob)));
    return icon;
  }
  // Set the custom icon
  public void setIcon(String guid, QIcon icon, String type) {
    NSqlQuery query = new NSqlQuery(db.getConnection());
    if (icon == null) {
      if (!query.prepare("update SavedSearch set icon=null where guid=:guid"))
        logger.log(logger.EXTREME, "Error preparing saved search icon set.");
    } else {
      if (!query.prepare("update SavedSearch set icon=:icon where guid=:guid"))
        logger.log(logger.EXTREME, "Error preparing tag icon set.");
      QBuffer buffer = new QBuffer();
          if (!buffer.open(QIODevice.OpenModeFlag.ReadWrite)) {
            logger.log(logger.EXTREME, "Failure to open buffer.  Aborting.");
            return;
          }
          QPixmap p = icon.pixmap(32, 32);
          QImage i = p.toImage();
           i.save(buffer, type.toUpperCase());
           buffer.close();
           QByteArray b = new QByteArray(buffer.buffer());
           if (!b.isNull() && !b.isEmpty())
             query.bindValue(":icon", b.toByteArray());
           else
             return;
    }
    query.bindValue(":guid", guid);
    if (!query.exec())
      logger.log(logger.LOW, "Error setting SavedSearch icon. " +query.lastError());
  }

  // Get a list of all icons
  public HashMap<String, QIcon> getAllIcons() {
    HashMap<String, QIcon> values = new HashMap<String, QIcon>();
    NSqlQuery query = new NSqlQuery(db.getConnection());
 
    if (!query.exec("SELECT guid, icon from SavedSearch"))
      logger.log(logger.EXTREME, "Error executing SavedSearch getAllIcons select.");
    while (query.next()) {
      if (query.getBlob(1) != null) {
        String guid = query.valueString(0);
        QByteArray blob = new QByteArray(query.getBlob(1));
        QIcon icon = new QIcon(QPixmap.fromImage(QImage.fromData(blob)));
        values.put(guid, icon);
      }
    }
    return values;
  }


}
TOP

Related Classes of cx.fbn.nevernote.sql.SavedSearchTable

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.