Page Menu
Home
Code
Search
Configure Global Search
Log In
Files
F947286
GearsStorageProvider.js
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
9 KB
Subscribers
None
GearsStorageProvider.js
View Options
if
(
!
dojo
.
_hasResource
[
"dojox.storage.GearsStorageProvider"
]){
//_hasResource checks added by build. Do not use _hasResource directly in your code.
dojo
.
_hasResource
[
"dojox.storage.GearsStorageProvider"
]
=
true
;
dojo
.
provide
(
"dojox.storage.GearsStorageProvider"
);
dojo
.
require
(
"dojox.storage.Provider"
);
dojo
.
require
(
"dojox.storage.manager"
);
dojo
.
require
(
"dojox.sql"
);
if
(
dojo
.
isGears
){
(
function
(){
// make sure we don't define the gears provider if we're not gears
// enabled
dojo
.
declare
(
"dojox.storage.GearsStorageProvider"
,
dojox
.
storage
.
Provider
,
{
// summary:
// Storage provider that uses the features of Google Gears
// to store data (it is saved into the local SQL database
// provided by Gears, using dojox.sql)
// description:
//
//
// You can disable this storage provider with the following djConfig
// variable:
// var djConfig = { disableGearsStorage: true };
//
// Authors of this storage provider-
// Brad Neuberg, bkn3@columbia.edu
constructor
:
function
(){
},
// instance methods and properties
TABLE_NAME
:
"__DOJO_STORAGE"
,
initialized
:
false
,
_available
:
null
,
initialize
:
function
(){
//console.debug("dojox.storage.GearsStorageProvider.initialize");
if
(
djConfig
[
"disableGearsStorage"
]
==
true
){
return
;
}
// partition our storage data so that multiple apps
// on the same host won't collide
this
.
TABLE_NAME
=
"__DOJO_STORAGE"
;
// create the table that holds our data
try
{
dojox
.
sql
(
"CREATE TABLE IF NOT EXISTS "
+
this
.
TABLE_NAME
+
"( "
+
" namespace TEXT, "
+
" key TEXT, "
+
" value TEXT "
+
")"
);
dojox
.
sql
(
"CREATE UNIQUE INDEX IF NOT EXISTS namespace_key_index"
+
" ON "
+
this
.
TABLE_NAME
+
" (namespace, key)"
);
}
catch
(
e
){
console
.
debug
(
"dojox.storage.GearsStorageProvider.initialize:"
,
e
);
this
.
initialized
=
false
;
// we were unable to initialize
dojox
.
storage
.
manager
.
loaded
();
return
;
}
// indicate that this storage provider is now loaded
this
.
initialized
=
true
;
dojox
.
storage
.
manager
.
loaded
();
},
isAvailable
:
function
(){
// is Google Gears available and defined?
return
this
.
_available
=
dojo
.
isGears
;
},
put
:
function
(
key
,
value
,
resultsHandler
,
namespace
){
if
(
this
.
isValidKey
(
key
)
==
false
){
throw
new
Error
(
"Invalid key given: "
+
key
);
}
namespace
=
namespace
||
this
.
DEFAULT_NAMESPACE
;
// serialize the value;
// handle strings differently so they have better performance
if
(
dojo
.
isString
(
value
)){
value
=
"string:"
+
value
;
}
else
{
value
=
dojo
.
toJson
(
value
);
}
// try to store the value
try
{
dojox
.
sql
(
"DELETE FROM "
+
this
.
TABLE_NAME
+
" WHERE namespace = ? AND key = ?"
,
namespace
,
key
);
dojox
.
sql
(
"INSERT INTO "
+
this
.
TABLE_NAME
+
" VALUES (?, ?, ?)"
,
namespace
,
key
,
value
);
}
catch
(
e
){
// indicate we failed
console
.
debug
(
"dojox.storage.GearsStorageProvider.put:"
,
e
);
resultsHandler
(
this
.
FAILED
,
key
,
e
.
toString
());
return
;
}
if
(
resultsHandler
){
resultsHandler
(
dojox
.
storage
.
SUCCESS
,
key
,
null
);
}
},
get
:
function
(
key
,
namespace
){
if
(
this
.
isValidKey
(
key
)
==
false
){
throw
new
Error
(
"Invalid key given: "
+
key
);
}
namespace
=
namespace
||
this
.
DEFAULT_NAMESPACE
;
// try to find this key in the database
var
results
=
dojox
.
sql
(
"SELECT * FROM "
+
this
.
TABLE_NAME
+
" WHERE namespace = ? AND "
+
" key = ?"
,
namespace
,
key
);
if
(
!
results
.
length
){
return
null
;
}
else
{
results
=
results
[
0
].
value
;
}
// destringify the content back into a
// real JavaScript object;
// handle strings differently so they have better performance
if
(
dojo
.
isString
(
results
)
&&
(
/^string:/
.
test
(
results
))){
results
=
results
.
substring
(
"string:"
.
length
);
}
else
{
results
=
dojo
.
fromJson
(
results
);
}
return
results
;
},
getNamespaces
:
function
(){
var
results
=
[
dojox
.
storage
.
DEFAULT_NAMESPACE
];
var
rs
=
dojox
.
sql
(
"SELECT namespace FROM "
+
this
.
TABLE_NAME
+
" DESC GROUP BY namespace"
);
for
(
var
i
=
0
;
i
<
rs
.
length
;
i
++
){
if
(
rs
[
i
].
namespace
!=
dojox
.
storage
.
DEFAULT_NAMESPACE
){
results
.
push
(
rs
[
i
].
namespace
);
}
}
return
results
;
},
getKeys
:
function
(
namespace
){
namespace
=
namespace
||
this
.
DEFAULT_NAMESPACE
;
if
(
this
.
isValidKey
(
namespace
)
==
false
){
throw
new
Error
(
"Invalid namespace given: "
+
namespace
);
}
var
rs
=
dojox
.
sql
(
"SELECT key FROM "
+
this
.
TABLE_NAME
+
" WHERE namespace = ?"
,
namespace
);
var
results
=
[];
for
(
var
i
=
0
;
i
<
rs
.
length
;
i
++
){
results
.
push
(
rs
[
i
].
key
);
}
return
results
;
},
clear
:
function
(
namespace
){
if
(
this
.
isValidKey
(
namespace
)
==
false
){
throw
new
Error
(
"Invalid namespace given: "
+
namespace
);
}
namespace
=
namespace
||
this
.
DEFAULT_NAMESPACE
;
dojox
.
sql
(
"DELETE FROM "
+
this
.
TABLE_NAME
+
" WHERE namespace = ?"
,
namespace
);
},
remove
:
function
(
key
,
namespace
){
namespace
=
namespace
||
this
.
DEFAULT_NAMESPACE
;
dojox
.
sql
(
"DELETE FROM "
+
this
.
TABLE_NAME
+
" WHERE namespace = ? AND"
+
" key = ?"
,
namespace
,
key
);
},
putMultiple
:
function
(
keys
,
values
,
resultsHandler
,
namespace
)
{
if
(
this
.
isValidKeyArray
(
keys
)
===
false
||
!
values
instanceof
Array
||
keys
.
length
!=
values
.
length
){
throw
new
Error
(
"Invalid arguments: keys = ["
+
keys
+
"], values = ["
+
values
+
"]"
);
}
if
(
namespace
==
null
||
typeof
namespace
==
"undefined"
){
namespace
=
dojox
.
storage
.
DEFAULT_NAMESPACE
;
}
if
(
this
.
isValidKey
(
namespace
)
==
false
){
throw
new
Error
(
"Invalid namespace given: "
+
namespace
);
}
this
.
_statusHandler
=
resultsHandler
;
// try to store the value
try
{
dojox
.
sql
.
open
();
dojox
.
sql
.
db
.
execute
(
"BEGIN TRANSACTION"
);
var
_stmt
=
"REPLACE INTO "
+
this
.
TABLE_NAME
+
" VALUES (?, ?, ?)"
;
for
(
var
i
=
0
;
i
<
keys
.
length
;
i
++
)
{
// serialize the value;
// handle strings differently so they have better performance
var
value
=
values
[
i
];
if
(
dojo
.
isString
(
value
)){
value
=
"string:"
+
value
;
}
else
{
value
=
dojo
.
toJson
(
value
);
}
dojox
.
sql
.
db
.
execute
(
_stmt
,
[
namespace
,
keys
[
i
],
value
]);
}
dojox
.
sql
.
db
.
execute
(
"COMMIT TRANSACTION"
);
dojox
.
sql
.
close
();
}
catch
(
e
){
// indicate we failed
console
.
debug
(
"dojox.storage.GearsStorageProvider.putMultiple:"
,
e
);
if
(
resultsHandler
){
resultsHandler
(
this
.
FAILED
,
keys
,
e
.
toString
());
}
return
;
}
if
(
resultsHandler
){
resultsHandler
(
dojox
.
storage
.
SUCCESS
,
key
,
null
);
}
},
getMultiple
:
function
(
keys
,
namespace
){
// TODO: Maybe use SELECT IN instead
if
(
this
.
isValidKeyArray
(
keys
)
===
false
){
throw
new
(
"Invalid key array given: "
+
keys
);
}
if
(
namespace
==
null
||
typeof
namespace
==
"undefined"
){
namespace
=
dojox
.
storage
.
DEFAULT_NAMESPACE
;
}
if
(
this
.
isValidKey
(
namespace
)
==
false
){
throw
new
Error
(
"Invalid namespace given: "
+
namespace
);
}
var
_stmt
=
"SELECT * FROM "
+
this
.
TABLE_NAME
+
" WHERE namespace = ? AND "
+
" key = ?"
;
var
results
=
[];
for
(
var
i
=
0
;
i
<
keys
.
length
;
i
++
){
var
result
=
dojox
.
sql
(
_stmt
,
namespace
,
keys
[
i
]);
if
(
!
result
.
length
){
results
[
i
]
=
null
;
}
else
{
result
=
result
[
0
].
value
;
// destringify the content back into a
// real JavaScript object;
// handle strings differently so they have better performance
if
(
dojo
.
isString
(
result
)
&&
(
/^string:/
.
test
(
result
))){
results
[
i
]
=
result
.
substring
(
"string:"
.
length
);
}
else
{
results
[
i
]
=
dojo
.
fromJson
(
result
);
}
}
}
return
results
;
},
removeMultiple
:
function
(
keys
,
namespace
){
namespace
=
namespace
||
this
.
DEFAULT_NAMESPACE
;
dojox
.
sql
.
open
();
dojox
.
sql
.
db
.
execute
(
"BEGIN TRANSACTION"
);
var
_stmt
=
"DELETE FROM "
+
this
.
TABLE_NAME
+
" WHERE namespace = ? AND key = ?"
;
for
(
var
i
=
0
;
i
<
keys
.
length
;
i
++
){
dojox
.
sql
.
db
.
execute
(
_stmt
,
[
namespace
,
keys
[
i
]]);
}
dojox
.
sql
.
db
.
execute
(
"COMMIT TRANSACTION"
);
dojox
.
sql
.
close
();
},
isPermanent
:
function
(){
return
true
;
},
getMaximumSize
:
function
(){
return
this
.
SIZE_NO_LIMIT
;
},
hasSettingsUI
:
function
(){
return
false
;
},
showSettingsUI
:
function
(){
throw
new
Error
(
this
.
declaredClass
+
" does not support a storage settings user-interface"
);
},
hideSettingsUI
:
function
(){
throw
new
Error
(
this
.
declaredClass
+
" does not support a storage settings user-interface"
);
}
});
// register the existence of our storage providers
dojox
.
storage
.
manager
.
register
(
"dojox.storage.GearsStorageProvider"
,
new
dojox
.
storage
.
GearsStorageProvider
());
dojox
.
storage
.
manager
.
initialize
();
})();
}
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Apr 26, 11:11 (1 d, 14 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
24540
Default Alt Text
GearsStorageProvider.js (9 KB)
Attached To
rZEDHG ZedLegacy
Event Timeline
Log In to Comment