Ignore:
Timestamp:
Feb 10, 2010, 5:09:22 AM (10 years ago)
Author:
gav
Message:

Move Asset delete to a service method and configure cascade deletion checks.

File:
1 edited

Legend:

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

    r329 r350  
    22
    33    boolean transactional = false
     4
     5    def assetSubItemService
    46
    57    /**
     
    1315        }
    1416    }
     17
     18    def delete(params) {
     19        Asset.withTransaction { status ->
     20            def result = [:]
     21
     22            def fail = { Map m ->
     23                status.setRollbackOnly()
     24                if(result.assetInstance && m.field)
     25                    result.assetInstance.errors.rejectValue(m.field, m.code)
     26                result.error = [ code: m.code, args: ["Asset", params.id] ]
     27                return result
     28            }
     29
     30            result.assetInstance = Asset.get(params.id)
     31
     32            if(!result.assetInstance)
     33                return fail(code:"default.not.found")
     34
     35            if(result.assetInstance.maintenanceActions)
     36                return fail(code:"maintenanceActions.still.associated")
     37
     38            // Remove orphan assetSubItems.
     39            def assetSubItems = new ArrayList(result.assetInstance.assetSubItems) // avoid ConcurrentModificationException.
     40            def r
     41            for(assetSubItem in assetSubItems) {
     42                result.assetInstance.removeFromAssetSubItems(assetSubItem)
     43                if(!assetSubItem.assets && !assetSubItem.parentItem) {
     44                    r = assetSubItemService.delete(id: assetSubItem.id)
     45                    if(r.error) {
     46                        fail(code:"asset.subItems.delete.failure")
     47                        break
     48                    }
     49                }
     50            }
     51
     52            if(result.error)
     53                return result
     54
     55            try {
     56                result.assetInstance.delete(flush:true)
     57                return result //Success.
     58            }
     59            catch(org.springframework.dao.DataIntegrityViolationException e) {
     60                return fail(code:"default.delete.failure")
     61            }
     62
     63        } // end withTransaction
     64    } // end delete()
    1565
    1666    def create(params) {
     
    164214            return result
    165215
    166         } //end withTransaction
     216        } // end withTransaction
    167217    } // end saveCopySrvce
    168218
Note: See TracChangeset for help on using the changeset viewer.