Skip to content

Commit

Permalink
Tweaking.
Browse files Browse the repository at this point in the history
  • Loading branch information
Zef Hemel committed May 26, 2009
1 parent c5ce353 commit 760aa98
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 49 deletions.
39 changes: 25 additions & 14 deletions src/swebdsl/Data.scala → src/swebdsl/data/Data.scala
@@ -1,20 +1,9 @@
package swebdsl
package swebdsl.data

import com.google.appengine.api.datastore._
import scala.collection.mutable.HashMap
import scala.collection.mutable.ArrayBuffer

trait Cache {
private var cache: HashMap[String, AnyRef] = new HashMap[String, AnyRef]

def cache[T](key: String, l: => T): T = {
if (!cache.contains(key)) {
cache(key) = l.asInstanceOf[AnyRef]
}
cache(key).asInstanceOf[T]
}
}

abstract class DataObject(key: String) {
def singleton: DataObjectSingleton[_]

Expand Down Expand Up @@ -66,7 +55,7 @@ abstract class DataObject(key: String) {
}


abstract class DataObjectSingleton[T <: DataObject](var cls: Class[_]) {
abstract class DataObjectSingleton[T <: DataObject](var cls: Class[T]) {
def kind: String = cls.getSimpleName()

def all(): ArrayBuffer[T] = {
Expand Down Expand Up @@ -106,11 +95,33 @@ abstract class DataObjectSingleton[T <: DataObject](var cls: Class[_]) {
var keys = values.keySet().iterator()
while (keys.hasNext()) {
var key = keys.next()
cls.getMethod(key + "_$eq", cls.getMethod(key).getReturnType).invoke(e, values.get(key))
try {
cls.getMethod(key + "_$eq", cls.getMethod(key).getReturnType).invoke(e, values.get(key))
} catch {
case e: Exception =>
}
}
results.append(e)
}
return results
}
}

object DataUtils {
def key2DataObject(cls: Class[_], key: String): AnyRef = {
if (cls.getSuperclass() != classOf[DataObject]) {
return null
}
var e = cls.newInstance().asInstanceOf[DataObject]
var ds = DatastoreServiceFactory.getDatastoreService()
e.ent = ds.get(KeyFactory.createKey(cls.getSimpleName(), key.toInt))
var values = e.ent.getProperties()
var keys = values.keySet().iterator()
while (keys.hasNext()) {
var key = keys.next()
cls.getMethod(key + "_$eq", cls.getMethod(key).getReturnType).invoke(e, values.get(key))
}
return e
}
}

8 changes: 4 additions & 4 deletions src/swebdsl/Forms.scala → src/swebdsl/ui/Forms.scala
@@ -1,4 +1,4 @@
package swebdsl
package swebdsl.ui

import javax.servlet.http._

Expand Down Expand Up @@ -113,14 +113,14 @@ trait Forms {
else
throw new RuntimeException("Don't know how to create an input for " + a)

def action(s: String)(c: => Unit) {
def button(s: String)(c: => Unit) {
actionCounter += 1
mode match {
case PageMode.Render => {
write("<input type=\"submit\" name=\"action-" + actionCounter + "\" value=\"" + s + "\">")
write("<input type=\"submit\" name=\"button-" + actionCounter + "\" value=\"" + s + "\">")
}
case PageMode.Action => {
if (request.getParameter("action-" + actionCounter) != null) {
if (request.getParameter("button-" + actionCounter) != null) {
c
}
}
Expand Down
33 changes: 16 additions & 17 deletions src/swebdsl/MainServlet.scala → src/swebdsl/ui/MainServlet.scala
@@ -1,13 +1,14 @@
package swebdsl
package swebdsl.ui

import javax.servlet._
import javax.servlet.http._
import java.io._
import scala.collection.mutable.HashMap
import scala.collection.mutable.{HashMap, ArrayBuffer}
import com.google.appengine.api.datastore._

abstract class MainServlet extends HttpServlet {
var pageMap = HashMap[String, String]()
var dataConverters = new ArrayBuffer[((Class[_], String) => AnyRef)]

def pages: List[Page]

Expand Down Expand Up @@ -46,10 +47,20 @@ abstract class MainServlet extends HttpServlet {
args(i) = pargs(i)
} else if (argType == classOf[Int]) {
args(i) = int2Integer(pargs(i).toInt)
} else if (argType.getSuperclass() == classOf[DataObject]) {
args(i) = key2DataObject(pargs(i), argType)
//} else if (argType.getSuperclass() == classOf[DataObject]) {
//args(i) = key2DataObject(pargs(i), argType)
} else {
matches = false
var r: AnyRef = null
for (conv <- dataConverters) {
r = conv(argType, pargs(i))
if (r != null) {
matches = true
args(i) = r
}
}
if (r == null) {
matches = false
}
}
i += 1
}
Expand All @@ -73,16 +84,4 @@ abstract class MainServlet extends HttpServlet {
}
}

private def key2DataObject(key: String, cls: Class[_]): DataObject = {
var e = cls.newInstance().asInstanceOf[DataObject]
var ds = DatastoreServiceFactory.getDatastoreService()
e.ent = ds.get(KeyFactory.createKey(cls.getSimpleName(), key.toInt))
var values = e.ent.getProperties()
var keys = values.keySet().iterator()
while (keys.hasNext()) {
var key = keys.next()
cls.getMethod(key + "_$eq", cls.getMethod(key).getReturnType).invoke(e, values.get(key))
}
return e
}
}
20 changes: 19 additions & 1 deletion src/swebdsl/Page.scala → src/swebdsl/ui/Page.scala
@@ -1,5 +1,6 @@
package swebdsl
package swebdsl.ui

import collection.mutable.HashMap
import java.io._
import javax.servlet.http._

Expand All @@ -10,6 +11,18 @@ object PageMode extends Enumeration {

case class IgnoreMe()

trait Cache {
private var cache: HashMap[String, AnyRef] = new HashMap[String, AnyRef]

def cache[T](key: String, l: => T): T = {
if (!cache.contains(key)) {
cache(key) = l.asInstanceOf[AnyRef]
}
cache(key).asInstanceOf[T]
}
}


abstract case class Page(ign: IgnoreMe) extends Forms with Cache {
var sectionDepth = 1
var style = new Style
Expand All @@ -28,6 +41,11 @@ abstract case class Page(ign: IgnoreMe) extends Forms with Cache {
this.out = out
this.request = req
this.response = res
postInit
}

def postInit {

}

def resetCounters {
Expand Down
19 changes: 6 additions & 13 deletions src/swebdsl/Style.scala → src/swebdsl/ui/Style.scala
@@ -1,4 +1,4 @@
package swebdsl
package swebdsl.ui

class Style {
import scala.collection.mutable.Stack
Expand Down Expand Up @@ -53,6 +53,11 @@ class Style {
this
}

def native(s: String)(c: => Unit) = {
setSelector(s, c)
this
}

def body(c: => Unit): Style = {
setSelector("body", c)
this
Expand Down Expand Up @@ -101,18 +106,6 @@ class Style {

def setSpecificStyle(css: String) {
this.css.append(css)
/*
var s : Style = this
while(s.parent != null) {
s = s.parent
}
val key = s.styleStack map(_.name) mkString(" >> ")
if(s.styles contains key) {
s.styles(key).append(css)
} else {
s.styles(key) = new StringBuffer(css)
}
*/
}

override def toString: String =
Expand Down

0 comments on commit 760aa98

Please sign in to comment.