Skip to content
Permalink
Browse files

Merge pull request #196 from TNO/master

Merge TNO master into Phenotype Database master
  • Loading branch information
ferryjagers committed Nov 1, 2019
2 parents 705c695 + 2f2e67b commit 279f0db7fcd92d7ea3779d455e276091339e508d
Showing with 8,775 additions and 115 deletions.
  1. +23 −36 grails-app/conf/BuildConfig.groovy
  2. +2 −1 grails-app/conf/DataSource.groovy
  3. +1 −1 grails-app/services/api/ApiService.groovy
  4. +25 −27 grails-app/services/dbnp/studycapturing/StudyEditService.groovy
  5. +11 −16 local-plugins/GDT/grails-app/conf/BuildConfig.groovy
  6. +2 −1 local-plugins/GDT/grails-app/views/templateEditor/compare.gsp
  7. +26 −20 local-plugins/SAM/grails-app/conf/BuildConfig.groovy
  8. +3 −1 local-plugins/SAM/grails-app/controllers/org/dbxp/sam/RestController.groovy
  9. +12 −7 local-plugins/dbxpBase/grails-app/controllers/dbnp/importer/ImporterController.groovy
  10. +1 −1 local-plugins/dbxpBase/grails-app/views/importer/exact.gsp
  11. +11 −3 local-plugins/dbxpBase/grails-app/views/importer/upload.gsp
  12. +19 −0 local-plugins/dbxpModuleBase/.gitignore
  13. +39 −0 local-plugins/dbxpModuleBase/DbxpModuleBaseGrailsPlugin.groovy
  14. +28 −0 local-plugins/dbxpModuleBase/README.md
  15. +4 −0 local-plugins/dbxpModuleBase/application.properties
  16. +57 −0 local-plugins/dbxpModuleBase/grails-app/conf/BuildConfig.groovy
  17. +42 −0 local-plugins/dbxpModuleBase/grails-app/conf/Config.groovy
  18. +46 −0 local-plugins/dbxpModuleBase/grails-app/conf/DataSource.groovy
  19. +25 −0 local-plugins/dbxpModuleBase/grails-app/conf/DbxpModuleBasePluginResources.groovy
  20. +13 −0 local-plugins/dbxpModuleBase/grails-app/conf/UrlMappings.groovy
  21. +196 −0 local-plugins/dbxpModuleBase/grails-app/taglib/org/dbxp/moduleBase/DataTablesTagLib.groovy
  22. +54 −0 local-plugins/dbxpModuleBase/grails-app/views/error.gsp
  23. +13 −0 local-plugins/dbxpModuleBase/grails-app/views/index.gsp
  24. +159 −0 local-plugins/dbxpModuleBase/grails-app/views/layouts/module.gsp
  25. +10 −0 local-plugins/dbxpModuleBase/scripts/_Install.groovy
  26. +5 −0 local-plugins/dbxpModuleBase/scripts/_Uninstall.groovy
  27. +10 −0 local-plugins/dbxpModuleBase/scripts/_Upgrade.groovy
  28. +12 −0 local-plugins/dbxpModuleBase/src/groovy/org/dbxp/moduleBase/AuthenticationRequired.groovy
  29. +9 −0 local-plugins/dbxpModuleBase/src/groovy/org/dbxp/moduleBase/BadRequestException.groovy
  30. +12 −0 local-plugins/dbxpModuleBase/src/groovy/org/dbxp/moduleBase/NoAuthenticationRequired.groovy
  31. +9 −0 local-plugins/dbxpModuleBase/src/groovy/org/dbxp/moduleBase/NotAuthenticatedException.groovy
  32. +9 −0 local-plugins/dbxpModuleBase/src/groovy/org/dbxp/moduleBase/NotAuthorizedException.groovy
  33. +18 −0 local-plugins/dbxpModuleBase/src/groovy/org/dbxp/moduleBase/RefreshUserInformation.groovy
  34. +9 −0 local-plugins/dbxpModuleBase/src/groovy/org/dbxp/moduleBase/ResourceNotFoundException.groovy
  35. +17 −0 local-plugins/dbxpModuleBase/test/unit/dbxpmodulebase/CssControllerTests.groovy
  36. +17 −0 local-plugins/dbxpModuleBase/test/unit/dbxpmodulebase/DataTablesTagLibTests.groovy
  37. +195 −0 local-plugins/dbxpModuleBase/test/unit/org/dbxp/moduleBase/GscfServiceTests.groovy
  38. +17 −0 local-plugins/dbxpModuleBase/test/unit/org/dbxp/moduleBase/RestControllerTests.groovy
  39. +42 −0 local-plugins/dbxpModuleBase/web-app/WEB-INF/applicationContext.xml
  40. +14 −0 local-plugins/dbxpModuleBase/web-app/WEB-INF/sitemesh.xml
  41. +563 −0 local-plugins/dbxpModuleBase/web-app/WEB-INF/tld/c.tld
  42. +671 −0 local-plugins/dbxpModuleBase/web-app/WEB-INF/tld/fmt.tld
  43. +550 −0 local-plugins/dbxpModuleBase/web-app/WEB-INF/tld/grails.tld
  44. +311 −0 local-plugins/dbxpModuleBase/web-app/WEB-INF/tld/spring.tld
  45. BIN local-plugins/dbxpModuleBase/web-app/css/cupertino/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png
  46. BIN local-plugins/dbxpModuleBase/web-app/css/cupertino/images/ui-bg_flat_15_cd0a0a_40x100.png
  47. BIN local-plugins/dbxpModuleBase/web-app/css/cupertino/images/ui-bg_glass_100_e4f1fb_1x400.png
  48. BIN local-plugins/dbxpModuleBase/web-app/css/cupertino/images/ui-bg_glass_50_3baae3_1x400.png
  49. BIN local-plugins/dbxpModuleBase/web-app/css/cupertino/images/ui-bg_glass_80_d7ebf9_1x400.png
  50. BIN local-plugins/dbxpModuleBase/web-app/css/cupertino/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png
  51. BIN local-plugins/dbxpModuleBase/web-app/css/cupertino/images/ui-bg_highlight-hard_70_000000_1x100.png
  52. BIN local-plugins/dbxpModuleBase/web-app/css/cupertino/images/ui-bg_highlight-soft_100_deedf7_1x100.png
  53. BIN local-plugins/dbxpModuleBase/web-app/css/cupertino/images/ui-bg_highlight-soft_25_ffef8f_1x100.png
  54. BIN local-plugins/dbxpModuleBase/web-app/css/cupertino/images/ui-icons_2694e8_256x240.png
  55. BIN local-plugins/dbxpModuleBase/web-app/css/cupertino/images/ui-icons_2e83ff_256x240.png
  56. BIN local-plugins/dbxpModuleBase/web-app/css/cupertino/images/ui-icons_3d80b3_256x240.png
  57. BIN local-plugins/dbxpModuleBase/web-app/css/cupertino/images/ui-icons_72a7cf_256x240.png
  58. BIN local-plugins/dbxpModuleBase/web-app/css/cupertino/images/ui-icons_ffffff_256x240.png
  59. +578 −0 local-plugins/dbxpModuleBase/web-app/css/cupertino/jquery-ui-1.8.13.custom.css
  60. +1 −0 local-plugins/dbxpModuleBase/web-app/css/cupertino/jquery-ui-1.8.13.custom.min.css
  61. +536 −0 local-plugins/dbxpModuleBase/web-app/css/datatables.css
  62. +471 −0 local-plugins/dbxpModuleBase/web-app/css/module.css
  63. BIN local-plugins/dbxpModuleBase/web-app/images/datatables/back_disabled.jpg
  64. BIN local-plugins/dbxpModuleBase/web-app/images/datatables/back_enabled.jpg
  65. BIN local-plugins/dbxpModuleBase/web-app/images/datatables/forward_disabled.jpg
  66. BIN local-plugins/dbxpModuleBase/web-app/images/datatables/forward_enabled.jpg
  67. BIN local-plugins/dbxpModuleBase/web-app/images/datatables/shadow.jpg
  68. BIN local-plugins/dbxpModuleBase/web-app/images/datatables/sort_asc.png
  69. BIN local-plugins/dbxpModuleBase/web-app/images/datatables/sort_asc_disabled.png
  70. BIN local-plugins/dbxpModuleBase/web-app/images/datatables/sort_both.png
  71. BIN local-plugins/dbxpModuleBase/web-app/images/datatables/sort_desc.png
  72. BIN local-plugins/dbxpModuleBase/web-app/images/datatables/sort_desc_disabled.png
  73. BIN local-plugins/dbxpModuleBase/web-app/images/datatables/sorted_asc.gif
  74. BIN local-plugins/dbxpModuleBase/web-app/images/datatables/sorted_desc.gif
  75. BIN local-plugins/dbxpModuleBase/web-app/images/favicon.ico
  76. BIN local-plugins/dbxpModuleBase/web-app/images/spinner.gif
  77. BIN local-plugins/dbxpModuleBase/web-app/images/topnav/dropdown_linkbg.gif
  78. BIN local-plugins/dbxpModuleBase/web-app/images/topnav/header_bg.gif
  79. BIN local-plugins/dbxpModuleBase/web-app/images/topnav/subnav_btn.gif
  80. BIN local-plugins/dbxpModuleBase/web-app/images/topnav/topnav_bg.gif
  81. BIN local-plugins/dbxpModuleBase/web-app/images/topnav/topnav_hover.gif
  82. +470 −0 local-plugins/dbxpModuleBase/web-app/js/datatables.js
  83. +20 −0 local-plugins/dbxpModuleBase/web-app/js/topnav.js
  84. +172 −0 local-plugins/matrixImporter/.gitignore
  85. +22 −0 local-plugins/matrixImporter/MatrixImporterGrailsPlugin.groovy
  86. +5 −0 local-plugins/matrixImporter/application.properties
  87. +33 −0 local-plugins/matrixImporter/grails-app/conf/BuildConfig.groovy
  88. +24 −0 local-plugins/matrixImporter/grails-app/conf/Config.groovy
  89. +32 −0 local-plugins/matrixImporter/grails-app/conf/DataSource.groovy
  90. +13 −0 local-plugins/matrixImporter/grails-app/conf/UrlMappings.groovy
  91. +54 −0 local-plugins/matrixImporter/grails-app/views/error.gsp
  92. BIN local-plugins/matrixImporter/lib/xbean.jar
  93. +20 −0 local-plugins/matrixImporter/plugin.xml
  94. +10 −0 local-plugins/matrixImporter/scripts/_Install.groovy
  95. +5 −0 local-plugins/matrixImporter/scripts/_Uninstall.groovy
  96. +10 −0 local-plugins/matrixImporter/scripts/_Upgrade.groovy
  97. +162 −0 local-plugins/matrixImporter/src/groovy/org/dbxp/matriximporter/CsvParser.groovy
  98. +138 −0 local-plugins/matrixImporter/src/groovy/org/dbxp/matriximporter/ExcelParser.groovy
  99. +173 −0 local-plugins/matrixImporter/src/groovy/org/dbxp/matriximporter/ExcelXParser.groovy
  100. +190 −0 local-plugins/matrixImporter/src/groovy/org/dbxp/matriximporter/MatrixImporter.groovy
  101. +82 −0 local-plugins/matrixImporter/src/groovy/org/dbxp/matriximporter/MatrixParser.groovy
  102. +79 −0 local-plugins/matrixImporter/test/unit/matriximporter/MatrixImporterTests.groovy
  103. +1 −0 local-plugins/matrixImporter/test_data/DiogenesMockData.txt
  104. BIN local-plugins/matrixImporter/test_data/DiogenesMockData.xls
  105. BIN local-plugins/matrixImporter/test_data/DiogenesMockData.xlsx
  106. +1 −0 local-plugins/matrixImporter/test_data/DiogenesMockData_mini.txt
  107. BIN local-plugins/matrixImporter/test_data/mock_PPSH.xlsx
  108. +42 −0 local-plugins/matrixImporter/web-app/WEB-INF/applicationContext.xml
  109. +14 −0 local-plugins/matrixImporter/web-app/WEB-INF/sitemesh.xml
  110. +572 −0 local-plugins/matrixImporter/web-app/WEB-INF/tld/c.tld
  111. +671 −0 local-plugins/matrixImporter/web-app/WEB-INF/tld/fmt.tld
  112. +550 −0 local-plugins/matrixImporter/web-app/WEB-INF/tld/grails.tld
  113. +311 −0 local-plugins/matrixImporter/web-app/WEB-INF/tld/spring.tld
  114. +1 −1 web-app/css/infoboxes.css
