/**
* Created by sherali on 8/30/15.
*/
var Helper = {
isEmpty: function (obj) {
return !obj || obj === null || obj === undefined || Array.isArray(obj) && obj.length === 0;
},
clearArray: function (arr) {
if (arr && Array.isArray(arr)) {
arr.length = 0;
}
},
pushArray: function (arr1, arr2) {
if (arr1 && arr2 && Array.isArray(arr1)) {
arr1.push.apply(arr1, Array.isArray(arr2) ? arr2 : [arr2]);
}
},
setArray: function (arr1, arr2) {
this.clearArray(arr1);
this.pushArray(arr1, arr2);
}
};
function FileOrFolder(name, folderArray, fileArray, format, isFile, size) {
var _name,
_folders = [],
_files = [],
_size = 0,
_format = null,
_isFile = false,
_json = {};
var self = this;
Object.defineProperties(this, {
name: {
get: function () {
return _name;
},
set: function (val) {
_name = val;
},
enumerable: true
},
folders: {
get: function () {
return _folders;
},
set: function (val) {
Helper.setArray(_folders, val);
},
enumerable: true
},
files: {
get: function () {
return _files;
},
set: function (val) {
Helper.setArray(_files, val);
},
enumerable: true
},
size: {
get: function () {
return _size;
},
set: function (val) {
_size = Helper.isEmpty(val) ? 0 : val;
},
enumerable: true
},
format: {
get: function () {
return _format;
},
set: function (val) {
_format = val;
},
enumerable: true
},
isFile: {
get: function () {
return _isFile;
},
set: function (val) {
_isFile = val;
},
enumerable: true
},
json: {
get: function () {
return _json;
},
set: function (val) {
_json = val;
},
enumerable: true
}
});
this.addFileOrFolder = function (item, isFile) {
Object.keys(item.json).forEach(function (key, i, obj) {
if (isFile) {
Helper.pushArray(_files, item);
_json[name].files[key] = item.json[key];
} else {
Helper.pushArray(_folders, item);
_json[name].folders[key] = item.json[key];
}
});
};
if (!Helper.isEmpty(name)) {
this.name = name;
_json[name] = {folders: {}, files: {}, size: 0, format: undefined};
if (!Helper.isEmpty(folderArray)) {
this.folders = folderArray;
_folders.forEach(function (item, index, array) {
Object.keys(item.json).forEach(function (key, i, obj) {
_json[name].folders[key] = item.json[key];
});
});
}
if (!Helper.isEmpty(fileArray)) {
this.files = fileArray;
_files.forEach(function (item, index, array) {
Object.keys(item.json).forEach(function (key, i, obj) {
_json[name].files[key] = item.json[key];
});
});
}
this.size = size;
_json[name]["size"] = _size;
if (isFile) {
this.isFile = isFile;
}
_json[name]["isFile"] = _isFile;
this.format = format;
_json[name]["format"] = _format;
}
}
var root = new FileOrFolder("root",
[
new FileOrFolder("Folder1", [
new FileOrFolder("folder1.1", [
new FileOrFolder("folder1.1.1", [
new FileOrFolder("folder1.1.1.1")
])
]),
new FileOrFolder("folder1.2", [
new FileOrFolder("folder1.2.1", [
new FileOrFolder("folder1.2.1.1")
])
])
]),
new FileOrFolder("Folder2", [new FileOrFolder("folder2.1")], [new FileOrFolder("file", null, null, ".bat", true)])
]);
root.addFileOrFolder(new FileOrFolder("Folder3", null, [
new FileOrFolder("file3.1", null, null, ".txt", true),
new FileOrFolder("file3.2", null, null, ".txt", true),
new FileOrFolder("file3.3", null, null, ".txt", true)
]));
console.log("files of root : ", root.folders[0].folders);
console.log("folder 1.1", root.json.root.folders["Folder1"].folders["folder1.1"]);