// ========================================================================== // Project: SproutCore - JavaScript Application Framework // Copyright: ©2006-2010 Sprout Systems, Inc. and contributors. // Portions ©2008-2010 Apple Inc. All rights reserved. // License: Licensed under MIT license (see license.js) // ========================================================================== /*globals CoreTools */ /** This DataSource connects to the SproutCore sc-server to retrieve targets and tests. Currently this DataSource is read only. */ CoreTools.DataSource = SC.DataSource.extend({ /** Fetch a group of records from the data source. Knows how to fetch a list of targets and tests. */ fetch: function(store, query) { var ret = NO; switch(query.get('recordType')) { case CoreTools.Target: ret = this.fetchTargets(store, query); break; case CoreTools.Test: ret = this.fetchTests(store, query); break; } return ret; }, // .......................................................... // FETCHING TARGETS // /** Fetch the actual targets. Only understands how to handle a remote query. */ fetchTargets: function(store, query) { if (!query.get('isRemote')) return NO ; SC.Request.getUrl('/sc/targets.json') .set('isJSON', YES) .notify(this, 'fetchTargetsDidComplete', { query: query, store: store }) .send(); return YES ; }, fetchTargetsDidComplete: function(request, opts) { var response = request.get('response'), query = opts.query, store = opts.store, storeKeys; if (!SC.$ok(response)) { console.error("TODO: Add handler when fetching targets fails"); } else { storeKeys = store.loadRecords(CoreTools.Target, response); store.loadQueryResults(query, storeKeys); } }, // .......................................................... // FETCHING TESTS // /** Load tests for a particular URL. Only understands local querys with a URL. */ fetchTests: function(store, query) { var url = query.get('url') ; if (!query.get('isRemote') || !url) return NO ; // not handled SC.Request.getUrl(url) .set('isJSON', YES) .notify(this, 'fetchTestsDidComplete', { query: query, store: store }) .send(); return YES ; }, fetchTestsDidComplete: function(request, opts) { var response = request.get('response'), store = opts.store, query = opts.query, storeKeys; if (!SC.$ok(response)) { console.error("TODO: Add handler when fetching tests fails"); } else { storeKeys = store.loadRecords(CoreTools.Test, response); store.loadQueryResults(query, storeKeys); // notify query loaded } } });