@@ -30,22 +30,11 @@ grails.project.dependency.resolution = {
log "warn" // log level of Ivy resolver, either 'error', 'warn', 'info', 'debug' or 'verbose'
legacyResolve true
repositories {

grailsPlugins()
grailsHome()
mavenLocal()
grailsPlugins()
grailsCentral()
mavenCentral()

// grails 1.3.9 does not seem to properly inherit maven repo's from plugins
// so explicitely put mavenrepos in here. When upgraded to Grails 2.x this can
// probably be removed
mavenRepo "http://repo.grails.org/grails/plugins/"
mavenRepo "http://nexus.dbnp.org/content/repositories/releases"
//mavenRepo "http://repository.springsource.com/maven/bundles/release"
//mavenRepo "http://repository.springsource.com/maven/bundles/external"
//mavenRepo "http://repository.springsource.com/maven/libraries/release"
//mavenRepo "http://repository.springsource.com/maven/libraries/external"
mavenLocal()

// Repository for ISATAB tools
//mavenRepo "http://frog.oerc.ox.ac.uk:8080/nexus-2.1.2/content/repositories/releases"
@@ -80,36 +69,34 @@ grails.project.dependency.resolution = {
compile('org.codehaus.groovy.modules.http-builder:http-builder:0.5.0') { excludes "commons-logging", "xml-apis", "groovy" }
}
plugins {
// plugins for the build system only
build ":tomcat:7.0.55.3"

compile(
":hibernate4:4.3.10",
// Plugins for the build system only
build ":tomcat:7.0.70"

":jquery:1.11.1",
':jquery-ui:1.10.4',

":resources:1.2.14",
":spring-security-core:2.0.0",

':matrix-importer:0.2.5.0',
':dbxp-module-base:0.6.2.0',

":famfamfam:1.0.1",
":mail:1.0.7",
":quartz:1.0.2",
":ajaxflow:0.2.4",
":webflow:2.1.0",
":scaffolding:2.1.2"
)
// Plugins needed at runtime but not for compilation
runtime ":hibernate4:4.3.10"
runtime ":jquery:1.11.1"
runtime ":resources:1.2.14"

// Plugins needed for compilation
compile ":spring-security-core:2.0.0"
compile ':jquery-ui:1.10.4'
compile ":mail:1.0.7"
compile ":famfamfam:1.0.1"
compile ":quartz:1.0.2"
compile ":ajaxflow:0.2.4"
compile ":webflow:2.1.0"
compile ":scaffolding:2.1.2"
compile ":yui-war-minify:1.5"

if (System.getProperty("grails.env") == "development") {
// development mode only Plugins
compile(":console:1.5.4")
}

// Now included as local plugins
// compile ":matrix-importer:0.2.5.0"
// compile ":dbxp-module-base:0.6.2.0"

// add { transative = false } to ignore dependency transition
}
}
@@ -118,5 +105,5 @@ grails.plugin.location.'gdt' = './local-plugins/GDT'
grails.plugin.location.'dbxpSam' = './local-plugins/SAM'
grails.plugin.location.'dbxp-base' = './local-plugins/dbxpBase'

//grails.plugin.location.'dbxpModuleBase' = '../dbxpModuleBase'
//grails.plugin.location.'matrix-importer' = '../matrixImporter'
grails.plugin.location.'dbxpModuleBase' = './local-plugins/dbxpModuleBase'
grails.plugin.location.'matrix-importer' = './local-plugins/matrixImporter'
@@ -7,7 +7,8 @@ dataSource {
hibernate {
cache.use_second_level_cache = true
cache.use_query_cache = false
cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
// cache.region.factory_class = 'net.sf.ehcache.hibernate.SingletonEhCacheRegionFactory' // Hibernate 3
cache.region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory' // Hibernate 4
}
// environment specific settings
environments {
@@ -146,7 +146,7 @@ class ApiService implements Serializable, ApplicationContextAware {
if(it instanceof Sample) {
item['subject'] = it.parentSubject?.UUID
item['sampleType'] = it.parentEvent.event?.UUID
item['sampleAndTreatmentGroup'] = it.eventGroup?.UUID
item['sampleAndTreatmentGroup'] = it.parentEventGroup?.UUID
}
else if ( it instanceof Subject ) {
item['subjectGroups'] = it.subjectGroups.name.join(', ')
@@ -56,7 +56,7 @@ class StudyEditService {
*/
def getSamplesForAssaySamplePage( searchParams, study ) {
def query = generateHQLForAssaySamples( searchParams, study )

// Also count the total number of results in the dataset
def output = generateOutput( query, searchParams, Sample )
output.total = Sample.countByParent( study )
@@ -102,23 +102,24 @@ class StudyEditService {
int ids Total list of filtered ids
*/
def generateOutput( query, searchParams, entity ) {
def output = [:]

def output = [:]

// First select the number of results
def filteredIds = entity.executeQuery( "SELECT DISTINCT s.id FROM " + query.from + " WHERE " + query.where, query.params );
def filteredIds = entity.executeQuery( "SELECT DISTINCT s.id FROM " + query.from + " WHERE " + query.where, query.params )
output.totalFiltered = filteredIds.size()
output.ids = filteredIds

// Now find the results themselves
def hql = "SELECT " + query.select + " FROM " + query.from + " WHERE " + query.where + " " + ( query.order ? " ORDER BY " + query.order : "" )

output.entities = entity.executeQuery( hql, query.params, [ max: searchParams.max, offset: searchParams.offset ] )

if( query.chooseFirst ) {
output.entities = output.entities.collect { it[0] }
}
if( query.chooseFirst ) {
output.entities = output.entities.collect { it[0] }
}

output

}

/**
@@ -212,26 +213,22 @@ class StudyEditService {
def sortColumnIndex = searchParams.sortColumn ?: 0
def sortOrder = searchParams.sortDirection ?: "ASC"

//In order to have a natural 'order by' for the domainField 'name' we have to use a custom sort
def naturalSort = domainFields[ sortColumnIndex ]?.name.equals('name') ? true : false

// Prepare for differences in selection
def select = "DISTINCT s"

// Custom 'order by' is not allowed when using DISTINCT
if ( naturalSort ) {
select = "s"
}
def select = "DISTINCT (s)"

def chooseFirst = false

if( sortColumnIndex != null || sortColumnIndex >= ( domainFields.size() + template.fields.size() ) ) {
if( sortColumnIndex < domainFields.size() ) {
def sortOn = domainFields[ sortColumnIndex ]?.name
orderBy = "s." + sortOn + " " + sortOrder

if ( naturalSort ) {
if ( sortColumnIndex == 0 ) {
orderBy = "length(s." + sortOn + ") " + sortOrder + ", s." + sortOn + " " + sortOrder
select += ", length(s." + sortOn + ")"
chooseFirst = true
}
else {
orderBy = "s."+sortOn + " " + sortOrder
}
} else {
// Sort on template field: use a join in the sql
@@ -243,11 +240,11 @@ class StudyEditService {
hqlParams[ "sortField" ] = sortField.name
orderBy = "orderJoin " + sortOrder

// When ordering by a templatefield, we have to include it in the query as well
// However, in order to handle the object properly, we will need to tell the
// calling method that only the first object should be chosen.
select += ", orderJoin"
chooseFirst = true
// When ordering by a templatefield, we have to include it in the query as well
// However, in order to handle the object properly, we will need to tell the
// calling method that only the first object should be chosen.
select += ", orderJoin"
chooseFirst = true
}
}

@@ -266,7 +263,7 @@ class StudyEditService {
where: where,
order: orderBy,
params: hqlParams,
chooseFirst: chooseFirst
chooseFirst: chooseFirst
]
}

@@ -280,6 +277,7 @@ class StudyEditService {
* params
*/
def generateHQLForAssaySamples( searchParams, study ) {

def entity = Sample

// Search in
@@ -290,7 +288,7 @@ class StudyEditService {


// Create an HQL query as it gives us the most flexibility in searching and ordering
def from = " Sample s "
def from = " Sample s"
def joins = []
def whereClause = []
def hqlParams = [ study: study ]
@@ -350,7 +348,7 @@ class StudyEditService {
where += " AND (" + whereClause.join( " OR " ) + ") "

[
select: "s, " + fields.join( ", " ),
select: "DISTINCT (s), " + fields.join( ", " ) + (sortColumnIndex == 0 ? ", length(" + fields[ sortColumnIndex ] + ")" : ""),
from: from,
where: where,
order: orderBy,
@@ -27,22 +27,17 @@ grails.project.dependency.resolution = {
}

plugins {
build( ":tomcat:7.0.55",
//Temporary static version of Rest Client Builder due to compile error
":rest-client-builder:1.0.3"
) {
// plugin only plugin, should not be transitive to the application
export = false
}
// Plugins for the build system only
build ":tomcat:7.0.70"
build ":rest-client-builder:1.0.3"

compile(":hibernate4:4.3.6.1",
":jquery:1.8.3",
":webflow:2.0.8.1",
":ajaxflow:0.2.4",
":rest:0.8",
":webflow:2.1.0"
) {
export = false
}
// Plugins needed at runtime but not for compilation
runtime ":hibernate4:4.3.10"
runtime ":jquery:1.11.1"

// Plugins needed for compilation
compile ":ajaxflow:0.2.4"
compile ":webflow:2.1.0"
compile ":rest:0.8"
}
}
@@ -25,7 +25,8 @@

$(document).ready(function() {
$('#compare_templates').dataTable( {
"sPaginationType": "full_numbers"
"sPaginationType": "full_numbers",
"aLengthMenu": [10, 25, 50, 100, 250, 500, 1000]
} );
} );

@@ -30,32 +30,38 @@ grails.project.dependency.resolution = {
}
plugins {

build( ":tomcat:7.0.55",
":release:2.2.1",
//Temporary static version of Rest Client Builder due to compile error
":rest-client-builder:1.0.3"
) {
// plugin only plugin, should not be transitive to the application
export = false
}
// Plugins for the build system only
build ":tomcat:7.0.70"
build ":release:2.2.1"
//Temporary static version of Rest Client Builder due to compile error
build ":rest-client-builder:1.0.3"

// Plugins needed at runtime but not for compilation
runtime ":hibernate4:4.3.10"
runtime ":jquery:1.11.1"
runtime ":resources:1.2.14"

compile(
":hibernate4:4.3.6.1",
':famfamfam:1.0.1',
':matrix-importer:0.2.5.0',
':ajaxflow:latest.integration',
':resources:latest.integration',
':jquery:latest.integration',
':jquery-datatables:1.7.5',
':jquery-ui:1.8.15') {
export = false
// Plugins needed for compilation
compile ':jquery-ui:1.10.4'
compile ":famfamfam:1.0.1"
compile ":ajaxflow:0.2.4"
compile ":jquery-datatables:1.7.5"

if (System.getProperty("grails.env") == "development") {
// development mode only Plugins
compile(":console:1.5.4")
}

// Now included as local plugins
// compile ":matrix-importer:0.2.5.0"
// compile ":dbxp-module-base:0.6.2.0"
}
}

//grails.plugin.location.'dbxpModuleBase' = '../dbxpModuleBase'
//grails.plugin.location.'matrixImporter' = '../../../matrixImporter'
grails.plugin.location.'gdt' = '../GDT'
grails.plugin.location.'dbxpBase' = '../dbxpBase'

//grails.plugin.location.'dbxpModuleBase' = '../dbxpModuleBase'
grails.plugin.location.'matrixImporter' = '../matrixImporter'

//grails.server.port.http = "8182" // The modern way of setting the server port
@@ -276,7 +276,7 @@ class RestController {

def sql = new Sql(dataSource)

def features = sql.rows("SELECT f.name, f.unit, fs.template_string_fields_idx, fs.template_string_fields_elt, ft.template_text_fields_idx, ft.template_text_fields_elt, p.name AS platform, p.platformtype, p.platformversion FROM feature AS f LEFT JOIN feature_template_string_fields fs ON (f.id = fs.feature_id) LEFT JOIN feature_template_text_fields ft ON (f.id = ft.feature_id) LEFT JOIN platform p ON (f.platform_id = p.id) WHERE f.id IN (SELECT DISTINCT feature_id FROM measurement WHERE sample_id IN (SELECT id FROM samsample WHERE parent_assay_id = ${assay.id})) ORDER BY f.name ASC;")
def features = sql.rows("SELECT f.name, f.unit, fs.template_string_fields_idx, fs.template_string_fields_elt, ft.template_text_fields_idx, ft.template_text_fields_elt, p.name AS platform, p.platformtype, p.platformversion, f.external_identifier FROM feature AS f LEFT JOIN feature_template_string_fields fs ON (f.id = fs.feature_id) LEFT JOIN feature_template_text_fields ft ON (f.id = ft.feature_id) LEFT JOIN platform p ON (f.platform_id = p.id) WHERE f.id IN (SELECT DISTINCT feature_id FROM measurement WHERE sample_id IN (SELECT id FROM samsample WHERE parent_assay_id = ${assay.id})) ORDER BY f.name ASC;")

def fMap = [:]
def propertyMap = [:]
@@ -294,6 +294,8 @@ class RestController {
propertyMap.put("platform", f.platform)
propertyMap.put("platformtype", f.platformtype)
propertyMap.put("platformversion", f.platformversion)
propertyMap.put("platformversion", f.platformversion)
propertyMap.put("externalidentifier", f.external_identifier)
fMap.put(f.name, propertyMap)
propertyMap = [:]
}

0 comments on commit 279f0db

Please sign in to comment.
You can’t perform that action at this time.