Changeset 1277 for trunk/grails-app/services
- Timestamp:
- Dec 16, 2010, 3:42:15 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/grails-app/services/dbnp/importer/ImporterService.groovy
r1223 r1277 17 17 package dbnp.importer 18 18 import org.apache.poi.ss.usermodel.* 19 import org.apache.poi.hssf.usermodel.HSSFCell 19 20 20 21 import dbnp.studycapturing.TemplateFieldType … … 50 51 //def header = [] 51 52 def header = [:] 52 53 def df = new DataFormatter() 53 54 def property = new String() 54 55 … … 61 62 def datamatrix_celldata = df.formatCellValue(sheet.getRow(datamatrix_start).getCell(columnindex)) 62 63 def datamatrix_cell = sheet.getRow(datamatrix_start).getCell(columnindex) 63 64 def headercell = sheet.getRow(headerrow-1+sheet.getFirstRowNum()).getCell(columnindex) 64 65 def tft = TemplateFieldType.STRING //default templatefield type 65 66 66 67 // Check for every celltype, currently redundant code, but possibly this will be 67 68 // a piece of custom code for every cell type like specific formatting 68 69 69 70 switch (datamatrix_celltype) { 70 71 72 73 74 75 76 77 78 79 80 81 82 83 71 case Cell.CELL_TYPE_STRING: 72 //parse cell value as double 73 def doubleBoolean = true 74 def fieldtype = TemplateFieldType.STRING 75 76 // is this string perhaps a double? 77 try { 78 formatValue(datamatrix_celldata, TemplateFieldType.DOUBLE) 79 } catch (NumberFormatException nfe) { doubleBoolean = false } 80 finally { 81 if (doubleBoolean) fieldtype = TemplateFieldType.DOUBLE 82 } 83 84 header[columnindex] = new dbnp.importer.MappingColumn(name:df.formatCellValue(headercell), 84 85 templatefieldtype:fieldtype, 85 86 index:columnindex, … … 87 88 property:property); 88 89 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 formatValue(datamatrix_celldata, TemplateFieldType.DOUBLE)107 } catch (NumberFormatException nfe) { doubleBoolean = false }108 finally {109 if (doubleBoolean) fieldtype = TemplateFieldType.DOUBLE110 }111 112 113 114 90 break 91 case Cell.CELL_TYPE_NUMERIC: 92 def fieldtype = TemplateFieldType.LONG 93 def doubleBoolean = true 94 def longBoolean = true 95 96 // is this cell really an integer? 97 try { 98 Long.valueOf(datamatrix_celldata) 99 } catch (NumberFormatException nfe) { longBoolean = false } 100 finally { 101 if (longBoolean) fieldtype = TemplateFieldType.LONG 102 } 103 104 // it's not an long, perhaps a double? 105 if (!longBoolean) 106 try { 107 formatValue(datamatrix_celldata, TemplateFieldType.DOUBLE) 108 } catch (NumberFormatException nfe) { doubleBoolean = false } 109 finally { 110 if (doubleBoolean) fieldtype = TemplateFieldType.DOUBLE 111 } 112 113 if (DateUtil.isCellDateFormatted(datamatrix_cell)) fieldtype = TemplateFieldType.DATE 114 115 header[columnindex] = new dbnp.importer.MappingColumn(name:df.formatCellValue(headercell), 115 116 templatefieldtype:fieldtype, 116 117 index:columnindex, 117 118 entity:theEntity, 118 119 property:property); 119 120 121 120 break 121 case Cell.CELL_TYPE_BLANK: 122 header[columnindex] = new dbnp.importer.MappingColumn(name:df.formatCellValue(headercell), 122 123 templatefieldtype:TemplateFieldType.STRING, 123 124 index:columnindex, 124 125 entity:theEntity, 125 126 property:property); 126 127 128 127 break 128 default: 129 header[columnindex] = new dbnp.importer.MappingColumn(name:df.formatCellValue(headercell), 129 130 templatefieldtype:TemplateFieldType.STRING, 130 131 index:columnindex, 131 132 entity:theEntity, 132 133 property:property); 133 134 } // end of switch135 134 break 135 } // end of switch 136 } // end of cell loop 136 137 return header 137 138 } … … 147 148 */ 148 149 149 Cell[][] getDatamatrix(Workbook wb, header, int sheetindex, int datamatrix_start, int count) {150 HSSFCell[][] getDatamatrix(Workbook wb, header, int sheetindex, int datamatrix_start, int count) { 150 151 def sheet = wb.getSheetAt(sheetindex) 151 152 def rows = [] … … 165 166 166 167 (0..header.size()-1).each { columnindex -> 167 def c = sheet.getRow(rowindex).getCell(columnindex, Row.CREATE_NULL_AS_BLANK) 168 //row.add(df.formatCellValue(c)) 169 row.add(c) 168 def c = sheet.getRow(rowindex).getCell(columnindex, Row.CREATE_NULL_AS_BLANK) 169 row.add(c) 170 170 } 171 171 rows.add(row) … … 281 281 def saveDatamatrix(Study study, datamatrix) { 282 282 def validatedSuccesfully = 0 283 284 285 286 287 283 def entitystored = null 284 def failedtopersist = [] 285 def persisterrors = [] 286 def updatedentities = [] 287 study.refresh() 288 288 289 289 // go through the data matrix, read every record and validate the entity and try to persist it 290 290 datamatrix.each { record -> 291 record.each { entity -> 291 record.each { entity -> 292 292 switch (entity.getClass()) { 293 case Study : print "Persisting Study `" + entity + "`: " 294 entity.owner = AuthenticationService.getLoggedInUser() 295 println "storing study" + entity 296 println "dump=" + entity.dump() 297 println "validate=" + entity.validate() 293 case Study : log.info "Persisting Study `" + entity + "`: " 294 entity.owner = AuthenticationService.getLoggedInUser() 298 295 if (persistEntity(entity)) validatedSuccesfully++; 299 296 else failedtopersist.add(entity) 300 break 301 case Subject : print "Persisting Subject `" + entity + "`: " 302 entity.parent = study 297 break 298 case Subject : log.info "Persisting Subject `" + entity + "`: " 299 entity.parent = study 300 301 // is the current entity not already in the database? 302 entitystored = isEntityStored(entity) 303 303 304 // is the current entity not already in the database? 305 entitystored = isEntityStored(entity) 304 // this entity is new, so add it to the study 305 if (entitystored==null) study.addToSubjects(entity) 306 else { // existing entity, so update it 307 updateEntity(entitystored, entity) 308 updatedentities.add(entity) 309 } 310 311 if (persistEntity(study)) validatedSuccesfully++; 312 else failedtopersist.add(entity) 313 break 314 case Event : log.info "Persisting Event `" + entity + "`: " 315 entity.parent = study 316 study.addToEvents(entity) 317 if (persistEntity(entity)) validatedSuccesfully++; 318 else failedtopersist.add(entity) 319 break 320 case Sample : log.info "Persisting Sample `" + entity +"`: " 321 entity.parent = study 306 322 307 // this entity is new, so add it to the study 308 if (entitystored==null) study.addToSubjects(entity) 309 else { // existing entity, so update it 310 updateEntity(entitystored, entity) 311 updatedentities.add(entity) 312 } 313 323 // is this sample validatable (sample name unique for example?) 324 if (entity.validate()) { 325 study.addToSamples(entity) 314 326 if (persistEntity(study)) validatedSuccesfully++; 315 else failedtopersist.add(entity) 316 break 317 case Event : print "Persisting Event `" + entity + "`: " 318 entity.parent = study 319 study.addToEvents(entity) 320 if (persistEntity(entity)) validatedSuccesfully++; 321 else failedtopersist.add(entity) 322 break 323 case Sample : print "Persisting Sample `" + entity +"`: " 324 entity.parent = study 325 326 // is this sample validatable (sample name unique for example?) 327 if (entity.validate()) { 328 study.addToSamples(entity) 329 if (persistEntity(study)) validatedSuccesfully++; 330 } else { 331 failedtopersist.add(entity) 332 } 333 334 break 335 case SamplingEvent: print "Persisting SamplingEvent `" + entity + "`: " 336 entity.parent = study 337 study.addToSamplingEvents(entity) 338 if (persistEntity(entity)) validatedSuccesfully++; 339 else failedtopersist.add(entity) 340 break 341 default : println "Skipping persisting of `" + entity.getclass() +"`" 342 failedtopersist.add(entity) 343 break 327 } else { 328 failedtopersist.add(entity) 329 } 330 break 331 case SamplingEvent: log.info "Persisting SamplingEvent `" + entity + "`: " 332 entity.parent = study 333 study.addToSamplingEvents(entity) 334 if (persistEntity(entity)) validatedSuccesfully++; 335 else failedtopersist.add(entity) 336 break 337 default : log.info "Skipping persisting of `" + entity.getclass() +"`" 338 failedtopersist.add(entity) 339 break 344 340 } // end switch 345 341 } // end record 346 } // end datamatrix 342 } // end datamatrix 347 343 return [validatedSuccesfully, updatedentities, failedtopersist] 348 344 } … … 360 356 case Study : return Study.findByCode(entity.code) 361 357 break 362 358 case Subject : return Subject.findByParentAndName(entity.parent, entity.name) 363 359 break 364 360 case Event : break … … 383 379 switch (entity.getClass()) { 384 380 case Study : break 385 381 case Subject : entitystored.properties = entity.properties 386 382 entitystored.save() 387 383 break … … 434 430 def df = new DataFormatter() 435 431 def template = Template.get(template_id) 436 432 def tft = TemplateFieldType 437 433 def record = [] // list of entities and the read values 438 434 def failed = new ImportRecord() // map with entity identifier and failed mappingcolumn 439 435 440 436 // Initialize all possible entities with the chosen template … … 459 455 } 460 456 461 462 463 464 465 457 try { 458 // which entity does the current cell (field) belong to? 459 switch (mc.entity) { 460 case Study: // does the entity already exist in the record? If not make it so. 461 (record.any {it.getClass() == mc.entity}) ? 0 : record.add(study) 466 462 study.setFieldValue(mc.property, value) 467 463 break 468 464 case Subject: (record.any {it.getClass() == mc.entity}) ? 0 : record.add(subject) 469 465 subject.setFieldValue(mc.property, value) 470 466 break 471 467 case SamplingEvent: (record.any {it.getClass() == mc.entity}) ? 0 : record.add(samplingEvent) 472 468 samplingEvent.setFieldValue(mc.property, value) 473 469 break 474 470 case Event: (record.any {it.getClass() == mc.entity}) ? 0 : record.add(event) 475 471 event.setFieldValue(mc.property, value) 476 472 break 477 473 case Sample: (record.any {it.getClass() == mc.entity}) ? 0 : record.add(sample) 478 474 sample.setFieldValue(mc.property, value) 479 475 break 480 476 case Object: // don't import 481 477 break 482 483 484 485 486 487 488 489 490 491 492 493 494 case Event: identifier = event.getIdentifier() 495 496 497 498 499 500 478 } // end switch 479 } catch (IllegalArgumentException iae) { 480 // store the mapping column and value which failed 481 def identifier 482 483 switch (mc.entity) { 484 case Study: identifier = study.getIdentifier() 485 break 486 case Subject: identifier = subject.getIdentifier() 487 break 488 case SamplingEvent: identifier = samplingEvent.getIdentifier() 489 break 490 case Event: identifier = event.getIdentifier() 491 break 492 case Sample: identifier = sample.getIdentifier() 493 break 494 case Object: // don't import 495 break 496 } 501 497 502 503 504 505 498 def mcInstance = new MappingColumn() 499 mcInstance.properties = mc.properties 500 failed.addToImportcells(new ImportCell(mappingcolumn:mcInstance, value:value, entityidentifier:identifier)) 501 } 506 502 } // end 507 503 } // end for … … 515 511 * @return object corresponding to the TemplateFieldType 516 512 */ 517 513 def formatValue(String value, TemplateFieldType type) throws NumberFormatException { 518 514 switch (type) { 519 520 case TemplateFieldType.TEXT: return value.trim()521 case TemplateFieldType.LONG: return (long) Double.valueOf(value)522 523 524 525 526 case TemplateFieldType.DATE: return value527 default: return value515 case TemplateFieldType.STRING : return value.trim() 516 case TemplateFieldType.TEXT : return value.trim() 517 case TemplateFieldType.LONG : return (long) Double.valueOf(value) 518 //case TemplateFieldType.FLOAT : return Float.valueOf(value.replace(",",".")); 519 case TemplateFieldType.DOUBLE : return Double.valueOf(value.replace(",",".")); 520 case TemplateFieldType.STRINGLIST : return value.trim() 521 case TemplateFieldType.ONTOLOGYTERM : return value.trim() 522 case TemplateFieldType.DATE : return value 523 default : return value 528 524 } 529 525 }
Note: See TracChangeset
for help on using the changeset viewer.