Changeset 534


Ignore:
Timestamp:
Jun 4, 2010, 4:00:31 PM (9 years ago)
Author:
tabma
Message:
  • rewrote MappingColumn? (and underlying methods) to have a String property instead of TemplateField?
  • improved Excel-column detection to importer service
Location:
trunk/grails-app
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/controllers/dbnp/importer/ImporterController.groovy

    r492 r534  
    6060       
    6161        session.importer_header = ImporterService.getHeader(wb, 0)
     62        session.importer_study = Study.get(params.study.id.toInteger())
    6263        session.importer_template_id = params.template_id
    63         session.importer_study = Study.get(params.study.id.toInteger())
    6464        session.importer_workbook = wb
    6565
     
    8181
    8282        session.importer_header = ImporterService.getHeader(wb, 0, entityClass)
     83        session.importer_study = Study.get(params.study.id.toInteger())
    8384        session.importer_template_id = params.template_id
    8485        session.importer_workbook = wb
     
    193194
    194195    /**
    195     * @param columnproperty array of columns containing index and property_id
     196    * @param columnproperty array of columns containing index and property (represented as a String)
    196197    *
    197198    */
    198199    def saveproperties = {     
    199200
    200         params.columnproperty.index.each { columnindex, property_id ->
    201                 session.importer_header[columnindex.toInteger()].property = TemplateField.get(property_id.toInteger())
     201        params.columnproperty.index.each { columnindex, property ->
     202                def template = Template.get(session.imported_template_id)
     203
     204                def entityClass = Class.forName(session.importer_header[columnindex.toInteger()].entity.getName(), true, this.getClass().getClassLoader())
     205                def entityObj = entityClass.newInstance(template:template)             
     206
     207               
     208                session.importer_header[columnindex.toInteger()].property = property
     209               
     210                //if it's an identifier set the mapping column true or false           
     211                entityObj.giveFields().each {
     212                    (it.preferredIdentifier && (it.name==property)) ? session.importer_header[columnindex.toInteger()].identifier = true : false
     213                }
    202214        }
    203215
  • trunk/grails-app/domain/dbnp/importer/MappingColumn.groovy

    r496 r534  
    33
    44/**
    5 * name: column name
    6 * type: GCSF field type
     5* name: column name (in Excel)
     6* templatefieldtype: GSCF field type
    77* entity: GSCF entity class
    88* property: GSCF template field
     
    1616        dbnp.studycapturing.TemplateFieldType templatefieldtype
    1717        Class entity
    18         TemplateField property
     18        String property
    1919        Integer index
    2020        String value
  • trunk/grails-app/services/dbnp/importer/ImporterService.groovy

    r489 r534  
    5656        def header = [:]
    5757        def df = new DataFormatter()
    58         def property = new dbnp.studycapturing.TemplateField()
     58        def property = new String()
    5959
    6060        for (HSSFCell c: sheet.getRow(datamatrix_start)) {
     
    6868            switch (datamatrix_celltype) {
    6969                    case HSSFCell.CELL_TYPE_STRING:
     70                            //parse cell value as double
     71                            def parsable = true
     72                            def templatefieldtype = TemplateFieldType.STRING
     73
     74                            // is this string perhaps a double?
     75                            try {
     76                                formatValue(c.getStringCellValue(), TemplateFieldType.DOUBLE)
     77                            } catch (NumberFormatException nfe) { parsable = false }
     78                            finally {
     79                                if (parsable) templatefieldtype = TemplateFieldType.DOUBLE
     80                            }
     81
    7082                            header[index] = new dbnp.importer.MappingColumn(name:df.formatCellValue(headercell),
    71                                                                             templatefieldtype:TemplateFieldType.STRING,
     83                                                                            templatefieldtype:templatefieldtype,
    7284                                                                            index:index,
    7385                                                                            entity:theEntity,
     
    290302
    291303            switch(mc.entity) {
    292                 case Study      :   (record.any {it.getClass()==mc.entity}) ? 0 : record.add(study)
    293                                     if (mc.identifier) { study.title = value; break }
    294                                     study.setFieldValue(mc.property.name, value)
    295                                     break
    296                 case Subject    :   (record.any {it.getClass()==mc.entity}) ? 0 : record.add(subject)
    297                                     if (mc.identifier) { subject.name = value; break }
    298                                     subject.setFieldValue(mc.property.name, value)                                 
    299                                     break
    300                 case Event      :   (record.any {it.getClass()==mc.entity}) ? 0 : record.add(event)
    301                                     if (mc.identifier) { event.eventdescription = value; break }
    302                                     event.setFieldValue(mc.property.name, value)
    303                                     break
    304                 case Sample     :   (record.any {it.getClass()==mc.entity}) ? 0 : record.add(sample)
    305                                     if (mc.identifier) { sample.name = value; break }
    306                                     sample.setFieldValue(mc.property.name, value)
     304                case Study      :   (record.any {it.getClass()==mc.entity}) ? 0 : record.add(study)                                 
     305                                    study.setFieldValue(mc.property, value)
     306                                    break
     307                case Subject    :   (record.any {it.getClass()==mc.entity}) ? 0 : record.add(subject)                               
     308                                    subject.setFieldValue(mc.property, value)                               
     309                                    break
     310                case Event      :   (record.any {it.getClass()==mc.entity}) ? 0 : record.add(event)                                 
     311                                    event.setFieldValue(mc.property, value)
     312                                    break
     313                case Sample     :   (record.any {it.getClass()==mc.entity}) ? 0 : record.add(sample)                               
     314                                    sample.setFieldValue(mc.property, value)
    307315                                    break
    308316                case Object     :   // don't import
     
    319327    * @return object corresponding to the TemplateFieldType
    320328    */
    321     def formatValue(String value, TemplateFieldType type) {     
    322         switch (type) {
    323             case TemplateFieldType.STRING       :   return value.trim()
    324             case TemplateFieldType.TEXT         :   return value.trim()
    325             case TemplateFieldType.INTEGER      :   return Integer.valueOf(value.replaceAll("[^0-9]",""))
    326             case TemplateFieldType.FLOAT        :   return Float.valueOf(value.replace(",","."));
    327             case TemplateFieldType.DOUBLE       :   return Double.valueOf(value.replace(",","."));
    328             case TemplateFieldType.STRINGLIST   :   return value.trim()
    329             case TemplateFieldType.ONTOLOGYTERM :   return value.trim()
    330             case TemplateFieldType.DATE         :   return value
    331             default                             :   return value
    332         }
     329    def formatValue(String value, TemplateFieldType type) throws NumberFormatException {
     330            switch (type) {
     331                case TemplateFieldType.STRING       :   return value.trim()
     332                case TemplateFieldType.TEXT         :   return value.trim()
     333                case TemplateFieldType.INTEGER      :   return Integer.valueOf(value.replaceAll("[^0-9]",""))
     334                case TemplateFieldType.FLOAT        :   return Float.valueOf(value.replace(",","."));
     335                case TemplateFieldType.DOUBLE       :   return Double.valueOf(value.replace(",","."));
     336                case TemplateFieldType.STRINGLIST   :   return value.trim()
     337                case TemplateFieldType.ONTOLOGYTERM :   return value.trim()
     338                case TemplateFieldType.DATE         :   return value
     339                default                             :   return value
     340            }
    333341    }
    334342}
  • trunk/grails-app/taglib/dbnp/importer/ImporterTagLib.groovy

    r492 r534  
    8484        def allfieldtypes = attrs['allfieldtypes']
    8585
    86         def templatefields = (allfieldtypes=="true") ? t.fields : t.fields.findAll { it.type == mc.templatefieldtype }
     86        //def templatefields = (allfieldtypes=="true") ? t.fields : t.fields.findAll { it.type == mc.templatefieldtype }
     87        def templatefields = (allfieldtypes=="true") ?
     88            t.fields + mc.entity.giveDomainFields() :
     89            t.fields.findAll { it.type == mc.templatefieldtype } + mc.entity.giveDomainFields()
    8790
    8891        (mc.identifier) ? out << "<select style=\"font-size:10px\" name=\"\" disabled><option>Identifier</option></select>":
     
    102105        def res = "<select style=\"font-size:10px\" name=\"${name}.index.${columnIndex}\">"
    103106
    104         options.each { f ->         
    105             res += "<option value=\"${f.id}\""
    106             //res += (e.type.toInteger() == selected) ? " selected" : ""
    107             res += ">${f}</option>"
     107        options.each { f ->
     108            res+= "<option value=\"${f.name}\">"
     109           
     110            res+= (f.preferredIdentifier) ?
     111                    "${f.name} (IDENTIFIER)</option>" :
     112                    "${f.name}</option>"
    108113        }
    109114
  • trunk/grails-app/views/importer/index_simple.gsp

    r496 r534  
    7272            </td>
    7373            <td>
    74                 <g:select name="study_id" from="${studies}" optionKey="id"/>
     74                <g:select name="study.id" from="${studies}" optionKey="id"/>
    7575            </td>
    7676        </tr>
Note: See TracChangeset for help on using the changeset viewer.