Skip to content
Snippets Groups Projects
loaddir.js 8.22 KiB
Newer Older
//funzione che definisce tutti gli elementi responsabili dell'apertura di un file.
//Sono definiti quindi l'albero e il bottone per l'importazione da locale
function setImportFile() {
    //genero e leggo il contenuto della directory "filesystem"
    var jsonResponse;
    var xmlListingFile = new XMLHttpRequest();
    xmlListingFile.open("GET", "https://baltig.infn.it/api/v4/projects/819/repository/tree?recursive=1&path=XRF-File-System", false);
    xmlListingFile.onreadystatechange = function () {
        if (xmlListingFile.readyState === 4) {
            if (xmlListingFile.status === 200) {
                jsonResponse = JSON.parse(xmlListingFile.responseText);
            }
        }
    };
    xmlListingFile.send(null);
    //ora genero l'albero e definisco l'evento in caso di selezione di un nodo
    $('#FileTreeview').treeview({ data: generateTree(jsonResponse) });
    $('#FileTreeview').on('nodeSelected', function (e, node) {
        if (node['url'] != undefined) {
            $("#load-spinner").css("display", "inline");
            $("#wrapper").css("opacity", "0.25");
            openFileFromServer(node['url']);
        }
    });
    //bottone per l'importazione locale
    var fileInputButton = document.getElementById('myImport');
    fileInputButton.onchange = function () {
        $("#load-spinner").css("display", "inline");
        $("#wrapper").css("opacity", "0.25");
        var fileName = fileInputButton.files[0];
        var readerObject = new FileReader();
        readerObject.readAsBinaryString(fileName);
        readerObject.onload = function () {
            var fileString = readerObject.result;
            readData(fileString);
        };
    };
}
//funzione che genera automaticamente l'albero
function generateTree(jsonDoc) {
    var tree = [{
            text: "XRF-File-System",
            nodes: []
        }];
    //scorro ogni elemento dell'albero
    for (var i = 0; i < jsonDoc.length; i++) {
        if (jsonDoc[i].type == "tree") {
            var Folder = {
                text: jsonDoc[i].name,
                relativePath: jsonDoc[i].path,
                nodes: []
            };
            insertOBJinFS(Folder, tree);
        }
        else {
            var File = {
                text: jsonDoc[i].name,
                relativePath: jsonDoc[i].path,
                icon: "glyphicon glyphicon-file",
                selectedIcon: "glyphicon glyphicon-file",
                url: jsonDoc[i].path
            };
            //inserisco il file nella giusta posizione
            insertOBJinFS(File, tree);
        }
    }
    return tree;
}
//funzione che posiziona l'oggetto passato in input nell'albero
function insertOBJinFS(objfs, tree) {
    //tree[0].nodes.push(objfs);
    var parentPath = objfs.relativePath.slice(0, objfs.relativePath.lastIndexOf("/"));
    //se l'oggetto è figlio della radice lo colloco subito
    if (parentPath == tree[0].text) {
        tree[0].nodes.push(objfs);
    }
    else {
        //ricavo la profondità e posiziono l'oggetto
        var splitPath = parentPath.split("/");
        var depth = splitPath.length;
        switch (depth) {
            case 2:
                var partialParentPath = splitPath[0] + "/" + splitPath[1];
                for (var i = 0; i < tree[0].nodes.length; i++) {
                    if (partialParentPath == tree[0].nodes[i].relativePath) {
                        tree[0].nodes[i].nodes.push(objfs);
                        break;
                    }
                }
                break;
            case 3:
                var partialParentPath = splitPath[0] + "/" + splitPath[1];
                for (var i = 0; i < tree[0].nodes.length; i++) {
                    if (partialParentPath == tree[0].nodes[i].relativePath) {
                        partialParentPath = splitPath[0] + "/" + splitPath[1] + "/" + splitPath[2];
                        for (var j = 0; j < tree[0].nodes[i].nodes.length; j++) {
                            if (partialParentPath == tree[0].nodes[i].nodes[j].relativePath) {
                                tree[0].nodes[i].nodes[j].nodes.push(objfs);
                                break;
                            }
                        }
                        break;
                    }
                }
                break;
            case 4:
                var partialParentPath = splitPath[0] + "/" + splitPath[1];
                for (var i = 0; i < tree[0].nodes.length; i++) {
                    if (partialParentPath == tree[0].nodes[i].relativePath) {
                        partialParentPath = splitPath[0] + "/" + splitPath[1] + "/" + splitPath[2];
                        for (var j = 0; j < tree[0].nodes[i].nodes.length; j++) {
                            if (partialParentPath == tree[0].nodes[i].nodes[j].relativePath) {
                                partialParentPath = splitPath[0] + "/" + splitPath[1] + "/" + splitPath[2] + "/" + splitPath[3];
                                for (var k = 0; k < tree[0].nodes[i].nodes[j].nodes.length; k++) {
                                    if (partialParentPath == tree[0].nodes[i].nodes[j].nodes[k].relativePath) {
                                        tree[0].nodes[i].nodes[j].nodes[k].nodes.push(objfs);
                                        break;
                                    }
                                }
                                break;
                            }
                        }
                        break;
                    }
                }
                break;
            case 5:
                var partialParentPath = splitPath[0] + "/" + splitPath[1];
                for (var i = 0; i < tree[0].nodes.length; i++) {
                    if (partialParentPath == tree[0].nodes[i].relativePath) {
                        partialParentPath = splitPath[0] + "/" + splitPath[1] + "/" + splitPath[2];
                        for (var j = 0; j < tree[0].nodes[i].nodes.length; j++) {
                            if (partialParentPath == tree[0].nodes[i].nodes[j].relativePath) {
                                partialParentPath = splitPath[0] + "/" + splitPath[1] + "/" + splitPath[2] + "/" + splitPath[3];
                                for (var k = 0; k < tree[0].nodes[i].nodes[j].nodes.length; k++) {
                                    if (partialParentPath == tree[0].nodes[i].nodes[j].nodes[k].relativePath) {
                                        partialParentPath = splitPath[0] + "/" + splitPath[1] + "/" + splitPath[2] + "/" + splitPath[3] + "/" + splitPath[4];
                                        for (var l = 0; l < tree[0].nodes[i].nodes[j].nodes[k].nodes.length; l++) {
                                            if (partialParentPath == tree[0].nodes[i].nodes[j].nodes[k].nodes[l].relativePath) {
                                                tree[0].nodes[i].nodes[j].nodes[k].nodes[l].nodes.push(objfs);
                                                break;
                                            }
                                        }
                                        break;
                                    }
                                }
                                break;
                            }
                        }
                        break;
                    }
                }
                break;
        }
    }
}
//funzione che dato l'url di un file, lo apre e lo legge passandone il contenuto
//alla funzione readData(). Questa funzione è invocata quando viene selezionato
//un file dall'albero
function openFileFromServer(url) {
    console.log("Try to open " + url.slice(url.lastIndexOf("/") + 1, url.length));
    url = "https://baltig.infn.it/api/v4/projects/819/repository/files/" + encodeURIComponent(url) + "?ref=master";
    var jsonContentFile = new XMLHttpRequest();
    jsonContentFile.open("GET", url, false);
    jsonContentFile.onreadystatechange = function () {
        if (jsonContentFile.readyState === 4) {
            if (jsonContentFile.status === 200) {
                var jsonResponse = jsonContentFile.responseText;
                var startPoint = jsonResponse.indexOf("content") + 10;
                var endPoint = jsonResponse.indexOf("\", :ref");
                readData(atob(jsonResponse.slice(startPoint, endPoint)));
            }
        }
    };
    jsonContentFile.send(null);
}