Changeset 301 for trunk


Ignore:
Timestamp:
Jan 27, 2010, 2:38:48 PM (15 years ago)
Author:
gav
Message:

Refactor CsvService assetTreeImport method.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/services/CsvService.groovy

    r300 r301  
    8181            def parentItem
    8282
    83             while(line) {
    84                 columnIndex = 0
    85                 numberOfColumns = Math.min( line.size(), maxNumberOfColumns )
    86 
    87                 if( (columnIndex+2) > numberOfColumns ) {
     83            def column = [:]
     84
     85            def nextLine = {
    8886                    line = reader.readNext()
    8987                    lineNumber ++
    90                     continue
    91                 }
    92 
    93                 if(line[columnIndex]) {
    94                     siteInstance = Site.findByName(line[columnIndex])
    95                     if(!siteInstance) {
    96                         log.info "Creating site: " + line[columnIndex]
    97                         siteInstance = new Site(name: line[columnIndex],
    98                                                                     description: line[++columnIndex])
    99                         if(!siteInstance.save()) {
    100                             log.error "Failed to create site on line: " + line[--columnIndex] + "(" + lineNumber + ")"
     88                    log.info "Processing line: " + lineNumber
     89            }
     90
     91            def nextColumn = {
     92                if( (columnIndex+2) > numberOfColumns ) {
     93                    log.info "No more columns on line: " + lineNumber
     94                    return false
     95
     96                }
     97                if(!line[columnIndex]) {
     98                    log.info "No name at " + "line: " + lineNumber + " col: " + columnIndex
     99                    return false
     100                }
     101                column.name = line[columnIndex]
     102                column.description = line[++columnIndex]
     103                columnIndex++
     104                // Success.
     105                return column
     106            }
     107
     108            while(line) {
     109                numberOfColumns = Math.min( line.size(), maxNumberOfColumns )
     110                columnIndex = 0
     111
     112                if(!nextColumn()) {
     113                    nextLine()
     114                    continue
     115                }
     116
     117                siteInstance = Site.findByName(column.name)
     118                if(!siteInstance) {
     119                    log.info "Creating site: " + column.name
     120                    siteInstance = new Site(name: column.name,
     121                                                                description: column.description)
     122                    if(!siteInstance.save()) {
     123                        log.error "Failed to create site on line: " + column.name + "(" + lineNumber + ")"
     124                        return fail(code: "asset.tree.import.failure", args: [lineNumber])
     125                    }
     126                }
     127                else log.info "Existing site: " + siteInstance
     128
     129                if(!nextColumn()) {
     130                    nextLine()
     131                    continue
     132                }
     133
     134                departmentInstance = Department.findByName(column.name)
     135                if(!departmentInstance) {
     136                    log.info "Creating department: " + column.name
     137                    departmentInstance = new Department(name: column.name,
     138                                                                                            description: column.description,
     139                                                                                            site: siteInstance)
     140                    if(!departmentInstance.save()) {
     141                        log.error "Failed to create department on line: " + column.name + "(" + lineNumber + ")"
     142                        return fail(code: "asset.tree.import.failure", args: [lineNumber])
     143                    }
     144                }
     145                else log.info "Existing department: " + departmentInstance
     146
     147                if(!nextColumn()) {
     148                    nextLine()
     149                    continue
     150                }
     151
     152                sectionInstance = Section.findByName(column.name)
     153                if(!sectionInstance) {
     154                    log.info "Creating section: " + column.name
     155                    sectionInstance =  new Section(name: column.name,
     156                                                                            description: column.description,
     157                                                                            site: siteInstance,
     158                                                                            department: departmentInstance)
     159                    if(!sectionInstance.save()) {
     160                        log.error "Failed to create section on line: " + column.name + "(" + lineNumber + ")"
     161                        return fail(code: "asset.tree.import.failure", args: [lineNumber])
     162                    }
     163                }
     164                else log.info "Existing section: " + sectionInstance
     165
     166                if(!nextColumn()) {
     167                    nextLine()
     168                    continue
     169                }
     170
     171                assetInstance = Asset.findByName(column.name)
     172                if(!assetInstance) {
     173                    log.info "Creating asset: " + column.name
     174                    assetInstance = new Asset(name: column.name,
     175                                                                    description: column.description,
     176                                                                    section: sectionInstance)
     177                    if(!assetInstance.save()) {
     178                        log.error "Failed to create asset on line: " + column.name + "(" + lineNumber + ")"
     179                        return fail(code: "asset.tree.import.failure", args: [lineNumber])
     180                    }
     181                }
     182                else log.info "Existing asset: " + assetInstance
     183
     184                if(!nextColumn()) {
     185                    nextLine()
     186                    continue
     187                }
     188
     189                assetSubItemInstance = AssetSubItem.findByName(column.name)
     190                if(!assetSubItemInstance) {
     191                    log.info "Creating asset sub item: " + column.name
     192                    assetSubItemInstance = new AssetSubItem(name: column.name,
     193                                                                                                description: column.description)
     194                    if(!assetInstance.save()) {
     195                        log.error "Failed to create assetSubItem on line: " + column.name + "(" + lineNumber + ")"
     196                        return fail(code: "asset.tree.import.failure", args: [lineNumber])
     197                    }
     198                }
     199                else log.info "Existing asset sub item: " + assetSubItemInstance
     200
     201                assetInstance.addToAssetSubItems(assetSubItemInstance)
     202
     203                while( nextColumn() ) {
     204
     205                    parentItem = assetSubItemInstance
     206                    assetSubItemInstance = AssetSubItem.findByName(column.name)
     207                    if(!assetSubItemInstance) {
     208                        log.info "Creating asset sub item: " + column.name
     209                        assetSubItemInstance = new AssetSubItem(name: column.name,
     210                                                                                                    description: column.description,
     211                                                                                                    parentItem: parentItem)
     212                        if(!assetSubItemInstance.save()) {
     213                            log.error "Failed to create assetSubItem on line: " + column.name + "(" + lineNumber + ")"
    101214                            return fail(code: "asset.tree.import.failure", args: [lineNumber])
    102215                        }
    103216                    }
    104                     else log.info "Existing site: " + siteInstance
    105 
    106                     columnIndex++
    107                     if( (columnIndex+2) > numberOfColumns ) {
    108                         line = reader.readNext()
    109                         lineNumber ++
    110                         continue
    111                     }
    112 
    113                     if(line[columnIndex]) {
    114                         departmentInstance = Department.findByName(line[columnIndex])
    115                         if(!departmentInstance) {
    116                             departmentInstance = new Department(name: line[columnIndex],
    117                                                                                                     description: line[++columnIndex],
    118                                                                                                     site: siteInstance)
    119                             if(!departmentInstance.save()) {
    120                                 log.error "Failed to create department on line: " + line[--columnIndex] + "(" + lineNumber + ")"
    121                                 return fail(code: "asset.tree.import.failure", args: [lineNumber])
    122                             }
    123                         }
    124 
    125                         columnIndex++
    126                         if( (columnIndex+2) > numberOfColumns ) {
    127                             line = reader.readNext()
    128                             lineNumber ++
    129                             continue
    130                         }
    131 
    132                         if(line[columnIndex]) {
    133                             sectionInstance = Section.findByName(line[columnIndex])
    134                             if(!sectionInstance) {
    135                                 sectionInstance =  new Section(name: line[columnIndex],
    136                                                                                         description: line[++columnIndex],
    137                                                                                         site: siteInstance,
    138                                                                                         department: departmentInstance)
    139                                 if(!sectionInstance.save()) {
    140                                     log.error "Failed to create section on line: " + line[--columnIndex] + "(" + lineNumber + ")"
    141                                     return fail(code: "asset.tree.import.failure", args: [lineNumber])
    142                                 }
    143                             }
    144 
    145                             columnIndex++
    146                             if( (columnIndex+2) > numberOfColumns ) {
    147                                 line = reader.readNext()
    148                                 lineNumber ++
    149                                 continue
    150                             }
    151 
    152                             if(line[columnIndex]) {
    153                                 assetInstance = Asset.findByName(line[columnIndex])
    154                                 if(!assetInstance) {
    155                                     assetInstance = new Asset(name: line[columnIndex],
    156                                                                                     description: line[++columnIndex],
    157                                                                                     section: sectionInstance)
    158                                     if(!assetInstance.save()) {
    159                                         log.error "Failed to create asset on line: " + line[--columnIndex] + "(" + lineNumber + ")"
    160                                         return fail(code: "asset.tree.import.failure", args: [lineNumber])
    161                                     }
    162                                 }
    163 
    164                                 columnIndex++
    165                                 if( (columnIndex+2) > numberOfColumns ) {
    166                                     line = reader.readNext()
    167                                     lineNumber ++
    168                                     continue
    169                                 }
    170 
    171                                 if(line[columnIndex]) {
    172                                     assetSubItemInstance = AssetSubItem.findByName(line[columnIndex])
    173                                     if(!assetSubItemInstance) {
    174                                         assetSubItemInstance = new AssetSubItem(name: line[columnIndex],
    175                                                                                                                     description: line[++columnIndex])
    176                                         if(!assetInstance.save()) {
    177                                             log.error "Failed to create assetSubItem on line: " + line[--columnIndex] + "(" + lineNumber + ")"
    178                                             return fail(code: "asset.tree.import.failure", args: [lineNumber])
    179                                         }
    180                                     }
    181 
    182                                     assetInstance.addToAssetSubItems(assetSubItemInstance)
    183 
    184                                     columnIndex++
    185                                     if( (columnIndex+2) > numberOfColumns ) {
    186                                         line = reader.readNext()
    187                                         lineNumber ++
    188                                         continue
    189                                     }
    190 
    191                                     while( (columnIndex+2) < numberOfColumns ) {
    192 
    193                                         if(line[columnIndex]) {
    194                                             parentItem = assetSubItemInstance
    195                                             assetSubItemInstance = new AssetSubItem(name: line[columnIndex],
    196                                                                                                                         description: line[++columnIndex],
    197                                                                                                                         parentItem: parentItem)
    198                                             if(!assetInstance.save()) {
    199                                                 log.error "Failed to create assetSubItem on line: " + line[--columnIndex] + "(" + lineNumber + ")"
    200                                                 return fail(code: "asset.tree.import.failure", args: [lineNumber])
    201                                             }
    202                                         }
    203                                         else break
    204 
    205                                         columnIndex++
    206                                     } // while()
    207 
    208                                 } // AssetSubItem L1
    209                             } // Asset
    210                         } // Section
    211                     } // Department
    212                 } // Site
    213 
    214                 line = reader.readNext()
    215                 lineNumber ++
     217                else log.info "Existing asset sub item: " + assetSubItemInstance
     218
     219                } // while( nextColumn() )
     220
     221                nextLine()
    216222            } //while(line)
    217223
Note: See TracChangeset for help on using the changeset viewer.