[gnome-documents] query: make QueryBuilder return Query mini objects



commit 9356297512221abfee80475fa76cd1f31739e0db
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Tue Oct 18 18:00:51 2011 -0400

    query: make QueryBuilder return Query mini objects
    
    They have a sparql property with the actual query body, but also
    and activeSource property tracking the activeSource used to build the
    query filter.
    This will be later used to select when to refresh or not the model
    when the source list changes, according to which source we're in.

 src/collections.js       |   11 +++--------
 src/documents.js         |    8 ++++----
 src/offsetController.js  |    4 +++-
 src/query.js             |   30 +++++++++++++++++++++++++++---
 src/trackerController.js |    5 ++++-
 5 files changed, 41 insertions(+), 17 deletions(-)
---
diff --git a/src/collections.js b/src/collections.js
index cfaac35..169b4b7 100644
--- a/src/collections.js
+++ b/src/collections.js
@@ -63,6 +63,7 @@ CollectionManager.prototype = {
     _init: function() {
         Manager.BaseManager.prototype._init.call(this);
         this._newItems = {};
+        this._currentQuery = null;
 
         // we want to only display collections for the current source,
         // so refresh the list when the active source changes.
@@ -75,14 +76,8 @@ CollectionManager.prototype = {
     },
 
     _refreshCollections: function() {
-        let sparql = 'SELECT ?urn nie:title(?urn) WHERE { ' +
-            '{ ?urn a nfo:DataContainer } ' +
-            '{ ?doc nie:isPartOf ?urn } ' +
-            'FILTER ((fn:starts-with (nao:identifier(?urn), "gd:collection")) &&' +
-            Global.sourceManager.getFilter() +
-            ')}';
-
-        Global.connection.query_async(sparql, null, Lang.bind(this,
+        this._currentQuery = Global.queryBuilder.buildCollectionsQuery();
+        Global.connection.query_async(this._currentQuery.sparql, null, Lang.bind(this,
             function(object, res) {
                 try {
                     let cursor = object.query_finish(res);
diff --git a/src/documents.js b/src/documents.js
index 155fad3..6eaa288 100644
--- a/src/documents.js
+++ b/src/documents.js
@@ -79,9 +79,9 @@ DocCommon.prototype = {
     },
 
     refresh: function() {
-        let sparql = Global.queryBuilder.buildSingleQuery(this.id);
+        let query = Global.queryBuilder.buildSingleQuery(this.id);
 
-        Global.connection.query_async(sparql, null, Lang.bind(this,
+        Global.connection.query_async(query.sparql, null, Lang.bind(this,
             function(object, res) {
                 let cursor = null;
 
@@ -551,9 +551,9 @@ DocumentManager.prototype = {
     },
 
     _onDocumentCreated: function(urn) {
-        let sparql = Global.queryBuilder.buildSingleQuery(urn);
+        let query = Global.queryBuilder.buildSingleQuery(urn);
 
-        Global.connection.query_async(sparql, null, Lang.bind(this,
+        Global.connection.query_async(query.sparql, null, Lang.bind(this,
             function(object, res) {
                 let cursor = null;
 
diff --git a/src/offsetController.js b/src/offsetController.js
index 0060c39..3c5e7cf 100644
--- a/src/offsetController.js
+++ b/src/offsetController.js
@@ -44,8 +44,10 @@ OffsetController.prototype = {
 
     // to be called by the model
     resetItemCount: function() {
+        let query = Global.queryBuilder.buildCountQuery();
+
         Global.connection.query_async
-            (Global.queryBuilder.buildCountQuery(), null, Lang.bind(this,
+            (query.sparql, null, Lang.bind(this,
                 function(object, res) {
                     let cursor = null;
                     try {
diff --git a/src/query.js b/src/query.js
index 03ce360..cb2f05d 100644
--- a/src/query.js
+++ b/src/query.js
@@ -39,6 +39,17 @@ const QueryColumns = {
     SHARED: 11
 };
 
+function Query(sparql) {
+    this._init(sparql);
+}
+
+Query.prototype = {
+    _init: function(sparql) {
+        this.sparql = sparql;
+        this.activeSource = Global.sourceManager.getActiveItem();
+    }
+};
+
 function QueryBuilder() {
     this._init();
 }
@@ -177,11 +188,13 @@ QueryBuilder.prototype = {
 
     buildSingleQuery: function(resource) {
         let sparql = this._buildQueryInternal(false);
-        return sparql.replace('?urn', '<' + resource + '>', 'g');
+        sparql = sparql.replace('?urn', '<' + resource + '>', 'g');
+
+        return new Query(sparql);
     },
 
     buildGlobalQuery: function() {
-        return this._buildQueryInternal(true);
+        return new Query(this._buildQueryInternal(true));
     },
 
     buildCountQuery: function() {
@@ -191,6 +204,17 @@ QueryBuilder.prototype = {
             this._buildFilterString() +
             '}';
 
-        return sparql;
+        return new Query(sparql);
+    },
+
+    buildCollectionsQuery: function() {
+        let sparql = 'SELECT ?urn nie:title(?urn) WHERE { ' +
+            '{ ?urn a nfo:DataContainer } ' +
+            '{ ?doc nie:isPartOf ?urn } ' +
+            'FILTER ((fn:starts-with (nao:identifier(?urn), "gd:collection")) &&' +
+            Global.sourceManager.getFilter() +
+            ')}';
+
+        return new Query(sparql);
     }
 };
diff --git a/src/trackerController.js b/src/trackerController.js
index 59be039..f92cc32 100644
--- a/src/trackerController.js
+++ b/src/trackerController.js
@@ -37,6 +37,8 @@ function TrackerController() {
 
 TrackerController.prototype = {
     _init: function() {
+        this._currentQuery = null;
+
         // startup a refresh of the gdocs cache
         this._miner = new GDataMiner.GDataMiner();
         this._refreshMinerNow();
@@ -112,7 +114,8 @@ TrackerController.prototype = {
     },
 
     _performCurrentQuery: function() {
-        Global.connection.query_async(Global.queryBuilder.buildGlobalQuery(),
+        this._currentQuery = Global.queryBuilder.buildGlobalQuery();
+        Global.connection.query_async(this._currentQuery.sparql,
                                       null, Lang.bind(this, this._onQueryExecuted));
     },
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]