Newer
Older
/** Default owner/source */
const owner = "demo-sample";
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
const source = "";
const HTTP_SERVER_URI = "/fileserver";
/// The datastoreServer we use for our data
// datastoreServer = new datastore('https://localhost:8443/openbis', 'https://localhost:8444/datastore_server');
datastoreServer = new datastore('http://localhost:8085', HTTP_SERVER_URI);
/** Creates open button for reading the file from dss */
function createOpenButton(row, filePath, fileSize) {
readButton = document.createElement("button");
readButton.innerText = "open";
readButton.dataset.filepath = filePath;
readButton.dataset.filesize = fileSize;
readButton.onclick = (function() {
datastoreServer.read(owner, this.dataset.filepath, 0, this.dataset.filesize, (responseData => {
var win = window.open("", "_blank");
var doc = win.document;
doc.open("text/html");
doc.write(responseData);
doc.close();
}));
});
row.appendChild(readButton);
}
/** creates button for deleteing a file from the dss */
function createDeleteButton(row, filePath) {
deleteButton = document.createElement("button");
deleteButton.innerText = "delete";
deleteButton.dataset.filepath = filePath;
deleteButton.onclick = (function() {
if (confirm("Do you want to delete "+filePath+" ?") == true) {
datastoreServer.delete(owner, this.dataset.filepath, (responseData => {
showEntries();
}));
}
});
row.appendChild(deleteButton);
}
/** recursive implementation of DFS algorithm to traverse the tree and accumulate results in order of traversal */
function dfs(tree, map, path, acc) {
for(const [key, val] of Object.entries(tree).sort(([a1,a2],[b1,b2]) => a1>b1 ? 1:-1)) {
var newPath = path + '/' + key;
if(newPath in map) {
acc.push(map[newPath]);
}
dfs(val, map, newPath, acc);
}
return acc;
}
/** function to generate the table of file information */
function generateTable(files) {
/** converts array into tree object for sorting files by path */
const toTree = (paths) => {
const tree = {};
for (const path of paths) {
if (path) {
let node = tree;
const parts = path[1]['path'].split("/");
for (const part of parts) {
if (part) {
node = node[part] ?? (node[part] = {});
}
}
}
}
return tree;
};
var tree = toTree(files);
map = {};
files.forEach(file => map[file[1]['path']] = file[1]);
files = dfs(tree, map, '', []);
files.forEach(file => {
file.owner = owner;
file.path = file.path.slice(owner.length + 1);
});
// column names for the list of files
const columns = ["name", "owner", "path", "directory", "size", "creationTime", "lastAccessTime", "lastModifiedTime"];
const mytable = document.getElementById("html-data-table");
let headRow = document.createElement("tr");
columns.forEach(header => {
let cell = document.createElement("th");
cell.innerText = header;
headRow.appendChild(cell);
});
cell = document.createElement("th");
cell.innerText = "actions";
headRow.appendChild(cell);
mytable.appendChild(headRow);
// create rows in table together with open and delete buttons
for (let i in files) {
let file = files[i];
let newRow = document.createElement("tr");
columns.forEach(column => {
let cell = document.createElement("th");
cell.innerText = file[column];
newRow.appendChild(cell);
});
if (file['directory'] !== true) {
createOpenButton(newRow, file['path'], file['size']);
}
createDeleteButton(newRow, file['path']);
mytable.appendChild(newRow);
}
}
/**
* Display the files returned by the server
*/
function displayReturnedFiles(data)
{
if (data.error) {
console.log(data.error);
alert("Could not retrieve data.");
return;
}
var results = data.result[1];
// Restrict the display to 50 samples
// results = results.splice(0, 50);
generateTable(results);
}
/**
* Request file list from the server and show them in the Page.
*/
function showEntries()
{
let table = document.getElementById("html-data-table");
while (table.firstChild) {
table.firstChild.remove()
}
datastoreServer.list(owner, source, "true", displayReturnedFiles);
}
/** validation for write */
function isWriteValid() {
return document.getElementById("fpath").value != '' && document.getElementById("foffset").value != '';
}
/** validation for copy */
function isCopyValid() {
return document.getElementById("copy-from-path").value != '' && document.getElementById("copy-to-path").value != '';
}
/** validation for move */
function isMoveValid() {
return document.getElementById("move-from-path").value != '' && document.getElementById('move-to-path').value != '';
}
function enterApp(data)
{
if(data.result == null){
alert("Login or password incorrect");
document.getElementById("username").focus();
document.getElementById("login-form-div").style.display = "none";
document.getElementById("main").style.display = "block";
document.getElementById("openbis-logo").style.height = "30px";
showEntries();
}
window.onload = function() {
new dssClientLoginPage(datastoreServer, enterApp).configure();
document.getElementById("list-button").onclick = function() {
}
document.getElementById("write-submit").onclick = function() {
datastoreServer.write(owner,
document.getElementById("fpath").value.trim(),
parseInt(document.getElementById("foffset").value.trim()),
document.getElementById("write-text").value.trim(),
(_ => {
showEntries();
}));
}
};
document.getElementById("copy-submit").onclick = function() {
datastoreServer.copy(owner, document.getElementById("copy-from-path").value.trim(), owner, document.getElementById("copy-to-path").value.trim(),
(_ => {
showEntries();
}));
}
};
document.getElementById("move-submit").onclick = function() {
datastoreServer.move(owner,
document.getElementById("move-from-path").value.trim(),
owner,
document.getElementById("move-to-path").value.trim(),
(_ => {
showEntries();
}));
}
};
}