Skip to content
Snippets Groups Projects
Commit 0f68ce05 authored by Piotr Gawron's avatar Piotr Gawron
Browse files

when uploading file projectId and converter are set up accordingly

parent f5d9990f
No related branches found
No related tags found
2 merge requests!115Resolve "admin panel should use API",!114Resolve "admin panel should use API"
......@@ -14,6 +14,7 @@ var guiUtils = new (require('../leftPanel/GuiUtils'))();
function AddProjectDialog(params) {
AbstractGuiElement.call(this, params);
var self = this;
self.registerListenerType("onFileUpload");
$(self.getElement()).addClass("minerva-edit-project-dialog");
self.createGui();
......@@ -97,6 +98,39 @@ AddProjectDialog.prototype.createGeneralTabContent = function() {
});
result.appendChild(table);
var fileInput = Functions.createElement({
type : "input",
inputType : "file",
name : "project-file",
});
fileInput.addEventListener("change", function() {
return self.callListeners("onFileUpload", fileInput.files[0]);
}, false);
self.addListener("onFileUpload", function(e) {
var file = e.arg;
return self.processFile(file);
});
self.addListener("onFileUpload", function(e) {
var file = e.arg;
if (file.name.lastIndexOf('.') > 0) {
return self.setProjectId(file.name.substring(0, file.name.lastIndexOf('.')));
} else {
return file.name;
}
});
self.addListener("onFileUpload", function(e) {
var file = e.arg;
return self.setFileParserForFilename(file.name);
});
table.appendChild(self.createRow(guiUtils.createLabel("Upload file: "), fileInput));
var fileFormatSelect = Functions.createElement({
type : "select",
name : "project-format",
});
table.appendChild(self.createRow(guiUtils.createLabel("File format: "), fileFormatSelect));
table.appendChild(self.createInputRow("ProjectId:", "id", "project-id"));
table.appendChild(self.createInputRow("Project name:", "UNKNOWN DISEASE MAP", "project-name"));
table.appendChild(self.createInputRow("Project Disease:", "", "project-disease"));
......@@ -140,45 +174,63 @@ AddProjectDialog.prototype.createGeneralTabContent = function() {
return result;
};
AddProjectDialog.prototype.createInputRow = function(labelName, defaultValue, inputName) {
var result = new Functions.createElement({
type : "div",
style : "display:table-row"
});
result.appendChild(new Functions.createElement({
var label = new Functions.createElement({
type : "div",
style : "display:table-cell",
content : labelName,
}));
result.appendChild(new Functions.createElement({
});
var input = new Functions.createElement({
type : "div",
style : "display:table-cell",
content : "<input name='" + inputName + "' value='" + defaultValue + "'/>",
}));
return result;
});
return this.createRow(label, input);
};
AddProjectDialog.prototype.createCheckboxRow = function(labelName, defaultValue, inputName) {
var result = new Functions.createElement({
type : "div",
style : "display:table-row"
});
result.appendChild(new Functions.createElement({
var label = new Functions.createElement({
type : "div",
style : "display:table-cell",
content : labelName,
}));
});
var checked = "";
if (defaultValue) {
checked = "checked";
}
result.appendChild(new Functions.createElement({
var checkbox = new Functions.createElement({
type : "div",
style : "display:table-cell",
content : "<checkbox name='" + inputName + "' " + checked + "/>",
}));
return result;
content : "<input type='checkbox' name='" + inputName + "' " + checked + "/>",
});
return this.createRow(label, checkbox);
};
AddProjectDialog.prototype.createRow = function(label, value) {
var result = new Functions.createElement({
type : "div",
style : "display:table-row"
});
if (label.tagName.toLowerCase() !== 'div') {
var labelContainer = new Functions.createElement({
type : "div",
style : "display:table-cell",
});
labelContainer.appendChild(label);
label = labelContainer;
}
result.appendChild(label);
if (value.tagName.toLowerCase() !== 'div') {
var valueContainer = new Functions.createElement({
type : "div",
style : "display:table-cell",
});
valueContainer.appendChild(value);
value = valueContainer;
}
result.appendChild(value);
return result;
};
AddProjectDialog.prototype.createOverlaysTab = function(tabMenuDiv, tabContentDiv) {
var self = this;
self.addTab({
......@@ -247,7 +299,27 @@ AddProjectDialog.prototype.createOverviewImagesTabContent = function() {
};
AddProjectDialog.prototype.init = function() {
return Promise.resolve();
var self = this;
return ServerConnector.getConfiguration().then(function(configuration) {
var select = $("[name='project-format']", self.getElement())[0];
var option = Functions.createElement({
type : "option",
content : "---",
});
option.selected = true;
select.appendChild(option);
var converters = configuration.getModelConverters();
for (var i = 0; i < converters.length; i++) {
var converter = converters[i];
option = Functions.createElement({
type : "option",
content : converter.name,
});
option.data = converter.extension;
option.value = converter.handler;
select.appendChild(option);
}
});
};
AddProjectDialog.prototype.destroy = function() {
......@@ -275,7 +347,80 @@ AddProjectDialog.prototype.close = function() {
AddProjectDialog.prototype.clear = function() {
var self = this;
$("input", self.getElement()).val("");
self.setFileContent(undefined);
return Promise.resolve();
};
AddProjectDialog.prototype.processFile = function(file) {
var self = this;
self.setFileContent(null);
if (file) {
return new Promise(function(resolve, reject) {
var reader = new FileReader();
reader.readAsText(file, "UTF-8");
reader.onload = function(evt) {
try {
self.setFileContent(evt.target.result);
resolve(self.getFileContent());
} catch (error) {
reject(error);
}
};
reader.onerror = function() {
reject(new Error("Problem reading file"));
};
});
} else {
return Promise.resolve(null);
}
};
AddProjectDialog.prototype.setFileContent = function(fileContent) {
this._fileContent = fileContent;
};
AddProjectDialog.prototype.getFileContent = function() {
return this._fileContent;
};
AddProjectDialog.prototype.setProjectId = function(projectId) {
$("[name='project-id']", this.getElement()).val(projectId);
};
AddProjectDialog.prototype.getProjectId = function() {
return $("[name='project-id']", this.getElement()).val();
};
AddProjectDialog.prototype.setFileParserForFilename = function(filename) {
var self = this;
var select = $("[name='project-format']", self.getElement)[0];
var options = select.options;
var optionId = 0;
for (var i = 0; i < options.length; i++) {
var option = options[i];
if (option.value !== undefined) {
var extension = option.data;
if (filename.endsWith(extension) && optionId <= 0) {
optionId = i;
}
}
}
options[optionId].selected = true;
};
AddProjectDialog.prototype.getConverter = function() {
var self = this;
var select = $("[name='project-format']", self.getElement)[0];
return ServerConnector.getConfiguration().then(function(configuration) {
var options = select.options;
var handler = select.options[select.selectedIndex].value;
var converters = configuration.getModelConverters();
for (var i = 0; i < converters.length; i++) {
var converter = converters[i];
if (handler === converter.handler) {
return converter;
}
}
return null;
});
};
module.exports = AddProjectDialog;
......@@ -16,4 +16,26 @@ describe('AddProjectDialog', function() {
});
return dialog.init();
});
describe('onFileUpload', function() {
it('default', function() {
var dialog = new AddProjectDialog({
element : testDiv,
customMap : null
});
var file = new Blob([ "<node></node>" ]);
file.name = "test.xml";
return dialog.init().then(function() {
return dialog.callListeners("onFileUpload", file);
}).then(function() {
assert.ok(dialog.getFileContent());
assert.equal("test", dialog.getProjectId());
return dialog.getConverter();
}).then(function(converter) {
assert.equal("xml", converter.extension);
});
});
});
});
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment