Skip to content
Snippets Groups Projects
loaddir.ts 7.11 KiB
Newer Older
  • Learn to ignore specific revisions
  • Laura Cappelli's avatar
    Laura Cappelli committed
    //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: any;
      var xmlListingFile: any = 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){
          openFileFromServer(node['url']);
        }
      });
    
      //bottone per l'importazione locale
      var fileInputButton: any = document.getElementById('myImport'); 
      fileInputButton.onchange = function(){
        var fileName: string = fileInputButton.files[0];
        var readerObject: any = new FileReader();
        readerObject.readAsBinaryString(fileName);  
        readerObject.onload = function() {
          var fileString: string = readerObject.result; 
          readData(fileString);
        }
      }
    
    }
    
    //funzione che genera automaticamente l'albero
    function generateTree(jsonDoc){
    
      var tree: any = [ {
        text:"XRF-File-System",
        nodes: [ ]
      }];
    
      //scorro ogni elemento dell'albero
      for (var i: number = 0; i < jsonDoc.length; i++) {
        if(jsonDoc[i].type == "tree"){ //è una cartella      
          var Folder = {  //definisco l'oggetto Folder
            text: jsonDoc[i].name,
            relativePath: jsonDoc[i].path, 
            nodes: []
          }
          insertOBJinFS(Folder, tree);
        } else { //è un file
          var File = { //definisco l'oggetto 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: string = 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: string[] = parentPath.split("/");
        var depth: number = splitPath.length;
        switch(depth){
          case 2:
            var partialParentPath: string = splitPath[0]+"/"+splitPath[1];
            for (var i: number = 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: string = splitPath[0]+"/"+splitPath[1];
            for (var i: number = 0; i < tree[0].nodes.length; i++){
              if(partialParentPath == tree[0].nodes[i].relativePath){
                partialParentPath = splitPath[0]+"/"+splitPath[1]+"/"+splitPath[2];
                for (var j: number = 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: string = splitPath[0]+"/"+splitPath[1];
            for (var i: number = 0; i < tree[0].nodes.length; i++){
              if(partialParentPath == tree[0].nodes[i].relativePath){
                partialParentPath = splitPath[0]+"/"+splitPath[1]+"/"+splitPath[2];
                for (var j: number = 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: number = 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: string = splitPath[0]+"/"+splitPath[1];
            for (var i: number = 0; i < tree[0].nodes.length; i++){
              if(partialParentPath == tree[0].nodes[i].relativePath){
                partialParentPath = splitPath[0]+"/"+splitPath[1]+"/"+splitPath[2];
                for (var j: number = 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: number = 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: number = 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: any = new XMLHttpRequest();
      jsonContentFile.open("GET", url, false);
      jsonContentFile.onreadystatechange = function(){
        if(jsonContentFile.readyState === 4){
          if(jsonContentFile.status === 200){
            var jsonResponse: string = jsonContentFile.responseText;
            var startPoint: number = jsonResponse.indexOf("content") + 10;
            var endPoint: number = jsonResponse.indexOf("\", :ref");
            readData(atob(jsonResponse.slice(startPoint, endPoint)));
          }
        }
      }
      jsonContentFile.send(null);
    
    }