diff --git a/calendar/resources/content/jslib/io/dir.js b/calendar/resources/content/jslib/io/dir.js index d8d30ecae08a..c9921b3344b7 100644 --- a/calendar/resources/content/jslib/io/dir.js +++ b/calendar/resources/content/jslib/io/dir.js @@ -64,7 +64,7 @@ const JS_DIR_PREFS_DIR = 65539; const JS_DIR_DIRECTORY = 0x01; // 1 const JS_DIR_OK = true; -const JS_DIR_DEFAULT_PERMS = 0755; +const JS_DIR_DEFAULT_PERMS = 0766; const JS_DIR_FilePath = new C.Constructor(JS_DIR_LOCAL_CID, JS_DIR_I_LOCAL_FILE, @@ -101,7 +101,7 @@ Dir.prototype.create = function(aPermissions) return null; } - if(aPermissions) { + if (typeof(aPermissions) == "number") { var checkPerms = this.validatePermissions(aPermissions); if(!checkPerms) { @@ -109,18 +109,14 @@ Dir.prototype.create = function(aPermissions) "NS_ERROR_INVALID_ARG", JS_DIR_FILE+":create"); return C.results.NS_ERROR_INVALID_ARG; } - - //var baseTen = permissions.toString(10); - //if(baseTen.substring(0,1) != 0) - //aPermissions = 0+baseTen; } else { - checkPerms = JS_DIR_DEFAULT_PERMS; + checkPerms = this.mFileInst.parent.permissions; } var rv = null; try { - rv=this.mFileInst.create(JS_DIR_DIRECTORY, parseInt(aPermissions) ); + rv=this.mFileInst.create(JS_DIR_DIRECTORY, checkPerms); } catch (e) { jslibError(e, "(unable to create)", "NS_ERROR_FAILURE", JS_DIR_FILE+":create"); rv=null; diff --git a/calendar/resources/content/jslib/io/dirUtils.js b/calendar/resources/content/jslib/io/dirUtils.js index 081e35a0e6c4..c5f533a49a06 100644 --- a/calendar/resources/content/jslib/io/dirUtils.js +++ b/calendar/resources/content/jslib/io/dirUtils.js @@ -72,6 +72,12 @@ const NS_APP_IMAP_MAIL_50_DIR = "IMapMD"; // /root/.mozilla/Default const NS_APP_NEWS_50_DIR = "NewsD"; // /root/.mozilla/Default User/k1m30xaf.slt/News const NS_APP_MESSENGER_FOLDER_CACHE_50_DIR = "MFCaD"; // /root/.mozilla/Default User/k1m30xaf.slt/panacea.dat +// Useful OS System Dirs +const NS_OS_CURRENT_PROCESS_DIR = "CurProcD"; // /usr/src/mozilla/dist/bin +const NS_OS_HOME_DIR = "Home"; // /root +const NS_OS_TEMP_DIR = "TmpD"; // /tmp +const NS_XPCOM_COMPONENT_DIR = "ComsD"; // /usr/src/mozilla/dist/bin/components + const JS_DIRUTILS_FilePath = new C.Constructor(JS_DIRUTILS_FILE_LOCAL_CID, JS_DIRUTILS_FILE_I_LOCAL_FILE, JS_DIRUTILS_INIT_W_PATH); @@ -127,6 +133,10 @@ getUserMailDir : function () { return this.getPath(NS_APP_MAIL_50_DIR); }, getUserImapDir : function () { return this.getPath(NS_APP_IMAP_MAIL_50_DIR); }, getUserNewsDir : function () { return this.getPath(NS_APP_NEWS_50_DIR); }, getMessengerFolderCache : function () { return this.getPath(NS_APP_MESSENGER_FOLDER_CACHE_50_DIR); }, +getCurProcDir : function () { return this.getPath(NS_OS_CURRENT_PROCESS_DIR); }, +getHomeDir : function () { return this.getPath(NS_OS_HOME_DIR); }, +getTmpDir : function () { return this.getPath(NS_OS_TEMP_DIR); }, +getComponentsDir : function () { return this.getPath(NS_XPCOM_COMPONENT_DIR); }, get help() { const help = diff --git a/calendar/resources/content/jslib/io/file.js b/calendar/resources/content/jslib/io/file.js index af914efa0372..ad0f4f54dec0 100644 --- a/calendar/resources/content/jslib/io/file.js +++ b/calendar/resources/content/jslib/io/file.js @@ -61,7 +61,7 @@ xpcom nsIFile file IO library from js parent; read only attribute gets parent dir part of a path // direct manipulation - nsIFIle returns an nsIFile obj + nsIFile returns an nsIFile obj // utils remove(); removes the current file @@ -361,10 +361,11 @@ File.prototype.open = function(aMode, aPerms) } this.mMode=JS_FILE_READ_MODE; try { + jslibPrint('****** '+this.mURI); this.mFileChannel = JS_FILE_IOSERVICE.newChannelFromURI(this.mURI); - this.mInputStream = new JS_FILE_InputStream(); + this.mInputStream = new JS_FILE_InputStream(); this.mInputStream.init(this.mFileChannel.open()); - this.mLineBuffer = new Array(); + this.mLineBuffer = new Array(); rv=true; } catch (e) { jslibError(e, "open(r) (error setting permissions)", @@ -754,7 +755,6 @@ File.prototype.create = function() /********************* REMOVE *******************************/ File.prototype.remove = function () { - if (!this.checkInst()) throw C.results.NS_ERROR_NOT_INITIALIZED; @@ -767,27 +767,8 @@ File.prototype.remove = function () this.close(); var rv; try { - if (!this.exists()) { - jslibError(null, "(file doesn't exist)", - "NS_ERROR_FAILURE", - JS_FILE_FILE+":remove"); - return null; - } - - // I think we should remove whatever is there, sym link, file, dir etc . . - if (this.mFileInst.isSpecial()) { - jslibError(null, "(file is not a regular file)", - "NS_ERROR_FAILURE", - JS_FILE_FILE+":remove"); - return null; - } - - if (!this.isFile()) { - jslibError(null, "(not a file)", "NS_ERROR_FAILURE", JS_FILE_FILE+":remove"); - return null; - } - // this is a recursive remove. - this.isFile() ? rv = this.mFileInst.remove(true) : rv = null; + // this is a non recursive remove because we are only dealing w/ files. + rv = this.mFileInst.remove(false); } catch (e) { jslibError(e, "(unexpected)", "NS_ERROR_UNEXPECTED", diff --git a/calendar/resources/content/jslib/io/fileUtils.js b/calendar/resources/content/jslib/io/fileUtils.js index ac9fabda071e..3d4cc08d1be9 100644 --- a/calendar/resources/content/jslib/io/fileUtils.js +++ b/calendar/resources/content/jslib/io/fileUtils.js @@ -80,7 +80,7 @@ Instructions: */ // Make sure jslib is loaded -if(typeof(JS_LIB_LOADED)=='boolean') +if (typeof(JS_LIB_LOADED)=='boolean') { /****************** Globals **********************/ @@ -112,11 +112,14 @@ const JS_FILEUTILS_I_PROCESS = C.interfaces.nsIProcess; /****************** FileUtils Object Class *********************/ function FileUtils() { + include (jslib_dirutils); + this.mDirUtils = new DirUtils(); } // constructor FileUtils.prototype = { mFileInst : null, + mDirUtils : null, /********************* CHROME_TO_PATH ***************************/ // this is here for backward compatability but is deprecated --pete @@ -124,41 +127,41 @@ chrome_to_path : function (aPath) { return this.chromeToPath(aPath); }, chromeToPath : function (aPath) { - if(!aPath) { + if (!aPath) { jslibError(null, "(no path defined)", "NS_ERROR_INVALID_ARG", JS_FILEUTILS_FILE+":chromeToPath"); return null; } var uri = C.classes[JS_FILEUTILS_SIMPLEURI_PROGID].createInstance(JS_FILEUTILS_I_URI); - var path; + var rv; - if(aPath.search(/^chrome:/) == 0) { + if (/^chrome:/.test(aPath)) { try { var cr = C.classes[JS_FILEUTILS_CHROME_REG_PROGID].getService(); if (cr) { cr = cr.QueryInterface(C.interfaces.nsIChromeRegistry); uri.spec = aPath; uri.spec = cr.convertChromeURL(uri); - path = uri.path; + rv = uri.path; } } catch(e) {} - var rv; - - try { - var dir = new C.Constructor(JS_FILEUTILS_DR_PROGID, JS_FILEUTILS_I_PROPS); - rv = (new dir()).get(JS_FILEUTILS_CHROME_DIR, C.interfaces.nsIFile).path; - rv = path.replace(/\/chrome/, rv); - } catch (e) { - jslibError(e, "(problem getting file instance)", "NS_ERROR_UNEXPECTED", JS_FILEUTILS_FILE+":chromeToPath"); - rv = null; + if (/^\/|\\|:chrome/.test(rv)) { + try { + // prepend the system path to this process dir + rv = "file://"+this.mDirUtils.getCurProcDir()+rv; + } catch (e) { + jslibError(e, "(problem getting file instance)", "NS_ERROR_UNEXPECTED", + JS_FILEUTILS_FILE+":chromeToPath"); + rv = ""; + } } } - else if(aPath.search(/^file:/) == 0) { - rv=this.urlToPath(aPath); + else if (/^file:/.test(aPath)) { + rv = this.urlToPath(aPath); } else - rv=null; + rv = ""; return rv; }, @@ -168,13 +171,13 @@ URL_to_path : function (aPath){ return this.urlToPath(aPath); }, urlToPath : function (aPath) { - if(!aPath) { + if (!aPath) { jslibError(null, "(no path defined)", "NS_ERROR_INVALID_ARG", JS_FILEUTILS_FILE+":urlToPath"); return null; } var rv; - if(aPath.search(/^file:/) == 0) { + if (aPath.search(/^file:/) == 0) { try { var uri = C.classes[JS_FILEUTILS_NETWORK_STD_CID].createInstance(JS_FILEUTILS_I_FILEURL); uri.spec = aPath; @@ -191,7 +194,7 @@ urlToPath : function (aPath) /********************* EXISTS ***************************/ exists : function (aPath) { - if(!aPath) { + if (!aPath) { jslibError(null, "(no path defined)", "NS_ERROR_INVALID_ARG", JS_FILEUTILS_FILE+":exists"); return null; } @@ -213,12 +216,12 @@ rm : function (aPath) { return this.remove(aPath); }, remove : function (aPath) { - if(!aPath) { + if (!aPath) { jslibError(null, "(no path defined)", "NS_ERROR_INVALID_ARG", JS_FILEUTILS_FILE+":remove"); return null; } - if(!this.exists(aPath)) { + if (!this.exists(aPath)) { jslibError(null, "(file doesn't exist)", "NS_ERROR_UNEXPECTED", JS_FILEUTILS_FILE+":remove"); return null; } @@ -227,7 +230,7 @@ remove : function (aPath) try { var fileInst = new JS_FILEUTILS_FilePath(aPath); - if(fileInst.isDirectory()) { + if (fileInst.isDirectory()) { jslibError(null, "path is a dir. use rmdir()", "NS_ERROR_INVALID_ARG", JS_FILEUTILS_FILE+":remove"); return null; } @@ -245,12 +248,12 @@ remove : function (aPath) /********************* COPY *****************************/ copy : function (aSource, aDest) { - if(!aSource || !aDest) { + if (!aSource || !aDest) { jslibError(null, "(no path defined)", "NS_ERROR_INVALID_ARG", JS_FILEUTILS_FILE+":copy"); return null; } - if(!this.exists(aSource)) { + if (!this.exists(aSource)) { jslibError(null, "(file doesn't exist)", "NS_ERROR_UNEXPECTED", JS_FILEUTILS_FILE+":copy"); return null; } @@ -262,27 +265,27 @@ copy : function (aSource, aDest) var dir = new JS_FILEUTILS_FilePath(aDest); var copyName = fileInst.leafName; - if(fileInst.isDirectory()) { + if (fileInst.isDirectory()) { jslibError(null, "(cannot copy directory)", "NS_ERROR_FAILURE", JS_FILEUTILS_FILE+":copy"); return null; } - if(!this.exists(aDest) || !dir.isDirectory()) { + if (!this.exists(aDest) || !dir.isDirectory()) { copyName = dir.leafName; dir = new JS_FILEUTILS_FilePath(dir.path.replace(copyName,'')); - if(!this.exists(dir.path)) { + if (!this.exists(dir.path)) { jslibError(null, "(dest "+dir.path+" doesn't exist)", "NS_ERROR_FAILURE", JS_FILEUTILS_FILE+":copy"); return null; } - if(!dir.isDirectory()) { + if (!dir.isDirectory()) { jslibError(null, "(dest "+dir.path+" is not a valid path)", "NS_ERROR_FAILURE", JS_FILEUTILS_FILE+":copy"); return null; } } - if(this.exists(this.append(dir.path, copyName))) { + if (this.exists(this.append(dir.path, copyName))) { jslibError(null, "(dest "+this.append(dir.path, copyName)+" already exists)", "NS_ERROR_FAILURE", JS_FILEUTILS_FILE+":copy"); return null; } @@ -300,12 +303,12 @@ copy : function (aSource, aDest) /********************* LEAF *****************************/ leaf : function (aPath) { - if(!aPath) { + if (!aPath) { jslibError(null, "(no path defined)", "NS_ERROR_INVALID_ARG", JS_FILEUTILS_FILE+":leaf"); return null; } - if(!this.exists(aPath)) { + if (!this.exists(aPath)) { jslibError(null, "(file doesn't exist)", "NS_ERROR_UNEXPECTED", JS_FILEUTILS_FILE+":leaf"); return null; } @@ -328,12 +331,12 @@ leaf : function (aPath) /********************* APPEND ***************************/ append : function (aDirPath, aFileName) { - if(!aDirPath || !aFileName) { + if (!aDirPath || !aFileName) { jslibError(null, "(no path defined)", "NS_ERROR_INVALID_ARG", JS_FILEUTILS_FILE+":append"); return null; } - if(!this.exists(aDirPath)) { + if (!this.exists(aDirPath)) { jslibError(null, "(file doesn't exist)", "NS_ERROR_UNEXPECTED", JS_FILEUTILS_FILE+":append"); return null; } @@ -342,7 +345,7 @@ append : function (aDirPath, aFileName) try { var fileInst = new JS_FILEUTILS_FilePath(aDirPath); - if(fileInst.exists() && !fileInst.isDirectory()) { + if (fileInst.exists() && !fileInst.isDirectory()) { jslibError(null, aDirPath+" is not a dir", "NS_ERROR_INVALID_ARG", JS_FILEUTILS_FILE+":append"); return null; } @@ -370,12 +373,12 @@ validatePermissions : function(aNum) /********************* PERMISSIONS **********************/ permissions : function (aPath) { - if(!aPath) { + if (!aPath) { jslibError(null, "(no path defined)", "NS_ERROR_INVALID_ARG", JS_FILEUTILS_FILE+":permissions"); return null; } - if(!this.exists(aPath)) { + if (!this.exists(aPath)) { jslibError(null, "(file doesn't exist)", "NS_ERROR_UNEXPECTED", JS_FILEUTILS_FILE+":permissions"); return null; } @@ -395,12 +398,12 @@ permissions : function (aPath) /********************* MODIFIED *************************/ dateModified : function (aPath) { - if(!aPath) { + if (!aPath) { jslibError(null, "(no path defined)", "NS_ERROR_INVALID_ARG", JS_FILEUTILS_FILE+":dateModified"); return null; } - if(!this.exists(aPath)) { + if (!this.exists(aPath)) { jslibError(null, "(file doesn't exist)", "NS_ERROR_UNEXPECTED", JS_FILEUTILS_FILE+":dateModified"); return null; } @@ -421,12 +424,12 @@ dateModified : function (aPath) /********************* SIZE *****************************/ size : function (aPath) { - if(!aPath) { + if (!aPath) { jslibError(null, "(no path defined)", "NS_ERROR_INVALID_ARG", JS_FILEUTILS_FILE+":size"); return null; } - if(!this.exists(aPath)) { + if (!this.exists(aPath)) { jslibError(null, "(file doesn't exist)", "NS_ERROR_UNEXPECTED", JS_FILEUTILS_FILE+":size"); return null; } @@ -448,12 +451,12 @@ extension : function (aPath){ return this.ext(aPath); }, ext : function (aPath) { - if(!aPath) { + if (!aPath) { jslibError(null, "(no path defined)", "NS_ERROR_INVALID_ARG", JS_FILEUTILS_FILE+":ext"); return null; } - if(!this.exists(aPath)) { + if (!this.exists(aPath)) { jslibError(null, "(file doesn't exist)", "NS_ERROR_UNEXPECTED", JS_FILEUTILS_FILE+":ext"); return null; } @@ -477,7 +480,7 @@ dirPath : function (aPath){ return this.parent(aPath); }, parent : function (aPath) { - if(!aPath) { + if (!aPath) { jslibError(null, "(no path defined)", "NS_ERROR_INVALID_ARG", JS_FILEUTILS_FILE+":parent"); return null; } @@ -487,15 +490,15 @@ parent : function (aPath) try { var fileInst = new JS_FILEUTILS_FilePath(aPath); - if(!fileInst.exists()) { + if (!fileInst.exists()) { jslibError(null, "(file doesn't exist)", "NS_ERROR_FAILURE", JS_FILEUTILS_FILE+":parent"); return null; } - if(fileInst.isFile()) + if (fileInst.isFile()) rv=fileInst.parent.path; - else if(fileInst.isDirectory()) + else if (fileInst.isDirectory()) rv=fileInst.path; else @@ -521,13 +524,13 @@ spawn : function (aPath, aArgs) * */ { - if(!aPath) { + if (!aPath) { jslibError(null, "(no path defined)", "NS_ERROR_INVALID_ARG", JS_FILEUTILS_FILE+":spawn"); return null; } - if(!this.exists(aPath)) { + if (!this.exists(aPath)) { jslibError(null, "(file doesn't exist)", "NS_ERROR_UNEXPECTED", JS_FILEUTILS_FILE+":spawn"); return null; @@ -535,7 +538,7 @@ spawn : function (aPath, aArgs) var len=0; - if(aArgs) + if (aArgs) len = aArgs.length; else aArgs=null; @@ -545,13 +548,13 @@ spawn : function (aPath, aArgs) try { var fileInst = new JS_FILEUTILS_FilePath(aPath); - if(!fileInst.isExecutable()) { + if (!fileInst.isExecutable()) { jslibError(null, "(File is not executable)", "NS_ERROR_INVALID_ARG", JS_FILEUTILS_FILE+":spawn"); return null; } - if(fileInst.isDirectory()) { + if (fileInst.isDirectory()) { jslibError(null, "(File is not a program)", "NS_ERROR_UNEXPECTED", JS_FILEUTILS_FILE+":spawn"); return null; @@ -590,7 +593,7 @@ spawn : function (aPath, aArgs) /********************* nsIFILE **************************/ nsIFile : function (aPath) { - if(!aPath) { + if (!aPath) { jslibError(null, "(no path defined)", "NS_ERROR_INVALID_ARG", JS_FILEUTILS_FILE+":nsIFile"); return null; } diff --git a/calendar/resources/content/jslib/io/filesystem.js b/calendar/resources/content/jslib/io/filesystem.js index dbfb78a9b792..052625e87293 100644 --- a/calendar/resources/content/jslib/io/filesystem.js +++ b/calendar/resources/content/jslib/io/filesystem.js @@ -578,15 +578,12 @@ get URL() ***************************/ isDir : function() { - - if (!this.exists()) { - jslibError(null, - "(file doesn't exist)", - "NS_ERROR_FAILURE", - JS_FILESYSTEM_FILE+":isDir"); - return false; - } - return this.mFileInst.isDirectory(); + var rv = false; + try { + rv = this.mFileInst.isDirectory(); + } catch (e) { rv = false; } + + return rv; }, /*************************** @@ -594,15 +591,12 @@ isDir : function() ***************************/ isFile : function() { - - if (!this.exists()) { - jslibError(null, - "(file doesn't exist)", - "NS_ERROR_FAILURE", - JS_FILESYSTEM_FILE+":isDir"); - return false; - } - return this.mFileInst.isFile(); + var rv = false; + try { + rv = this.mFileInst.isFile(); + } catch (e) { rv = false; } + + return rv; }, /*************************** @@ -610,15 +604,12 @@ isFile : function() ***************************/ isExec : function() { - - if (!this.exists()) { - jslibError(null, - "(file doesn't exist)", - "NS_ERROR_FAILURE", - JS_FILESYSTEM_FILE+":isDir"); - return false; - } - return this.mFileInst.isExecutable(); + var rv = false; + try { + rv = this.mFileInst.isExecutable(); + } catch (e) { rv = false; } + + return rv; }, /*************************** @@ -627,14 +618,12 @@ isExec : function() isSymlink : function() { - if (!this.exists()) { - jslibError(null, - "(file doesn't exist)", - "NS_ERROR_FAILURE", - JS_FILESYSTEM_FILE+":isDir"); - return false; - } - return this.mFileInst.isSymlink(); + var rv = false; + try { + rv = this.mFileInst.isSymlink(); + } catch (e) { rv = false; } + + return rv; }, /*************************** diff --git a/calendar/resources/content/jslib/jslib.js b/calendar/resources/content/jslib/jslib.js index d187429fb761..11a727284f08 100644 --- a/calendar/resources/content/jslib/jslib.js +++ b/calendar/resources/content/jslib/jslib.js @@ -34,14 +34,14 @@ const JS_LIB_LOADED = true; const JS_LIBRARY = "jslib"; const JS_LIB_FILE = "jslib.js" const JS_LIB_PATH = "chrome://calendar/content/jslib/"; -const JS_LIB_VERSION = "0.1.8"; +const JS_LIB_VERSION = "0.1.123"; const JS_LIB_AUTHORS = "\tPete Collins \n" + "\tEric Plaster \n" + "\tMartin.T.Kutschker \n"; -const JS_LIB_BUILD = "0.9.5"; +const JS_LIB_BUILD = "mozilla 1.3+"; const JS_LIB_ABOUT = "\tThis is an effort to provide a fully " + "functional js library\n" + - "\tfor mozilla package authors to use" + + "\tfor mozilla package authors to use " + "in their applications\n"; const JS_LIB_HOME = "http://jslib.mozdev.org/"; @@ -49,8 +49,10 @@ const JS_LIB_HOME = "http://jslib.mozdev.org/"; const ON = true; const OFF = false; const C = Components; +const jslib_results = C.results; -var JS_LIB_DEBUG = ON; +if (typeof(JS_LIB_DEBUG)!='boolean') + var JS_LIB_DEBUG = ON; var JS_LIB_DEBUG_ALERT = OFF; var JS_LIB_ERROR = ON; var JS_LIB_ERROR_ALERT = OFF; @@ -81,9 +83,51 @@ const jslib_fileutils = JS_LIB_PATH+'io/fileUtils.js'; const jslib_dir = JS_LIB_PATH+'io/dir.js'; const jslib_dirutils = JS_LIB_PATH+'io/dirUtils.js'; +// data structures +const jslib_dictionary = JS_LIB_PATH+'ds/dictionary.js'; +const jslib_chaindictionary = JS_LIB_PATH+'ds/chainDictionary.js'; + +// RDF library modules +const jslib_rdf = JS_LIB_PATH+'rdf/rdf.js'; +const jslib_rdffile = JS_LIB_PATH+'rdf/rdfFile.js'; +const jslib_rdfcontainer = JS_LIB_PATH+'rdf/rdfContainer.js'; +const jslib_rdfresource = JS_LIB_PATH+'rdf/rdfResource.js'; + +// network library modules +const jslib_remotefile = JS_LIB_PATH+'network/remoteFile.js'; +const jslib_socket = JS_LIB_PATH+'network/socket.js'; + +// network - http +const jslib_http = JS_LIB_PATH+'network/http.js'; +const jslib_getrequest = JS_LIB_PATH+'network/getRequest.js'; +const jslib_postrequest = JS_LIB_PATH+'network/postRequest.js'; +const jslib_multipartrequest = JS_LIB_PATH+'network/multipartRequest.js'; +const jslib_filepart = JS_LIB_PATH+'network/parts/filePart.js'; +const jslib_textpart = JS_LIB_PATH+'network/parts/textPart.js'; +const jslib_urlparameterspart = JS_LIB_PATH+'network/parts/urlParametersPart.js'; +const jslib_bodyparameterspart = JS_LIB_PATH+'network/parts/bodyParametersPart.js'; + + +// xul dom library modules +const jslib_dialog = JS_LIB_PATH+'xul/commonDialog.js'; +const jslib_filepicker = JS_LIB_PATH+'xul/commonFilePicker.js'; +const jslib_window = JS_LIB_PATH+'xul/commonWindow.js'; +const jslib_routines = JS_LIB_PATH+'xul/appRoutines.js'; + // sound library modules const jslib_sound = JS_LIB_PATH+'sound/sound.js'; +// utils library modules +const jslib_date = JS_LIB_PATH+'utils/date.js'; +const jslib_prefs = JS_LIB_PATH+'utils/prefs.js'; +const jslib_validate = JS_LIB_PATH+'utils/validate.js'; + +// zip +const jslib_zip = JS_LIB_PATH+'zip/zip.js'; + +// install/uninstall +const jslib_install = JS_LIB_PATH+'install/install.js'; +const jslib_uninstall = JS_LIB_PATH+'install/uninstall.js'; /*************************** GLOBALS ***************************/ @@ -101,6 +145,7 @@ const jslib_sound = JS_LIB_PATH+'sound/sound.js'; function include(aScriptPath) { + jslibPrint(aScriptPath); if (!aScriptPath) { jslibError(null, "Missing file path argument\n", "NS_ERROR_XPC_NOT_ENOUGH_ARGS", @@ -118,19 +163,19 @@ function include(aScriptPath) { var end = aScriptPath.lastIndexOf('.'); var slice = aScriptPath.length - end; var loadID = aScriptPath.substring(start, (aScriptPath.length - slice)); - try { - if (typeof(eval('JS_'+loadID.toUpperCase()+'_LOADED')) == 'boolean') - return 1; - } catch (e) {} + if (typeof(this['JS_'+loadID.toUpperCase()+'_LOADED']) == 'boolean') { + jslibPrint (loadID+" library already loaded"); + return 1; + } var rv; try { const PROG_ID = "@mozilla.org/moz/jssubscript-loader;1"; const INTERFACE = "mozIJSSubScriptLoader"; - const Inc = new C.Constructor(PROG_ID, INTERFACE); - (new Inc()).loadSubScript(aScriptPath); + jslibGetService(PROG_ID, INTERFACE).loadSubScript(aScriptPath); rv = C.results.NS_OK; - } catch(e) { + } catch (e) { + jslibDebug(e); const msg = aScriptPath+" is not a valid path or is already loaded"; jslibError(e, msg, "NS_ERROR_INVALID_ARG", JS_LIB_FILE+": include"); rv = - C.results.NS_ERROR_INVALID_ARG; @@ -155,14 +200,17 @@ function jslib_debug(aOutString) { return jslibDebug(aOutString); } function jslibDebug(aOutString) { if (!JS_LIB_DEBUG) - return void(null); - - if (!aOutString) - aOutString="\n"; + return; if (JS_LIB_DEBUG_ALERT) alert(aOutString); + dump(aOutString+'\n'); + return; +} + +// print to stdout +function jslibPrint(aOutString) { return (dump(aOutString+'\n')); } @@ -201,15 +249,20 @@ function jslibError(e, aType, aResults, aCaller) { return (dump("JS_LIB_ERROR=ON\n")); var errMsg="ERROR: "+(aCaller?"in "+aCaller:"")+" "+aType+"\n"; - var e = null; - if (e) { - var m = (e.message?e.message:e); - var r = (typeof(e.result)!='undefined'?'0x'+e.result.toString(16):''); - var l = (typeof(e.location)!='undefined'?e.location:''); + if (e && typeof(e)=='object') { + var m, n, r, l, ln, fn = ""; + try { + r = e.result; + m = e.message; + fn = e.filename; + l = e.location; + ln = l.lineNumber; + } catch (e) {} errMsg+="Name: "+e.name+"\n" + - "Message: "+m+"\n" + "Result: "+r+"\n" + - "Location: "+l+"\n"; + "Message: "+m+"\n" + + "FileName: "+fn+"\n" + + "LineNumber: "+ln+"\n"; } if (aResults) errMsg+="NS_ERROR_NUMBER: "+aResults+"\n"; @@ -222,6 +275,102 @@ function jslibError(e, aType, aResults, aCaller) { return (dump(errMsg)); } + +function jslibGetService (aURL, aInterface) { + var rv; + try { + rv = C.classes[aURL].getService(C.interfaces[aInterface]); + } catch (e) { + jslibDebug("Error getting service: " + aURL + ", " + aInterface + "\n" + e); + rv = -1; + } + return rv; +} + +function jslibCreateInstance (aURL, aInterface) { + var rv; + try { + rv = C.classes[aURL].createInstance(C.interfaces[aInterface]); + } catch (e) { + jslibDebug("Error creating instance: " + aURL + ", " + aInterface + "\n" + e); + rv = -1; + } + return rv; +} + +function jslibGetInterface (aInterface) { + var rv; + try { + rv = C.interfaces[aInterface]; + } catch (e) { + jslibDebug("Error getting interface: [" + aInterface + "]\n" + e); + rv = -1; + } + return rv; +} + +/************ + QI: function(aEl, aIName) + { + try { + return aEl.QueryInterface(Components.interfaces[aIName]); + } catch (ex) { + throw("Unable to QI " + aEl + " to " + aIName); + } + } +************/ + +function jslibUninstall (aPackage, aCallback) +{ + if (!aPackage || typeof(aPackage) != "string") + throw jslib_results.NS_ERROR_INVALID_ARG; + + include (jslib_window); + var win = new CommonWindow(null, 400, 400); + win.position = JS_MIDDLE_CENTER; + win.openUninstallWindow(aPackage, aCallback); +} + +/*********** Launch JSLIB Splash ***************/ +function jslibLaunchSplash () +{ + include (jslib_window); + const url = "chrome://jslib/content/splash.xul"; + var win = new CommonWindow(url, 400, 220); + win.position = JS_MIDDLE_CENTER; + win.openSplash(); +} + +function jslib_turnDumpOn () { + include (jslib_prefs); + // turn on dump + var pref = new Prefs(); + const prefStr = "browser.dom.window.dump.enabled" + + // turn dump on if not enabled + if (!pref.getBool(prefStr)) { + pref.setBool(prefStr, true); + pref.save(); + } + + return; +} + +function jslib_turnDumpOff () { + include (jslib_prefs); + // turn off dump + var pref = new Prefs(); + const prefStr = "browser.dom.window.dump.enabled" + + // turn dump off if enabled + if (pref.getBool(prefStr)) { + pref.setBool(prefStr, false); + pref.save(); + } + + return; +} + } catch (e) {} } // end jslib load test diff --git a/calendar/resources/content/jslib/rdf/rdf.js b/calendar/resources/content/jslib/rdf/rdf.js index 72f6e6c2f4b4..ab0c79851154 100644 --- a/calendar/resources/content/jslib/rdf/rdf.js +++ b/calendar/resources/content/jslib/rdf/rdf.js @@ -54,17 +54,18 @@ RDF.prototype._rdf_init = function(src, flags) { this.src = src; var load = true; // load source - + jslibPrint("* RDFFile: Opening file \n"); // Create an RDF/XML datasource using the XPCOM Component Manager - this.dsource = Components + this.dsource = C .classes[JS_RDFBASE_RDF_DS_PROGID] - .createInstance(Components.interfaces.nsIRDFDataSource); + .createInstance(C.interfaces.nsIRDFDataSource); // The nsIRDFRemoteDataSource interface has the interfaces // that we need to setup the datasource. - var remote = this.dsource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource); + var remote = this.dsource.QueryInterface(C.interfaces.nsIRDFRemoteDataSource); try { + jslibPrint("* RDFFile: doing remote init \n"); remote.Init(src); // throws an exception if URL already in use } catch(err) { @@ -76,6 +77,7 @@ RDF.prototype._rdf_init = function(src, flags) { if (load) { try { + jslibPrint("* RDFFile: refresh remote \n"); remote.Refresh((flags & JS_RDF_FLAG_SYNC) ? true: false); } catch(err) { @@ -88,8 +90,9 @@ RDF.prototype._rdf_init = function(src, flags) { } else { try { + jslibPrint("* RDFFile: getting ds \n"); this.dsource = this.RDF.GetDataSource(src); - remote = this.dsource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource); + remote = this.dsource.QueryInterface(C.interfaces.nsIRDFRemoteDataSource); } catch(err) { this.dsource = null; @@ -127,13 +130,13 @@ RDF.prototype._rdf_init = function(src, flags) { onError: function(aSink, aStatus, aErrorMsg) { - jslibError(null,"Error loading datasource: "+aErrorMsg, + jslibError(null,"Error loading datasource: "+aErrorMsg, "NS_ERROR_UNEXPECTED", JS_RDF_FILE+":_rdf_init (observer)"); } }; // RDF/XML Datasources are all nsIRDFXMLSinks - var sink = this.dsource.QueryInterface(Components.interfaces.nsIRDFXMLSink); + var sink = this.dsource.QueryInterface(C.interfaces.nsIRDFXMLSink); // Attach the observer to the datasource-as-sink sink.addXMLSinkObserver(obs); @@ -153,6 +156,7 @@ RDF.prototype.getSource = function() RDF.prototype.getNode = function(aPath) { + jslibDebug("entering getNode"); if(this.isValid()) { var res = this.RDF.GetResource(aPath); return new RDFResource("node", res.Value, null, this.dsource); @@ -261,7 +265,7 @@ RDF.prototype.getRootContainers = function(aType) var elems = this.dsource.GetAllResources(); while(elems.hasMoreElements()) { var elem = elems.getNext(); - elem = elem.QueryInterface(Components.interfaces.nsIRDFResource); + elem = elem.QueryInterface(C.interfaces.nsIRDFResource); if(aType == "bag") { if(this.RDFCUtils.IsBag(this.dsource, elem)) { list.push(new RDFContainer(aType, elem.Value, null, this.dsource)); @@ -294,11 +298,15 @@ RDF.prototype.getRootContainers = function(aType) RDF.prototype.flush = function() { - if(this.isValid()) { - this.dsource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource).Flush(); - } + if(this.isValid()) + this.dsource.QueryInterface(C.interfaces.nsIRDFRemoteDataSource).Flush(); }; +RDF.prototype.refresh = function(aBlocking) +{ + if(this.isValid()) + this.dsource.QueryInterface(C.interfaces.nsIRDFRemoteDataSource).Refresh(aBlocking); +}; jslibDebug('*** load: '+JS_RDF_FILE+' OK'); diff --git a/calendar/resources/content/jslib/rdf/rdfBase.js b/calendar/resources/content/jslib/rdf/rdfBase.js index 4188962b5289..5c1e550fa7e2 100644 --- a/calendar/resources/content/jslib/rdf/rdfBase.js +++ b/calendar/resources/content/jslib/rdf/rdfBase.js @@ -60,7 +60,7 @@ RDFBase.prototype = { this.dsource = aDatasource; }, - getDatasource : function() + getDatasource : function() { return this.dsource; }, @@ -83,12 +83,46 @@ RDFBase.prototype = { flush : function() { if(this.isValid()) { - this.dsource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource).Flush(); + this.dsource.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource).Flush(); } } }; +RDFBase.prototype.getAnonymousResource = function() +{ + jslibDebug("entering getAnonymousNode"); + if(this.isValid()) { + var res = this.RDF.GetAnonymousResource(); + return new RDFResource("node", res.Value, null, this.dsource); + } else { + jslibError(null, "RDF is no longer valid!\n", "NS_ERROR_UNEXPECTED", + JS_RDF_FILE+":getNode"); + return null; + } +}; + +RDFBase.prototype.getAnonymousContainer = function(aType) +{ + jslibDebug("entering getAnonymousContainer"); + if(this.isValid()) { + var res = this.getAnonymousResource(); + jslibDebug("making Container"); + if(aType == "bag") { + this.RDFCUtils.MakeBag(this.dsource, res.getResource()); + } else if(aType == "alt") { + this.RDFCUtils.MakeAlt(this.dsource, res.getResource()); + } else { + this.RDFCUtils.MakeSeq(this.dsource, res.getResource()); + } + jslibPrint("* made cont ..."+res.getSubject()+"\n"); + return new RDFContainer(aType, res.getSubject(),null, this.dsource); + } else { + jslibError(null, "RDF is no longer valid!\n", "NS_ERROR_UNEXPECTED", + JS_RDF_FILE+":getNode"); + return null; + } +}; jslibDebug('*** load: '+JS_RDFBASE_FILE+' OK'); @@ -96,7 +130,7 @@ jslibDebug('*** load: '+JS_RDFBASE_FILE+' OK'); else { - dump("JS_RDFBase library not loaded:\n" + + jslibPrint("JS_RDFBase library not loaded:\n" + " \tTo load use: chrome://jslib/content/jslib.js\n" + " \tThen: include('chrome://jslib/content/rdf/rdf.js');\n\n"); } diff --git a/calendar/resources/content/jslib/rdf/rdfContainer.js b/calendar/resources/content/jslib/rdf/rdfContainer.js index a438c5a89876..72f665fc0b66 100644 --- a/calendar/resources/content/jslib/rdf/rdfContainer.js +++ b/calendar/resources/content/jslib/rdf/rdfContainer.js @@ -86,30 +86,42 @@ RDFContainer.prototype.addContainer = function(aContainer, aType) }; RDFContainer.prototype.getNode = function(aNode) { - var rv = null; + var rv = null; if(this.isValid()) { - var res = this.RDF.GetResource(this.subject+":"+aNode); - if(res) { - return new RDFResource("node", this.subject+":"+aNode, this.subject, this.dsource); - } - } else { + var res = this.RDF.GetResource(this.subject+":"+aNode); + if(res) { + return new RDFResource("node", this.subject+":"+aNode, this.subject, this.dsource); + } + } else { jslibError(null, "RDFContainer is no longer valid!\n", "NS_ERROR_UNEXPECTED", JS_RDFCONTAINER_FILE+":getNode"); - return null; - } + return null; + } }; RDFContainer.prototype.addNode = function(aNode) { if(this.isValid()) { - var res = this.RDF.GetResource(this.subject+":"+aNode); - this.RDFC.Init(this.dsource, this.resource); - this.RDFC.AppendElement(res); - return new RDFResource("node", this.subject+":"+aNode, this.subject, this.dsource); - } else { + var res = this.RDF.GetResource(this.subject+":"+aNode); + this.RDFC.Init(this.dsource, this.resource); + this.RDFC.AppendElement(res); + return new RDFResource("node", this.subject+":"+aNode, this.subject, this.dsource); + } else { jslibError(null, "RDFContainer is no longer valid!\n", "NS_ERROR_UNEXPECTED", JS_RDFCONTAINER_FILE+":addNode"); - return null; - } + return null; + } +}; + +RDFContainer.prototype.addResource = function(aResource) { + if(this.isValid()) { + var res = aResource.getResource(); + this.RDFC.Init(this.dsource, this.resource); + this.RDFC.AppendElement(res); + } else { + jslibError(null, "RDFContainer is no longer valid!\n", "NS_ERROR_UNEXPECTED", + JS_RDFCONTAINER_FILE+":addNode"); + return null; + } }; // FIXME add a getSeq("relative:path"); @@ -141,118 +153,118 @@ RDFContainer.prototype.getSubNodes = function() RDFContainer.prototype.getSubResources = function(aType) { - if(this.isValid()) { - var list = new Array; + if(this.isValid()) { + var list = new Array; - this.RDFC.Init(this.dsource, this.resource); + this.RDFC.Init(this.dsource, this.resource); - var elems = this.RDFC.GetElements(); - while(elems.hasMoreElements()) { - var elem = elems.getNext(); - elem = elem.QueryInterface(Components.interfaces.nsIRDFResource); - if(aType == "bag") { - if(this.RDFCUtils.IsBag(this.dsource, elem)) { - list.push(new RDFContainer(aType, elem.Value, this.subject, this.dsource)); - } - } else if(aType == "alt") { - if(this.RDFCUtils.IsAlt(this.dsource, elem)) { - list.push(new RDFContainer(aType, elem.Value, this.subject, this.dsource)); - } - } else if(aType == "seq") { - if(this.RDFCUtils.IsSeq(this.dsource, elem)) { - list.push(new RDFContainer(aType, elem.Value, this.subject, this.dsource)); - } - } else if(aType == "all") { - if(this.RDFCUtils.IsContainer(this.dsource, elem)) { - list.push(new RDFContainer(aType, elem.Value, this.subject, this.dsource)); - } - } else { - if(!this.RDFCUtils.IsContainer(this.dsource, elem)) { - list.push(new RDFResource(aType, elem.Value, this.subject, this.dsource)); - } - } - } - return list; - } else { + var elems = this.RDFC.GetElements(); + while(elems.hasMoreElements()) { + var elem = elems.getNext(); + elem = elem.QueryInterface(Components.interfaces.nsIRDFResource); + if(aType == "bag") { + if(this.RDFCUtils.IsBag(this.dsource, elem)) { + list.push(new RDFContainer(aType, elem.Value, this.subject, this.dsource)); + } + } else if(aType == "alt") { + if(this.RDFCUtils.IsAlt(this.dsource, elem)) { + list.push(new RDFContainer(aType, elem.Value, this.subject, this.dsource)); + } + } else if(aType == "seq") { + if(this.RDFCUtils.IsSeq(this.dsource, elem)) { + list.push(new RDFContainer(aType, elem.Value, this.subject, this.dsource)); + } + } else if(aType == "all") { + if(this.RDFCUtils.IsContainer(this.dsource, elem)) { + list.push(new RDFContainer(aType, elem.Value, this.subject, this.dsource)); + } + } else { + if(!this.RDFCUtils.IsContainer(this.dsource, elem)) { + list.push(new RDFResource(aType, elem.Value, this.subject, this.dsource)); + } + } + } + return list; + } else { jslibError(null, "RDFContainer is no longer valid!\n", "NS_ERROR_UNEXPECTED", JS_RDFCONTAINER_FILE+":getSubResources"); - return null; - } + return null; + } }; -RDFContainer.prototype.remove_recursive = function(aPath) +RDFContainer.prototype.remove_recursive = function(aPath) { if(this.isValid()) { - var res = this.RDF.GetResource(aPath); - this.RDFC.Init(this.dsource, res); + var res = this.RDF.GetResource(aPath); + this.RDFC.Init(this.dsource, res); - var elems = this.RDFC.GetElements(); - while(elems.hasMoreElements()) { - var elem = elems.getNext(); - if(this.RDFCUtils.IsContainer(this.dsource, elem)) { - this.remove_recursive(elem.QueryInterface(Components.interfaces.nsIRDFResource).Value); - this.RDFC.Init(this.dsource, res); - } - var arcs = this.dsource.ArcLabelsOut(elem); - while(arcs.hasMoreElements()) { - var arc = arcs.getNext(); - var targets = this.dsource.GetTargets(elem, arc, true); - while (targets.hasMoreElements()) { - var target = targets.getNext(); - this.dsource.Unassert(elem, arc, target, true); - } - } - this.RDFC.RemoveElement(elem, false); - } - this.RDFC.RemoveElement(res, false); - } else { + var elems = this.RDFC.GetElements(); + while(elems.hasMoreElements()) { + var elem = elems.getNext(); + if(this.RDFCUtils.IsContainer(this.dsource, elem)) { + this.remove_recursive(elem.QueryInterface(Components.interfaces.nsIRDFResource).Value); + this.RDFC.Init(this.dsource, res); + } + var arcs = this.dsource.ArcLabelsOut(elem); + while(arcs.hasMoreElements()) { + var arc = arcs.getNext(); + var targets = this.dsource.GetTargets(elem, arc, true); + while (targets.hasMoreElements()) { + var target = targets.getNext(); + this.dsource.Unassert(elem, arc, target, true); + } + } + this.RDFC.RemoveElement(elem, false); + } + this.RDFC.RemoveElement(res, false); + } else { jslibError(null, "RDFContainer is no longer valid!\n", "NS_ERROR_UNEXPECTED", JS_RDFCONTAINER_FILE+":remove"); - return null; - } + return null; + } }; RDFContainer.prototype.remove = function(aDeep) { if(this.isValid()) { - if(this.parent != null) { - var parentres = this.RDF.GetResource(this.parent); - this.RDFC.Init(this.dsource, parentres); - } + if(this.parent != null) { + var parentres = this.RDF.GetResource(this.parent); + this.RDFC.Init(this.dsource, parentres); + } if(aDeep) { this.remove_recursive(this.subject); } - var arcs = this.dsource.ArcLabelsOut(this.resource); - while(arcs.hasMoreElements()) { - var arc = arcs.getNext(); - var targets = this.dsource.GetTargets(this.resource, arc, true); - while (targets.hasMoreElements()) { - var target = targets.getNext(); - this.dsource.Unassert(this.resource, arc, target, true); - } - } + var arcs = this.dsource.ArcLabelsOut(this.resource); + while(arcs.hasMoreElements()) { + var arc = arcs.getNext(); + var targets = this.dsource.GetTargets(this.resource, arc, true); + while (targets.hasMoreElements()) { + var target = targets.getNext(); + this.dsource.Unassert(this.resource, arc, target, true); + } + } - if(this.parent != null) { - this.RDFC.RemoveElement(this.resource, false); - } + if(this.parent != null) { + this.RDFC.RemoveElement(this.resource, false); + } this.setValid(false); - } else { + } else { jslibError(null, "RDFContainer is no longer valid!\n", "NS_ERROR_UNEXPECTED", JS_RDFCONTAINER_FILE+":remove"); - return null; - } + return null; + } }; -jslib_debug('*** load: '+JS_RDFCONTAINER_FILE+' OK'); +jslibDebug('*** load: '+JS_RDFCONTAINER_FILE+' OK'); } // END BLOCK JS_LIB_LOADED CHECK else { - dump("JS_RDF library not loaded:\n" + + jslibPrint("JS_RDF library not loaded:\n" + " \tTo load use: chrome://jslib/content/jslib.js\n" + " \tThen: include('chrome://jslib/content/rdf/rdf.js');\n\n"); } diff --git a/calendar/resources/content/jslib/rdf/rdfFile.js b/calendar/resources/content/jslib/rdf/rdfFile.js index f3d75fcb9306..ee395ba7c9b1 100644 --- a/calendar/resources/content/jslib/rdf/rdfFile.js +++ b/calendar/resources/content/jslib/rdf/rdfFile.js @@ -38,12 +38,12 @@ const JS_RDFFILE_FLAG_SYNC = 1; // load RDF source synchronously const JS_RDFFILE_FLAG_DONT_CREATE = 2; // don't create RDF file (RDFFile only) const JS_RDFFILE_FILE = "rdfFile.js"; -function RDFFile(aPath, aFlags) { +function RDFFile(aPath, aFlags, aNameSpace, aID) +{ this.created = false; - if(aPath) { - this._file_init(aPath, aFlags); - } + if(aPath) + this._file_init(aPath, aFlags, aNameSpace, aID); } RDFFile.prototype = new RDF; @@ -56,23 +56,22 @@ RDFFile.prototype._file_init = function (aPath, aFlags, aNameSpace, aID) { if(aID == null) { aID = "JSLIB"; } - // Ensure we have a base RDF file to work with var rdf_file = new File(aPath); if (!rdf_file.exists() && !(aFlags & JS_RDFFILE_FLAG_DONT_CREATE)) { - dump("here!\n"); + if (rdf_file.open("w") != JS_FILE_OK) { return; } - var filestr = + var filestr = '\n' + '\n' + '\n'; - + jslibPrint("here4!\n"); if (rdf_file.write(filestr) != JS_FILE_OK) { rdf_file.close(); return; @@ -92,14 +91,14 @@ RDFFile.prototype._file_init = function (aPath, aFlags, aNameSpace, aID) { this._rdf_init(uri.spec, aFlags); }; -jslib_debug('*** load: '+JS_RDFFILE_FILE+' OK'); +jslibDebug('*** load: '+JS_RDFFILE_FILE+' OK'); } // END BLOCK JS_LIB_LOADED CHECK // If jslib base library is not loaded, dump this error. else { - dump("JS_RDFFILE library not loaded:\n" + + dump("JS_RDFFILE library not loaded:\n" + " \tTo load use: chrome://jslib/content/jslib.js\n" + " \tThen: include('chrome://jslib/content/rdf/rdfFile.js');\n\n"); } diff --git a/calendar/resources/content/jslib/rdf/rdfResource.js b/calendar/resources/content/jslib/rdf/rdfResource.js index c3fce78fb1d6..a84db9cd13af 100644 --- a/calendar/resources/content/jslib/rdf/rdfResource.js +++ b/calendar/resources/content/jslib/rdf/rdfResource.js @@ -24,27 +24,27 @@ Martin Kutschker (polishing) if(typeof(JS_LIB_LOADED)=='boolean') { - // test to make sure rdfBase base class is loaded - if(typeof(JS_RDFBASE_LOADED)!='boolean') + // test to make sure rdfBase base class is loaded + if(typeof(JS_RDFBASE_LOADED)!='boolean') include(JS_LIB_PATH+'rdf/rdfBase.js'); - const JS_RDFRESOURCE_LOADED = true; - const JS_RDFRESOURCE_FILE = "rdfResource.js"; + const JS_RDFRESOURCE_LOADED = true; + const JS_RDFRESOURCE_FILE = "rdfResource.js"; - function RDFResource(aType, aPath, aParentPath, aDatasource) { + function RDFResource(aType, aPath, aParentPath, aDatasource) { if(aDatasource) { - this._resource_init(aType, aPath, aParentPath, aDatasource); + this._resource_init(aType, aPath, aParentPath, aDatasource); } - } + } - RDFResource.prototype = new RDFBase; + RDFResource.prototype = new RDFBase; - RDFResource.prototype.type = null; - RDFResource.prototype.parent = null; - RDFResource.prototype.resource = null; - RDFResource.prototype.subject = null; + RDFResource.prototype.type = null; + RDFResource.prototype.parent = null; + RDFResource.prototype.resource = null; + RDFResource.prototype.subject = null; - RDFResource.prototype._resource_init = function(aType, aPath, aParentPath, aDatasource) { + RDFResource.prototype._resource_init = function(aType, aPath, aParentPath, aDatasource) { this.type = aType; this.parent = aParentPath; this.subject = aPath; @@ -52,108 +52,173 @@ if(typeof(JS_LIB_LOADED)=='boolean') this._base_init(aDatasource); if(this.resource) { - this.setValid(true); + this.setValid(true); } - }; + }; - RDFResource.prototype.getResource = function() { + RDFResource.prototype.getResource = function() { return this.resource; - }; + }; - RDFResource.prototype.getSubject = function() { + RDFResource.prototype.getSubject = function() { return this.subject; - }; + }; - RDFResource.prototype.makeSeq = function(aSeq) { + RDFResource.prototype.makeSeq = function(aSeq) { return this.makeContainer("seq"); - }; + }; - RDFResource.prototype.makeBag = function(aBag) { + RDFResource.prototype.makeBag = function(aBag) { return this.makeContainer("bag"); - }; + }; - RDFResource.prototype.makeAlt = function(aAlt) { + RDFResource.prototype.makeAlt = function(aAlt) { return this.makeContainer("alt"); - }; + }; - RDFResource.prototype.makeContainer = function(aType) { + RDFResource.prototype.makeContainer = function(aType) { this.RDFC.Init(this.dsource, this.resource ); if(aType == "bag") { - this.RDFCUtils.MakeBag(this.dsource, this.resource); + this.RDFCUtils.MakeBag(this.dsource, this.resource); } else if(aType == "alt") { - this.RDFCUtils.MakeAlt(this.dsource, this.resource); + this.RDFCUtils.MakeAlt(this.dsource, this.resource); } else { - this.RDFCUtils.MakeSeq(this.dsource, this.resource); + this.RDFCUtils.MakeSeq(this.dsource, this.resource); } - + jslibPrint("* made cont ...\n"); return new RDFContainer(aType, this.resource_path+":"+aContainer, this.parent, this.dsource); this.setValid(false); - }; + }; - RDFResource.prototype.setAttribute = function(aName, aValue) - { + RDFResource.prototype.setAttribute = function(aName, aValue) + { if(this.isValid()) { - var oldvalue = this.getAttribute(aName); + var oldvalue = this.getAttribute(aName); - if(oldvalue) { + if(oldvalue) { this.dsource.Change(this.resource, this.RDF.GetResource(aName), this.RDF.GetLiteral(oldvalue), this.RDF.GetLiteral(aValue) ); - } else { + jslibPrint("\n Changing old value in "+this.subject+"\n"); + } else { this.dsource.Assert(this.resource, this.RDF.GetResource(aName), this.RDF.GetLiteral(aValue), true ); - } - return true; + jslibPrint("\n Adding a new value in "+this.subject+"\n"); + } + return true; } else { - return false; + return false; } - }; + }; - RDFResource.prototype.getAttribute = function(aName) - { + RDFResource.prototype.getAttribute = function(aName) + { if(this.isValid()) { - var itemRes = this.RDF.GetResource(aName); - if (!itemRes) return null; - - var target = this.dsource.GetTarget(this.resource, itemRes, true); - if (target) target = target.QueryInterface(Components.interfaces.nsIRDFLiteral); - if (!target) return null; - return target.Value; + var itemRes = this.RDF.GetResource(aName); + if (!itemRes) { return null; } + var target = this.dsource.GetTarget(this.resource, itemRes, true); + if (target) target = target.QueryInterface(Components.interfaces.nsIRDFLiteral); + if (!target) { return null; } + return target.Value; } else { - jslibError(null, "RDFResource is no longer valid!\n", "NS_ERROR_UNEXPECTED", - JS_RDFRESOURCE_FILE+":getAttribute"); - return null; + jslibError(null, "RDFResource is no longer valid!\n", "NS_ERROR_UNEXPECTED", + JS_RDFRESOURCE_FILE+":getAttribute"); + return null; } - }; + }; - RDFResource.prototype.removeAttribute = function(aName) - { + RDFResource.prototype.getContainer = function(aName,aType) + { if(this.isValid()) { - var itemRes = this.RDF.GetResource(aName, true); - var target = this.dsource.GetTarget(this.resource, itemRes, true); - this.dsource.Unassert(this.resource, itemRes, target); + var itemRes = this.RDF.GetResource(aName); + if (!itemRes) { return null; } + var target = this.dsource.GetTarget(this.resource, itemRes, true); + if (target) target = target.QueryInterface(Components.interfaces.nsIRDFResource); + if (!target) { return null; } + if(!aType) aType = "bag"; + return new RDFContainer(aType, target.Value, null, this.dsource); } else { - jslibError(null, "RDFResource is no longer valid!\n", "NS_ERROR_UNEXPECTED", - JS_RDFRESOURCE_FILE+":removeAttribute"); - return null; + jslibError(null, "RDFResource is no longer valid!\n", "NS_ERROR_UNEXPECTED", + JS_RDFRESOURCE_FILE+":getAttribute"); + return null; } - }; + }; - RDFResource.prototype.setAllAttributes = function(aList) - { - var length = 0; - try { - length = aList.length; - } catch(e) { - return false; - } + RDFResource.prototype.addContainer = function(aName,aType) + { + if(this.isValid()) { + //var oldvalue = this.getContainer(aName); + var newC = this.getAnonymousContainer(aType); + this.dsource.Assert( this.resource,this.RDF.GetResource(aName), newC.getResource(), true ); + jslibPrint("\n Adding a new value in "+this.subject+"\n"); + return newC; + } else { + jslibPrint("\n cudnt get anon container\n"); + return null; + } + }; + + RDFResource.prototype.getAssociationContainers = function(aName) + { + if(this.isValid()) { + var list = new Array(); + var arcs = this.dsource.ArcLabelsIn(this.resource); + while(arcs.hasMoreElements()) { + var arc = arcs.getNext(); + arc = arc.QueryInterface(Components.interfaces.nsIRDFResource); + jslibDebug("Got arc " +arc.Value); + if(!this.RDFCUtils.IsOrdinalProperty(arc)) { + continue; + } + var targets = this.dsource.GetSources(arc, this.resource, true); + var itemRes = this.RDF.GetResource(aName); + while (targets.hasMoreElements()) { + var target = targets.getNext(); + target = target.QueryInterface(Components.interfaces.nsIRDFResource); + if(this.RDFCUtils.IsContainer(this.dsource,target)) { + if(this.dsource.hasArcIn( target, itemRes)) { + target = new RDFContainer(null, target.Value, null, this.dsource); + list.push(target); + } + } + } + } + return list; + } else { + jslibError(null, "RDFResource is no longer valid!\n", "NS_ERROR_UNEXPECTED", + JS_RDFRESOURCE_FILE+":getAttribute"); + return null; + } + }; + + RDFResource.prototype.removeAttribute = function(aName) + { if(this.isValid()) { - var arcs = this.dsource.ArcLabelsOut(this.resource); - while(arcs.hasMoreElements()) { + var itemRes = this.RDF.GetResource(aName, true); + var target = this.dsource.GetTarget(this.resource, itemRes, true); + this.dsource.Unassert(this.resource, itemRes, target); + } else { + jslibError(null, "RDFResource is no longer valid!\n", "NS_ERROR_UNEXPECTED", + JS_RDFRESOURCE_FILE+":removeAttribute"); + return null; + } + }; + + RDFResource.prototype.setAllAttributes = function(aList) + { + var length = 0; + try { + length = aList.length; + } catch(e) { + return false; + } + if(this.isValid()) { + var arcs = this.dsource.ArcLabelsOut(this.resource); + while(arcs.hasMoreElements()) { var arc = arcs.getNext(); arc = arc.QueryInterface(Components.interfaces.nsIRDFResource); var obj = new Object; @@ -161,22 +226,22 @@ if(typeof(JS_LIB_LOADED)=='boolean') obj.name = l[l.length-1]; var targets = this.dsource.GetTargets(this.resource, arc, true); while (targets.hasMoreElements()) { - var target = targets.getNext(); - this.dsource.Unassert(this.resource, arc, target, true); + var target = targets.getNext(); + this.dsource.Unassert(this.resource, arc, target, true); } - } - for(var i=0; i