stores.js

104 lines, 40 LOC, 31 covered (77%)

9 1
/* ***** BEGIN LICENSE BLOCK *****
2
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3
 *
4
 * The contents of this file are subject to the Mozilla Public License Version
5
 * 1.1 (the "License"); you may not use this file except in compliance with
6
 * the License. You may obtain a copy of the License at
7
 * http://www.mozilla.org/MPL/
8
 *
9
 * Software distributed under the License is distributed on an "AS IS" basis,
10
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11
 * for the specific language governing rights and limitations under the
12
 * License.
13
 *
14
 * The Original Code is Bookmarks Sync.
15
 *
16
 * The Initial Developer of the Original Code is Mozilla.
17
 * Portions created by the Initial Developer are Copyright (C) 2007
18
 * the Initial Developer. All Rights Reserved.
19
 *
20
 * Contributor(s):
21
 *  Dan Mills <thunder@mozilla.com>
22
 *
23
 * Alternatively, the contents of this file may be used under the terms of
24
 * either the GNU General Public License Version 2 or later (the "GPL"), or
25
 * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
26
 * in which case the provisions of the GPL or the LGPL are applicable instead
27
 * of those above. If you wish to allow use of your version of this file only
28
 * under the terms of either the GPL or the LGPL, and not to allow others to
29
 * use your version of this file under the terms of the MPL, indicate your
30
 * decision by deleting the provisions above and replace them with the notice
31
 * and other provisions required by the GPL or the LGPL. If you do not delete
32
 * the provisions above, a recipient may use your version of this file under
33
 * the terms of any one of the MPL, the GPL or the LGPL.
34
 *
35
 * ***** END LICENSE BLOCK ***** */
36
63 37
const EXPORTED_SYMBOLS = ["Store"];
38
36 39
const Cc = Components.classes;
36 40
const Ci = Components.interfaces;
36 41
const Cr = Components.results;
36 42
const Cu = Components.utils;
43
45 44
Cu.import("resource://weave/log4moz.js");
45 45
Cu.import("resource://weave/constants.js");
45 46
Cu.import("resource://weave/util.js");
47
48
/*
49
 * Data Stores
50
 * These can wrap, serialize items and apply commands
51
 */
52
36 53
function Store(name) {
56 54
  name = name || "Unnamed";
90 55
  this.name = name.toLowerCase();
56
162 57
  this._log = Log4Moz.repository.getLogger("Store." + name);
162 58
  let level = Svc.Prefs.get("log.logger.engine." + this.name, "Debug");
126 59
  this._log.level = Log4Moz.Level[level];
60
}
18 61
Store.prototype = {
1307 62
  applyIncoming: function Store_applyIncoming(record) {
2578 63
    if (record.deleted)
6 64
      this.remove(record);
7728 65
    else if (!this.itemExists(record.id))
7500 66
      this.create(record);
67
    else
1479 68
      this.update(record);
69
  },
70
71
  // override these in derived objects
72
18 73
  create: function Store_create(record) {
74
    throw "override create in a subclass";
75
  },
76
18 77
  remove: function Store_remove(record) {
78
    throw "override remove in a subclass";
79
  },
80
18 81
  update: function Store_update(record) {
82
    throw "override update in a subclass";
83
  },
84
18 85
  itemExists: function Store_itemExists(id) {
86
    throw "override itemExists in a subclass";
87
  },
88
18 89
  createRecord: function Store_createRecord(id) {
90
    throw "override createRecord in a subclass";
91
  },
92
18 93
  changeItemID: function Store_changeItemID(oldID, newID) {
94
    throw "override changeItemID in a subclass";
95
  },
96
18 97
  getAllIDs: function Store_getAllIDs() {
98
    throw "override getAllIDs in a subclass";
99
  },
100
45 101
  wipe: function Store_wipe() {
102
    throw "override wipe in a subclass";
103
  }
9 104
};