From dae3cefa56f250eda1672a0a52840fb8be0f36d6 Mon Sep 17 00:00:00 2001 From: "Fuentes Serna Juan Mariano (ID SIS)" <juanf@bs-mbpr28.d.ethz.ch> Date: Tue, 11 Dec 2018 15:47:34 +0100 Subject: [PATCH] SSDM-6975 : Dynamic properties --- .../1/as/master-data/data-model.xls | Bin 103424 -> 102912 bytes .../scripts}/genetic_modifications.py | 8 +- .../1/as/webapps/eln-lims/html/index.html | 2 +- .../eln-lims/html/js/config/Profile.js | 2 +- ...echnology.js => LifeSciencesTechnology.js} | 12 +- .../eln-lims/1/compatibility/comments.py | 183 ------------ .../eln-lims/1/compatibility/managed.py | 267 ------------------ .../1/compatibility/requests_children_code.py | 14 - 8 files changed, 12 insertions(+), 476 deletions(-) rename openbis_standard_technologies/dist/core-plugins/{eln-lims/1/compatibility => eln-lims-life-sciences/1/as/master-data/scripts}/genetic_modifications.py (92%) rename openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/plugins/{BiologyTechnology.js => LifeSciencesTechnology.js} (88%) delete mode 100644 openbis_standard_technologies/dist/core-plugins/eln-lims/1/compatibility/comments.py delete mode 100644 openbis_standard_technologies/dist/core-plugins/eln-lims/1/compatibility/managed.py delete mode 100644 openbis_standard_technologies/dist/core-plugins/eln-lims/1/compatibility/requests_children_code.py diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/master-data/data-model.xls b/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/master-data/data-model.xls index fcb9ea57fb21fb635024372cb7a862d01a076864..e48c6791cc01af5e22d312990581b33b826836ad 100644 GIT binary patch delta 10908 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 G=Klb+5^uKv delta 11662 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 diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/compatibility/genetic_modifications.py b/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/master-data/scripts/genetic_modifications.py similarity index 92% rename from openbis_standard_technologies/dist/core-plugins/eln-lims/1/compatibility/genetic_modifications.py rename to openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/master-data/scripts/genetic_modifications.py index b91679ab633..0739e95afae 100644 --- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/compatibility/genetic_modifications.py +++ b/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/master-data/scripts/genetic_modifications.py @@ -37,7 +37,7 @@ def calculate(): parentCode = parent.code() #Add the code annotationMap = getAnnotationsForParent(parent, child) - if(annotationMap["PLASMID_RELATIONSHIP"] == "LOT"): + if(annotationMap["ANNOTATION.SYSTEM.PLASMID_RELATIONSHIP"] == "LOT"): newLostList.append(parent.entityPE().getPermId()) elif parent.entityPE().getPermId() not in lostList: #Check if is the first to add the separator or not @@ -58,16 +58,16 @@ def calculate(): return genotypeResult def getAnnotationString(annotationMap): - return annotationMap["PLASMID_RELATIONSHIP"] + " " + annotationMap["PLASMID_ANNOTATION"] + return annotationMap["ANNOTATION.SYSTEM.PLASMID_RELATIONSHIP"] + " " + annotationMap["ANNOTATION.SYSTEM.PLASMID_ANNOTATION"] def getAnnotationsForParent(parent, child): permId = parent.entityPE().getPermId() annotations = child.propertyValue("ANNOTATIONS_STATE") if (annotations is not None) and ('<root' in annotations): - relationshipValue = getAnnotationFromPermId(annotations, permId, "PLASMID_RELATIONSHIP") + relationshipValue = getAnnotationFromPermId(annotations, permId, "ANNOTATION.SYSTEM.PLASMID_RELATIONSHIP") if relationshipValue is None: relationshipValue = "None" - annotationValue = getAnnotationFromPermId(annotations, permId, "PLASMID_ANNOTATION"); + annotationValue = getAnnotationFromPermId(annotations, permId, "ANNOTATION.SYSTEM.PLASMID_ANNOTATION"); if annotationValue is None: annotationValue = "" annotation = "\"" + str(annotationValue) + "\"" diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/index.html b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/index.html index cd590405472..50c5bd15300 100644 --- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/index.html +++ b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/index.html @@ -262,7 +262,7 @@ <script type="text/javascript" src="./js/plugins/ELNLIMSPlugin.js"></script> <script type="text/javascript" src="./js/plugins/GenericTechnology.js"></script> - <script type="text/javascript" src="./js/plugins/BiologyTechnology.js"></script> + <script type="text/javascript" src="./js/plugins/LifeSciencesTechnology.js"></script> <script type="text/javascript" src="./js/plugins/MicroscopyTechnology.js"></script> <script type="text/javascript"> diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/Profile.js b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/Profile.js index 1350c50b9cc..53fb5118d6c 100644 --- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/Profile.js +++ b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/config/Profile.js @@ -133,7 +133,7 @@ $.extend(DefaultProfile.prototype, { // "ADMIN-BS-MBPR28.D.ETHZ.CH-E96954A7" : "http://localhost:8080/download" } - this.plugins = [new GenericTechnology(), new BiologyTechnology(), new MicroscopyTechnology()]; + this.plugins = [new GenericTechnology(), new LifeSciencesTechnology(), new MicroscopyTechnology()]; this.sampleFormTop = function($container, model) { for(var i = 0; i < this.plugins.length; i++) { this.plugins[i].sampleFormTop($container, model); diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/plugins/BiologyTechnology.js b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/plugins/LifeSciencesTechnology.js similarity index 88% rename from openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/plugins/BiologyTechnology.js rename to openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/plugins/LifeSciencesTechnology.js index c7dfec2ec05..d064fe15a72 100644 --- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/plugins/BiologyTechnology.js +++ b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/as/webapps/eln-lims/html/js/plugins/LifeSciencesTechnology.js @@ -1,8 +1,8 @@ -function BiologyTechnology() { +function LifeSciencesTechnology() { this.init(); } -$.extend(BiologyTechnology.prototype, ELNLIMSPlugin.prototype, { +$.extend(LifeSciencesTechnology.prototype, ELNLIMSPlugin.prototype, { init: function() { }, @@ -151,7 +151,7 @@ $.extend(BiologyTechnology.prototype, ELNLIMSPlugin.prototype, { "LABEL" : "Plasmid", "TYPE": "PLASMID", "MIN_COUNT" : 0, - "ANNOTATION_PROPERTIES" : [{"TYPE" : "ANNOTATION.PLASMID.PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "ANNOTATION.PLASMID.PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "ANNOTATION.SYSTEM.COMMENTS", "MANDATORY" : false }] + "ANNOTATION_PROPERTIES" : [{"TYPE" : "ANNOTATION.SYSTEM.PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "ANNOTATION.SYSTEM.PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "ANNOTATION.SYSTEM.COMMENTS", "MANDATORY" : false }] } ], }, @@ -169,7 +169,7 @@ $.extend(BiologyTechnology.prototype, ELNLIMSPlugin.prototype, { "LABEL" : "Plasmid", "TYPE": "PLASMID", "MIN_COUNT" : 0, - "ANNOTATION_PROPERTIES" : [{"TYPE" : "ANNOTATION.PLASMID.PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "ANNOTATION.PLASMID.PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "ANNOTATION.SYSTEM.COMMENTS", "MANDATORY" : false }] + "ANNOTATION_PROPERTIES" : [{"TYPE" : "ANNOTATION.SYSTEM.PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "ANNOTATION.SYSTEM.PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "ANNOTATION.SYSTEM.COMMENTS", "MANDATORY" : false }] } ], }, @@ -187,7 +187,7 @@ $.extend(BiologyTechnology.prototype, ELNLIMSPlugin.prototype, { "LABEL" : "Plasmid", "TYPE": "PLASMID", "MIN_COUNT" : 0, - "ANNOTATION_PROPERTIES" : [{"TYPE" : "ANNOTATION.PLASMID.PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "ANNOTATION.PLASMID.PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "ANNOTATION.SYSTEM.COMMENTS", "MANDATORY" : false }] + "ANNOTATION_PROPERTIES" : [{"TYPE" : "ANNOTATION.SYSTEM.PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "ANNOTATION.SYSTEM.PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "ANNOTATION.SYSTEM.COMMENTS", "MANDATORY" : false }] }, { "LABEL" : "Parental fly", @@ -211,7 +211,7 @@ $.extend(BiologyTechnology.prototype, ELNLIMSPlugin.prototype, { "LABEL" : "Plasmid", "TYPE": "PLASMID", "MIN_COUNT" : 0, - "ANNOTATION_PROPERTIES" : [{"TYPE" : "ANNOTATION.PLASMID.PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "ANNOTATION.PLASMID.PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "ANNOTATION.SYSTEM.COMMENTS", "MANDATORY" : false }] + "ANNOTATION_PROPERTIES" : [{"TYPE" : "ANNOTATION.SYSTEM.PLASMID_RELATIONSHIP", "MANDATORY" : false },{"TYPE" : "ANNOTATION.SYSTEM.PLASMID_ANNOTATION", "MANDATORY" : false },{"TYPE" : "ANNOTATION.SYSTEM.COMMENTS", "MANDATORY" : false }] } ], } diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/compatibility/comments.py b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/compatibility/comments.py deleted file mode 100644 index 396f3acb179..00000000000 --- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/compatibility/comments.py +++ /dev/null @@ -1,183 +0,0 @@ -from java.util import Date - -""" -Example XML property value handled by this script: -<root> - <commentEntry date="2011-02-20 14:15:28 GMT+01:00" person="buczekp">Here is the 1st entry text.<commentEntry> - <commentEntry date="2011-02-20 14:16:28 GMT+01:00" person="kohleman">Here is the 2nd entry text - a warning!<commentEntry> - <commentEntry date="2011-02-20 14:17:28 GMT+01:00" person="tpylak">Here is the 3rd entry text - an error!!!<commentEntry> - <commentEntry date="2011-02-20 14:18:28 GMT+01:00" person="brinn">Here is the 4th entry text - an error!!!<commentEntry> - <commentEntry date="2011-02-20 14:19:28 GMT+01:00" person="felmer">Here is the 5th entry text - a warning!<commentEntry> -</root> -""" -## -## Configuration -## -COMMENT_ENTRY_ELEMENT_LABEL = 'commentEntry' - -""" labels of table columns and corresponding input fields """ -DATE_LABEL = 'Date' -PERSON_LABEL = 'Person' -COMMENT_TEXT_LABEL = 'Comment Text' - -""" names of attributes of XML elements for comment entries """ -DATE_ATTRIBUTE = 'date' -PERSON_ATTRIBUTE = 'person' - -""" action labels (shown as button labels in UI) """ -ADD_ACTION_LABEL = 'Add Comment Entry' -EDIT_ACTION_LABEL = 'Edit' -DELETE_ACTION_LABEL = 'Delete' - -## -## Main Methods -## -def configureUI(): - """Create table builder and add headers of columns.""" - builder = createTableBuilder() - builder.addHeader(DATE_LABEL, 250) # date and comment text values are long, override default width (150) - builder.addHeader(PERSON_LABEL) - builder.addHeader(COMMENT_TEXT_LABEL, 400) - - """ - Extract XML elements from property value to a Python list. - For each element (comment entry) add add a row to the table. - """ - elements = list(propertyConverter().convertToElements(property)) - for commentEntry in elements: - row = builder.addRow() - row.setCell(DATE_LABEL, Date(long(commentEntry.getAttribute(DATE_ATTRIBUTE)))) - row.setCell(PERSON_LABEL, commentEntry.getAttribute(PERSON_ATTRIBUTE)) - row.setCell(COMMENT_TEXT_LABEL, commentEntry.getData()) - - """Specify that the property should be shown in a tab and set the table output.""" - property.setOwnTab(True) - uiDescription = property.getUiDescription() - uiDescription.useTableOutput(builder.getTableModel()) - - """ - Define and add actions with input fields used to: - 1. specify attributes of new comment entry, - """ - addAction = uiDescription.addTableAction(ADD_ACTION_LABEL)\ - .setDescription('Add a new comment entry:') - widgets = [ - inputWidgetFactory().createMultilineTextInputField(COMMENT_TEXT_LABEL)\ - .setMandatory(True) - ] - addAction.addInputWidgets(widgets) - - """ - 2. modify attributes of a selected comment entry, - """ - editAction = uiDescription.addTableAction(EDIT_ACTION_LABEL)\ - .setDescription('Edit selected comment entry:') - # Exactly 1 row needs to be selected to enable action. - editAction.setRowSelectionRequiredSingle() - widgets = [ - inputWidgetFactory().createMultilineTextInputField(COMMENT_TEXT_LABEL).setMandatory(True) - ] - editAction.addInputWidgets(widgets) - # Bind field name with column name. - editAction.addBinding(COMMENT_TEXT_LABEL, COMMENT_TEXT_LABEL) - - """ - 3. delete selected comment entries. - """ - deleteAction = uiDescription.addTableAction(DELETE_ACTION_LABEL)\ - .setDescription('Are you sure you want to delete selected comment entry?') - # Delete is enabled when at least 1 row is selected. - deleteAction.setRowSelectionRequired() - - -def updateFromUI(action): - """Extract list of elements from old value of the property.""" - converter = propertyConverter() - elements = list(converter.convertToElements(property)) - - """Implement behaviour of user actions.""" - if action.name == ADD_ACTION_LABEL: - """ - For 'add' action create new comment entry element with values from input fields - and add it to existing elements. - """ - element = elementFactory().createElement(COMMENT_ENTRY_ELEMENT_LABEL) - """Fill element attributes with appropriate values.""" - element.addAttribute(DATE_ATTRIBUTE, str(Date().getTime())) # current date - element.addAttribute(PERSON_ATTRIBUTE, action.getPerson().getUserId()) # invoker the action - """Retrieve values from input fields filled by user on the client side.""" - - """Set comment text as a text element, not an attribute.""" - element.setData(action.getInputValue(COMMENT_TEXT_LABEL)) - """Add the new entry to the end of the element list.""" - elements.append(element) - elif action.name == EDIT_ACTION_LABEL: - """ - For 'edit' action find the comment entry element corresponding to selected row - and replace it with an element with values from input fields. - """ - - selectedRowId = action.getSelectedRows()[0] - xmlUser = elements[selectedRowId].getAttribute(PERSON_ATTRIBUTE) - if action.getPerson().getUserId() == xmlUser: - elements[selectedRowId].setData(action.getInputValue(COMMENT_TEXT_LABEL)) - else: - raise ValidationException('Comment creator and current user differ:\n' + str(xmlUser) + "!=" + str(action.getPerson().getUserId()) ) - elif action.name == DELETE_ACTION_LABEL: - """ - For 'delete' action delete the entries that correspond to selected rows. - NOTE: As many rows can be deleted at once it is easier to delete them in reversed order. - """ - rowIds = list(action.getSelectedRows()) - rowIds.reverse() - for rowId in rowIds: - xmlUser = elements[rowId].getAttribute(PERSON_ATTRIBUTE) - if action.getPerson().getUserId() == xmlUser: - elements.pop(rowId) - else: - raise ValidationException('Comment creator and current user differ:\n' + str(xmlUser) + "!=" + str(action.getPerson().getUserId()) ) - else: - raise ValidationException('action not supported') - - """Update value of the managed property to XML string created from modified list of elements.""" - property.value = converter.convertToString(elements) - -## -## Form Methods -## -def showRawValueInForms(): - return False - -def updateFromRegistrationForm(bindings): - elements = [] - for item in bindings: - comment_text_list = item.get('COMMENTENTRY') - sampleLink = _createCommentEntry(comment_text_list) - elements.append(sampleLink) - - property.value = propertyConverter().convertToString(elements) - -## -## Batch Import Methods -## -def batchColumnNames(): - return [COMMENT_ENTRY_ELEMENT_LABEL] - -def updateFromBatchInput(bindings): - elements = [] - input = bindings.get('COMMENTENTRY') - if input is not None: - commentEntry = _createCommentEntry(input) - elements.append(commentEntry) - property.value = propertyConverter().convertToString(elements) - -## -## Help Methods -## -def _createCommentEntry(comment_text_list): - #if comment_text_list is not None: - commentEntry = elementFactory().createElement(COMMENT_ENTRY_ELEMENT_LABEL) - commentEntry.addAttribute(PERSON_ATTRIBUTE, person.getUserId()) - commentEntry.addAttribute(DATE_ATTRIBUTE,str(Date().getTime())) - commentEntry.setData(comment_text_list) - return commentEntry \ No newline at end of file diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/compatibility/managed.py b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/compatibility/managed.py deleted file mode 100644 index 848a92850e0..00000000000 --- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/compatibility/managed.py +++ /dev/null @@ -1,267 +0,0 @@ -from ch.systemsx.cisd.openbis.generic.server import CommonServiceProvider - -## -## Configuration -## - -# This needs to be edited for each sample type to match the Profile.js ANNOTATION_PROPERTIES map. -configuration = {} -configuration["MEDIA"] = { - "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False }, - "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False }, - "MEDIA" : {"QUANTITY" : False, "COMMENTS" : False } - }; - -configuration["SOLUTION_BUFFER"] = { - "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False }, - "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False }, - "MEDIA" : {"QUANTITY" : False, "COMMENTS" : False } - }; - -configuration["GENERAL_PROTOCOL"] = { - "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False }, - "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False }, - "MEDIA" : {"QUANTITY" : False, "COMMENTS" : False }, - "ENZYME" : {"QUANTITY" : False, "COMMENTS" : False }, - "GENERAL_PROTOCOL" : {"COMMENTS" : False } - }; - -configuration["PCR_PROTOCOL"] = { - "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False }, - "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False }, - "ENZYME" : {"QUANTITY" : False, "COMMENTS" : False } - }; - -configuration["WESTERN_BLOTTING_PROTOCOL"] = { - "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False }, - "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False }, - "ANTIBODY" : {"QUANTITY" : False, "COMMENTS" : False } - }; - -configuration["PLASMID"] = { - "PLASMID" : {"COMMENTS" : False } - }; - -configuration["BACTERIA"] = { - "BACTERIA" : {"COMMENTS" : False }, - "PLASMID" : {"PLASMID_RELATIONSHIP" : False, "PLASMID_ANNOTATION" : False, "COMMENTS" : False } - }; - -configuration["YEAST"] = { - "YEAST" : {"COMMENTS" : False }, - "PLASMID" : {"PLASMID_RELATIONSHIP" : False, "PLASMID_ANNOTATION" : False, "COMMENTS" : False, "CONTAINED" : False } - }; - -configuration["CELL_LINE"] = { - "CELL_LINE" : {"COMMENTS" : False }, - "PLASMID" : {"PLASMID_RELATIONSHIP" : False, "PLASMID_ANNOTATION" : False, "COMMENTS" : False }, - "FLY" : {"COMMENTS" : False } - }; - -configuration["FLY"] = { - "FLY" : {"COMMENTS" : False }, - "PLASMID" : {"PLASMID_RELATIONSHIP" : False, "PLASMID_ANNOTATION" : False, "COMMENTS" : False } - }; - -configuration["EXPERIMENTAL_STEP"] = { - "ANTIBODY" : {"QUANTITY" : False, "COMMENTS" : False }, - "BACTERIA" : {"COMMENTS" : False }, - "CELL_LINE" : {"COMMENTS" : False }, - "CHEMICAL" : {"QUANTITY" : False, "COMMENTS" : False }, - "ENZYME" : {"QUANTITY" : False, "COMMENTS" : False }, - "FLY" : {"COMMENTS" : False }, - "MEDIA" : {"QUANTITY" : False, "COMMENTS" : False }, - "OLIGO" : {"COMMENTS" : False }, - "PLASMID" : {"COMMENTS" : False }, - "RNA" : {"COMMENTS" : False }, - "SOLUTION_BUFFER" : {"QUANTITY" : False, "COMMENTS" : False }, - "YEAST" : {"COMMENTS" : False }, - "GENERAL_PROTOCOL" : {"COMMENTS" : False }, - "PCR_PROTOCOL" : {"COMMENTS" : False }, - "WESTERN_BLOTTING_PROTOCOL" : {"COMMENTS" : False } - }; - -#Global Variables -annotableType = "<REPLACE_WITH_ANNOTABLE_TYPE>" -propertyTypes = None -def getPropertyTypes(): - global propertyTypes - if propertyTypes is None: - server = CommonServiceProvider.getCommonServer() - contextOrNull = server.tryToAuthenticateAsSystem() - propertyTypes = server.listPropertyTypes(contextOrNull.getSessionToken(), False) - return propertyTypes; - -## -## Help Methods -## -def getAllAnnotableSampleTypesForType(fromAnnotableType): - allTypes = {}; - for sampleTypeWithAnnotations in configuration: - if (fromAnnotableType == None) or (fromAnnotableType == sampleTypeWithAnnotations): - for sampleTypeWithAnnotationsForType in configuration[sampleTypeWithAnnotations]: - allTypes[sampleTypeWithAnnotationsForType] = True; - return allTypes; - -def getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCodeToFind, fromAnnotableType): - for sampleTypeWithAnnotations in configuration: - if (fromAnnotableType == None) or (fromAnnotableType == sampleTypeWithAnnotations): - for sampleTypeWithAnnotationsForType in configuration[sampleTypeWithAnnotations]: - if sampleTypeWithAnnotationsForType == sampleTypeCodeToFind: - return configuration[sampleTypeWithAnnotations][sampleTypeWithAnnotationsForType]; - return None; - -def getPropertyType(propertyTypeCode): - for propertyType in getPropertyTypes(): - if propertyType.code == propertyTypeCode: - return propertyType - return None; - -def createAnnotationsFor(identifier, annotations, sampleType): - permId = entityInformationProvider().getSamplePermId(identifier); - newAnnotation = elementFactory().createSampleLink(permId) - - newAnnotation.addAttribute("identifier", identifier) - newAnnotation.addAttribute("sampleType", sampleType) - for annotation in annotations: - newAnnotation.addAttribute(annotation, annotations[annotation]) - return newAnnotation - -def getWidgetForAdd(sampleTypeCode, annotableType): - #print "sampleTypeCode:" + sampleTypeCode + " - " + annotableType #Deleting this comment causes the thing to break - widgets = [] - widgetIdentifier = inputWidgetFactory().createTextInputField("identifier")\ - .setMandatory(True)\ - .setValue("")\ - .setDescription("") - widgets.append(widgetIdentifier) - for propertyTypeCode in getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCode, annotableType): - propertyType = getPropertyType(propertyTypeCode) - widget = inputWidgetFactory().createTextInputField(propertyType.label)\ - .setMandatory(getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCode, annotableType)[propertyTypeCode])\ - .setValue("")\ - .setDescription(propertyType.description) - widgets.append(widget) - return widgets; - -def isValid(dataType, value): - return True - -## -## Main Methods -## -def configureUI(): - # Add Headers - tableBuilder = createTableBuilder() - tableBuilder.addHeader("identifier") - tableBuilder.addHeader("sampleType") - tableBuilder.addHeader("name") - - usedTableHeaders = {"identifier" : True, "sampleType" : True, "name" : True } - - for sampleTypeCode in getAllAnnotableSampleTypesForType(annotableType): - for propertyTypeCode in getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCode, annotableType): - if propertyTypeCode not in usedTableHeaders: - tableBuilder.addHeader(propertyTypeCode) - usedTableHeaders[propertyTypeCode] = True - - property.setOwnTab(True) - uiDescription = property.getUiDescription() - uiDescription.useTableOutput(tableBuilder.getTableModel()) - - # Add Rows - samples = list(propertyConverter().convertToElements(property)) - for sample in samples: - row = tableBuilder.addRow() - permId = sample.getAttribute("permId") - - nameValue = entityInformationProvider().getSamplePropertyValue(permId, "NAME") - if nameValue is not None: - row.setCell("name", nameValue) - - for annotation in sample.getAttributes(): - if annotation != "permId": - if annotation == "identifier": - row.setCell(annotation, sample, sample.getAttribute(annotation)) - else: - row.setCell(annotation, sample.getAttribute(annotation)) - - # Add Create buttons - for sampleTypeCode in getAllAnnotableSampleTypesForType(annotableType): - title = "Add " + sampleTypeCode; - addAction = uiDescription.addTableAction(title).setDescription(title) - widgets = getWidgetForAdd(sampleTypeCode, annotableType) - addAction.addInputWidgets(widgets) - - # Add Delete button - deleteAction = uiDescription.addTableAction("Delete")\ - .setDescription('Are you sure you want to delete selected annotation?') - deleteAction.setRowSelectionRequired() # Delete is enabled when at least 1 row is selected. - -def updateFromUI(action): - converter = propertyConverter() - elements = list(converter.convertToElements(property)) - - if action.name.startswith("Add"): - sampleTypeCode = action.name[4:] - identifier = action.getInputValue("identifier") - annotations = { } - for propertyTypeCode in getPropertyTypesForSampleTypeFromAnnotableType(sampleTypeCode, annotableType): - propertyType = getPropertyType(propertyTypeCode) - propertyTypeValue = action.getInputValue(propertyType.label) - if not isValid(propertyType.dataType, propertyTypeValue): - raise ValidationException("Property " + str(propertyType.label) + " with invalid value " + str(propertyTypeValue)) - if propertyTypeValue is None: - propertyTypeValue = "" - annotations[propertyTypeCode] = propertyTypeValue - newAnnotation = createAnnotationsFor(identifier, annotations, sampleTypeCode) - elements.append(newAnnotation) - - if action.name.startswith("Delete"): - rowIds = list(action.getSelectedRows()) - rowIds.reverse() - for rowId in rowIds: - elements.pop(rowId) - - property.value = converter.convertToString(elements) - -## -## Batch Import Methods -## -def batchColumnNames(): - allTypes = [] - for sampleTypeCode in getAllAnnotableSampleTypesForType(annotableType): - allTypes.append(sampleTypeCode) - return allTypes - -def updateFromBatchInput(bindings): - #print "--------> UPDATE FROM BATCH INPUT: " - elements = [] - - for annotableSampleType in getAllAnnotableSampleTypesForType(annotableType): - annotatedSamples = bindings.get(annotableSampleType) - #print "-----> TYPE: " + str(annotableSampleType) + " BINDINGS: " + str(annotatedSamples) - if (annotatedSamples != None and annotatedSamples != ""): - #Annotations - for sampleLine in annotatedSamples.split("\\"): - propertyTypes = getPropertyTypesForSampleTypeFromAnnotableType(annotableSampleType, annotableType) - identifier = None - permId = None - sampleLink = None - for sampleProperty in sampleLine.split(";"): - propertyName = sampleProperty.split(":")[0] - propertyValue = sampleProperty.split(":")[1] - if propertyName == "identifier": - identifier = propertyValue - permId = entityInformationProvider().getSamplePermId(propertyValue) - sampleLink = elementFactory().createSampleLink(permId) - sampleLink.addAttribute(propertyName, propertyValue) - sampleLink.addAttribute('sampleType', annotableSampleType) - elif propertyName in propertyTypes: - sampleLink.addAttribute(propertyName, propertyValue) - else: - raise NameError('Found invalid property: ' + propertyName + " on type " + annotableSampleType) - if identifier is not None: - elements.append(sampleLink) - #Links - property.value = propertyConverter().convertToString(elements) \ No newline at end of file diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/compatibility/requests_children_code.py b/openbis_standard_technologies/dist/core-plugins/eln-lims/1/compatibility/requests_children_code.py deleted file mode 100644 index c79ad63402a..00000000000 --- a/openbis_standard_technologies/dist/core-plugins/eln-lims/1/compatibility/requests_children_code.py +++ /dev/null @@ -1,14 +0,0 @@ -def retrieve_childrenCode(): - - sample= entity.samplePE() - children=sample.children - if len(children) != 0: - children_code = children[0].getCode() - else: - children_code="n.a." - - - return children_code - -def calculate(): - return retrieve_childrenCode() -- GitLab