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

bootstrap.liftweb.Boot.scala Maven / Gradle / Ivy

The newest version!
package bootstrap.liftweb

import com.homedepot.bigbricks.workflow.WorkflowWrapper
import net.liftweb._
import net.liftweb.http.js.jquery.JQueryArtifacts
import util._
import Helpers._

import common._
import http._
import sitemap._
import Loc._
import mapper._

import code.model._
import net.liftmodules.{JQueryModule, FoBo, FoBoBs}

import scala.language.postfixOps

/**
  * A class that's instantiated early and run.  It allows the application
  * to modify lift's environment
  */
class Boot extends Logger {


  def boot {

    if (!DB.jndiJdbcConnAvailable_?) {
      sys.props.put("h2.implicitRelativePath", "true")
      val vendor = new StandardDBVendor(Props.get("db.driver") openOr "org.h2.Driver",
        Props.get("db.url") openOr
          "jdbc:h2:lift_proto.db;AUTO_SERVER=TRUE",
        Props.get("db.user"), Props.get("db.password"))
      LiftRules.unloadHooks.append(vendor.closeAllConnections_! _)
      DB.defineConnectionManager(util.DefaultConnectionIdentifier, vendor)
    }

    // Use Lift's Mapper ORM to populate the database
    // you don't need to use Mapper to use Lift... use
    // any ORM you want
    Schemifier.schemify(true, Schemifier.infoF _, User)
    Schemifier.schemify(true, Schemifier.infoF _, Project)
    Schemifier.schemify(true, Schemifier.infoF _, code.model.Template)
    Schemifier.schemify(true, Schemifier.infoF _, Job)
    Schemifier.schemify(true, Schemifier.infoF _, Cluster)
    Schemifier.schemify(true, Schemifier.infoF _, Process)

    // where to search snippet
    LiftRules.addToPackages("code")

    def sitemapMutators = User.sitemapMutator
    //The SiteMap is built in the Site object bellow 
    LiftRules.setSiteMapFunc(() => sitemapMutators(Site.sitemap))

    //Init the FoBo - Front-End Toolkit module, 
    //see http://liftweb.net/lift_modules for more info
    FoBo.Toolkit.Init = FoBo.Toolkit.JQuery224
    FoBo.Toolkit.Init = FoBo.Toolkit.Bootstrap337
    FoBo.Toolkit.Init = FoBo.Toolkit.FontAwesome463

    //Show the spinny image when an Ajax call starts
    LiftRules.ajaxStart =
      Full(() => LiftRules.jsArtifacts.show("ajax-loader").cmd)

    // Make the spinny image go away when it ends
    LiftRules.ajaxEnd =
      Full(() => LiftRules.jsArtifacts.hide("ajax-loader").cmd)

    // Force the request to be UTF-8
    LiftRules.early.append(_.setCharacterEncoding("UTF-8"))

    // What is the function to test if a user is logged in?
    LiftRules.loggedInTest = Full(() => User.loggedIn_?)

    LiftRules.jsArtifacts = JQueryArtifacts
    LiftRules.ajaxPostTimeout = 900000
    JQueryModule.InitParam.JQuery = JQueryModule.JQuery191
    JQueryModule.init()

    // Use HTML5 for rendering
    LiftRules.htmlProperties.default.set((r: Req) =>
      new Html5Properties(r.userAgent))

    LiftRules.noticesAutoFadeOut.default.set((notices: NoticeType.Value) => {
      notices match {
        case NoticeType.Notice => Full((8 seconds, 4 seconds))
        case _ => Empty
      }
    }
    )

    //Lift CSP settings see http://content-security-policy.com/ and 
    //Lift API for more information.
    LiftRules.securityRules = () => {
      SecurityRules(content = Some(ContentSecurityPolicy(
        scriptSources = List(
          ContentSourceRestriction.Self),
        styleSources = List(
          ContentSourceRestriction.Self)
      )))
    }
    // Make a transaction span the whole HTTP request
    info(s"Workflow intiated with active workflows:${WorkflowWrapper.countDefintions}")
    S.addAround(DB.buildLoanWrapper)
  }

  object Site {

