      1 // ==========================================================================
      2 // Project:   The M-Project - Mobile HTML5 Application Framework
      3 // Copyright: (c) 2010 M-Way Solutions GmbH. All rights reserved.
      4 // Creator:   Sebastian
      5 // Date:      04.11.2010
      6 // License:   Dual licensed under the MIT or GPL Version 2 licenses.
      7 //            http://github.com/mwaylabs/The-M-Project/blob/master/MIT-LICENSE
      8 //            http://github.com/mwaylabs/The-M-Project/blob/master/GPL-LICENSE
      9 // ==========================================================================
     10
     11 m_require('core/foundation/model.js');
     12
     13 /**
     14  * @class
     15  *
     16  * The root object for RecordManager.
     17  *
     18  * A RecordManager is used by a controllers and is an interface that makes it easy for him to
     19  * handle his model records.
     20  *
     21  * @extends M.Object
     22  */
     23 M.RecordManager = M.Object.extend(
     24 /** @scope M.RecordManager.prototype */ {
     25     /**
     26      * The type of this object.
     27      *
     28      * @type String
     29      */
     30     type: 'M.RecordManager',
     31
     32     /**
     33      * Array containing all currently loaded records.
     34      *
     35      * @type Object
     36      */
     37     records: [],
     38
     39     /**
     40      * Add the given model to the modelList.
     41      *
     42      * @param {Object} record
     43      */
     44     add: function(record) {
     45         this.records.push(record);
     46     },
     47
     48     /**
     49      * Concats an array if records to the records array.
     50      *
     51      * @param {Object} record
     52      */
     53     addMany: function(arrOfRecords) {
     54
     55         if(_.isArray(arrOfRecords)){
     56             this.records = this.records.concat(arrOfRecords);
     57
     58         } else if(arrOfRecords.type === 'M.Model') {
     59             this.add(arrOfRecords);
     60         }
     61
     62     },
     63
     64     /**
     65      * Resets record list
     66      */
     67     removeAll: function() {
     68         this.records.length = 0;
     69     },
     70
     71     /**
     72      * Deletes a model record from the record array
     73      * @param {Number} id The internal model id of the model record.
     74      */
     75     remove: function(id) {
     76         if(!id) {
     77             M.Logger.log('No id given.', M.WARN);
     78             return;
     79         }
     80         if(typeof(id) === 'string') {
     81             id = parseInt(id);
     82         }
     83         rec = this.getRecordForId(id);
     84         if(rec) {
     85             this.records = _.select(this.records, function(r){
     86                 return r.id !== rec.id;
     87             });
     88         }
     89     },
     90
     91     /**
     92      * Returns a record from the record array identified by the interal model id.
     93      * @param {Number} id The internal model id of the model record.
     94      */
     95     getRecordForId: function(id) {
     96         var record = _.detect(this.records, function(r){
     97             return r.id === id;
     98         });
     99         return record;
    100     },
    101
    102     /**
    103      * Debug method to print out all content from the records array to the console.
    104      * @private
    105      */
    106     dumpRecords: function() {
    107         _.each(this.records, function(rec){
    108             console.log(rec.id);
    109         });
    110     }
    111
    112 });