115 lines
3.7 KiB
JavaScript
115 lines
3.7 KiB
JavaScript
/*
|
|
* Main features
|
|
*/
|
|
|
|
Options = function (authorAccess, namespace) {
|
|
this.namespace = namespace;
|
|
this.authorAccess = authorAccess;
|
|
this.optionsStorage = this.authorAccess.getOptionsStorage();
|
|
// Consider namespaces as a SYSTEM option
|
|
if (namespace != Options.SYSTEM) {
|
|
this.systemOptions = new Options(authorAccess, Options.SYSTEM);
|
|
var namespaces = JSON.parse(this.systemOptions.getOption(Options.NAMESPACES, '{}'));
|
|
namespaces[ this.namespace] = (new Date()).toISOString();
|
|
this.systemOptions.setOption(Options.NAMESPACES, JSON.stringify(namespaces))
|
|
}
|
|
}
|
|
|
|
Options.SYSTEM = '__system__';
|
|
Options.NAMESPACES = '__namespaces__';
|
|
|
|
Options.prototype.getOption = function (key, defaultValue) {
|
|
this.optionsStorage.setOptionsDoctypePrefix(this.namespace);
|
|
return this.optionsStorage.getOption(key, defaultValue);
|
|
}
|
|
|
|
Options.prototype.setOption = function (key, value) {
|
|
this.optionsStorage.setOptionsDoctypePrefix(Options.SYSTEM);
|
|
var options = JSON.parse(this.optionsStorage.getOption(this.namespace, '{}'));
|
|
options[key] = (new Date()).toISOString();
|
|
this.optionsStorage.setOption(this.namespace, JSON.stringify(options));
|
|
this.optionsStorage.setOptionsDoctypePrefix(this.namespace);
|
|
this.optionsStorage.setOption(key, value);
|
|
}
|
|
|
|
Options.prototype.getOptionsKeys = function () {
|
|
this.optionsStorage.setOptionsDoctypePrefix(Options.SYSTEM);
|
|
return JSON.parse(this.optionsStorage.getOption(this.namespace, '{}'));
|
|
}
|
|
|
|
Options.prototype.getOptions = function () {
|
|
var results = {};
|
|
var options = this.getOptionsKeys();
|
|
for (var key in options) {
|
|
results[key] = this.getOption(key, '');
|
|
}
|
|
return results;
|
|
}
|
|
|
|
/*
|
|
* Per file extensions
|
|
*
|
|
* Setting a systemID creates a new namespace that concatenates the current namespace
|
|
* and the SHA1 of the document ID.
|
|
*
|
|
* Access to the options of this namespace is done through specific methods.
|
|
*
|
|
* The reverse mapping (SHA1 to system ID) is stored using the __systemIds__ namespace.
|
|
*
|
|
*/
|
|
|
|
Options.SYSTEMIDS = '__systemIds__';
|
|
|
|
Options.prototype.setSystemId = function (systemID) {
|
|
if (systemID === undefined) {
|
|
this.systemId = String(this.authorAccess.getDocumentController().getAuthorDocumentNode().getSystemID());
|
|
} else {
|
|
this.systemId = String(systemID);
|
|
}
|
|
var md = java.security.MessageDigest.getInstance("SHA-1");
|
|
var digestBytes = md.digest(java.lang.String(this.systemId).getBytes(java.nio.charset.Charset.forName("UTF-8")));
|
|
this.systemIdDigest = javax.xml.bind.DatatypeConverter.printHexBinary(digestBytes);
|
|
var systemIds = JSON.parse(this.systemOptions.getOption(Options.SYSTEMIDS, '{}'));
|
|
systemIds[ this.systemIdDigest] = {
|
|
date: (new Date()).toISOString(),
|
|
systemId: this.systemId
|
|
}
|
|
this.systemOptions.setOption(Options.SYSTEMIDS, JSON.stringify(systemIds));
|
|
this.systemIdOptions = new Options(this.authorAccess, this.namespace + '.' + this.systemIdDigest);
|
|
}
|
|
|
|
Options.prototype.setSystemIdOption = function (key, value) {
|
|
if (this.systemIdOptions === undefined) {
|
|
this.setSystemId();
|
|
}
|
|
this.systemIdOptions.setOption(key, value);
|
|
}
|
|
|
|
Options.prototype.getSystemIdOption = function (key, defaultValue) {
|
|
if (this.systemIdOptions === undefined) {
|
|
this.setSystemId();
|
|
}
|
|
return this.systemIdOptions.getOption(key, defaultValue);
|
|
}
|
|
|
|
Options.prototype.getSystemIdOptions = function () {
|
|
if (this.systemIdOptions === undefined) {
|
|
this.setSystemId();
|
|
}
|
|
return this.systemIdOptions.getOptions();
|
|
}
|
|
|
|
Options.prototype.getSystemOptionKeys = function () {
|
|
if (this.systemIdOptions === undefined) {
|
|
this.setSystemId();
|
|
}
|
|
return this.systemIdOptions.getSystemOptionKeys();
|
|
}
|
|
|
|
Options.prototype.getSystemOptions = function () {
|
|
if (this.systemIdOptions === undefined) {
|
|
this.setSystemId();
|
|
}
|
|
return this.systemIdOptions.getSystemOptions();
|
|
}
|