import org.springframework.beans.factory.InitializingBean import joms.oms.ImageStager class StagerService implements InitializingBean { def grailsApplication def thumbnailService boolean transactional = true def runStager(Repository repository) { repository.scanEndDate = new Date() repository.scanEndDate = null repository.save() println "Staging: ${repository.baseDir}" println "Start: ${repository.scanStartDate}" Thread.start { def Stager stager = new Stager(repository) stager.scan(repository.baseDir as File) repository.save() pregenerateThumbnailsForRepository(repository) createHistogramsAndOverviews(repository) repository.scanEndDate = new Date() repository.save() println " Stop: ${repository.scanEndDate}" } } def pregenerateThumbnailsForRepository(def repository) { def projectionType = "imagespace" def mimeType = "image/jpeg" def rasterDataSets = RasterDataSet.findAllByRepository(repository) def videoDataSets = VideoDataSet.findAllByRepository(repository) def cacheDirPath = grailsApplication.config.thumbnail.cacheDir [128, 512].each {size -> rasterDataSets.each {rasterDataSet -> def rasterEntries = RasterEntry.findAllByRasterDataSet(rasterDataSet) rasterEntries.each {rasterEntry -> def thumbnailPrefix = "${rasterEntry.id}-${size}-${projectionType}" def inputFilename = rasterEntry.mainFile.name def entryId = rasterEntry.entryId thumbnailService.getThumbnail(cacheDirPath, thumbnailPrefix, size, mimeType, inputFilename, entryId, projectionType) } } videoDataSets.each {videoDataSet -> VideoFile videoFile = VideoFile.findWhere(videoDataSet: videoDataSet, type: "main") def thumbnailPrefix = "${videoDataSet.id}-${size}-${projectionType}" thumbnailService.getFrame(cacheDirPath, thumbnailPrefix, size, videoFile.name) } } } def createHistogramsAndOverviews(repository) { def imageStager = new ImageStager() def rasterDataSets = RasterDataSet.findAllByRepository(repository) rasterDataSets.each {rasterDataSet -> def rasterEntries = RasterEntry.findAllByRasterDataSet(rasterDataSet) rasterEntries.each {rasterEntry -> imageStager.filename = rasterEntry.mainFile.name imageStager.setDefaults() imageStager.stage() } } } void afterPropertiesSet() { } }