import org.springframework.beans.factory.InitializingBean import org.springframework.context.ApplicationContextAware import org.springframework.context.ApplicationContext import joms.oms.ImageStager class StagerService implements InitializingBean, ApplicationContextAware { def grailsApplication def thumbnailService ApplicationContext applicationContext def sessionFactory static transactional = false def backgroundService def runStager(Repository repository) { Repository.withTransaction { repository.scanStartDate = new Date() repository.scanEndDate = null repository.save(flush: true) } println "Staging: ${repository.baseDir}" println "Start: ${repository.scanStartDate}" backgroundService.execute("Staging", { //Stager stager = new Stager(repository) Stager stager = applicationContext.getBean("stager") stager.repository = repository stager.sessionFactory = sessionFactory stager.stagerHandler = new StagerHandler("logs", "repository-${repository.id}") stager.scan(repository.baseDir as File) // createHistogramsAndOverviews(repository) // //pregenerateThumbnailsForRepository(repository) Repository.withTransaction { repository = Repository.get(repository.id) repository.scanEndDate = new Date() repository.save(flush: true) } println " Stop: ${repository.scanEndDate}" stager = null }) } 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 -> if ( RasterEntryFile.findWhere(rasterEntry: rasterEntry, type: "overview") ) { 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) imageStager.filename = rasterDataSet.fileObjects.find { it.type == "main" }.name println "${imageStager.filename}" rasterEntries.each {rasterEntry -> println "${rasterEntry.entryId}" imageStager.setDefaults() imageStager.entry = rasterEntry.entryId as Integer imageStager.stage() } } } void afterPropertiesSet() { } }