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 | }; |