    val loggedIn = If(() => User.loggedIn_?,
      () => RedirectResponse("/user_mgt/login"))
    val divider1 = Menu("divider1") / "divider1"
    val ddLabel1 = Menu.i("UserDDLabel") / "ddlabel1"
    val ddLabel2 = Menu.i("Components") / "ddlabel2"
    val home = Menu.i("Home") / "index"
    val processLabel = Menu.i("Process") / "ddlabel3"
    val taskLabel = Menu.i("Task") / "ddlabel4"

    val userMenu = User.AddUserMenusHere

    val dataMenu = Menu.i("Data") / "data" / "index"


    val jobMenu = (Menu.i("Jobs") / "components" / "job" / "index")
    //.rule(loggedIn)
    val editJobMenu = Menu.i("Edit Job") / "components" / "job" / "edit" >> Hidden
    val addJobMenu = Menu.i("Add Job") / "components" / "job" / "add" >> Hidden
    val deleteJobMenu = Menu.i("Delete Job") / "components" / "job" / "delete" >> Hidden


    val projectMenu = (Menu.i("Projects") / "components" / "project" / "index")
    //.rule(loggedIn)
    val editProjectMenu = Menu.i("Edit Project") / "components" / "project" / "edit" >> Hidden
    val addProjectMenu = Menu.i("Add Project") / "components" / "project" / "add" >> Hidden
    val deleteProjectMenu = Menu.i("Delete Project") / "components" / "project" / "delete" >> Hidden

    val templateMenu = (Menu.i("Templates") / "components" / "template" / "index")
    //.rule(loggedIn)
    val editTemplateMenu = Menu.i("Edit Template") / "components" / "template" / "edit" >> Hidden
    val addTemplateMenu = Menu.i("Add Template") / "components" / "template" / "add" >> Hidden
    val deleteTemplateMenu = Menu.i("Delete Template") / "components" / "template" / "delete" >> Hidden

    val clusterMenu = (Menu.i("Clusters") / "components" / "cluster" / "index")
    //.rule(loggedIn)
    val editClusterMenu = Menu.i("Edit Cluster") / "components" / "cluster" / "edit" >> Hidden
    val addClusterMenu = Menu.i("Add Cluster") / "components" / "cluster" / "add" >> Hidden
    val deleteClusterMenu = Menu.i("Delete Cluster") / "components" / "cluster" / "delete" >> Hidden


    val processDefnMenu = Menu.i("Process defintion") / "workflow" / "process" / "list"
    val taskListMenu = Menu.i("List tasks") / "workflow" / "task" / "list"
    val completeTaskMenu = Menu.i("Complete task") / "workflow" / "task" / "completetask" >> Hidden

    val activeProcessMenu = Menu.i("Processes") / "workflow" / "process" / "processinstances"
    val processDetailsMenu = Menu.i("Process details") / "workflow" / "process" / "processdetails" >> Hidden

    val deployProcessMenu = Menu.i("Deploy process") / "workflow" / "process" / "deploy"
    val startProcessMenu = Menu.i("Edit process") / "workflow" / "process" / "start" >> Hidden
    val deleteProcessMenu = Menu.i("Delete process") / "workflow" / "process" / "delete" >> Hidden


    def sitemap = SiteMap(


      home >> LocGroup("lg1")
      , editJobMenu, addJobMenu, deleteJobMenu
      , editProjectMenu, addProjectMenu, deleteProjectMenu
      , editTemplateMenu, addTemplateMenu, deleteTemplateMenu
      , editClusterMenu, addClusterMenu, deleteClusterMenu,

      processLabel >> LocGroup("topRight") >> PlaceHolder submenus(
        activeProcessMenu, processDefnMenu, deployProcessMenu, startProcessMenu, deleteProcessMenu, processDetailsMenu),
      taskLabel >> LocGroup("topRight") >> PlaceHolder submenus(taskListMenu, completeTaskMenu),


      ddLabel1 >> LocGroup("topRight") >> PlaceHolder submenus (

        divider1 >> FoBoBs.BSLocInfo.Divider >> userMenu
        ),
      ddLabel2 >> LocGroup("topRight") >> PlaceHolder submenus(
        projectMenu,
        templateMenu,
        clusterMenu,
        jobMenu,
        dataMenu
        )
    )
  }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy