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: 05.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/utility/logger.js'); 12 13 /** 14 * @class 15 * 16 * The root object for ModelRegistry. 17 * 18 * Model Registry is a central point for all models to get their Global Unique Identifier, 19 * which is important for storage (guid is primary key as default). 20 * 21 * @extends M.Object 22 */ 23 M.ModelRegistry = M.Object.extend( 24 /** @scope M.ModelRegistry.prototype */ { 25 26 /** 27 * The type of this object. 28 * 29 * @type String 30 */ 31 type: 'M.ModelRegistry', 32 33 34 /** 35 * An array containing objects that save the model's name and their next GUId. 36 * Acts globally. 37 * @type Array|Object 38 */ 39 registry: [], 40 41 /** 42 * Calculates the next ID for a model named by modelName. 43 * 44 * @param {String} modelName The name of the model, e.g. 'Person'. 45 * @returns {Number} The next internal model id for the model identified by modelName parameter. 46 */ 47 getNextId: function(modelName) { 48 for(i in this.registry){ 49 if(this.registry[i].modelName === modelName){ 50 this.registry[i].id = this.registry[i].id + 1; 51 localStorage.setItem(modelName, this.registry[i].id); 52 return this.registry[i].id; 53 } 54 } 55 }, 56 57 /** 58 * Sets the id for a certain model. 59 * 60 * @param {String} modelName The name of the model, e.g. 'Person'. 61 * @param {Number} id The id of the model, e.g. 1. 62 */ 63 setId: function(modelName, id) { 64 for(i in this.registry){ 65 if(this.registry[i].modelName === modelName){ 66 this.registry[i].id = id; 67 } 68 } 69 }, 70 71 /** 72 * Register a model in the registry. 73 * Set nextGUId for this model to initial value 0. 74 * 75 * @param {String} modelName The name of the model, e.g. 'Person'. 76 */ 77 register: function(modelName) { 78 79 if(_.detect(this.registry, function(m){ return m.modelName === modelName })) { 80 return; 81 } 82 83 var obj = { 84 modelName: modelName, 85 id: 0 86 }; 87 this.registry.push(obj); 88 89 } 90 91 });