1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
// Copyright 2012 The Closure Library Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS-IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
/**
* @fileoverview Wraps a storage mechanism with a custom error handler.
*
* @author ruilopes@google.com (Rui do Nascimento Dias Lopes)
*/
goog.provide('goog.storage.mechanism.ErrorHandlingMechanism');
goog.require('goog.storage.mechanism.Mechanism');
/**
* Wraps a storage mechanism with a custom error handler.
*
* @param {!goog.storage.mechanism.Mechanism} mechanism Underlying storage
* mechanism.
* @param {goog.storage.mechanism.ErrorHandlingMechanism.ErrorHandler}
* errorHandler An error handler.
* @constructor
* @struct
* @extends {goog.storage.mechanism.Mechanism}
* @final
*/
goog.storage.mechanism.ErrorHandlingMechanism = function(
mechanism, errorHandler) {
goog.storage.mechanism.ErrorHandlingMechanism.base(this, 'constructor');
/**
* The mechanism to be wrapped.
* @type {!goog.storage.mechanism.Mechanism}
* @private
*/
this.mechanism_ = mechanism;
/**
* The error handler.
* @type {goog.storage.mechanism.ErrorHandlingMechanism.ErrorHandler}
* @private
*/
this.errorHandler_ = errorHandler;
};
goog.inherits(
goog.storage.mechanism.ErrorHandlingMechanism,
goog.storage.mechanism.Mechanism);
/**
* Valid storage mechanism operations.
* @enum {string}
*/
goog.storage.mechanism.ErrorHandlingMechanism.Operation = {
SET: 'set',
GET: 'get',
REMOVE: 'remove'
};
/**
* A function that handles errors raised in goog.storage. Since some places in
* the goog.storage codebase throw strings instead of Error objects, we accept
* these as a valid parameter type. It supports the following arguments:
*
* 1) The raised error (either in Error or string form);
* 2) The operation name which triggered the error, as defined per the
* ErrorHandlingMechanism.Operation enum;
* 3) The key that is passed to a storage method;
* 4) An optional value that is passed to a storage method (only used in set
* operations).
*
* @typedef {function(
* (!Error|string),
* goog.storage.mechanism.ErrorHandlingMechanism.Operation,
* string,
* *=)}
*/
goog.storage.mechanism.ErrorHandlingMechanism.ErrorHandler;
/** @override */
goog.storage.mechanism.ErrorHandlingMechanism.prototype.set = function(
key, value) {
try {
this.mechanism_.set(key, value);
} catch (e) {
this.errorHandler_(
e, goog.storage.mechanism.ErrorHandlingMechanism.Operation.SET, key,
value);
}
};
/** @override */
goog.storage.mechanism.ErrorHandlingMechanism.prototype.get = function(key) {
try {
return this.mechanism_.get(key);
} catch (e) {
this.errorHandler_(
e, goog.storage.mechanism.ErrorHandlingMechanism.Operation.GET, key);
return null;
}
};
/** @override */
goog.storage.mechanism.ErrorHandlingMechanism.prototype.remove = function(key) {
try {
this.mechanism_.remove(key);
} catch (e) {
this.errorHandler_(
e, goog.storage.mechanism.ErrorHandlingMechanism.Operation.REMOVE, key);
}
};
|