import org.springframework.beans.factory.InitializingBean import org.springframework.context.ApplicationContextAware import org.springframework.context.ApplicationContext import org.codehaus.groovy.grails.plugins.DomainClassGrailsPlugin 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) { def scanStartDate = new Date() Repository.executeUpdate("update Repository r set scanStartDate=?, scanEndDate=null where r=?", [scanStartDate, repository]) backgroundService.execute("Staging", { println "Staging: ${repository.baseDir}" println "Start: ${scanStartDate}" 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) stager.stage() // // createHistogramsAndOverviews(repository) // //pregenerateThumbnailsForRepository(repository) //cleanupGorm() def scanEndDate = new Date() Repository.executeUpdate("update Repository r set scanEndDate=? where r=?", [scanEndDate, repository]) println " Stop: ${scanEndDate}" stager = null }) } private def cleanupGorm() { def session = sessionFactory.currentSession session.flush() session.clear() DomainClassGrailsPlugin.PROPERTY_INSTANCE_MAP.get().clear() } 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() { } }