Changeset 1834
- Timestamp:
- May 11, 2011, 12:56:03 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/grails-app/controllers/dbnp/studycapturing/SimpleWizardController.groovy
r1817 r1834 22 22 import dbnp.importer.ImportRecord 23 23 import dbnp.importer.MappingColumn 24 import org.hibernate.SessionFactory; 24 import org.hibernate.SessionFactory 25 import org.codehaus.groovy.grails.commons.DefaultGrailsDomainClass; 25 26 26 27 @Secured(['IS_AUTHENTICATED_REMEMBERED']) … … 1234 1235 def testMethod = { 1235 1236 1237 //////////////////////////////////////////////////////////////////////// 1238 // Functionality mimics intermediate results from simple wizard // 1239 //////////////////////////////////////////////////////////////////////// 1240 1236 1241 def data = [//['sample name', 'subject', 'timepoint'], 1237 1242 [ '97___N_151_HAKA_1', 'N_151_HAKA', '0w'], … … 1267 1272 def subjectTemplate = Template.findByName ('Human') 1268 1273 def samplingEventTemplate = Template.findByName ('Blood extraction') 1269 def eventTemplate = Template.findByName ('Diet treatment')1274 // def eventTemplate = Template.findByName ('Diet treatment') 1270 1275 1271 1276 … … 1283 1288 } 1284 1289 1285 // collect unique subjects and sampling events from table 1286 def uniqueSubjects = table.collect{it[1]}.unique() 1287 def uniqueSamplingEvents = table.collect{it[2]}.unique() 1288 1289 // create an event group for each unique sampling event (not much of a group, is it ...) 1290 def eventGroups = uniqueSamplingEvents.collect{ 1291 def eventGroup = new EventGroup(name: "Sampling_${it.name}_${it.startTime}").addToSamplingEvents(it) 1292 //study.addToEventGroups eventGroup 1293 eventGroup 1290 //////////////////////////////////////////////////////////////////////// 1291 // Functionality below should be inserted into simple wizard 1292 // We'll assume entities with pre-existing preferred identifiers have 1293 // already been loaded from the db so that updating will work. 1294 //////////////////////////////////////////////////////////////////////// 1295 1296 def inferStudyDesign = { study -> 1297 1298 // Check for duplicate samples 1299 def samples = table.collect{it[0]} 1300 1301 def uniques = [] as Set 1302 def duplicates = [] as Set 1303 1304 // this approach separates the unique from the duplicate entries 1305 samples*.name.each { 1306 uniques.add(it) || duplicates.add(it) 1307 } 1308 1309 duplicates.each{ duplicateName -> 1310 samples.findAllByName(duplicateName).each{ sample -> 1311 numInvalidEntities++ 1312 failedcells = addNonValidatingCells(failedcells, sample, flow) 1313 errors += "(Sample) duplicate name: $duplicateName" 1314 } 1315 } 1316 1317 // A closure that returns a sub list of entities from a list that have 1318 // unique values of a property indicated by propertyName 1319 def uniqueEntitiesByProperty = { entities, propertyName -> 1320 1321 entities*."$propertyName".unique().collect { uniquePropertyValue -> 1322 1323 entities.find{ it."$propertyName" == uniquePropertyValue } 1324 1325 } 1326 } 1327 1328 // collect unique subjects and sampling events from table 1329 def uniqueSubjects = 1330 uniqueEntitiesByProperty(table.collect{it[1]}, 'name') 1331 def uniqueSamplingEvents = 1332 uniqueEntitiesByProperty(table.collect{it[2]}, 'startTime') 1333 1334 // create an event group for each unique sampling event (not much of a group, is it ...) 1335 uniqueSamplingEvents.each{ 1336 new EventGroup(name: "Sampling_${it.name}_${it.startTime}").addToSamplingEvents(it) 1337 study.addToEventGroups eventGroup 1338 } 1339 1340 def addToCollectionIfNecessary = { parent, collectionName, entity, propertyName -> 1341 1342 if (!parent.'collectionName'.find{it.'propertyName' == entity.'propertyName'}) 1343 parent."addTo${collectionName.toUpperCase()}" entity 1344 1345 } 1346 1347 table.each{ record -> 1348 1349 Sample sample = record[0] 1350 1351 // gather all sample related entities 1352 def correspondingSamplingEvent = uniqueSamplingEvents.findByStartTime(record[2].startTime) 1353 def correspondingSubject = uniqueSubjects.findByName(record[1].name) 1354 def correspondingEventGroup = correspondingSamplingEvent.eventGroup 1355 1356 correspondingSamplingEvent.addToSamples sample 1357 correspondingSubject.addToSamples sample 1358 correspondingEventGroup.addToSamples sample 1359 1360 if (!correspondingEventGroup.subjects.find{it.name == correspondingSubject.name}) 1361 correspondingEventGroup.addToSubjects correspondingSubject 1362 1363 study.addToSamples sample 1364 } 1294 1365 } 1295 //TODO: add event groups to study 1296 1297 // uniqueSubjects.each { 1298 // eventGroup.addToSubjects it 1299 // // study.addToSubject it 1300 // } 1301 1302 table.each{ record -> 1303 1304 Sample sample = record[0] 1305 1306 // gather all sample related entities 1307 def correspondingSamplingEvent = uniqueSamplingEvents.findByStartTime(record[2].startTime) 1308 def correspondingSubject = uniqueSubjects.findByName(record[1].name) 1309 def correspondingEventGroup = correspondingSamplingEvent.eventGroup 1310 1311 correspondingSamplingEvent.addToSamples sample 1312 correspondingEventGroup.addToSamples sample 1313 correspondingEventGroup.addToSubjects correspondingSubject 1314 sample.parentSubject = correspondingSubject 1315 1316 1317 1318 1319 // study.addToSamples sample 1320 uniqueSamplingEvents.findByStartTime(record[2].startTime).addToSamples(sample) 1321 sample.addToSubjects(uniqueSubjects.findByName(record[1].name)) 1322 1323 } 1324 1366 1367 // inferStudyDesign(study) 1325 1368 1326 1369 println 'hoi'
Note: See TracChangeset
for help on using the changeset viewer.