All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.twibs.web.MemoryCachingResponder.scala Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) 2013-2015 by Michael Hombre Brinkmann
 */

package net.twibs.web

import com.google.common.cache.{CacheLoader, CacheBuilder, LoadingCache}
import net.twibs.util.{Request, ResponseRequest}
import concurrent.duration.Duration

class MemoryCachingResponder(delegate: Responder, cacheSizeInBytes: Long = 100000000, maxFileSizeInBytes: Long = 1000000) extends LoadingCacheResponder(delegate) {
  protected val cache: LoadingCache[ResponseRequest, Option[Response]] = CacheBuilder.newBuilder().maximumSize(cacheSizeInBytes).build(loader)

  private def loader = new CacheLoader[ResponseRequest, Option[Response]]() {
    def load(request: ResponseRequest): Option[Response] = {
      delegate.respond(Request).map(response =>
        if (response.isInMemory || !response.isCacheable || response.length > maxFileSizeInBytes) response
        else new ByteArrayResponse {
          def isModified: Boolean = response.isModified

          def isCacheable: Boolean = response.isCacheable

          def lastModified: Long = response.lastModified

          def asBytes: Array[Byte] = response.asBytes

          def expiresOnClientAfter: Duration = response.expiresOnClientAfter

          def mimeType: String = response.mimeType
        })
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy