Changeset 548 for trunk/grails-app/services/InventoryItemService.groovy
- Timestamp:
- May 27, 2010, 8:47:06 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/grails-app/services/InventoryItemService.groovy
r441 r548 226 226 } 227 227 228 /** 229 * Save an inventory item picture. 230 * @param pictureSource A supported source to get the picture image from. 231 * Supported sources: 232 * HttpServletRequest e.g: 'request' var from controller to run getFile('file') against. 233 * ServletContextResource e.g: grailsApplication.mainContext.getResource('images/logo.png') 234 */ 235 def savePicture(params, pictureSource) { 236 InventoryItem.withTransaction { status -> 237 def result = [:] 238 239 def kByteMultiplier = 1000 240 241 def fail = { Map m -> 242 status.setRollbackOnly() 243 if(result.inventoryItemInstance && m.field) 244 result.inventoryItemInstance.errors.rejectValue(m.field, m.code) 245 result.error = [ code: m.code, args: m.args ?: ["InventoryItem", params.id] ] 246 return result 247 } 248 249 result.inventoryItemInstance = InventoryItem.get(params.id) 250 251 if(!result.inventoryItemInstance) 252 return fail(code:"default.not.found") 253 254 // Optimistic locking check. 255 if(params.version) { 256 if(result.inventoryItemInstance.version > params.version.toLong()) 257 return fail(field:"version", code:"default.optimistic.locking.failure") 258 } 259 260 if(result.inventoryItemInstance.picture) 261 return fail(field:"picture", code:"inventory.item.already.has.picture") 262 263 def picture = new Picture(inventoryItem: result.inventoryItemInstance) 264 def imaging = new Imaging() 265 def images = null 266 def pictureFile 267 def pictureFileName = '' 268 def pictureInputStream 269 270 if(pictureSource instanceof javax.servlet.http.HttpServletRequest) { 271 def multiPartFile = pictureSource.getFile('file') 272 pictureFileName = multiPartFile.originalFilename 273 274 if(!multiPartFile || multiPartFile.isEmpty()) 275 return fail(code: "default.file.not.supplied") 276 277 if (multiPartFile.getSize() > Image.MAX_SIZE) 278 return fail(code: "default.file.over.max.size", args: [Image.MAX_SIZE/kByteMultiplier, "kB"]) 279 280 pictureInputStream = multiPartFile.inputStream 281 } 282 else if(pictureSource instanceof org.springframework.web.context.support.ServletContextResource) { 283 pictureFile = pictureSource.getFile() 284 pictureFileName = pictureFile.name 285 286 if ( !pictureFile.isFile() || (pictureFile.length() == 0) ) 287 return fail(code:"default.file.not.supplied") 288 289 if (pictureFile.length() > Image.MAX_SIZE) 290 return fail(code:"default.file.over.max.size", args: [Image.MAX_SIZE/kByteMultiplier, "kB"]) 291 292 pictureInputStream = pictureSource.inputStream 293 } 294 else { 295 return fail(code:"default.file.not.supplied") 296 } 297 298 try { 299 images = imaging.createAll(result.inventoryItemInstance, picture, pictureInputStream) 300 } 301 catch(Exception ex) { 302 log.error("picture save", ex) 303 return fail(code:"inventory.item.picture.file.unrecognised", args: [pictureFileName]) 304 } 305 306 images.each { image -> 307 picture.addToImages(image) 308 } 309 310 if(picture.hasErrors() || !picture.save()) 311 return fail(code:"default.create.failure", args: ["Picture"]) 312 313 result.inventoryItemInstance.picture = picture 314 315 if(result.inventoryItemInstance.hasErrors() || !result.inventoryItemInstance.save()) 316 return fail(code:"default.create.failure") 317 318 // success 319 return result 320 321 } //end withTransaction 322 } 323 228 324 } // end class
Note: See TracChangeset
for help on using the changeset viewer.