/* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is Boogie.
 *
 * The Initial Developer of the Original Code is
 * Ondrej Donek.
 * Portions created by the Initial Developer are Copyright (C) 2008
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *
 * ***** END LICENSE BLOCK ***** */


/**
 * Prototype function for Boogie notes data service. It uses global 
 * object for access to Boogie's SQLite database.
 */
function BoogieDatabaseServicePrototype() {}
BoogieDatabaseServicePrototype.prototype =
{
	
	// Getter for Mozilla storage service
	_db_srv : null,
	get mDbSrv() {
		if(!this._db_srv)
			this._db_srv = Components.classes["@mozilla.org/storage/service;1"].
					getService(Components.interfaces.mozIStorageService);
		
		return this._db_srv;
	},
	
	mDbConnect : null,
	
	
  /**
   * Initialize Boogie database
   * 
   * @returns {boolean}
   */
  initialize : function()
  {
    var file = Components.classes["@mozilla.org/file/directory_service;1"].
        getService(Components.interfaces.nsIProperties).
        get("ProfD", Components.interfaces.nsIFile);
    file.append("boogiedb.sqlite"); 
    
    this.mDbConnect = this.mDbSrv.openDatabase(file);
    
    var counter = 0;
    while(!this.mDbConnect.connectionReady) 
      if(counter++ == 1000000) return false;
    
    var create_tables = false;
    try {
      var stmt = this.mDbConnect.createStatement(SET_DB_ENCODING);
      stmt.execute();
      
      if(!this.createTables())
        return false;
    } catch(e) {}
    
    return true;
  }, // end initialize()
  
  
  /**
   * Checks Boogie database integrity
   *
   * @returns {boolean}
   */
  checkDatabaseIntegrity : function()
  {
    // if(!this.mDbConnect.tableExists("bugs") return false;
  }, // end checkDatabaseIntegrity()
	
	
	/**
	 * Creates Boogie database
	 *
	 * @returns {boolean}
	 * @throws Exception Another transaction in progress
	 */
	createTables : function()
	{
    var stmt = null;
    
    // Create bugs database
    stmt = this.mDbConnect.createStatement(CREATE_BUGS_DB);
    stmt.execute();
    
    // Create bugs types table
    stmt = this.mDbConnect.createStatement(CREATE_BUGS_TYPES_DB);
    stmt.execute();
    for(var i=0; i<CREATE_BUGS_TYPES_DB_DATA.length; i++) {
      stmt = this.mDbConnect.createStatement(CREATE_BUGS_TYPES_DB_DATA[i]);
      stmt.execute();
    }
    
    // Create bugs statuses table
    stmt = this.mDbConnect.createStatement(CREATE_BUGS_STATUSES_DB);
    stmt.execute();
    for(var i=0; i<CREATE_BUGS_STATUSES_DB_DATA.length; i++) {
      stmt = this.mDbConnect.createStatement(CREATE_BUGS_STATUSES_DB_DATA[i]);
      stmt.execute();
    }
    
    // Create bugs resolutions table
    stmt = this.mDbConnect.createStatement(CREATE_BUGS_RESOLUTIONS_DB);
    stmt.execute();
    for(var i=0; i<CREATE_BUGS_RESOLUTIONS_DB_DATA.length; i++) {
      stmt = this.mDbConnect.createStatement(CREATE_BUGS_RESOLUTIONS_DB_DATA[i]);
      stmt.execute();
    }
    
    // Create bugs severities table
    stmt = this.mDbConnect.createStatement(CREATE_BUGS_SEVERITIES_DB);
    stmt.execute();
    for(var i=0; i<CREATE_BUGS_SEVERITIES_DB_DATA.length; i++) {
      stmt = this.mDbConnect.createStatement(CREATE_BUGS_SEVERITIES_DB_DATA[i]);
      stmt.execute();
    }
    
    // Create bugs priorities table
    stmt = this.mDbConnect.createStatement(CREATE_BUGS_PRIORITIES_DB);
    stmt.execute();
    for(var i=0; i<CREATE_BUGS_PRIORITIES_DB_DATA.length; i++) {
      stmt = this.mDbConnect.createStatement(CREATE_BUGS_PRIORITIES_DB_DATA[i]);
      stmt.execute();
    }
    
    // Create bugs posts table
    stmt = this.mDbConnect.createStatement(CREATE_BUGS_POSTS_DB);
    stmt.execute();
    
    // Create bugs posts attachements table
    stmt = this.mDbConnect.createStatement(CREATE_BUGS_POSTS_ATTACHEMENTS_DB);
    stmt.execute();
    
    // Create developers table
    stmt = this.mDbConnect.createStatement(CREATE_BUGS_DEVELOPERS_DB);
    stmt.execute();
    
    // Create projects table
    stmt = this.mDbConnect.createStatement(CREATE_BUGS_PROJECTS_DB);
    stmt.execute();
    
    // Create projects components table
    stmt = this.mDbConnect.createStatement(CREATE_BUGS_PROJECTS_COMPONENTS_DB);
    stmt.execute();
    
    // Create projects versions table
    stmt = this.mDbConnect.createStatement(CREATE_BUGS_PROJECTS_VERSIONS_DB);
    stmt.execute();
    
    // Create notes table
    stmt = this.mDbConnect.createStatement(CREATE_BUGS_NOTES_DB);
    stmt.execute();
    
    // Create view bugs_full
    stmt = this.mDbConnect.createStatement(CREATE_VIEW_BUGS_FULL);
    stmt.execute();
    
    return true;
	}, // end createTables()
	
	
	// ========================================================================
	// Bugs
	
  /**
   * Add bug to the database
   * 
   * @param aBug {BoogieBugPrototype}
   * @returns {integer}
   */
	addBug : function(aBug) 
  {
    var stmt = this.mDbConnect.createStatement(INSERT_BUG);
    stmt.bindInt32Parameter(0, aBug.mTypeId);
    stmt.bindInt32Parameter(1, aBug.mProjectId);
    stmt.bindInt32Parameter(2, aBug.mProjectComponentId);
    stmt.bindInt32Parameter(3, aBug.mDeveloperId);
    stmt.bindInt32Parameter(4, aBug.mStatusId);
    stmt.bindInt32Parameter(5, aBug.mResolutionId);
    stmt.bindInt32Parameter(6, aBug.mSeverityId);
    stmt.bindInt32Parameter(7, aBug.mPriorityId);
    stmt.bindInt32Parameter(8, aBug.aProjectVersionFromId);
    stmt.bindInt32Parameter(9, aBug.aProjectVersionToId);
    stmt.bindStringParameter(10, aBug.mSince);
    stmt.execute();
		
    return this.mDbConnect.lastInsertRowID;
  }, // end addBug(aBug)
  
  /**
   * Gets single bug object with given id from the database
   * 
   * @param aId {integer}
   * @returns {BoogieBugPrototype} Or NULL
   */
	getBug : function(aId)  
  {
    var stmt = this.mDbConnect.createStatement(SELECT_BUG);
    stmt.bindInt32Parameter(0, aId);
    
    while(stmt.executeStep()) {
      return new BoogieBugPrototype(stmt.getInt32(0), // bug id
																		stmt.getInt32(1), // type id
																		stmt.getInt32(2), // project id
																		stmt.getInt32(3), // project component id
																		stmt.getInt32(4), // developer id
																		stmt.getInt32(5), // status id
																		stmt.getInt32(6), // resolution id
																		stmt.getInt32(7), // severity id
																		stmt.getInt32(8), // priority id
																		stmt.getInt32(9), // project version from id
																		stmt.getInt32(10), // project version to id
																		stmt.getString(11)); // since
    }
    
    return null;
  }, // end getBug(aId)
  
  /**
   * Returns total count of bugs
   *
   * @returns {integer}
   */
  getBugsCount : function()
  {
    var stmt = this.mDbConnect.createStatement(BUGS_COUNT);
    
    while(stmt.executeStep())
      return stmt.getInt32(0);
    
    return null;
  }, // end getBugsCount()
  
  /**
   * Returns array with all bugs that are stored in the database.
   * 
   * @return {array} Returns instances of BoogieBugPrototype.
   */
	getBugs : function()
	{
    var bugs = new Array();
    var stmt = this.mDbConnect.createStatement(SELECT_BUGS);
    
    while(stmt.executeStep()) {
      //Components.utils.reportError("bug: " + stmt.getInt32(0));
      bug = new BoogieBugPrototype(stmt.getInt32(0), // bug id
																	 stmt.getInt32(1), // type id
																	 stmt.getInt32(2), // project id
																	 stmt.getInt32(3), // project component id
																	 stmt.getInt32(4), // developer id
																	 stmt.getInt32(5), // status id
																	 stmt.getInt32(6), // resolution id
																	 stmt.getInt32(7), // severity id
																	 stmt.getInt32(8), // priority id
																	 stmt.getInt32(9), // project version from id
																	 stmt.getInt32(10), // project version to id
																	 stmt.getString(11)); // since
  	  bugs.push(bug);
    }
    
    return bugs;
	}, // end getBugs()
  
  /**
   * Update bug with the given new one
   * 
   * @param aOldBug {BoogieBugPrototype}
   * @param aNewBug {BoogieBugPrototype}
   * @returns {boolean}
   */
	updateBug : function(aOldBug, aNewBug) 
  {
    var stmt = this.mDbConnect.createStatement(UPDATE_BUG);
    stmt.bindInt32Parameter(0, aNewBug.mTypeId);
    stmt.bindInt32Parameter(1, aNewBug.mProjectId);
    stmt.bindInt32Parameter(2, aNewBug.mProjectComponentId);
    stmt.bindInt32Parameter(3, aNewBug.mDeveloperId);
    stmt.bindInt32Parameter(4, aNewBug.mStatusId);
    stmt.bindInt32Parameter(5, aNewBug.mResolutionId);
    stmt.bindInt32Parameter(6, aNewBug.mSeverityId);
    stmt.bindInt32Parameter(7, aNewBug.mPriorityId);
    stmt.bindInt32Parameter(8, aNewBug.aProjectVersionFromId);
    stmt.bindInt32Parameter(9, aNewBug.aProjectVersionToId);
    stmt.bindStringParameter(10, aNewBug.mSince);
    stmt.bindInt32Parameter(11, aOldBug.mId);
    stmt.execute();
    
    return true;
  }, // end updateBug(aOldBug, aNewBug)
  
  /**
   * Remove bug with the given identifier from the database
   * 
   * @param aId {integer}
   * @returns {BoogieBugPrototype} Or FALSE.
   */
	removeBug : function(aId)
	{
    var stmt = this.mDbConnect.createStatement(REMOVE_BUG);
    stmt.bindInt32Parameter(0, aId);
    stmt.execute();
    
    return bug;
	}, // end removeBug()
	
	/**
	 * Removes all bug
	 *
	 * @returns {boolean}
	 */
	removeAllBugs : function()
	{
		try {
			this.removeAll("bugs");
		} catch(e) {
			Components.utils.reportError(e);
			return false;
		}
		
		return true;
	}, // end removeAllBugs()
	
	addBugPost : function() {}, // end addBugPost()
	getBugPost : function(aId) {}, // end getBugPost(aId)
	getBugPostsForBug : function(aBugId) {}, // end getBugPostsForBug(aBugId)
	
	
	// ========================================================================
	// Projects
	
  /**
   * Add project to the database
   * 
   * @param aProject {BoogieProjectPrototype}
   * @returns {integer}
   */
	addProject : function(aProject) 
  {
    var stmt = this.mDbConnect.createStatement(INSERT_PROJECT);
    stmt.bindInt32Parameter(0, aProject.mDeveloperId);
    stmt.bindUTF8StringParameter(1, aProject.mName);
    stmt.bindUTF8StringParameter(2, aProject.mDescription);
    stmt.bindUTF8StringParameter(3, aProject.mHomepageUri);
    stmt.bindUTF8StringParameter(4, aProject.mRepositoryUri);
    stmt.execute();
		
    return this.mDbConnect.lastInsertRowID;
  }, // end addProject(aProject)
  
  /**
   * Gets single project object with given id from the database
   * 
   * @param aId {integer}
   * @returns {BoogieProjectPrototype} Or NULL
   */
	getProject : function(aId)  
  {
    var stmt = this.mDbConnect.createStatement(SELECT_PROJECT);
    stmt.bindInt32Parameter(0, aId);
    
    while(stmt.executeStep()) {
      return new BoogieProjectPrototype(stmt.getInt32(0), // project id
																				stmt.getInt32(1), // developer id
																				stmt.getUTF8String(2), // name
																				stmt.getUTF8String(3), // description
																				stmt.getUTF8String(4), // homepage_uri
																				stmt.getUTF8String(5) // repository_uri
																				); 
    }
    
    return null;
  }, // end getProject(aId)
  
  /**
   * Returns total count of projects
   *
   * @returns {integer}
   */
  getProjectsCount : function()
  {
    var stmt = this.mDbConnect.createStatement(PROJECTS_COUNT);
    
    while(stmt.executeStep())
      return stmt.getInt32(0);
    
    return null;
  }, // end getProjectsCount()
  
  /**
   * Returns array with all projects that are stored in the database.
   * 
   * @return {array} Returns instances of BoogieProjectPrototype.
   */
	getProjects : function()
	{
    var projects = new Array();
    var stmt = this.mDbConnect.createStatement(SELECT_PROJECTS);
    
    while(stmt.executeStep()) {
      //Components.utils.reportError("project: " + stmt.getUTF8String(2));
      var project = new BoogieProjectPrototype(stmt.getInt32(0), // project id
						    															 stmt.getInt32(1), // developer id
								    													 stmt.getUTF8String(2), // name
										    											 stmt.getUTF8String(3), // description
																							 stmt.getUTF8String(4), // homepage_uri
																							 stmt.getUTF8String(5) // repository_uri
																							);
  	  projects.push(project);
    }
    
    return projects;
	}, // end getProjects()
  
  /**
   * Update project with the given new one
   * 
   * @param aOldProject {BoogieProjectPrototype}
   * @param aNewProject {BoogieProjectPrototype}
   * @returns {boolean}
   */
	updateProject : function(aOldProject, aNewProject) 
  {
    var stmt = this.mDbConnect.createStatement(UPDATE_PROJECT);
    stmt.bindInt32Parameter(0, aNewProject.mDeveloperId);
    stmt.bindUTF8StringParameter(1, aNewProject.mName);
    stmt.bindUTF8StringParameter(2, aNewProject.mDescription);
    stmt.bindUTF8StringParameter(3, aNewProject.mHomepageUri);
    stmt.bindUTF8StringParameter(4, aNewProject.mRepositoryUri);
    stmt.bindInt32Parameter(5, aOldProject.mId);
    stmt.execute();
    
    return true;
  }, // end updateProject(aOldProject, aNewProject)
  
  /**
   * Remove project with the given identifier from the database
   * 
   * @param aId {integer}
   * @returns {BoogieProjectPrototype} Or FALSE.
   */
	removeProject : function(aId)
	{
    var stmt = this.mDbConnect.createStatement(REMOVE_PROJECT);
    stmt.bindInt32Parameter(0, aId);
    stmt.execute();
    
    return project;
	}, // end removeProject()
	
	/**
	 * Removes all project
	 *
	 * @returns {boolean}
	 */
	removeAllProjects : function()
	{
		try {
			this.removeAll("projects");
		} catch(e) {
			Components.utils.reportError(e);
			return false;
		}
		
		return true;
	}, // end removeAllProjects()
	
	
	// ========================================================================
	// Components
	
  /**
   * Add component to the database
   * 
   * @param aComponent {BoogieProjectComponentPrototype}
   * @returns {integer}
   */
	addComponent : function(aComponent) 
  {
    var stmt = this.mDbConnect.createStatement(INSERT_COMPONENT);
    stmt.bindInt32Parameter(0, aComponent.mProjectId);
    stmt.bindUTF8StringParameter(1, aComponent.mName);
    stmt.bindUTF8StringParameter(2, aComponent.mDescription);
    stmt.execute();
		
    return this.mDbConnect.lastInsertRowID;
  }, // end addComponent(aComponent)
  
  /**
   * Gets single component object with given id from the database
   * 
   * @param aId {integer}
   * @returns {BoogieProjectComponentPrototype} Or NULL
   */
	getComponent : function(aId)  
  {
    var stmt = this.mDbConnect.createStatement(SELECT_COMPONENT);
    stmt.bindInt32Parameter(0, aId);
    
    while(stmt.executeStep()) {
      return new BoogieProjectComponentPrototype(stmt.getInt32(0), // component id
																				  stmt.getInt32(1), // project id
																				  stmt.getUTF8String(2), // name
																				  stmt.getUTF8String(3)); // description
    }
    
    return null;
  }, // end getComponent(aId)
  
  /**
   * Returns total count of components
   *
   * @returns {integer}
   */
  getComponentsCount : function()
  {
    var stmt = this.mDbConnect.createStatement(COMPONENTS_COUNT);
    
    while(stmt.executeStep())
      return stmt.getInt32(0);
    
    return null;
  }, // end getComponentsCount()
  
  /**
   * Returns array with all components that are stored in the database.
   * 
   * @return {array} Returns instances of BoogieProjectComponentPrototype.
   */
	getComponents : function()
	{
    var components = new Array();
    var stmt = this.mDbConnect.createStatement(SELECT_COMPONENTS);
    
    while(stmt.executeStep()) {
      //Components.utils.reportError("component: " + stmt.getUTF8String(2));
      var component = new BoogieProjectComponentPrototype(stmt.getInt32(0), // component id
						    															            stmt.getInt32(1), // project id
								    													            stmt.getUTF8String(2), // name
										    											            stmt.getUTF8String(3)); // description
  	  components.push(component);
    }
    
    return components;
	}, // end getComponents()
  
  /**
   * Update component with the given new one
   * 
   * @param aOldComponent {BoogieProjectComponentPrototype}
   * @param aNewComponent {BoogieProjectComponentPrototype}
   * @returns {boolean}
   */
	updateComponent : function(aOldComponent, aNewComponent) 
  {
    var stmt = this.mDbConnect.createStatement(UPDATE_COMPONENT);
    stmt.bindInt32Parameter(0, aNewComponent.mProjectId);
    stmt.bindUTF8StringParameter(1, aNewComponent.mName);
    stmt.bindUTF8StringParameter(2, aNewComponent.Description);
    stmt.bindInt32Parameter(3, aOldComponent.mId);
    stmt.execute();
    
    return true;
  }, // end updateComponent(aOldComponent, aNewComponent)
  
  /**
   * Remove component with the given identifier from the database
   * 
   * @param aId {integer}
   * @returns {BoogieProjectComponentPrototype} Or FALSE.
   */
	removeComponent : function(aId)
	{
    var stmt = this.mDbConnect.createStatement(REMOVE_COMPONENT);
    stmt.bindInt32Parameter(0, aId);
    stmt.execute();
    
    return component;
	}, // end removeComponent()
	
	/**
	 * Removes all component
	 *
	 * @returns {boolean}
	 */
	removeAllComponents : function()
	{
		try {
			this.removeAll("components");
		} catch(e) {
			Components.utils.reportError(e);
			return false;
		}
		
		return true;
	}, // end removeAllComponents()
	
	
	// ========================================================================
	// Types
	
  /**
   * Add type to the database
   * 
   * @param aType {BoogieBugTypePrototype}
   * @returns {integer}
   */
	addType : function(aType) 
  {
    var stmt = this.mDbConnect.createStatement(INSERT_TYPE);
    stmt.bindUTF8StringParameter(0, aType.mName);
    stmt.bindUTF8StringParameter(1, aType.mDescription);
    stmt.execute();
		
    return this.mDbConnect.lastInsertRowID;
  }, // end addType(aType)
  
  /**
   * Gets single type object with given id from the database
   * 
   * @param aId {integer}
   * @returns {BoogieBugTypePrototype} Or NULL
   */
	getType : function(aId)  
  {
    var stmt = this.mDbConnect.createStatement(SELECT_TYPE);
    stmt.bindInt32Parameter(0, aId);
    
    while(stmt.executeStep()) {
      return new BoogieBugTypePrototype(stmt.getInt32(0), // type id
																		 stmt.getUTF8String(1), // name
																		 stmt.getUTF8String(2)); // description
    }
    
    return null;
  }, // end getType(aId)
  
  /**
   * Returns total count of types
   *
   * @returns {integer}
   */
  getTypesCount : function()
  {
    var stmt = this.mDbConnect.createStatement(TYPES_COUNT);
    
    while(stmt.executeStep())
      return stmt.getInt32(0);
    
    return null;
  }, // end getTypesCount()
  
  /**
   * Returns array with all types that are stored in the database.
   * 
   * @return {array} Returns instances of BoogieBugTypePrototype.
   */
	getTypes : function()
	{
    var types = new Array();
    var stmt = this.mDbConnect.createStatement(SELECT_TYPES);
    
    while(stmt.executeStep()) {
      //Components.utils.reportError("type: " + stmt.getUTF8String(1));
      var type = new BoogieBugTypePrototype(stmt.getInt32(0), // type id
                                         stmt.getUTF8String(1), // name
                                         stmt.getUTF8String(2)); // description
  	  types.push(type);
    }
    
    return types;
	}, // end getTypes()
  
  /**
   * Update type with the given new one
   * 
   * @param aOldType {BoogieBugTypePrototype}
   * @param aNewType {BoogieBugTypePrototype}
   * @returns {boolean}
   */
	updateType : function(aOldType, aNewType) 
  {
    var stmt = this.mDbConnect.createStatement(UPDATE_TYPE);
    stmt.bindUTF8StringParameter(0, aNewType.mName);
    stmt.bindUTF8StringParameter(1, aNewType.Description);
    stmt.bindInt32Parameter(2, aOldType.mId);
    stmt.execute();
    
    return true;
  }, // end updateType(aOldType, aNewType)
  
  /**
   * Remove type with the given identifier from the database
   * 
   * @param aId {integer}
   * @returns {BoogieBugTypePrototype} Or FALSE.
   */
	removeType : function(aId)
	{
    var stmt = this.mDbConnect.createStatement(REMOVE_TYPE);
    stmt.bindInt32Parameter(0, aId);
    stmt.execute();
    
    return type;
	}, // end removeType()
	
	/**
	 * Removes all type
	 *
	 * @returns {boolean}
	 */
	removeAllTypes : function()
	{
		try {
			this.removeAll("types");
		} catch(e) {
			Types.utils.reportError(e);
			return false;
		}
		
		return true;
	}, // end removeAllTypes()
	
	
	// ========================================================================
	// Statuses
	
  /**
   * Add status to the database
   * 
   * @param aStatus {BoogieBugStatusPrototype}
   * @returns {integer}
   */
	addStatus : function(aStatus) 
  {
    var stmt = this.mDbConnect.createStatement(INSERT_STATUS);
    stmt.bindUTF8StringParameter(0, aStatus.mName);
    stmt.bindUTF8StringParameter(1, aStatus.mDescription);
    stmt.bindStringParameter(2, aStatus.mColor);
    stmt.execute();
		
    return this.mDbConnect.lastInsertRowID;
  }, // end addStatus(aStatus)
  
  /**
   * Gets single status object with given id from the database
   * 
   * @param aId {integer}
   * @returns {BoogieBugStatusPrototype} Or NULL
   */
	getStatus : function(aId)  
  {
    var stmt = this.mDbConnect.createStatement(SELECT_STATUS);
    stmt.bindInt32Parameter(0, aId);
    
    while(stmt.executeStep()) {
      return new BoogieBugStatusPrototype(stmt.getInt32(0), // status id
																			 stmt.getUTF8String(1), // name
																			 stmt.getUTF8String(2), // description
                                       stmt.getString(3)); // color
    }
    
    return null;
  }, // end getStatus(aId)
  
  /**
   * Returns total count of statuses
   *
   * @returns {integer}
   */
  getStatusesCount : function()
  {
    var stmt = this.mDbConnect.createStatement(STATUSES_COUNT);
    
    while(stmt.executeStep())
      return stmt.getInt32(0);
    
    return null;
  }, // end getStatusesCount()
  
  /**
   * Returns array with all statuses that are stored in the database.
   * 
   * @return {array} Returns instances of BoogieBugStatusPrototype.
   */
	getStatuses : function()
	{
    var statuses = new Array();
    var stmt = this.mDbConnect.createStatement(SELECT_STATUSES);
    
    while(stmt.executeStep()) {
      //Components.utils.reportError("status: " + stmt.getUTF8String(1));
      var status = new BoogieBugStatusPrototype(stmt.getInt32(0), // status id
                                             stmt.getUTF8String(1), // name
                                             stmt.getUTF8String(2), // description
                                             stmt.getString(3)); // color
  	  statuses.push(status);
    }
    
    return statuses;
	}, // end getStatuses()
  
  /**
   * Update status with the given new one
   * 
   * @param aOldStatus {BoogieBugStatusPrototype}
   * @param aNewStatus {BoogieBugStatusPrototype}
   * @returns {boolean}
   */
	updateStatus : function(aOldStatus, aNewStatus) 
  {
    var stmt = this.mDbConnect.createStatement(UPDATE_STATUS);
    stmt.bindUTF8StringParameter(0, aNewStatus.mName);
    stmt.bindUTF8StringParameter(1, aNewStatus.Description);
    stmt.bindStringParameter(2, aNewStatus.Color);
    stmt.bindInt32Parameter(3, aOldStatus.mId);
    stmt.execute();
    
    return true;
  }, // end updateStatus(aOldStatus, aNewStatus)
  
  /**
   * Remove status with the given identifier from the database
   * 
   * @param aId {integer}
   * @returns {BoogieBugStatusPrototype} Or FALSE.
   */
	removeStatus : function(aId)
	{
    var stmt = this.mDbConnect.createStatement(REMOVE_STATUS);
    stmt.bindInt32Parameter(0, aId);
    stmt.execute();
    
    return status;
	}, // end removeStatus()
	
	/**
	 * Removes all status
	 *
	 * @returns {boolean}
	 */
	removeAllStatuses : function()
	{
		try {
			this.removeAll("statuses");
		} catch(e) {
			Statuses.utils.reportError(e);
			return false;
		}
		
		return true;
	}, // end removeAllStatuses()
	
	
	// ========================================================================
	// Resolutions
	
  /**
   * Add resolution to the database
   * 
   * @param aResolution {BoogieBugResolutionPrototype}
   * @returns {integer}
   */
	addResolution : function(aResolution) 
  {
    var stmt = this.mDbConnect.createStatement(INSERT_RESOLUTION);
    stmt.bindUTF8StringParameter(0, aResolution.mName);
    stmt.bindUTF8StringParameter(1, aResolution.mDescription);
    stmt.execute();
		
    return this.mDbConnect.lastInsertRowID;
  }, // end addResolution(aResolution)
  
  /**
   * Gets single resolution object with given id from the database
   * 
   * @param aId {integer}
   * @returns {BoogieBugResolutionPrototype} Or NULL
   */
	getResolution : function(aId)  
  {
    var stmt = this.mDbConnect.createStatement(SELECT_RESOLUTION);
    stmt.bindInt32Parameter(0, aId);
    
    while(stmt.executeStep()) {
      return new BoogieBugResolutionPrototype(stmt.getInt32(0), // resolution id
																				   stmt.getUTF8String(1), // name
																				   stmt.getUTF8String(2)); // description
    }
    
    return null;
  }, // end getResolution(aId)
  
  /**
   * Returns total count of resolutions
   *
   * @returns {integer}
   */
  getResolutionsCount : function()
  {
    var stmt = this.mDbConnect.createStatement(RESOLUTIONS_COUNT);
    
    while(stmt.executeStep())
      return stmt.getInt32(0);
    
    return null;
  }, // end getResolutionsCount()
  
  /**
   * Returns array with all resolutions that are stored in the database.
   * 
   * @return {array} Returns instances of BoogieBugResolutionPrototype.
   */
	getResolutions : function()
	{
    var resolutions = new Array();
    var stmt = this.mDbConnect.createStatement(SELECT_RESOLUTIONS);
    
    while(stmt.executeStep()) {
      //Components.utils.reportError("resolution: " + stmt.getUTF8String(1));
      var resolution = new BoogieBugResolutionPrototype(stmt.getInt32(0), // resolution id
                                                     stmt.getUTF8String(1), // name
                                                     stmt.getUTF8String(2)); // description
  	  resolutions.push(resolution);
    }
    
    return resolutions;
	}, // end getResolutions()
  
  /**
   * Update resolution with the given new one
   * 
   * @param aOldResolution {BoogieBugResolutionPrototype}
   * @param aNewResolution {BoogieBugResolutionPrototype}
   * @returns {boolean}
   */
	updateResolution : function(aOldResolution, aNewResolution) 
  {
    var stmt = this.mDbConnect.createStatement(UPDATE_RESOLUTION);
    stmt.bindUTF8StringParameter(0, aNewResolution.mName);
    stmt.bindUTF8StringParameter(1, aNewResolution.Description);
    stmt.bindInt32Parameter(2, aOldResolution.mId);
    stmt.execute();
    
    return true;
  }, // end updateResolution(aOldResolution, aNewResolution)
  
  /**
   * Remove resolution with the given identifier from the database
   * 
   * @param aId {integer}
   * @returns {BoogieBugResolutionPrototype} Or FALSE.
   */
	removeResolution : function(aId)
	{
    var stmt = this.mDbConnect.createStatement(REMOVE_RESOLUTION);
    stmt.bindInt32Parameter(0, aId);
    stmt.execute();
    
    return resolution;
	}, // end removeResolution()
	
	/**
	 * Removes all resolution
	 *
	 * @returns {boolean}
	 */
	removeAllResolutions : function()
	{
		try {
			this.removeAll("resolutions");
		} catch(e) {
			Resolutions.utils.reportError(e);
			return false;
		}
		
		return true;
	}, // end removeAllResolutions()
	
	
	// ========================================================================
	// Priorities
	
  /**
   * Add priority to the database
   * 
   * @param aPriority {BoogieBugPriorityPrototype}
   * @returns {integer}
   */
	addPriority : function(aPriority) 
  {
    var stmt = this.mDbConnect.createStatement(INSERT_PRIORITY);
    stmt.bindUTF8StringParameter(0, aPriority.mName);
    stmt.bindUTF8StringParameter(1, aPriority.mDescription);
    stmt.execute();
		
    return this.mDbConnect.lastInsertRowID;
  }, // end addPriority(aPriority)
  
  /**
   * Gets single priority object with given id from the database
   * 
   * @param aId {integer}
   * @returns {BoogieBugPriorityPrototype} Or NULL
   */
	getPriority : function(aId)  
  {
    var stmt = this.mDbConnect.createStatement(SELECT_PRIORITY);
    stmt.bindInt32Parameter(0, aId);
    
    while(stmt.executeStep()) {
      return new BoogieBugPriorityPrototype(stmt.getInt32(0), // priority id
																				 stmt.getUTF8String(1), // name
																				 stmt.getUTF8String(2)); // description
    }
    
    return null;
  }, // end getPriority(aId)
  
  /**
   * Returns total count of priorities
   *
   * @returns {integer}
   */
  getPrioritiesCount : function()
  {
    var stmt = this.mDbConnect.createStatement(PRIORITIES_COUNT);
    
    while(stmt.executeStep())
      return stmt.getInt32(0);
    
    return null;
  }, // end getPrioritiesCount()
  
  /**
   * Returns array with all priorities that are stored in the database.
   * 
   * @return {array} Returns instances of BoogieBugPriorityPrototype.
   */
	getPriorities : function()
	{
    var priorities = new Array();
    var stmt = this.mDbConnect.createStatement(SELECT_PRIORITIES);
    
    while(stmt.executeStep()) {
      //Components.utils.reportError("priority: " + stmt.getUTF8String(1));
      var priority = new BoogieBugPriorityPrototype(stmt.getInt32(0), // priority id
                                                 stmt.getUTF8String(1), // name
                                                 stmt.getUTF8String(2)); // description
  	  priorities.push(priority);
    }
    
    return priorities;
	}, // end getPriorities()
  
  /**
   * Update priority with the given new one
   * 
   * @param aOldPriority {BoogieBugPriorityPrototype}
   * @param aNewPriority {BoogieBugPriorityPrototype}
   * @returns {boolean}
   */
	updatePriority : function(aOldPriority, aNewPriority) 
  {
    var stmt = this.mDbConnect.createStatement(UPDATE_PRIORITY);
    stmt.bindUTF8StringParameter(0, aNewPriority.mName);
    stmt.bindUTF8StringParameter(1, aNewPriority.Description);
    stmt.bindInt32Parameter(2, aOldPriority.mId);
    stmt.execute();
    
    return true;
  }, // end updatePriority(aOldPriority, aNewPriority)
  
  /**
   * Remove priority with the given identifier from the database
   * 
   * @param aId {integer}
   * @returns {BoogieBugPriorityPrototype} Or FALSE.
   */
	removePriority : function(aId)
	{
    var stmt = this.mDbConnect.createStatement(REMOVE_PRIORITY);
    stmt.bindInt32Parameter(0, aId);
    stmt.execute();
    
    return priority;
	}, // end removePriority()
	
	/**
	 * Removes all priority
	 *
	 * @returns {boolean}
	 */
	removeAllPriorities : function()
	{
		try {
			this.removeAll("priorities");
		} catch(e) {
			Priorities.utils.reportError(e);
			return false;
		}
		
		return true;
	}, // end removeAllPriorities()
	
	
	// ========================================================================
	// Severities
	
  /**
   * Add severity to the database
   * 
   * @param aSeverity {BoogieBugSeverityPrototype}
   * @returns {integer}
   */
	addSeverity : function(aSeverity) 
  {
    var stmt = this.mDbConnect.createStatement(INSERT_SEVERITY);
    stmt.bindUTF8StringParameter(0, aSeverity.mName);
    stmt.bindUTF8StringParameter(1, aSeverity.mDescription);
    stmt.execute();
		
    return this.mDbConnect.lastInsertRowID;
  }, // end addSeverity(aSeverity)
  
  /**
   * Gets single severity object with given id from the database
   * 
   * @param aId {integer}
   * @returns {BoogieBugSeverityPrototype} Or NULL
   */
	getSeverity : function(aId)  
  {
    var stmt = this.mDbConnect.createStatement(SELECT_SEVERITY);
    stmt.bindInt32Parameter(0, aId);
    
    while(stmt.executeStep()) {
      return new BoogieBugSeverityPrototype(stmt.getInt32(0), // severity id
																				    stmt.getUTF8String(1), // name
																				    stmt.getUTF8String(2)); // description
    }
    
    return null;
  }, // end getSeverity(aId)
  
  /**
   * Returns total count of severities
   *
   * @returns {integer}
   */
  getSeveritiesCount : function()
  {
    var stmt = this.mDbConnect.createStatement(SEVERITIES_COUNT);
    
    while(stmt.executeStep())
      return stmt.getInt32(0);
    
    return null;
  }, // end getSeveritiesCount()
  
  /**
   * Returns array with all severities that are stored in the database.
   * 
   * @return {array} Returns instances of BoogieBugSeverityPrototype.
   */
	getSeverities : function()
	{
    var severities = new Array();
    var stmt = this.mDbConnect.createStatement(SELECT_SEVERITIES);
    
    while(stmt.executeStep()) {
      //Components.utils.reportError("severity: " + stmt.getUTF8String(1));
      var severity = new BoogieBugSeverityPrototype(stmt.getInt32(0), // severity id
                                                    stmt.getUTF8String(1), // name
                                                    stmt.getUTF8String(2)); // description
  	  severities.push(severity);
    }
    
    return severities;
	}, // end getSeverities()
  
  /**
   * Update severity with the given new one
   * 
   * @param aOldSeverity {BoogieBugSeverityPrototype}
   * @param aNewSeverity {BoogieBugSeverityPrototype}
   * @returns {boolean}
   */
	updateSeverity : function(aOldSeverity, aNewSeverity) 
  {
    var stmt = this.mDbConnect.createStatement(UPDATE_SEVERITY);
    stmt.bindUTF8StringParameter(0, aNewSeverity.mName);
    stmt.bindUTF8StringParameter(1, aNewSeverity.Description);
    stmt.bindInt32Parameter(2, aOldSeverity.mId);
    stmt.execute();
    
    return true;
  }, // end updateSeverity(aOldSeverity, aNewSeverity)
  
  /**
   * Remove severity with the given identifier from the database
   * 
   * @param aId {integer}
   * @returns {BoogieBugSeverityPrototype} Or FALSE.
   */
	removeSeverity : function(aId)
	{
    var stmt = this.mDbConnect.createStatement(REMOVE_SEVERITY);
    stmt.bindInt32Parameter(0, aId);
    stmt.execute();
    
    return severity;
	}, // end removeSeverity()
	
	/**
	 * Removes all severity
	 *
	 * @returns {boolean}
	 */
	removeAllSeverities : function()
	{
		try {
			this.removeAll("severities");
		} catch(e) {
			Severities.utils.reportError(e);
			return false;
		}
		
		return true;
	}, // end removeAllSeverities()
	
	
	// ========================================================================
	// Versions
	
  /**
   * Add version to the database
   * 
   * @param aVersion {BoogieProjectVersionPrototype}
   * @returns {integer}
   */
	addVersion : function(aVersion) 
  {
    var stmt = this.mDbConnect.createStatement(INSERT_VERSION);
    stmt.bindInt32Parameter(0, aVersion.mProjectId);
    stmt.bindUTF8StringParameter(1, aVersion.mName);
    stmt.bindUTF8StringParameter(2, aVersion.mDescription);
    stmt.execute();
		
    return this.mDbConnect.lastInsertRowID;
  }, // end addVersion(aVersion)
  
  /**
   * Gets single version object with given id from the database
   * 
   * @param aId {integer}
   * @returns {BoogieProjectVersionPrototype} Or NULL
   */
	getVersion : function(aId)  
  {
    var stmt = this.mDbConnect.createStatement(SELECT_VERSION);
    stmt.bindInt32Parameter(0, aId);
    
    while(stmt.executeStep()) {
      return new BoogieProjectVersionPrototype(stmt.getInt32(0), // version id
																				   stmt.getInt32(1), // project id
																				   stmt.getUTF8String(2), // name
																				   stmt.getUTF8String(3)); // description
    }
    
    return null;
  }, // end getVersion(aId)
  
  /**
   * Returns total count of versions
   *
   * @returns {integer}
   */
  getVersionsCount : function()
  {
    var stmt = this.mDbConnect.createStatement(VERSIONS_COUNT);
    
    while(stmt.executeStep())
      return stmt.getInt32(0);
    
    return null;
  }, // end getVersionsCount()
  
  /**
   * Returns array with all versions that are stored in the database.
   * 
   * @return {array} Returns instances of BoogieProjectVersionPrototype.
   */
	getVersions : function()
	{
    var versions = new Array();
    var stmt = this.mDbConnect.createStatement(SELECT_VERSIONS);
    
    while(stmt.executeStep()) {
      //Components.utils.reportError("version: " + stmt.getUTF8String(2));
      var version = new BoogieProjectVersionPrototype(stmt.getInt32(0), // version id
						    															    stmt.getInt32(1), // project id
								    													    stmt.getUTF8String(2), // name
										    											    stmt.getUTF8String(3)); // description
  	  versions.push(version);
    }
    
    return versions;
	}, // end getVersions()
  
  /**
   * Update version with the given new one
   * 
   * @param aOldVersion {BoogieProjectVersionPrototype}
   * @param aNewVersion {BoogieProjectVersionPrototype}
   * @returns {boolean}
   */
	updateVersion : function(aOldVersion, aNewVersion) 
  {
    var stmt = this.mDbConnect.createStatement(UPDATE_VERSION);
    stmt.bindInt32Parameter(0, aNewVersion.mProjectId);
    stmt.bindUTF8StringParameter(1, aNewVersion.mName);
    stmt.bindUTF8StringParameter(2, aNewVersion.Description);
    stmt.bindInt32Parameter(3, aOldVersion.mId);
    stmt.execute();
    
    return true;
  }, // end updateVersion(aOldVersion, aNewVersion)
  
  /**
   * Remove version with the given identifier from the database
   * 
   * @param aId {integer}
   * @returns {BoogieProjectVersionPrototype} Or FALSE.
   */
	removeVersion : function(aId)
	{
    var stmt = this.mDbConnect.createStatement(REMOVE_VERSION);
    stmt.bindInt32Parameter(0, aId);
    stmt.execute();
    
    return version;
	}, // end removeVersion()
	
	/**
	 * Removes all version
	 *
	 * @returns {boolean}
	 */
	removeAllVersions : function()
	{
		try {
			this.removeAll("versions");
		} catch(e) {
			Versions.utils.reportError(e);
			return false;
		}
		
		return true;
	}, // end removeAllVersions()
	
	
	// ========================================================================
	// Developers
  
  /**
   * Add developer to the database
   * 
   * @param aDeveloper {BoogieDeveloperPrototype}
   * @returns {integer}
   */
	addDeveloper : function(aDeveloper) 
  {
    var stmt = this.mDbConnect.createStatement(INSERT_DEVELOPER);
    stmt.bindUTF8StringParameter(0, aDeveloper.mFirstname);
    stmt.bindUTF8StringParameter(1, aDeveloper.mSurname);
    stmt.bindStringParameter(2, aDeveloper.mEmail);
    stmt.bindStringParameter(3, aDeveloper.mIm);
    stmt.bindUTF8StringParameter(4, aDeveloper.mSummary);
    stmt.execute();
		
    return this.mDbConnect.lastInsertRowID;
  }, // end addDeveloper(aDeveloper)
  
  /**
   * Gets single developer object with given id from the database
   * 
   * @param aId {integer}
   * @returns {BoogieDeveloperPrototype} Or NULL
   */
	getDeveloper : function(aId)  
  {
    var stmt = this.mDbConnect.createStatement(SELECT_DEVELOPER);
    stmt.bindInt32Parameter(0, aId);
    
    while(stmt.executeStep()) {
      return new BoogieDeveloperPrototype(stmt.getInt32(0), // developer id
																					stmt.getUTF8String(1), // firstname
																					stmt.getUTF8String(2), // surname
																					stmt.getString(3), // email
																					stmt.getString(4), // im
																					stmt.getUTF8String(5)); // summmary
    }
    
    return null;
  }, // end getDeveloper(aId)
  
  /**
   * Returns total count of developers
   *
   * @returns {integer}
   */
  getDevelopersCount : function()
  {
    var stmt = this.mDbConnect.createStatement(DEVELOPERS_COUNT);
    
    while(stmt.executeStep())
      return stmt.getInt32(0);
    
    return null;
  }, // end getDevelopersCount()
  
  /**
   * Returns array with all developers that are stored in the database.
   * 
   * @return {array} Returns instances of BoogieDeveloperPrototype.
   */
	getDevelopers : function()
	{
    var developers = new Array();
    var stmt = this.mDbConnect.createStatement(SELECT_DEVELOPERS);
    
    while(stmt.executeStep()) {
      //Components.utils.reportError("developer: " + stmt.getUTF8String(2));
      var developer = new BoogieDeveloperPrototype(stmt.getInt32(0), // developer id
					    																		 stmt.getUTF8String(1), // firstname
							     																 stmt.getUTF8String(2), // surname
										    													 stmt.getString(3), // email
										    													 stmt.getString(4), // im
												     											 stmt.getUTF8String(4)); // summmary
  	  developers.push(developer);
    }
    
    return developers;
	}, // end getDevelopers()
  
  /**
   * Update developer with the given new one
   * 
   * @param aOldDeveloper {BoogieDeveloperPrototype}
   * @param aNewDeveloper {BoogieDeveloperPrototype}
   * @returns {boolean}
   */
	updateDeveloper : function(aOldDeveloper, aNewDeveloper) 
  {
    var stmt = this.mDbConnect.createStatement(UPDATE_DEVELOPER);
    stmt.bindUTF8StringParameter(0, aNewDeveloper.mFirstname);
    stmt.bindUTF8StringParameter(1, aNewDeveloper.mSurname);
    stmt.bindStringParameter(2, aNewDeveloper.mEmail);
    stmt.bindStringParameter(3, aNewDeveloper.mIm);
    stmt.bindUTF8StringParameter(4, aNewDeveloper.mSummary);
    stmt.bindInt32Parameter(5, aOldDeveloper.mId);
    stmt.execute();
    
    return true;
  }, // end updateDeveloper(aOldDeveloper, aNewDeveloper)
  
  /**
   * Remove developer with the given identifier from the database
   * 
   * @param aId {integer}
   * @returns {BoogieDeveloperPrototype} Or FALSE.
   */
	removeDeveloper : function(aId)
	{
    var stmt = this.mDbConnect.createStatement(REMOVE_DEVELOPER);
    stmt.bindInt32Parameter(0, aId);
    stmt.execute();
    
    return developer;
	}, // end removeDeveloper()
	
	/**
	 * Removes all developer
	 *
	 * @returns {boolean}
	 */
	removeAllDevelopers : function()
	{
		try {
			this.removeAll("developers");
		} catch(e) {
			Components.utils.reportError(e);
			return false;
		}
		
		return true;
	}, // end removeAllDevelopers()
	
	
	// ========================================================================
	// Notes
  
  /**
   * Add note to the database
   * 
   * @param aNote {BoogieNotePrototype}
   * @returns {integer}
   */
	addNote : function(aNote) 
  {
    var stmt = this.mDbConnect.createStatement(INSERT_NOTE);
    stmt.bindInt32Parameter(0, aNote.mDeveloperId);
    stmt.bindInt32Parameter(1, aNote.mProjectId);
    stmt.bindUTF8StringParameter(2, aNote.mSummary);
    stmt.bindUTF8StringParameter(3, aNote.mText);
    stmt.bindStringParameter(4, aNote.mSince);
    stmt.execute();
		
    return this.mDbConnect.lastInsertRowID;
  }, // end addNote(aNote)
  
  /**
   * Gets single note object with given id from the database
   * 
   * @param aId {integer}
   * @returns {BoogieNotePrototype} Or FALSE
   */
	getNote : function(aId)  
  {
    var stmt = this.mDbConnect.createStatement(SELECT_NOTE);
    stmt.bindInt32Parameter(0, aId);
    
    while(stmt.executeStep()) {
      return new BoogieNotePrototype(stmt.getInt32(0), // note id
                                     stmt.getInt32(1), // developer id
                                     stmt.getInt32(2), // project id
                                     stmt.getUTF8String(3), // summmary
                                     stmt.getUTF8String(4), // text
                                     stmt.getString(5)); // since
    }
    
    return null;
  }, // end getNote(aId)
  
  /**
   * Returns total count of notes
   *
   * @returns {integer}
   */
  getNotesCount : function()
  {
    var stmt = this.mDbConnect.createStatement(NOTES_COUNT);
    
    while(stmt.executeStep())
      return stmt.getInt32(0);
    
    return null;
  }, // end getDevelopersCount()
  
  /**
   * Returns array with all notes that are stored in the database.
   * 
   * @return {array} Returns instances of BoogieNotePrototype.
   */
	getNotes : function()
	{
    var notes = new Array();
    var stmt = this.mDbConnect.createStatement(SELECT_NOTES);
    
    while(stmt.executeStep()) {
      var note = new BoogieNotePrototype(stmt.getInt32(0), // note id
                                         stmt.getInt32(1), // developer id
                                         stmt.getInt32(2), // project id
                                         stmt.getUTF8String(3), // summmary
                                         stmt.getUTF8String(4), // text
                                         stmt.getString(5)); // since
  	  notes.push(note);
    }
    
    return notes;
	}, // end getNotes()
  
  /**
   * Update note with the given new one
   * 
   * @param aOldNote {BoogieNotePrototype}
   * @param aNewNote {BoogieNotePrototype}
   * @returns {boolean}
   */
	updateNote : function(aOldNote, aNewNote) 
  {
    var stmt = this.mDbConnect.createStatement(UPDATE_NOTE);
    stmt.bindInt32Parameter(0, aNewNote.mDeveloperId);
    stmt.bindInt32Parameter(1, aNewNote.mProjectId);
    stmt.bindUTF8StringParameter(2, aNewNote.mSummary);
    stmt.bindUTF8StringParameter(3, aNewNote.mText);
    stmt.bindStringParameter(4, aNewNote.mSince);
    stmt.bindInt32Parameter(5, aOldNote.mId);
    stmt.execute();
    
    return true;
  }, // end updateNote(aOldNote, aNewNote)
  
  /**
   * Remove note with the given identifier from the database
   * 
   * @param aId {integer}
   * @returns {BoogieNotePrototype} Or FALSE.
   */
	removeNote : function(aId)
	{
    var stmt = this.mDbConnect.createStatement(REMOVE_NOTE);
    stmt.bindInt32Parameter(0, aId);
    stmt.execute();
    
    return note;
	}, // end removeNote()
	
	/**
	 * Removes all note
	 *
	 * @returns {boolean}
	 */
	removeAllNotes : function()
	{
		try {
			this.removeAll("notes");
		} catch(e) {
			Components.utils.reportError(e);
			return false;
		}
		
		return true;
	}, // end removeAllNotes()
	
  
  // =========================================================================
  // "Private methods"
  

  /**
   * Remove all notes. 
   * 
   * @returns {boolean}
   */
  removeAll : function(aDbTable)
  {
    var stmt = this.mDbConnect.createStatement(TRUNCATE_BOOGIE_TABLE);
    stmt.bindStringParameter(0, aDbTable);
    stmt.execute();
    
    return true;
  } // end removeAll()
  
}; // End of BoogieDatabaseServicePrototype()

