From 3a754133dbc138390503341fd2e9beba3e43aa4b Mon Sep 17 00:00:00 2001 From: Jose Antonio Marquez Date: Fri, 27 Jan 2012 12:05:17 -0800 Subject: Merged old FileIO --- js/io/system/config.xml | 6 - js/io/system/coreioapi.js | 819 +++++++++++++++++++++++++++++++++++++++++++++ js/io/system/fileio.js | 0 js/io/system/filesystem.js | 78 ++--- js/io/system/projectio.js | 0 js/io/system/shellapi.js | 806 -------------------------------------------- 6 files changed, 854 insertions(+), 855 deletions(-) delete mode 100644 js/io/system/config.xml create mode 100755 js/io/system/coreioapi.js mode change 100644 => 100755 js/io/system/fileio.js mode change 100644 => 100755 js/io/system/filesystem.js mode change 100644 => 100755 js/io/system/projectio.js delete mode 100644 js/io/system/shellapi.js (limited to 'js/io/system') diff --git a/js/io/system/config.xml b/js/io/system/config.xml deleted file mode 100644 index 4660d647..00000000 --- a/js/io/system/config.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/js/io/system/coreioapi.js b/js/io/system/coreioapi.js new file mode 100755 index 00000000..c920d8cd --- /dev/null +++ b/js/io/system/coreioapi.js @@ -0,0 +1,819 @@ +/* +This file contains proprietary software owned by Motorola Mobility, Inc.
+No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
+(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. +
*/ + +/* ///////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// +NOTES: +These methods should only be access through the file and project IO classes. +//////////////////////////////////////////////////////////////////////// +///////////////////////////////////////////////////////////////////// */ +var Montage = require("montage/core/core").Montage, + Component = require("montage/ui/component").Component; +//////////////////////////////////////////////////////////////////////// +//Exporting as Project I/O +exports.CoreIoApi = Montage.create(Component, { + //////////////////////////////////////////////////////////////////// + // private property containing the file service URL to use for all file IO calls + _fileServiceURL: { + enumerable: false, + value: "http://localhost:16380/file" + }, + //////////////////////////////////////////////////////////////////// + // private property containing the directory service URL to use for all file IO calls + _directoryServiceURL: { + enumerable: false, + value: "http://localhost:16380/directory" + }, + //////////////////////////////////////////////////////////////////// + // private helper to parse URIs and append them to the service URL + _prepareServiceURL: { + enumerable: false, + value: function(serviceURL, path) { + var urlOut = path.replace(/\\/g,"/"); + urlOut = urlOut.replace(/:/g,""); + urlOut = encodeURI(urlOut); + //add leading / if not already there + if((urlOut.length > 0) && (urlOut.charAt(0) !== "/")){ + urlOut = "/" + urlOut; + } + //remove extra / at the end + if((urlOut.length > 1) && (urlOut.charAt(urlOut.length - 1) === "/")){ + urlOut = urlOut.substring(0, (urlOut.length - 1)); + } + + return serviceURL + urlOut; + } + }, + //////////////////////////////////////////////////////////////////// + // Checks for the existence of a file + // Parameters: + // the file parameter must contain the following properties + // uri: string value containing the full file path/URI i.e. "c:/foo/bar.html" + // + // Return values: + // returns an object with two properties + // success: boolean indicating if the call succeeded or failed + // status: int indicating the request HTTP status code + // 204 - the file exists + // 404 - the file does not exist + // 500 - unknown server error occurred + fileExists: { + enumerable: false, + value: function(file) { + // + var retValue = { success:null, status:null }; + // + if(file && file.uri && file.uri.length) { + try { + var serviceURL = this._prepareServiceURL(this._fileServiceURL, file.uri), + xhr = new XMLHttpRequest(); + // + xhr.open("GET", serviceURL, false); + xhr.setRequestHeader("check-existence-only", "true"); + xhr.send(); + // + if (xhr.readyState === 4) { + retValue.status = xhr.status; + retValue.success = true; + } + } + catch(error) { + xhr = null; + retValue.success = false; + } + } + // + return retValue; + } + }, + //////////////////////////////////////////////////////////////////// + // Creates a new file at the specified path + // Parameters: + // the file parameter must contain the following properties + // uri: string value containing the full file path/URI i.e. "c:/foo/bar.html" + // it can optionally contain the following properties + // contentType: string with the content type i.e. "text/plain". "text/plain" is assumed if this property is not specified + // contents: string containing the file contents. These contents will be saved to the new file. + // + // Return values: + // returns an object with two properties + // success: boolean indicating if the call succeeded or failed + // status: int indicating the request HTTP status code + // 201 - the file was created and contents were saved if they were passed + // 400 - the file already exists and could not be created + // 500 - unknown server error occurred + createFile: { + enumerable: false, + value: function(file) { + var retValue = { success:null, status:null }; + if(file && file.uri && file.uri.length) { + try { + var serviceURL = this._prepareServiceURL(this._fileServiceURL, file.uri), + xhr = new XMLHttpRequest(); + // + xhr.open("POST", serviceURL, false); + if(file.contentType && file.contentType.length) + xhr.setRequestHeader("Content-Type", file.contentType); + else + xhr.setRequestHeader("Content-Type", "text/plain"); + + if(file.contents && file.contents.length) + xhr.send(file.contents); + else + xhr.send(); + + if (xhr.readyState === 4) { + retValue.status = xhr.status; + retValue.success = true; + } + } + catch(error) { + xhr = null; + retValue.success = false; + } + } + + return retValue; + } + }, + //////////////////////////////////////////////////////////////////// + // Save contents into an existing file at the specified path + // Parameters: + // the file parameter must contain the following properties + // uri: string value containing the full file path/URI i.e. "c:/foo/bar.html" + // it can optionally contain the following properties + // contentType: string with the content type i.e. "text/plain". "text/plain" is assumed if this property is not specified + // contents: string containing the file contents. These contents will be saved to the new file. + // + // Return values: + // returns an object with two properties + // success: boolean indicating if the call succeeded or failed + // status: int indicating the request HTTP status code + // 204 - the file was saved + // 404 - the file specified does not exist + // 500 - unknown server error occurred + updateFile: { + enumerable: false, + value: function(file) { + var retValue = { success:null, status:null }; + if(file && file.uri && file.uri.length && file.contents && file.contents.length) { + try { + var serviceURL = this._prepareServiceURL(this._fileServiceURL, file.uri), + xhr = new XMLHttpRequest(); + // + xhr.open("PUT", serviceURL, false); + if(file.contentType && file.contentType.length) + xhr.setRequestHeader("Content-Type", file.contentType); + else + xhr.setRequestHeader("Content-Type", "text/plain"); + + xhr.send(file.contents); + + if (xhr.readyState === 4) { + retValue.status = xhr.status; + retValue.success = true; + } + } + catch(error) { + xhr = null; + retValue.success = false; + } + } + + return retValue; + } + }, + //////////////////////////////////////////////////////////////////// + // Copies a file from one location to another + // Parameters: + // the file parameter must contain the following properties + // sourceUri: string value containing the full file path/URI to copy from i.e. "c:/foo/bar.html" + // destUri: string containing the full path/URI to copy to + // it can optionally contain the following properties + // overwriteDestination: bool indicating whether it is okay to overwrite the file specified at destUri if it already exists + // + // Return values: + // returns an object with two properties + // success: boolean indicating if the call succeeded or failed + // status: int indicating the request HTTP status code + // 204 - the file was copied + // 404 - the file specified in sourceUri does not exist + // 500 - unknown server error occurred + copyFile: { + enumerable: false, + value: function(file) { + var retValue = { success:null, status:null }; + if(file && file.sourceUri && file.sourceUri.length && file.destUri && file.destUri.length) { + try { + var serviceURL = this._prepareServiceURL(this._fileServiceURL, file.destUri), + xhr = new XMLHttpRequest(); + // + xhr.open("PUT", serviceURL, false); + xhr.setRequestHeader("sourceURI", file.sourceUri); + // + if(file.overwriteDestination && file.overwriteDestination === true) { + xhr.setRequestHeader("overwrite-destination", "true"); + } + // + xhr.send(); + // + if (xhr.readyState === 4) { + retValue.status = xhr.status; + retValue.success = true; + } + } + catch(error) { + xhr = null; + retValue.success = false; + } + } + // + return retValue; + } + }, + //////////////////////////////////////////////////////////////////// + // Moves a file from one location to another + // Parameters: + // the file parameter must contain the following properties + // sourceUri: string value containing the full file path/URI to copy from i.e. "c:/foo/bar.html" + // destUri: string containing the full path/URI to copy to + // it can optionally contain the following properties + // overwriteDestination: bool indicating whether it is okay to overwrite the file specified at destUri if it already exists + // + // Return values: + // returns an object with two properties + // success: boolean indicating if the call succeeded or failed + // status: int indicating the request HTTP status code + // 204 - the file was moved + // 404 - the file specified in sourceUri does not exist + // 500 - unknown server error occurred + moveFile: { + enumerable: false, + value: function(file) { + var retValue = { success:null, status:null }; + if(file && file.sourceUri && file.sourceUri.length && file.destUri && file.destUri.length) { + try { + var serviceURL = this._prepareServiceURL(this._fileServiceURL, file.destUri), + xhr = new XMLHttpRequest(); + // + xhr.open("PUT", serviceURL, false); + xhr.setRequestHeader("sourceURI", file.sourceUri); + xhr.setRequestHeader("delete-source", "true"); + // + if(file.overwriteDestination && file.overwriteDestination === true) { + xhr.setRequestHeader("overwrite-destination", "true"); + } + // + xhr.send(); + // + if (xhr.readyState === 4) { + retValue.status = xhr.status; + retValue.success = true; + } + } + catch(error) { + xhr = null; + retValue.success = false; + } + } + // + return retValue; + } + }, + //////////////////////////////////////////////////////////////////// + // Deletes an existing file + // Parameters: + // the file parameter must contain the following properties + // uri: string value containing the full file path/URI i.e. "c:/foo/bar.html" + // + // Return values: + // returns an object with two properties + // success: boolean indicating if the call succeeded or failed + // status: int indicating the request HTTP status code + // 204 - the file was deleted + // 404 - the file does not exist + // 500 - unknown server error occurred + deleteFile: { + enumerable: false, + value: function(file) { + var retValue = { success:null, status:null }; + if(file && file.uri && file.uri.length) { + try { + var serviceURL = this._prepareServiceURL(this._fileServiceURL, file.uri), + xhr = new XMLHttpRequest(); + // + xhr.open("DELETE", serviceURL, false); + xhr.send(); + // + if (xhr.readyState === 4) { + retValue.status = xhr.status; + retValue.success = true; + } + } + catch(error) { + xhr = null; + retValue.success = false; + } + } + // + return retValue; + } + }, + //////////////////////////////////////////////////////////////////// + // Reads an existing file + // Parameters: + // the file parameter must contain the following properties + // uri: string value containing the full file path/URI i.e. "c:/foo/bar.html" + // + // Return values: + // returns an object with two properties + // success: boolean indicating if the call succeeded or failed + // content: string containing the file contents + // status: int indicating the request HTTP status code + // 200 - the file was read and its contents were returned + // 404 - the file does not exist + // 500 - unknown server error occurred + openFile: { + enumerable: false, + value: function(file) { + // + var retValue = { success:null, content:null, status:null}; + // + if(file && file.uri && file.uri.length) { + try { + var serviceURL = this._prepareServiceURL(this._fileServiceURL, file.uri), + xhr = new XMLHttpRequest(); + // + xhr.open("GET", serviceURL, false); + xhr.send(); + // + if (xhr.readyState === 4) { + retValue.status = xhr.status; + if(xhr.status == 200) { + retValue.content = xhr.responseText; + } + retValue.success = true; + } + } + catch(error) { + xhr = null; + retValue.success = false; + } + } + // + return retValue; + } + }, + //////////////////////////////////////////////////////////////////// + // Create a new directory/folder + // Parameters: + // the dir parameter must contain the following properties + // uri: string value containing the full file path/URI i.e. "c:/dir/subdir" + // + // Return values: + // returns an object with two properties + // success: boolean indicating if the call succeeded or failed + // status: int indicating the request HTTP status code + // 201 - the directory was created + // 400 - the directory was unable to be created + // 500 - unknown server error occurred + createDirectory: { + enumerable: false, + value: function(dir) { + var retValue = { success:null, status:null }; + if(dir && dir.uri && dir.uri.length) { + try { + var serviceURL = this._prepareServiceURL(this._directoryServiceURL, dir.uri), + xhr = new XMLHttpRequest(); + // + xhr.open("POST", serviceURL, false); + xhr.send(); + // + if (xhr.readyState === 4) { + retValue.status = xhr.status; + retValue.success = true; + } + } + catch(error) { + xhr = null; + retValue.success = false; + } + } + // + return retValue; + } + }, + //////////////////////////////////////////////////////////////////// + // Delete a directory/folder + // Parameters: + // the dir parameter must contain the following properties + // uri: string value containing the full file path/URI i.e. "c:/dir/subdir" + // + // Return values: + // returns an object with two properties + // success: boolean indicating if the call succeeded or failed + // status: int indicating the request HTTP status code + // 204 - the directory was deleted + // 404 - the directory does not exist + // 500 - unknown server error occurred + deleteDirectory: { + enumerable: false, + value: function(dir) { + var retValue = { success:null, status:null }; + if(dir && dir.uri && dir.uri.length) { + try { + var serviceURL = this._prepareServiceURL(this._directoryServiceURL, dir.uri), + xhr = new XMLHttpRequest(); + // + xhr.open("DELETE", serviceURL, false); + xhr.send(); + // + if (xhr.readyState === 4) { + retValue.status = xhr.status; + retValue.success = true; + } + } + catch(error) { + xhr = null; + retValue.success = false; + } + } + // + return retValue; + } + }, + //////////////////////////////////////////////////////////////////// + // List the contents of a directory/folder + // Parameters: + // the dir parameter must contain the following properties + // uri: string value containing the full file path/URI i.e. "c:/dir/subdir" + // recursive: boolean true to list contents of all subdirectories as well. if this is not specified "false" is the default. + // returnType: string "all", "files", "directories". Specifies the types to return. if this is not specified, the default is "all" + // fileFilters: string containing the file extensions to include in the return listing. This list is semi-colon separated. i.e. "xml;html" + // + // Return values: + // returns an object with two properties + // success: boolean indicating if the call succeeded or failed + // content: string containing the JSON structure of the file contents + // status: int indicating the request HTTP status code + // 200 - the directory was read and the content JSON string was returned in dir.content + // 404 - the directory does not exist + // 500 - unknown server error occurred + getDirectoryContents: { + enumerable: false, + value: function(dir) { + var retValue = { success:null, content:null, status:null }; + if(!!dir && (typeof dir.uri !== "undefined") && (dir.uri !== null) ) { + try { + var serviceURL = this._prepareServiceURL(this._directoryServiceURL, dir.uri), + xhr = new XMLHttpRequest(); + // + xhr.open("GET", serviceURL, false); + // + if(dir.recursive) { + xhr.setRequestHeader("recursive", dir.recursive.toString()); + } + + // + if (dir.fileFilters) { + xhr.setRequestHeader("file-filters", dir.fileFilters.toString()); + } + // + + // + if(dir.returnType) { + xhr.setRequestHeader("return-type", dir.returnType.toString()); + } + // + xhr.send(); + // + if (xhr.readyState === 4) { + retValue.status = xhr.status; + if(xhr.status == 200) { + retValue.content = xhr.responseText; + } + retValue.success = true; + } + } + catch(error) { + xhr = null; + retValue.success = false; + } + } + // + return retValue; + } + }, + //////////////////////////////////////////////////////////////////// + // Check if a directory/folder exists + // Parameters: + // the dir parameter must contain the following properties + // uri: string value containing the full file path/URI i.e. "c:/dir/subdir" + // + // Return values: + // returns an object with two properties + // success: boolean indicating if the call succeeded or failed + // status: int indicating the request HTTP status code + // 204 - the directory exists + // 404 - the directory does not exist + // 500 - unknown server error occurred + directoryExists: { + enumerable: false, + value: function(dir) { + var retValue = { success:null, content:null, status:null }; + if(dir && dir.uri && dir.uri.length) { + try { + var serviceURL = this._prepareServiceURL(this._directoryServiceURL, dir.uri), + xhr = new XMLHttpRequest(); + // + xhr.open("GET", serviceURL, false); + xhr.setRequestHeader("check-existence-only", "true"); + // + xhr.send(); + // + if (xhr.readyState === 4) { + retValue.status = xhr.status; + retValue.success = true; + } + } + catch(error) { + xhr = null; + retValue.success = false; + } + } + // + return retValue; + } + }, + //////////////////////////////////////////////////////////////////// + // copies an existing directory/folder to a new location + // Parameters: + // the dir parameter must contain the following properties + // sourceUri: string value containing the full file path/URI to copy from i.e. "c:/foo/bar" + // destUri: string containing the full path/URI to copy to + // + // Return values: + // returns an object with two properties + // success: boolean indicating if the call succeeded or failed + // status: int indicating the request HTTP status code + // 204 - the operation succeeded + // 400 - the operation could not be performed because the destUri existed + // 404 - the source directory does not exist + // 500 - unknown server error occurred + copyDirectory: { + enumerable: false, + value: function(dir) { + return this._copyMoveDirHelper(dir.sourceUri, dir.destUri, "copy"); + } + }, + //////////////////////////////////////////////////////////////////// + // Moves an existing directory/folder to a new location + // Parameters: + // the dir parameter must contain the following properties + // sourceUri: string value containing the full file path/URI to copy from i.e. "c:/foo/bar" + // destUri: string containing the full path/URI to move to + // + // Return values: + // returns an object with two properties + // success: boolean indicating if the call succeeded or failed + // status: int indicating the request HTTP status code + // 204 - the operation succeeded + // 400 - the operation could not be performed because the destUri existed + // 404 - the source directory does not exist + // 500 - unknown server error occurred + moveDirectory: { + enumerable: false, + value: function(dir) { + return this._copyMoveDirHelper(dir.sourceUri, dir.destUri, "move"); + } + }, + //////////////////////////////////////////////////////////////////// + // Moves an existing directory/folder to a new location + // Parameters: + // the dir parameter must contain the following properties + // sourceUri: string value containing the full file path/URI to copy from i.e. "c:/foo/bar" + // newDirectoryName: string containing the new name of the directory i.e. "bar2" + // + // Return values: + // returns an object with two properties + // success: boolean indicating if the call succeeded or failed + // status: int indicating the request HTTP status code + // 204 - the operation succeeded + // 400 - the operation could not be performed because the destUri existed + // 404 - the source directory does not exist + // 500 - unknown server error occurred + renameDirectory: { + enumerable: false, + value: function(dir) { + return this._copyMoveDirHelper(dir.sourceUri, dir.sourceUri + "/" + dir.newDirectoryName, "move"); + } + }, + //////////////////////////////////////////////////////////////////// + //Helper that is used by copyDirectory, moveDirectory, renameDirectory + _copyMoveDirHelper: { + enumerable: false, + value: function(sourceDir, destDir, operation) { + var retValue = {}; + if(sourceDir && sourceDir.length && destDir && destDir.length && operation && operation.length) { + try { + var serviceURL = this._prepareServiceURL(this._directoryServiceURL, destDir), + xhr = new XMLHttpRequest(); + // + xhr.open("PUT", serviceURL, false); + xhr.setRequestHeader("sourceURI", sourceDir); + xhr.setRequestHeader("operation", operation); + // + xhr.send(); + // + if (xhr.readyState === 4) { + retValue.status = xhr.status; + retValue.success = true; + } + } + catch(error) { + xhr = null; + retValue.success = false; + } + } + // + return retValue; + } + }, + //////////////////////////////////////////////////////////////////// + // Checks if the file has been modified since it was last queried + // Parameters: + // the file parameter must contain the following properties + // uri: string value containing the full file path/URI i.e. "c:/foo/bar.html" + // recursive: boolean true to check the modified date of all subdirectories as well. if this is not specified "false" is the default. + // + // Return values: + // returns an object with two properties + // success: boolean indicating if the call succeeded or failed + // status: int indicating the request HTTP status code + // 200 - the file has been modified + // 304 - the file has not been modified + // 404 - the file does not exist + // 500 - unknown server error occurred + + isFileModified:{ + enumerable:true, + writable:false, + value:function(file, lastQueriedTimestamp){ + var retValue = { success:null, status:null }; + if(file && file.uri && (typeof lastQueriedTimestamp !== "undefined")) { + try { + var serviceURL = this._prepareServiceURL(this._fileServiceURL, file.uri), + xhr = new XMLHttpRequest(); + xhr.open("GET", serviceURL, false); + xhr.setRequestHeader("if-modified-since", lastQueriedTimestamp); + xhr.send(); + if (xhr.readyState === 4) { + retValue.status = xhr.status; + retValue.success = true; + } + } + catch(error) { + xhr = null; + retValue.success = false; + } + } + return retValue; + } + }, + + //////////////////////////////////////////////////////////////////// + // Checks if the directory content has been modified since it was last queried + // Parameters: + // the file parameter must contain the following properties + // uri: string value containing the full directory path/URI i.e. "c:/foo/bar.html" + // recursive: boolean true to check the modified date of all subdirectories as well. if this is not specified "false" is the default. + // + // Return values: + // returns an object with two properties + // success: boolean indicating if the call succeeded or failed + // status: int indicating the request HTTP status code + // 200 - the file has been modified + // 304 - the file has not been modified + // 404 - the file does not exist + // 500 - unknown server error occurred + + isDirectoryModified:{ + enumerable:true, + writable:false, + value:function(file, lastQueriedTimestamp){ + var retValue = { success:null, status:null }; + if(file && file.uri && (typeof lastQueriedTimestamp !== "undefined")) { + try { + var serviceURL = this._prepareServiceURL(this._directoryServiceURL, file.uri), + xhr = new XMLHttpRequest(); + xhr.open("GET", serviceURL, false); + xhr.setRequestHeader("if-modified-since", lastQueriedTimestamp); + xhr.send(); + if (xhr.readyState === 4) { + retValue.status = xhr.status; + retValue.success = true; + } + } + catch(error) { + xhr = null; + retValue.success = false; + } + } + return retValue; + } + }, + + //////////////////////////////////////////////////////////////////// + // Checks if the file is writable + // Parameters: + // the file parameter must contain the following properties + // uri: string value containing the full file path/URI i.e. "c:/foo/bar.html" + // + // Return values: + // returns an object with two properties + // success: boolean indicating if the call succeeded or failed + // status: int indicating the request HTTP status code + // 204 - The file exists and response body has writable flag + // 404 - the file does not exist + // 500 - unknown server error occurred + //TODO:to be finalized + isFileWritable:{ + enumerable:true, + writable:false, + value:function(file){ + var retValue = { success:null, status:null }; + if(file && file.uri) { + try { + var serviceURL = this._prepareServiceURL(this._fileServiceURL, file.uri), + xhr = new XMLHttpRequest(); + xhr.open("GET", serviceURL, false); + xhr.setRequestHeader("get-attributes", "true"); + xhr.send(); + if (xhr.readyState === 4) { + retValue.status = xhr.status; + if(xhr.status == 200) { + retValue.content = xhr.responseText; + } + retValue.success = true; + } + } + catch(error) { + xhr = null; + retValue.success = false; + } + } + return retValue; + } + }, + + //////////////////////////////////////////////////////////////////// + // Checks if the directory is writable + // Parameters: + // the file parameter must contain the following properties + // uri: string value containing the full directory path/URI i.e. "c:/foo" + // + // Return values: + // returns an object with two properties + // success: boolean indicating if the call succeeded or failed + // status: int indicating the request HTTP status code + // 204 - The file exists and response body has writable flag + // 404 - the file does not exist + // 500 - unknown server error occurred + //TODO:to be finalized + isDirectoryWritable:{ + enumerable:true, + writable:false, + value:function(file){ + var retValue = { success:null, status:null }; + if(file && file.uri) { + try { + var serviceURL = this._prepareServiceURL(this._directoryServiceURL, file.uri), + xhr = new XMLHttpRequest(); + xhr.open("GET", serviceURL, false); + xhr.setRequestHeader("get-attributes", "true"); + xhr.send(); + if (xhr.readyState === 4) { + retValue.status = xhr.status; + if(xhr.status == 200) { + retValue.content = xhr.responseText; + } + retValue.success = true; + } + } + catch(error) { + xhr = null; + retValue.success = false; + } + } + return retValue; + } + } + + + +}); +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// \ No newline at end of file diff --git a/js/io/system/fileio.js b/js/io/system/fileio.js old mode 100644 new mode 100755 diff --git a/js/io/system/filesystem.js b/js/io/system/filesystem.js old mode 100644 new mode 100755 index 54c16a05..cd158812 --- a/js/io/system/filesystem.js +++ b/js/io/system/filesystem.js @@ -4,31 +4,23 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. */ -var FileIo = require("js/io/system/fileio").FileIo, - ProjectIo = require("js/io/system/projectio").ProjectIo, - ShellApi = require("js/io/system/shellapi").ShellApi, - ComponentsPanelBase = require("js/panels/Components/ComponentsPanelBase.reel").ComponentsPanelBase; +//////////////////////////////////////////////////////////////////////// +// +var Montage = require("montage/core/core").Montage, + FileIo = require("js/io/system/fileio").FileIo, + ProjectIo = require("js/io/system/projectio").ProjectIo, + CoreIoApi = require("js/io/system/coreioapi").CoreIoApi; //////////////////////////////////////////////////////////////////////// //Exporting as File System -exports.FileSystem = (require("montage/core/core").Montage).create(Object.prototype, { +exports.FileSystem = Montage.create(Object.prototype, { //////////////////////////////////////////////////////////////////// // - init: { - enumerable: false, - value: function () { - //Called by NinjaMain - - - - //Calling Shell API to initialize - ShellApi.init(); - } - }, + shellApiHandler :{ enumerable:true, writable:false, - value:ShellApi + value:CoreIoApi }, @@ -78,8 +70,8 @@ exports.FileSystem = (require("montage/core/core").Montage).create(Object.protot //documentManagerModule.DocumentManager.openDocument({"type": "html"}); } else { // - var file = {uri: ShellApi.openShellDialog({type: 'file', action: 'new'})}, type; - var check = ShellApi.fileExists(file); + var file = {uri: CoreIoApi.openShellDialog({type: 'file', action: 'new'})}, type; + var check = CoreIoApi.fileExists(file); @@ -117,13 +109,13 @@ exports.FileSystem = (require("montage/core/core").Montage).create(Object.protot //TODO: Improve logic //Checking for file to exist in files template folder - var templateCheck = ShellApi.fileExists({uri: window.NativeShellApp.GetKnownFolder('appsource')+'\\document-templates\\files\\template.'+type}), content; + var templateCheck = CoreIoApi.fileExists({uri: window.NativeShellApp.GetKnownFolder('appsource')+'\\document-templates\\files\\template.'+type}), content; // if (templateCheck.success) { switch (check.status) { case 204: //Template exists, so opening and getting contents to be used when creating file - content = ShellApi.openFile({uri: 'template.'+type}); + content = CoreIoApi.openFile({uri: 'template.'+type}); if (content.content) { file.content = content.content; } else { @@ -169,7 +161,7 @@ switch (type.toLowerCase()) { - var create = ShellApi.createFile(file); + var create = CoreIoApi.createFile(file); if (create.success) { switch (create.status) { case 201: @@ -239,8 +231,8 @@ switch (type.toLowerCase()) { //documentManagerModule.DocumentManager.openDocument({"type": "html"}); } else { // - var directory = {uri: ShellApi.openShellDialog({type: 'directory', action: 'new'})}; - var check = ShellApi.directoryExists(directory); + var directory = {uri: CoreIoApi.openShellDialog({type: 'directory', action: 'new'})}; + var check = CoreIoApi.directoryExists(directory); // if (check.success) { switch (check.status) { @@ -249,7 +241,7 @@ switch (type.toLowerCase()) { break; case 404: //Directory does not exists, ready to be created - var create = ShellApi.createDirectory(directory); + var create = CoreIoApi.createDirectory(directory); if (create.success) { switch (create.status) { case 201: @@ -294,7 +286,7 @@ switch (type.toLowerCase()) { enumerable: false, value: function (file) { //Checking for file to exist - var check = ShellApi.fileExists(file), createdFile = null; + var check = CoreIoApi.fileExists(file), createdFile = null; // if (check.success) { switch (check.status) { @@ -303,7 +295,7 @@ switch (type.toLowerCase()) { break; case 404: //File does not exists, ready to be created - var create = ShellApi.createFile(file); + var create = CoreIoApi.createFile(file); if (create.success) { switch (create.status) { case 201: @@ -357,7 +349,7 @@ switch (type.toLowerCase()) { //TODO: Add cloud integration } else { //Getting file URI from native prompt - uri = ShellApi.openShellDialog({type: 'file', action: 'open'}); + uri = CoreIoApi.openShellDialog({type: 'file', action: 'open'}); } } //Checking for a valid URI @@ -378,7 +370,7 @@ switch (type.toLowerCase()) { //Opening file via shell function shellOpenFile (f) { //Getting string from file - var doc = ShellApi.openFile({uri: f}), type = f.split('.'); + var doc = CoreIoApi.openFile({uri: f}), type = f.split('.'); //Splitting to get file extension type = type[type.length-1]; //TODO: Fix this HACK to generate string @@ -387,7 +379,7 @@ switch (type.toLowerCase()) { dir_str += dir[i] + '\\'; } //Starting an instance of the shell server on directory - server = ShellApi.startServer(dir_str); + server = CoreIoApi.startServer(dir_str); //Opening file in app FileIo.open(doc, type, f, server); } @@ -439,7 +431,7 @@ switch (type.toLowerCase()) { value: function (directory) { var mjs_dir = {uri: directory.uri}; mjs_dir.uri += '\\m-js'; - var mjs_check = ShellApi.directoryExists(mjs_dir); + var mjs_check = CoreIoApi.directoryExists(mjs_dir); // if (mjs_check.success) { switch (mjs_check.status) { @@ -455,7 +447,7 @@ switch (type.toLowerCase()) { //Creating m-js folder and copying contents - var mjs_folder = ShellApi.createDirectory(mjs_dir); + var mjs_folder = CoreIoApi.createDirectory(mjs_dir); if (mjs_folder.success) { switch (mjs_folder.status) { case 201: @@ -463,12 +455,12 @@ switch (type.toLowerCase()) { var temp_dir = window.NativeShellApp.GetKnownFolder('appsource')+'\\user-document-templates\\montage-application\\systemio\\new\\project\\montage'; - var mjs_deps = ShellApi.createDirectory({uri: mjs_dir.uri+'\\deps'}); + var mjs_deps = CoreIoApi.createDirectory({uri: mjs_dir.uri+'\\deps'}); //Folder created, now copying contents - var copy_lib = ShellApi.copyDirectory({sourceUri: window.NativeShellApp.GetKnownFolder('frameworksource')+'\\lib', destUri: mjs_dir.uri+'\\lib'}), - copy_deps = ShellApi.copyDirectory({sourceUri: window.NativeShellApp.GetKnownFolder('frameworksource')+'\\deps\\require', destUri: mjs_dir.uri+'\\deps\\require'}), - copy_components = ShellApi.copyDirectory({sourceUri: window.NativeShellApp.GetKnownFolder('appsource')+'\\montage-components', destUri: directory.uri+'\\montage-components'}); + var copy_lib = CoreIoApi.copyDirectory({sourceUri: window.NativeShellApp.GetKnownFolder('frameworksource')+'\\lib', destUri: mjs_dir.uri+'\\lib'}), + copy_deps = CoreIoApi.copyDirectory({sourceUri: window.NativeShellApp.GetKnownFolder('frameworksource')+'\\deps\\require', destUri: mjs_dir.uri+'\\deps\\require'}), + copy_components = CoreIoApi.copyDirectory({sourceUri: window.NativeShellApp.GetKnownFolder('appsource')+'\\montage-components', destUri: directory.uri+'\\montage-components'}); //Checking for lib operation's result if (copy_lib.success) { @@ -496,11 +488,11 @@ switch (type.toLowerCase()) { var prj_tmplt = window.NativeShellApp.GetKnownFolder('appsource')+'\\document-templates\\projects\\montage'; //TODO: Add error handling for file copying, clean up this HACK - var copy_packagemjs = ShellApi.copyFile({sourceUri: window.NativeShellApp.GetKnownFolder('frameworksource')+'\\package.json', destUri: mjs_dir.uri+'\\package.json'}), - copy_styles = ShellApi.copyFile({sourceUri: prj_tmplt+'\\styles.css', destUri: directory.uri+'\\styles.css'}), - copy_appdelegate = ShellApi.copyFile({sourceUri: prj_tmplt+'\\appdelegate.js', destUri: directory.uri+'\\appdelegate.js'}), - copy_package = ShellApi.copyFile({sourceUri: prj_tmplt+'\\package.json', destUri: directory.uri+'\\package.json'}), - copy_index = ShellApi.copyFile({sourceUri: prj_tmplt+'\\index.html', destUri: directory.uri+'\\index.html'}); + var copy_packagemjs = CoreIoApi.copyFile({sourceUri: window.NativeShellApp.GetKnownFolder('frameworksource')+'\\package.json', destUri: mjs_dir.uri+'\\package.json'}), + copy_styles = CoreIoApi.copyFile({sourceUri: prj_tmplt+'\\styles.css', destUri: directory.uri+'\\styles.css'}), + copy_appdelegate = CoreIoApi.copyFile({sourceUri: prj_tmplt+'\\appdelegate.js', destUri: directory.uri+'\\appdelegate.js'}), + copy_package = CoreIoApi.copyFile({sourceUri: prj_tmplt+'\\package.json', destUri: directory.uri+'\\package.json'}), + copy_index = CoreIoApi.copyFile({sourceUri: prj_tmplt+'\\index.html', destUri: directory.uri+'\\index.html'}); // this.openProject(directory); @@ -567,7 +559,7 @@ switch (type.toLowerCase()) { //TODO: Add cloud integration } else { //Getting file URI from native prompt - uri = ShellApi.openShellDialog({type: 'directory', action: 'open'}); + uri = CoreIoApi.openShellDialog({type: 'directory', action: 'open'}); } } //Checking for a valid URI @@ -608,7 +600,7 @@ switch (type.toLowerCase()) { //////////////////////////////////////////////////////////////////// if (f) { - var s = ShellApi.updateFile(f); + var s = CoreIoApi.updateFile(f); } else { //HACK this.saveProject(); diff --git a/js/io/system/projectio.js b/js/io/system/projectio.js old mode 100644 new mode 100755 diff --git a/js/io/system/shellapi.js b/js/io/system/shellapi.js deleted file mode 100644 index 9976dbed..00000000 --- a/js/io/system/shellapi.js +++ /dev/null @@ -1,806 +0,0 @@ -/* -This file contains proprietary software owned by Motorola Mobility, Inc.
-No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
-(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. -
*/ - -/* ///////////////////////////////////////////////////////////////////// -//////////////////////////////////////////////////////////////////////// -NOTES: All logic should be handled in the FileSystem and I/O classes - -Dialog methods on NativeShellApp -ShowFileOpenDialog(initialDir) - shows a file open dialog -initialDir is optional and if specified will cause the dialog to initially display that directory as the open location -ShowFileSaveAsDialog(initialURI) - shows a file Save As dialog -initialURI is optional and if specified will cause the dialog to initially display the directory as the default location -and the filename as the current filename. -ShowSelectDirectoryDialog(initialDir, dialogTitle) - displays a directory select/chooser dialog -intitalDir is optional and specifies the directory that should be selected/shown when the dialog opens -dialogTitle is optional and specifies the title that should appear in the dialog caption -//////////////////////////////////////////////////////////////////////// -///////////////////////////////////////////////////////////////////// */ -//Exporting as Project I/O -exports.ShellApi = (require("montage/core/core").Montage).create(require("montage/ui/component").Component, { - //////////////////////////////////////////////////////////////////// - // - init: { - enumerable: false, - value: function() { - try { - var xhr = new XMLHttpRequest(), file, directory; - // - xhr.open("GET", 'cloud/config.xml', false); - xhr.send(); - // - if (xhr.readyState === 4) { - file = xhr.responseXML.getElementsByTagName('file')[0].firstChild.nodeValue; - directory = xhr.responseXML.getElementsByTagName('directory')[0].firstChild.nodeValue; - if (file.length) - this._fileServiceURL = file; - if (directory.length) - this._directoryServiceURL = directory; - // - //console.log(file, directory); - } - } - catch(error) { - console.log(error); - } - } - }, - //////////////////////////////////////////////////////////////////// - // - openShellDialog: { - enumerable: false, - value: function(dialog) { - //Initializing return variable - var input = null; - //Checking for the type of prompt set via object - switch (dialog.type) { - case 'file': - //Checking for action the prompt will ask the user - if (dialog.action.toLowerCase() == 'open') { - //File open dialog - input = window.NativeShellApp.ShowFileOpenDialog(); - } else if (dialog.action.toLowerCase() == 'new') { - //File new dialog - input = window.NativeShellApp.ShowFileSaveAsDialog(); - } - break; - case 'directory': - //Checking for action the prompt will ask the user - if (dialog.action.toLowerCase() == 'open') { - //Directory open dialog - input = window.NativeShellApp.ShowSelectDirectoryDialog(); - } else if (dialog.action.toLowerCase() == 'new') { - //Directory new dialog - input = window.NativeShellApp.ShowSelectDirectoryDialog(); - } - break; - break; - default: - break; - } - return input; - } - }, - //////////////////////////////////////////////////////////////////// - // - startServer: { - enumerable: false, - value: function (dir) { - var server = window.NativeShellApp.StartWebServer(dir); - return server; - } - }, - //////////////////////////////////////////////////////////////////// - // private property containing the file service URL to use for all file IO calls - _fileServiceURL: { - enumerable: false, - value: "http://localhost:16380/file" //default value.. updated with base uri in config.xml - }, - //////////////////////////////////////////////////////////////////// - // private property containing the directory service URL to use for all file IO calls - _directoryServiceURL: { - enumerable: false, - value: "http://localhost:16380/directory" //default value.. updated with base uri in config.xml - }, - //////////////////////////////////////////////////////////////////// - // private helper to parse URIs and append them to the service URL - _prepareServiceURL: { - enumerable: false, - value: function(serviceURL, path) { - var urlOut = path.replace(/\\/g,"/"); - urlOut = urlOut.replace(/:/g,""); - urlOut = encodeURI(urlOut); - //add leading / if not already there - if((urlOut.length > 0) && (urlOut.charAt(0) !== "/")){ - urlOut = "/" + urlOut; - } - return serviceURL + urlOut; - } - }, - //////////////////////////////////////////////////////////////////// - // Checks for the existence of a file - // Parameters: - // the file parameter must contain the following properties - // uri: string value containing the full file path/URI i.e. "c:/foo/bar.html" - // - // Return values: - // returns an object with two properties - // success: boolean indicating if the call succeeded or failed - // status: int indicating the request HTTP status code - // 204 - the file exists - // 404 - the file does not exist - // 500 - unknown server error occurred - fileExists: { - enumerable: false, - value: function(file) { - // - var retValue = { success:null, status:null }; - // - if(file && file.uri && file.uri.length) { - try { - var serviceURL = this._prepareServiceURL(this._fileServiceURL, file.uri), - xhr = new XMLHttpRequest(); - // - xhr.open("GET", serviceURL, false); - xhr.setRequestHeader("check-existence-only", "true"); - xhr.send(); - // - if (xhr.readyState === 4) { - retValue.status = xhr.status; - retValue.success = true; - } - } - catch(error) { - xhr = null; - retValue.success = false; - } - } - // - return retValue; - } - }, - //////////////////////////////////////////////////////////////////// - // Creates a new file at the specified path - // Parameters: - // the file parameter must contain the following properties - // uri: string value containing the full file path/URI i.e. "c:/foo/bar.html" - // it can optionally contain the following properties - // contentType: string with the content type i.e. "text/plain". "text/plain" is assumed if this property is not specified - // contents: string containing the file contents. These contents will be saved to the new file. - // - // Return values: - // returns an object with two properties - // success: boolean indicating if the call succeeded or failed - // status: int indicating the request HTTP status code - // 201 - the file was created and contents were saved if they were passed - // 400 - the file already exists and could not be created - // 500 - unknown server error occurred - createFile: { - enumerable: false, - value: function(file) { - var retValue = { success:null, status:null }; - if(file && file.uri && file.uri.length) { - try { - var serviceURL = this._prepareServiceURL(this._fileServiceURL, file.uri), - xhr = new XMLHttpRequest(); - // - xhr.open("POST", serviceURL, false); - if(file.contentType && file.contentType.length) - xhr.setRequestHeader("Content-Type", file.contentType); - else - xhr.setRequestHeader("Content-Type", "text/plain"); - - if(file.contents && file.contents.length) - xhr.send(file.contents); - else - xhr.send(); - - if (xhr.readyState === 4) { - retValue.status = xhr.status; - retValue.success = true; - } - } - catch(error) { - xhr = null; - retValue.success = false; - } - } - - return retValue; - } - }, - //////////////////////////////////////////////////////////////////// - // Save contents into an existing file at the specified path - // Parameters: - // the file parameter must contain the following properties - // uri: string value containing the full file path/URI i.e. "c:/foo/bar.html" - // it can optionally contain the following properties - // contentType: string with the content type i.e. "text/plain". "text/plain" is assumed if this property is not specified - // contents: string containing the file contents. These contents will be saved to the new file. - // - // Return values: - // returns an object with two properties - // success: boolean indicating if the call succeeded or failed - // status: int indicating the request HTTP status code - // 204 - the file was saved - // 404 - the file specified does not exist - // 500 - unknown server error occurred - updateFile: { - enumerable: false, - value: function(file) { - var retValue = { success:null, status:null }; - if(file && file.uri && file.uri.length && file.contents && file.contents.length) { - try { - var serviceURL = this._prepareServiceURL(this._fileServiceURL, file.uri), - xhr = new XMLHttpRequest(); - // - xhr.open("PUT", serviceURL, false); - if(file.contentType && file.contentType.length) - xhr.setRequestHeader("Content-Type", file.contentType); - else - xhr.setRequestHeader("Content-Type", "text/plain"); - - xhr.send(file.contents); - - if (xhr.readyState === 4) { - retValue.status = xhr.status; - retValue.success = true; - } - } - catch(error) { - xhr = null; - retValue.success = false; - } - } - - return retValue; - } - }, - //////////////////////////////////////////////////////////////////// - // Copies a file from one location to another - // Parameters: - // the file parameter must contain the following properties - // sourceUri: string value containing the full file path/URI to copy from i.e. "c:/foo/bar.html" - // destUri: string containing the full path/URI to copy to - // it can optionally contain the following properties - // overwriteDestination: bool indicating whether it is okay to overwrite the file specified at destUri if it already exists - // - // Return values: - // returns an object with two properties - // success: boolean indicating if the call succeeded or failed - // status: int indicating the request HTTP status code - // 204 - the file was copied - // 404 - the file specified in sourceUri does not exist - // 500 - unknown server error occurred - copyFile: { - enumerable: false, - value: function(file) { - var retValue = { success:null, status:null }; - if(file && file.sourceUri && file.sourceUri.length && file.destUri && file.destUri.length) { - try { - var serviceURL = this._prepareServiceURL(this._fileServiceURL, file.destUri), - xhr = new XMLHttpRequest(); - // - xhr.open("PUT", serviceURL, false); - xhr.setRequestHeader("sourceURI", file.sourceUri); - // - if(file.overwriteDestination && file.overwriteDestination === true) { - xhr.setRequestHeader("overwrite-destination", "true"); - } - // - xhr.send(); - // - if (xhr.readyState === 4) { - retValue.status = xhr.status; - retValue.success = true; - } - } - catch(error) { - xhr = null; - retValue.success = false; - } - } - // - return retValue; - } - }, - //////////////////////////////////////////////////////////////////// - // Moves a file from one location to another - // Parameters: - // the file parameter must contain the following properties - // sourceUri: string value containing the full file path/URI to copy from i.e. "c:/foo/bar.html" - // destUri: string containing the full path/URI to copy to - // it can optionally contain the following properties - // overwriteDestination: bool indicating whether it is okay to overwrite the file specified at destUri if it already exists - // - // Return values: - // returns an object with two properties - // success: boolean indicating if the call succeeded or failed - // status: int indicating the request HTTP status code - // 204 - the file was moved - // 404 - the file specified in sourceUri does not exist - // 500 - unknown server error occurred - moveFile: { - enumerable: false, - value: function(file) { - var retValue = { success:null, status:null }; - if(file && file.sourceUri && file.sourceUri.length && file.destUri && file.destUri.length) { - try { - var serviceURL = this._prepareServiceURL(this._fileServiceURL, file.destUri), - xhr = new XMLHttpRequest(); - // - xhr.open("PUT", serviceURL, false); - xhr.setRequestHeader("sourceURI", file.sourceUri); - xhr.setRequestHeader("delete-source", "true"); - // - if(file.overwriteDestination && file.overwriteDestination === true) { - xhr.setRequestHeader("overwrite-destination", "true"); - } - // - xhr.send(); - // - if (xhr.readyState === 4) { - retValue.status = xhr.status; - retValue.success = true; - } - } - catch(error) { - xhr = null; - retValue.success = false; - } - } - // - return retValue; - } - }, - //////////////////////////////////////////////////////////////////// - // Deletes an existing file - // Parameters: - // the file parameter must contain the following properties - // uri: string value containing the full file path/URI i.e. "c:/foo/bar.html" - // - // Return values: - // returns an object with two properties - // success: boolean indicating if the call succeeded or failed - // status: int indicating the request HTTP status code - // 204 - the file was deleted - // 404 -