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

net.liftweb.http.ResponseShortcutException.scala Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2007-2011 WorldWide Conferencing, LLC
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package net.liftweb
package http

import net.liftweb.common._
import net.liftweb.util._

/**
 * This exception is used by LiftSession.destroySessionAndContinueInNewSession
 * to unwind the stack so that the session can be destroyed and a new
 * session can be created and have the balance of the continuation executed
 * in the context of the new session.
 */
class ContinueResponseException(val continue: () => Nothing) extends LiftFlowOfControlException("Continue in new session")

object ContinueResponseException {
  def unapply(in: Throwable): Option[ContinueResponseException] = in match {
    case null => None
    case cre: ContinueResponseException => Some(cre)
    case e: Exception => unapply(e.getCause)
    case _ => None
  }
    
}


final case class ResponseShortcutException(_response: () => LiftResponse, redirectTo: Box[String], doNotices: Boolean) extends LiftFlowOfControlException("Shortcut") {
  lazy val response = _response()

  def this(resp: => LiftResponse, doNot: Boolean) = this(() => resp, Empty, doNot)
  def this(resp: => LiftResponse) = this (() => resp, Empty, false)
}

object ResponseShortcutException {
  def shortcutResponse(responseIt: => LiftResponse) =
    new ResponseShortcutException(responseIt, true)

  def redirect(to: String): ResponseShortcutException =
    new ResponseShortcutException(() => RedirectResponse(to, S responseCookies: _*), Full(to), true)

  def redirect(to: String, func: () => Unit): ResponseShortcutException =
    S.session match {
      case Full(liftSession) => redirect(liftSession.attachRedirectFunc(to, Full(func)))
      case _ => redirect(to)
    }

  def seeOther(to: String): ResponseShortcutException =
    new ResponseShortcutException(() => SeeOtherResponse(to, S responseCookies: _*), Full(to), true)

  def seeOther(to: String, func: () => Unit): ResponseShortcutException =
    S.session match {
      case Full(liftSession) => seeOther(liftSession.attachRedirectFunc(to, Full(func)))
      case _ => seeOther(to)
    }
}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy