src/main/scala/bootstrap/liftweb/Boot.scala
author Tomas Zeman <tzeman@volny.cz>
Fri, 10 Feb 2012 09:53:09 +0100
changeset 16 7be37d58997c
parent 15 995184977e9b
child 22 94ed9cfdb123
permissions -rw-r--r--
Generic entity snippet
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     1
/*
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     2
 * Copyright 2011 Tomas Zeman <tzeman@volny.cz>
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     3
 *
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     4
 * Licensed under the Apache License, Version 2.0 (the "License");
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     5
 * you may not use this file except in compliance with the License.
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     6
 * You may obtain a copy of the License at
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     7
 *
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     8
 *     http://www.apache.org/licenses/LICENSE-2.0
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
     9
 *
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    10
 * Unless required by applicable law or agreed to in writing, software
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    11
 * distributed under the License is distributed on an "AS IS" BASIS,
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    13
 * See the License for the specific language governing permissions and
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    14
 * limitations under the License.
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    15
 */
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    16
package bootstrap.liftweb
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    17
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    18
import fis.base.model._
16
7be37d58997c Generic entity snippet
Tomas Zeman <tzeman@volny.cz>
parents: 15
diff changeset
    19
import fis.crm.ui.{ContactSnippet, ContactSnippet2}
11
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    20
import net.liftweb.common._
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    21
import net.liftweb.db.{DB, ConnectionIdentifier}
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    22
import net.liftweb.http._
15
995184977e9b a3e3bd30f0d19526 Contact UI
Tomas Zeman <tzeman@volny.cz>
parents: 14
diff changeset
    23
import net.liftweb.sitemap._
11
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    24
import net.liftweb.squerylrecord.SquerylRecord
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    25
import net.liftweb.util._
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    26
import net.liftweb.util.Helpers._
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    27
import net.tz.lift.boot.ProtoBoot
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    28
import net.tz.lift.util.StandardDBVendor
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    29
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    30
class Boot extends ProtoBoot {
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    31
  override def boot = {
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    32
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    33
    /* DB stuff */
14
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    34
    val dbVendor = new FisDbVendor
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    35
    DB.defineConnectionManager(FisConnectionIdentifier, dbVendor)
11
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    36
    S.addAround(DB.buildLoanWrapper(List(FisConnectionIdentifier)))
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    37
    SquerylRecord.init(() => new SeqIdPostgreSqlAdapter)
14
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    38
    SquerylTxMgr.initSqueryl(FisConnectionIdentifier,
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    39
      () => new SeqIdPostgreSqlAdapter)
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    40
    LiftRules.unloadHooks.append(dbVendor.closeAllConnections_! _)
11
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    41
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    42
    super.boot
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    43
15
995184977e9b a3e3bd30f0d19526 Contact UI
Tomas Zeman <tzeman@volny.cz>
parents: 14
diff changeset
    44
    import Loc._
995184977e9b a3e3bd30f0d19526 Contact UI
Tomas Zeman <tzeman@volny.cz>
parents: 14
diff changeset
    45
995184977e9b a3e3bd30f0d19526 Contact UI
Tomas Zeman <tzeman@volny.cz>
parents: 14
diff changeset
    46
    val menus = List(Menu("/", "FIS Main page") / "index" >> Hidden,
16
7be37d58997c Generic entity snippet
Tomas Zeman <tzeman@volny.cz>
parents: 15
diff changeset
    47
      Menu.i("Home") / "" , ContactSnippet.menu, ContactSnippet2.menu)
15
995184977e9b a3e3bd30f0d19526 Contact UI
Tomas Zeman <tzeman@volny.cz>
parents: 14
diff changeset
    48
995184977e9b a3e3bd30f0d19526 Contact UI
Tomas Zeman <tzeman@volny.cz>
parents: 14
diff changeset
    49
    LiftRules.setSiteMap(SiteMap(menus:_*))
11
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    50
  }
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    51
}
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    52
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    53
case object FisConnectionIdentifier extends ConnectionIdentifier {
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    54
  val jndiName = "fis"
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    55
}
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    56
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    57
import java.sql.Connection
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    58
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    59
class FisDbVendor extends StandardDBVendor(
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    60
  "org.postgresql.Driver", Props.get("db.fis.url", ""),
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    61
  Props.get("db.fis.user"), Props.get("db.fis.pass")) {
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    62
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    63
  val testQuery = "SELECT version()"
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    64
  override protected def testConnection(c: Connection) = {
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    65
    c.prepareStatement(testQuery).executeQuery
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    66
  }
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    67
}
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    68
14
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    69
import org.squeryl._
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    70
import org.squeryl.internals.DatabaseAdapter
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    71
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    72
object SquerylTxMgr {
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    73
  def initSqueryl(name: ConnectionIdentifier,
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    74
    mkAdapter: () => DatabaseAdapter) = {
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    75
    SessionFactory.externalTransactionManagementAdapter =
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    76
    Some(new SquerylTxMgr(name, mkAdapter))
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    77
  }
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    78
}
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    79
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    80
class SquerylTxMgr(name: ConnectionIdentifier, mkAdapter: () => DatabaseAdapter)
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    81
  extends Loggable with Function0[Session] {
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    82
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    83
  private object currentSession extends DynoVar[Session]
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    84
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    85
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    86
  def apply = currentSession.is openOr {
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    87
    DB.use(name) { superConn =>
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    88
      val sess = Session.create(superConn.connection, mkAdapter())
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    89
      sess.setLogger(s => logger.debug(s))
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    90
      currentSession.set(sess)
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    91
      sess
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    92
    }
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    93
  }
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    94
}
5a2f996a5ba0 Workaround for #950 + #999
Tomas Zeman <tzeman@volny.cz>
parents: 11
diff changeset
    95
11
43fa65f5072e 8f749d3777e669ff Web UI skeleton
Tomas Zeman <tzeman@volny.cz>
parents:
diff changeset
    96
// vim: set ts=2 sw=2 et: