HandlerBuilder.kt

  1. package com.hexagontk.http.handlers

  2. import com.hexagontk.http.model.HttpMethod
  3. import kotlin.reflect.KClass

  4. class HandlerBuilder(var handlers: List<HttpHandler> = emptyList()) {

  5.     fun handler(contextPath: String = ""): HttpHandler =
  6.         if (handlers.size == 1) handlers[0].addPrefix(contextPath)
  7.         else PathHandler(contextPath, handlers)

  8.     fun use(handler: HttpHandler) {
  9.         this.handlers += handler
  10.     }

  11.     fun path(pattern: String, block: HandlerBuilder.() -> Unit) {
  12.         use(com.hexagontk.http.handlers.path(pattern, block))
  13.     }

  14.     fun path(pattern: String, pathHandler: PathHandler) {
  15.         use(pathHandler.addPrefix(pattern))
  16.     }

  17.     fun path(pattern: String, pathHandlers: List<HttpHandler>) {
  18.         use(PathHandler(pattern, pathHandlers))
  19.     }

  20.     fun path(pattern: String, vararg pathHandlers: HttpHandler) {
  21.         path(pattern, pathHandlers.toList())
  22.     }

  23.     fun on(
  24.         predicate: HttpPredicate = HttpPredicate(),
  25.         callback: HttpCallbackType
  26.     ) {
  27.         use(OnHandler(predicate, callback))
  28.     }

  29.     fun on(
  30.         methods: Set<HttpMethod> = emptySet(),
  31.         pattern: String = "",
  32.         status: Int? = null,
  33.         callback: HttpCallbackType,
  34.     ) {
  35.         use(OnHandler(methods, pattern, status, callback))
  36.     }

  37.     fun on(method: HttpMethod, pattern: String = "", callback: HttpCallbackType) {
  38.         use(OnHandler(method, pattern, callback))
  39.     }

  40.     fun on(pattern: String, callback: HttpCallbackType) {
  41.         use(OnHandler(pattern, callback))
  42.     }

  43.     fun filter(
  44.         predicate: HttpPredicate = HttpPredicate(),
  45.         callback: HttpCallbackType
  46.     ) {
  47.         use(FilterHandler(predicate, callback))
  48.     }

  49.     fun filter(
  50.         methods: Set<HttpMethod> = emptySet(),
  51.         pattern: String = "",
  52.         status: Int? = null,
  53.         callback: HttpCallbackType,
  54.     ) {
  55.         use(
  56.             FilterHandler(methods, pattern, status, callback)
  57.         )
  58.     }

  59.     fun filter(method: HttpMethod, pattern: String = "", callback: HttpCallbackType) {
  60.         use(FilterHandler(method, pattern, callback))
  61.     }

  62.     fun filter(pattern: String, callback: HttpCallbackType) {
  63.         use(FilterHandler(pattern, callback))
  64.     }

  65.     fun after(
  66.         predicate: HttpPredicate = HttpPredicate(),
  67.         callback: HttpCallbackType
  68.     ) {
  69.         use(AfterHandler(predicate, callback))
  70.     }

  71.     fun after(
  72.         methods: Set<HttpMethod> = emptySet(),
  73.         pattern: String = "",
  74.         status: Int? = null,
  75.         callback: HttpCallbackType,
  76.     ) {
  77.         use(AfterHandler(methods, pattern, status, callback))
  78.     }

  79.     fun after(method: HttpMethod, pattern: String = "", callback: HttpCallbackType) {
  80.         use(AfterHandler(method, pattern, callback))
  81.     }

  82.     fun after(pattern: String, callback: HttpCallbackType) {
  83.         use(AfterHandler(pattern, callback))
  84.     }

  85.     fun before(
  86.         predicate: HttpPredicate = HttpPredicate(),
  87.         callback: HttpCallbackType
  88.     ) {
  89.         use(BeforeHandler(predicate, callback))
  90.     }

  91.     fun before(
  92.         methods: Set<HttpMethod> = emptySet(),
  93.         pattern: String = "",
  94.         status: Int? = null,
  95.         callback: HttpCallbackType,
  96.     ) {
  97.         use(BeforeHandler(methods, pattern, status, callback))
  98.     }

  99.     fun before(method: HttpMethod, pattern: String = "", callback: HttpCallbackType) {
  100.         use(BeforeHandler(method, pattern, callback))
  101.     }

  102.     fun before(pattern: String, callback: HttpCallbackType) {
  103.         use(BeforeHandler(pattern, callback))
  104.     }

  105.     fun <T : Exception> exception(exception: KClass<T>, callback: HttpExceptionCallbackType<T>) {
  106.         use(ExceptionHandler(exception, callback))
  107.     }

  108.     inline fun <reified T : Exception> exception(noinline callback: HttpExceptionCallbackType<T>) {
  109.         use(ExceptionHandler(T::class, callback))
  110.     }

  111.     fun get(pattern: String = "", callback: HttpCallbackType) {
  112.         use(Get(pattern, callback))
  113.     }

  114.     fun ws(pattern: String = "", callback: HttpCallbackType) {
  115.         use(Ws(pattern, callback))
  116.     }

  117.     fun head(pattern: String = "", callback: HttpCallbackType) {
  118.         use(Head(pattern, callback))
  119.     }

  120.     fun post(pattern: String = "", callback: HttpCallbackType) {
  121.         use(Post(pattern, callback))
  122.     }

  123.     fun put(pattern: String = "", callback: HttpCallbackType) {
  124.         use(Put(pattern, callback))
  125.     }

  126.     fun delete(pattern: String = "", callback: HttpCallbackType) {
  127.         use(Delete(pattern, callback))
  128.     }

  129.     fun trace(pattern: String = "", callback: HttpCallbackType) {
  130.         use(Trace(pattern, callback))
  131.     }

  132.     fun options(pattern: String = "", callback: HttpCallbackType) {
  133.         use(Options(pattern, callback))
  134.     }

  135.     fun patch(pattern: String = "", callback: HttpCallbackType) {
  136.         use(Patch(pattern, callback))
  137.     }
  138. }