diff --git a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/index.html b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/index.html index fd2c2934c9186ede407bbf411b3bd78a273caeb1..24cfb9b41028267143d473574c2bd86b3414957c 100644 --- a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/index.html +++ b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/index.html @@ -88,7 +88,6 @@ <script type="text/javascript" src="./js/views/SampleForm.js"></script> <script type="text/javascript" src="./js/views/SampleHierarchy.js"></script> <script type="text/javascript" src="./js/views/SampleTable.js"></script> - <script type="text/javascript" src="./js/views/ExperimentForm.js"></script> <script type="text/javascript" src="./js/views/StorageManager/StorageManagerController.js"></script> <script type="text/javascript" src="./js/views/StorageManager/StorageManagerModel.js"></script> @@ -113,6 +112,10 @@ <script type="text/javascript" src="./js/views/ProjectForm/ProjectFormModel.js"></script> <script type="text/javascript" src="./js/views/ProjectForm/ProjectFormView.js"></script> + <script type="text/javascript" src="./js/views/ExperimentForm/ExperimentFormController.js"></script> + <script type="text/javascript" src="./js/views/ExperimentForm/ExperimentFormModel.js"></script> + <script type="text/javascript" src="./js/views/ExperimentForm/ExperimentFormView.js"></script> + <script type="text/javascript" src="./js/widgets/DataSetViewer.js"></script> <script type="text/javascript" src="./js/widgets/SampleLinksWidget.js"></script> <script type="text/javascript" src="./js/widgets/Storage.js"></script> diff --git a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/controllers/MainController.js b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/controllers/MainController.js index 0044ac9fbe7e7bf0c53d881aaba2336d673bad56..f46bd79416ffc1a1908161b1d3902bb5a70a683b 100644 --- a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/controllers/MainController.js +++ b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/controllers/MainController.js @@ -444,9 +444,9 @@ function MainController(profile) { this._showExperimentPage = function(experiment, mode) { //Show Form - var experimentForm = new ExperimentForm("mainContainer", this, experiment, mode); - experimentForm.init(); - this.currentView = experimentForm; + var experimentFormController = new ExperimentFormController(this, mode, experiment); + experimentFormController.init($("#mainContainer")); + this.currentView = experimentFormController; } this._showViewSamplePage = function(sample, isELNSubExperiment) { diff --git a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/ExperimentForm.js b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/ExperimentForm.js deleted file mode 100644 index 388f9c34638c214dbe692f5c53bdb077169b092e..0000000000000000000000000000000000000000 --- a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/ExperimentForm.js +++ /dev/null @@ -1,290 +0,0 @@ -/* - * Copyright 2014 ETH Zuerich, Scientific IT Services - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -function ExperimentForm(containerId, mainController, experiment, mode) { - this._containerId = containerId; - this._mainController = mainController; - this._experiment = experiment; - this._mode = mode; - this._isFormDirty = false; - - this.isDirty = function() { - return this._isFormDirty; - } - - this.init = function() { - this.repaint(); - Util.unblockUI(); - } - - this.repaint = function() { - var _this = this; - $("#" + this._containerId).empty(); - - var $form = $("<div>", { "class" : "row"}); - var $formColumn = $("<form>", { - "class" : FormUtil.formColumClass + " form-horizontal", - 'role' : "form", - "action" : "javascript:void(0);", - "onsubmit" : "mainController.currentView._updateExperiment();" - }); - - $form.append($formColumn); - - // - // Title - // - var $formTitle = null; - if(this._mode === FormMode.VIEW || this._mode === FormMode.EDIT) { - $formTitle = $("<h2>").append("Experiment " + this._experiment.identifier); - } else { - $formTitle = $("<h2>").append("Create " + this._experiment.experimentTypeCode); - } - $formColumn.append($formTitle); - - // - // Create Sub Experiment - // - if(this._mode === FormMode.VIEW) { - var $createSubExpBtn = $("<a>", { "class" : "btn btn-default"}).append("Create Sub Experiment"); - $createSubExpBtn.click(function() { - var $dropdown = FormUtil.getSampleTypeDropdown("sampleTypeDropdown", true); - Util.blockUI("Select the type for the sub Experiment: <br><br>" + $dropdown[0].outerHTML + "<br> or <a class='btn btn-default' id='sampleTypeDropdownCancel'>Cancel</a>"); - - $("#sampleTypeDropdown").on("change", function(event) { - var sampleTypeCode = $("#sampleTypeDropdown")[0].value; - var argsMap = { - "sampleTypeCode" : sampleTypeCode, - "experimentIdentifier" : _this._experiment.identifier - } - var argsMapStr = JSON.stringify(argsMap); - - _this._mainController.changeView("showCreateSubExperimentPage", argsMapStr); - }); - - $("#sampleTypeDropdownCancel").on("click", function(event) { - Util.unblockUI(); - }); - }); - $formTitle.append(" "); - $formTitle.append($createSubExpBtn); - - var $editBtn = $("<a>", { "class" : "btn btn-default"}).append("<span class='glyphicon glyphicon-edit'></span> Enable Editing"); - $editBtn.click(function() { - _this._mainController.changeView("showEditExperimentPageFromIdentifier", _this._experiment.identifier); - }); - $formTitle.append(" "); - $formTitle.append($editBtn); - } - - // - // Metadata Identification - // - var $identificationInfo = $('<div>').append($('<legend>').text("Identification Info")); - $formColumn.append($identificationInfo); - - var identifierParts = this._experiment.identifier.split("/"); - - $formColumn.append(FormUtil.getFieldForLabelWithText("Type", this._experiment.experimentTypeCode)); - $formColumn.append(FormUtil.getFieldForLabelWithText("Project", identifierParts[0] + "/" + identifierParts[1] + "/" + identifierParts[2])); - var $projectField = FormUtil._getInputField("text", "PROJECT", "project", null, true); - $projectField.val(identifierParts[0] + "/" + identifierParts[1] + "/" + identifierParts[2]); - $projectField.hide(); - $formColumn.append($projectField); - - if(this._mode === FormMode.VIEW || this._mode === FormMode.EDIT) { - $formColumn.append(FormUtil.getFieldForLabelWithText("Code", identifierParts[3])); - - var $codeField = FormUtil._getInputField("text", "CODE", "code", null, true); - $codeField.val(identifierParts[3]); - $codeField.hide(); - $formColumn.append($codeField); - - $formColumn.append(FormUtil.getFieldForLabelWithText("Registrator", this._experiment.registrationDetails.userId)); - $formColumn.append(FormUtil.getFieldForLabelWithText("Registration Date", (new Date(this._experiment.registrationDetails.registrationDate)).toLocaleString())); - } else if(this._mode === FormMode.CREATE){ - var $codeField = FormUtil._getInputField("text", "CODE", "code", null, true); - $formColumn.append(FormUtil.getFieldForComponentWithLabel($codeField, "Code")); - } - - // - // Metadata Fields - // - var experimentType = this._mainController.profile.getExperimentTypeForExperimentTypeCode(this._experiment.experimentTypeCode); - - for(var i = 0; i < experimentType.propertyTypeGroups.length; i++) { - var propertyTypeGroup = experimentType.propertyTypeGroups[i]; - - var $fieldset = $('<div>'); - var $legend = $('<legend>'); - $fieldset.append($legend); - - if(propertyTypeGroup.name) { - $legend.text(propertyTypeGroup.name); - } else if(experimentType.propertyTypeGroups.length === 1) { //Only when there is only one group without name to render it with a default title. - $legend.text("Metadata Fields"); - } else { - $legend.remove(); - } - - for(var j = 0; j < propertyTypeGroup.propertyTypes.length; j++) { - var propertyType = propertyTypeGroup.propertyTypes[j]; - - var $controlGroup = null; - - if(this._mode === FormMode.VIEW) { //Show values without input boxes if the form is in view mode - $controlGroup = FormUtil.getFieldForLabelWithText(propertyType.label, this._experiment.properties[propertyType.code]); - } else { - var $component = FormUtil.getFieldForPropertyType(propertyType); - - //Update values if is into edit mode - if(this._mode === FormMode.EDIT) { - if(propertyType.dataType === "BOOLEAN") { - $($component.children()[0]).prop('checked', this._experiment.properties[propertyType.code] === "true"); - } else if(propertyType.dataType === "TIMESTAMP") { - var value = this._experiment.properties[propertyType.code]; - $($($component.children()[0]).children()[0]).val(value); - } else { - var value = this._experiment.properties[propertyType.code]; - if(!value && propertyType.code.charAt(0) === '$') { - value = this._experiment.properties[propertyType.code.substr(1)]; - } - $component.val(value); - } - } - - $component.change(function(event) { - _this._isFormDirty = true; - }); - $controlGroup = FormUtil.getFieldForComponentWithLabel($component, propertyType.label); - } - - $fieldset.append($controlGroup); - } - - $formColumn.append($fieldset); - } - - if(this._mode === FormMode.EDIT || this._mode === FormMode.CREATE) { - var label = ""; - - if(this._mode === FormMode.EDIT) { - label = "Update Experiment " + this._experiment.code; - } else if(this._mode === FormMode.CREATE) { - label = "Create Experiment"; - } - - var $submitButton = $('<fieldset>') - .append($('<div>', { class : "form-group"})) - .append($('<div>', {class: FormUtil.controlColumnClass}) - .append($('<input>', { class : 'btn btn-primary', 'type' : 'submit', 'value' : label}))); - - $formColumn.append($submitButton); - } - - $("#" + this._containerId).append($form); - } - - this._updateExperiment = function() { - Util.blockUI(); - - var experimentType = this._mainController.profile.getExperimentTypeForExperimentTypeCode(this._experiment.experimentTypeCode); - - //Identification Info - var projectIdentifier = $("#PROJECT").val().split("/"); - var experimentSpace = projectIdentifier[1]; - var experimentProject = projectIdentifier[2]; - var experimentCode = $("#CODE").val(); - var experimentIdentifier = "/" + experimentSpace + "/" + experimentProject + "/" + experimentCode; - //Properties - var experimentProperties = {}; - - for(var i = 0; i < experimentType.propertyTypeGroups.length; i++) { - var propertyTypeGroup = experimentType.propertyTypeGroups[i]; - for(var j = 0; j < propertyTypeGroup.propertyTypes.length; j++) { - var propertyType = propertyTypeGroup.propertyTypes[j]; - var value = null; - - if (propertyType.dataType === "BOOLEAN") { - value = $("#"+propertyType.code.replace('$','\\$').replace(/\./g,'\\.')+":checked").val() === "on"; - } else { - value = Util.getEmptyIfNull($("#"+propertyType.code.replace('$','\\$').replace(/\./g,'\\.')).val()); - } - - experimentProperties[propertyType.code] = value; - } - } - - var method = ""; - if(this._mode === FormMode.CREATE) { - method = "insertExperiment"; - } else if(this._mode === FormMode.EDIT) { - method = "updateExperiment"; - } - - var parameters = { - //API Method - "method" : method, - //Identification Info - "experimentType" : this._experiment.experimentTypeCode, - "experimentIdentifier" : experimentIdentifier, - "experimentSpace" : experimentSpace, - "experimentProject" : experimentProject, - "experimentCode" : experimentCode, - //Properties - "experimentProperties" : experimentProperties - }; - - var _this = this; - - if(this._mainController.profile.allDataStores.length > 0) { - this._mainController.serverFacade.createReportFromAggregationService(this._mainController.profile.allDataStores[0].code, parameters, function(response) { - if(response.error) { //Error Case 1 - Util.showError(response.error.message, function() {Util.unblockUI();}); - } else if (response.result.columns[1].title === "Error") { //Error Case 2 - var stacktrace = response.result.rows[0][1].value; - Util.showStacktraceAsError(stacktrace); - } else if (response.result.columns[0].title === "STATUS" && response.result.rows[0][0].value === "OK") { //Success Case - var experimentType = profile.getExperimentTypeForExperimentTypeCode(_this._experiment.experimentTypeCode); - var experimentTypeDisplayName = experimentType.description; - if(!experimentTypeDisplayName) { - experimentTypeDisplayName = _this._experiment.experimentTypeCode; - } - - var message = ""; - if(_this._mode === FormMode.CREATE) { - message = "Created."; - } else if(_this._mode === FormMode.EDIT) { - message = "Updated."; - } - - var callbackOk = function() { - _this._mainController.sideMenu.refreshExperiment($("#PROJECT").val(), experimentCode); - _this._isFormDirty = false; - _this._mainController.changeView("showExperimentPageFromIdentifier", experimentIdentifier); - Util.unblockUI(); - } - - Util.showSuccess(experimentTypeDisplayName + " " + message, callbackOk); - } else { //This should never happen - Util.showError("Unknown Error.", function() {Util.unblockUI();}); - } - - }); - } else { - Util.showError("No DSS available.", function() {Util.unblockUI();}); - } - } -} \ No newline at end of file diff --git a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/ExperimentForm/ExperimentFormController.js b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/ExperimentForm/ExperimentFormController.js new file mode 100644 index 0000000000000000000000000000000000000000..646d8d1596f6c70ad2a65be9d88a17d278a3b94d --- /dev/null +++ b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/ExperimentForm/ExperimentFormController.js @@ -0,0 +1,100 @@ +/* + * Copyright 2014 ETH Zuerich, Scientific IT Services + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +function ExperimentFormController(mainController, mode, experiment) { + this._mainController = mainController; + this._experimentFormModel = new ExperimentFormModel(mode, experiment); + this._experimentFormView = new ExperimentFormView(this, this._experimentFormModel); + + this.init = function($container) { + this._experimentFormView.repaint($container); + } + + this.isDirty = function() { + return this._experimentFormModel.isFormDirty; + } + + this.updateExperiment = function() { + Util.blockUI(); + + var experimentType = this._mainController.profile.getExperimentTypeForExperimentTypeCode(this._experimentFormModel.experiment.experimentTypeCode); + + //Identification Info (This way of collecting the identifier also works for the creation mode) + var projectIdentifier = this._experimentFormModel.experiment.identifier.split("/"); + var experimentSpace = projectIdentifier[1]; + var experimentProject = projectIdentifier[2]; + var experimentCode = this._experimentFormModel.experiment.code; + var experimentIdentifier = "/" + experimentSpace + "/" + experimentProject + "/" + experimentCode; + + var method = ""; + if(this._experimentFormModel.mode === FormMode.CREATE) { + method = "insertExperiment"; + } else if(this._experimentFormModel.mode === FormMode.EDIT) { + method = "updateExperiment"; + } + + var parameters = { + //API Method + "method" : method, + //Identification Info + "experimentType" : this._experimentFormModel.experiment.experimentTypeCode, + "experimentIdentifier" : experimentIdentifier, + //Properties + "experimentProperties" : this._experimentFormModel.experiment.properties + }; + + var _this = this; + + if(this._mainController.profile.allDataStores.length > 0) { + this._mainController.serverFacade.createReportFromAggregationService(this._mainController.profile.allDataStores[0].code, parameters, function(response) { + if(response.error) { //Error Case 1 + Util.showError(response.error.message, function() {Util.unblockUI();}); + } else if (response.result.columns[1].title === "Error") { //Error Case 2 + var stacktrace = response.result.rows[0][1].value; + Util.showStacktraceAsError(stacktrace); + } else if (response.result.columns[0].title === "STATUS" && response.result.rows[0][0].value === "OK") { //Success Case + var experimentType = _this._mainController.profile.getExperimentTypeForExperimentTypeCode(_this._experimentFormModel.experiment.experimentTypeCode); + var experimentTypeDisplayName = experimentType.description; + if(!experimentTypeDisplayName) { + experimentTypeDisplayName = _this._experimentFormModel.experiment.experimentTypeCode; + } + + var message = ""; + if(_this._experimentFormModel.mode === FormMode.CREATE) { + message = "Created."; + } else if(_this._experimentFormModel.mode === FormMode.EDIT) { + message = "Updated."; + } + + var callbackOk = function() { + var projectIdentifier = "/" + experimentSpace + "/" + experimentProject; + _this._mainController.sideMenu.refreshExperiment(projectIdentifier, experimentCode); + _this._experimentFormModel.isFormDirty = false; + _this._mainController.changeView("showExperimentPageFromIdentifier", experimentIdentifier); + Util.unblockUI(); + } + + Util.showSuccess(experimentTypeDisplayName + " " + message, callbackOk); + } else { //This should never happen + Util.showError("Unknown Error.", function() {Util.unblockUI();}); + } + + }); + } else { + Util.showError("No DSS available.", function() {Util.unblockUI();}); + } + } +} \ No newline at end of file diff --git a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/ExperimentForm/ExperimentFormModel.js b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/ExperimentForm/ExperimentFormModel.js new file mode 100644 index 0000000000000000000000000000000000000000..4ad313857cffd9420bb397201b17ea9485304811 --- /dev/null +++ b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/ExperimentForm/ExperimentFormModel.js @@ -0,0 +1,25 @@ +/* + * Copyright 2014 ETH Zuerich, Scientific IT Services + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +function ExperimentFormModel(mode, experiment) { + this.mode = mode; + this.isFormDirty = false; + //Initialize properties if not present for the creation mode + if(!experiment.properties) { + experiment.properties = {}; + } + this.experiment = experiment; +} \ No newline at end of file diff --git a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/ExperimentForm/ExperimentFormView.js b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/ExperimentForm/ExperimentFormView.js new file mode 100644 index 0000000000000000000000000000000000000000..25b22372a8d731767515c57a5c678e9c02ca2185 --- /dev/null +++ b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/ExperimentForm/ExperimentFormView.js @@ -0,0 +1,209 @@ +/* + * Copyright 2014 ETH Zuerich, Scientific IT Services + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +function ExperimentFormView(experimentFormController, experimentFormModel) { + this._experimentFormController = experimentFormController; + this._experimentFormModel = experimentFormModel; + + this.repaint = function($container) { + var _this = this; + $container.empty(); + + var $form = $("<div>", { "class" : "row"}); + var $formColumn = $("<form>", { + "class" : FormUtil.formColumClass + " form-horizontal", + 'role' : "form", + "action" : "javascript:void(0);", + "onsubmit" : "mainController.currentView._updateExperiment();" + }); + + $form.append($formColumn); + + // + // Title + // + var $formTitle = null; + if(this._experimentFormModel.mode === FormMode.VIEW || this._experimentFormModel.mode === FormMode.EDIT) { + $formTitle = $("<h2>").append("Experiment " + this._experimentFormModel.experiment.identifier); + } else { + $formTitle = $("<h2>").append("Create " + this._experimentFormModel.experiment.experimentTypeCode); + } + $formColumn.append($formTitle); + + // + // Create Sub Experiment + // + if(this._experimentFormModel.mode === FormMode.VIEW) { + var $createSubExpBtn = $("<a>", { "class" : "btn btn-default"}).append("Create Sub Experiment"); + $createSubExpBtn.click(function() { + var $dropdown = FormUtil.getSampleTypeDropdown("sampleTypeDropdown", true); + Util.blockUI("Select the type for the sub Experiment: <br><br>" + $dropdown[0].outerHTML + "<br> or <a class='btn btn-default' id='sampleTypeDropdownCancel'>Cancel</a>"); + + $("#sampleTypeDropdown").on("change", function(event) { + var sampleTypeCode = $("#sampleTypeDropdown")[0].value; + var argsMap = { + "sampleTypeCode" : sampleTypeCode, + "experimentIdentifier" : _this._experimentFormModel.experiment.identifier + } + var argsMapStr = JSON.stringify(argsMap); + + mainController.changeView("showCreateSubExperimentPage", argsMapStr); + }); + + $("#sampleTypeDropdownCancel").on("click", function(event) { + Util.unblockUI(); + }); + }); + $formTitle.append(" "); + $formTitle.append($createSubExpBtn); + + var $editBtn = $("<a>", { "class" : "btn btn-default"}).append("<span class='glyphicon glyphicon-edit'></span> Enable Editing"); + $editBtn.click(function() { + mainController.changeView("showEditExperimentPageFromIdentifier", _this._experimentFormModel.experiment.identifier); + }); + $formTitle.append(" "); + $formTitle.append($editBtn); + } + + // + // Metadata Identification + // + var $identificationInfo = $('<div>').append($('<legend>').text("Identification Info")); + $formColumn.append($identificationInfo); + + var identifierParts = this._experimentFormModel.experiment.identifier.split("/"); + + $formColumn.append(FormUtil.getFieldForLabelWithText("Type", this._experimentFormModel.experiment.experimentTypeCode)); + $formColumn.append(FormUtil.getFieldForLabelWithText("Project", identifierParts[0] + "/" + identifierParts[1] + "/" + identifierParts[2])); + var $projectField = FormUtil._getInputField("text", null, "project", null, true); + $projectField.val(identifierParts[0] + "/" + identifierParts[1] + "/" + identifierParts[2]); + $projectField.hide(); + $formColumn.append($projectField); + + if(this._experimentFormModel.mode === FormMode.VIEW || this._experimentFormModel.mode === FormMode.EDIT) { + $formColumn.append(FormUtil.getFieldForLabelWithText("Code", this._experimentFormModel.experiment.code)); + + var $codeField = FormUtil._getInputField("text", null, "code", null, true); + $codeField.val(identifierParts[3]); + $codeField.hide(); + $formColumn.append($codeField); + + $formColumn.append(FormUtil.getFieldForLabelWithText("Registrator", this._experimentFormModel.experiment.registrationDetails.userId)); + $formColumn.append(FormUtil.getFieldForLabelWithText("Registration Date", (new Date(this._experimentFormModel.experiment.registrationDetails.registrationDate)).toLocaleString())); + } else if(this._experimentFormModel.mode === FormMode.CREATE){ + var $codeField = FormUtil._getInputField("text", null, "code", null, true); + $codeField.change(function() { + _this._experimentFormModel.experiment.code = $(this).val(); + }) + $formColumn.append(FormUtil.getFieldForComponentWithLabel($codeField, "Code")); + } + + // + // Metadata Fields + // + var experimentType = mainController.profile.getExperimentTypeForExperimentTypeCode(this._experimentFormModel.experiment.experimentTypeCode); + + for(var i = 0; i < experimentType.propertyTypeGroups.length; i++) { + var propertyTypeGroup = experimentType.propertyTypeGroups[i]; + + var $fieldset = $('<div>'); + var $legend = $('<legend>'); + $fieldset.append($legend); + + if(propertyTypeGroup.name) { + $legend.text(propertyTypeGroup.name); + } else if(experimentType.propertyTypeGroups.length === 1) { //Only when there is only one group without name to render it with a default title. + $legend.text("Metadata Fields"); + } else { + $legend.remove(); + } + + for(var j = 0; j < propertyTypeGroup.propertyTypes.length; j++) { + var propertyType = propertyTypeGroup.propertyTypes[j]; + + var $controlGroup = null; + + if(this._experimentFormModel.mode === FormMode.VIEW) { //Show values without input boxes if the form is in view mode + $controlGroup = FormUtil.getFieldForLabelWithText(propertyType.label, this._experimentFormModel.experiment.properties[propertyType.code]); + } else { + var $component = FormUtil.getFieldForPropertyType(propertyType); + var propertyTypeCode = null; + //Update values if is into edit mode + if(this._experimentFormModel.mode === FormMode.EDIT) { + if(propertyType.dataType === "BOOLEAN") { + $($component.children()[0]).prop('checked', this._experimentFormModel.experiment.properties[propertyType.code] === "true"); + propertyTypeCode = propertyType.code; + } else if(propertyType.dataType === "TIMESTAMP") { + var value = this._experimentFormModel.experiment.properties[propertyType.code]; + $($($component.children()[0]).children()[0]).val(value); + propertyTypeCode = propertyType.code; + } else { + var value = this._experimentFormModel.experiment.properties[propertyType.code]; + propertyTypeCode = propertyType.code; + if(!value && propertyType.code.charAt(0) === '$') { + value = this._experimentFormModel.experiment.properties[propertyType.code.substr(1)]; + propertyTypeCode = propertyType.code.substr(1); + } + $component.val(value); + } + } + + var changeEvent = function(propertyType, propertyTypeCode) { + return function() { + _this._experimentFormModel.isFormDirty = true; + var field = $(this); + if(propertyType.dataType === "BOOLEAN") { + _this._experimentFormModel.experiment.properties[propertyTypeCode] = field.children()[0].checked; + } else if (propertyType.dataType === "TIMESTAMP") { + var timeValue = $($(field.children()[0]).children()[0]).val(); + _this._experimentFormModel.experiment.properties[propertyTypeCode] = timeValue; + } else { + _this._experimentFormModel.experiment.properties[propertyTypeCode] = Util.getEmptyIfNull(field.val()); + } + } + } + + $component.change(changeEvent(propertyType, propertyTypeCode)); + $controlGroup = FormUtil.getFieldForComponentWithLabel($component, propertyType.label); + } + + $fieldset.append($controlGroup); + } + + $formColumn.append($fieldset); + } + + if(this._experimentFormModel.mode === FormMode.EDIT || this._experimentFormModel.mode === FormMode.CREATE) { + var label = ""; + + if(this._experimentFormModel.mode === FormMode.EDIT) { + label = "Update Experiment " + this._experimentFormModel.experiment.code; + } else if(this._experimentFormModel.mode === FormMode.CREATE) { + label = "Create Experiment"; + } + + var $updateBtn = $("<a>", { "class" : "btn btn-primary"}).append(label); + $updateBtn.click(function() { + _this._experimentFormController.updateExperiment(); + }); + + $formColumn.append($updateBtn); + } + + $container.append($form); + Util.unblockUI(); + } +} \ No newline at end of file diff --git a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/ProjectForm/ProjectFormView.js b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/ProjectForm/ProjectFormView.js index 0954111160c5f169624fdda76d12719ec9b20f23..ac3ceefafea80e2c19e622e398c81bab6ba75095 100644 --- a/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/ProjectForm/ProjectFormView.js +++ b/plasmid/source/core-plugins/newbrowser/1/as/webapps/newbrowser/html/js/views/ProjectForm/ProjectFormView.js @@ -117,7 +117,7 @@ function ProjectFormView(projectFormController, projectFormModel) { btnText = "Update Project " + this._projectFormModel.project.code; } - var $updateBtn = $("<a>", { "class" : "btn btn-default"}).append(btnText); + var $updateBtn = $("<a>", { "class" : "btn btn-primary"}).append(btnText); $updateBtn.click(function() { _this._projectFormController.updateProject(); }); diff --git a/plasmid/source/core-plugins/newbrowser/1/dss/reporting-plugins/newbrowserapi/script.py b/plasmid/source/core-plugins/newbrowser/1/dss/reporting-plugins/newbrowserapi/script.py index aeb14e253b6cc2718f0f9caf401e6d9f17a2c987..c07d2a143a285629f3ceb74dc26c7464bc08e6ce 100644 --- a/plasmid/source/core-plugins/newbrowser/1/dss/reporting-plugins/newbrowserapi/script.py +++ b/plasmid/source/core-plugins/newbrowser/1/dss/reporting-plugins/newbrowserapi/script.py @@ -240,9 +240,6 @@ def insertUpdateExperiment(tr, parameters, tableBuilder): #Mandatory parameters experimentType = parameters.get("experimentType"); #String - experimentSpace = parameters.get("experimentSpace"); #String - experimentProject = parameters.get("experimentProject"); #String - experimentCode = parameters.get("experimentCode"); #String experimentIdentifier = parameters.get("experimentIdentifier"); #String experimentProperties = parameters.get("experimentProperties"); #java.util.LinkedHashMap<String, String> where the key is the name