Ignore:
Timestamp:
Oct 27, 2010, 3:50:56 PM (6 years ago)
Author:
t.w.abma@…
Message:
  • added functionality to check for existing entities when importing from Excel, now updates existing entities (at least for Subject it does currently)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/services/dbnp/importer/ImporterService.groovy

    r999 r1002  
    239239     *
    240240     * @param study entity Study
    241      * @param datamatrix two dimensional array containing entities with values read from Excel file     *
     241     * @param datamatrix two dimensional array containing entities with values read from Excel file
    242242     */   
    243243    def saveDatamatrix(Study study, datamatrix) {
    244244        def validatedSuccesfully = 0
     245        def entitystored = null
    245246        study.refresh()       
    246247       
     
    248249        datamatrix.each { record ->
    249250            record.each { entity ->
    250                         switch (entity.getClass()) {
    251                         case Study       :  print "Persisting Study `" + entity + "`: "
    252                                                 if (persistEntity(entity)) validatedSuccesfully++
     251                        switch (entity.getClass()) {
     252                        case Study       :  print "Persisting Study `" + entity + "`: "
     253                                                if (persistEntity(entity)) validatedSuccesfully++
    253254                                                break
    254255                        case Subject     :  print "Persisting Subject `" + entity + "`: "
    255256                                                entity.parent = study
    256                                                 study.addToSubjects(entity)
     257                                               
     258                                                // is the current entity not already in the database?
     259                                                entitystored = isEntityStored(entity)
     260                                               
     261                                                // this entity is new, so add it to the study
     262                                                if (entitystored==null) study.addToSubjects(entity)
     263                                                else // existing entity, so update it
     264                                                    updateEntity(entitystored, entity)
     265
    257266                                                if (persistEntity(study)) validatedSuccesfully++
    258267                                                break
     
    271280                                                study.addToSamplingEvents(entity)
    272281                                                if (persistEntity(entity)) validatedSuccesfully++
    273                                                 break;
     282                                                break
    274283                        default          :  println "Skipping persisting of `" + entity.getclass() +"`"
    275284                                                break
     
    278287        } // end datamatrix
    279288        return validatedSuccesfully
     289    }
     290
     291    /**
     292     * Check whether an entity already exists within a study. A combination of
     293     * the study where the entity will be stored and a unique field in the entity is
     294     * used to check whether the instantiated entity (read from Excel) is new.
     295     * If the entity is found in the database it will be returned as so and
     296     * it should update the entity-values (read from Ecel) into the record in the database.
     297     *
     298     * @param entity entity object like a Study, Subject, Sample et cetera
     299     * @return entity if found, otherwise null
     300     */
     301    def isEntityStored(entity) {
     302            switch (entity.getClass()) {
     303                        case Study          :  return Study.findByCode(entity.code)
     304                                               break
     305                        case Subject        :  return Subject.findByParentAndName(entity.parent, entity.name)
     306                                               break
     307                        case Event          :  break
     308                        case Sample         :  break
     309                        case SamplingEvent  :  break
     310                        default             :  // unknown entity
     311                                               return null
     312            }
     313    }
     314
     315    /**
     316     * Find the entity and update the fields. The entity is an instance
     317     * read from Excel. This method looks in the database for the entity
     318     * having the same identifier. If it has found the same entity
     319     * already in the database, it will update the record.
     320     *
     321     * @param entitystored existing record in the database to update
     322     * @param entity entity read from Excel
     323     */
     324    def updateEntity(entitystored, entity) {
     325        switch (entity.getClass()) {
     326                        case Study          :  break
     327                        case Subject        :  entitystored.properties = entity.properties
     328                                               entitystored.save()
     329                                               break
     330                        case Event          :  break
     331                        case Sample         :  break
     332                        case SamplingEvent  :  break
     333                        default             :  // unknown entity
     334                                               return null
     335        }
    280336    }
    281337
Note: See TracChangeset for help on using the changeset viewer.