[Assorted-commits] SF.net SVN: assorted: [613] zdb/trunk
Brought to you by:
yangzhang
From: <yan...@us...> - 2008-03-05 22:59:42
|
Revision: 613 http://assorted.svn.sourceforge.net/assorted/?rev=613&view=rev Author: yangzhang Date: 2008-03-05 14:59:46 -0800 (Wed, 05 Mar 2008) Log Message: ----------- checkpoint Modified Paths: -------------- zdb/trunk/Makefile zdb/trunk/run.bash zdb/trunk/src/zdb/AltUi.scala zdb/trunk/src/zdb/Core.scala Added Paths: ----------- zdb/trunk/doc/ zdb/trunk/doc/manual.txt zdb/trunk/src/lzx/ zdb/trunk/src/lzx/explorer.lzx Modified: zdb/trunk/Makefile =================================================================== --- zdb/trunk/Makefile 2008-03-05 21:16:43 UTC (rev 612) +++ zdb/trunk/Makefile 2008-03-05 22:59:46 UTC (rev 613) @@ -1,30 +1,35 @@ +COMMONS := $(HOME)/scom/src + all: core +# fsc -d build -classpath ~/workspace-3.2/zharva:build -sourcepath src:scala-tui:$(COMMONS) src/zdb/Ui.scala + +build: mkdir -p build -# fsc -d build -classpath ~/workspace-3.2/zharva:build -sourcepath src:scala-tui:scala-commons src/zdb/Ui.scala -zdb: +zdb: build fsc -d build -classpath ~/workspace-3.2/zharva:build \ src/zdb/*.scala -tui: +tui: build fsc -d build -classpath ~/workspace-3.2/zharva:build \ scala-tui/tui/*.scala \ src/zdb/*.scala -full: +full: build fsc -d build -classpath ~/workspace-3.2/zharva:build \ - scala-commons/commons/*.scala \ + $(COMMONS)/commons/*.scala \ scala-tui/tui/*.scala \ src/zdb/*.scala -core: - fsc -deprecation -d build src/zdb/Core.scala \ - -classpath javabib-bin.jar - src/zdb/AltUi.scala scala-commons/commons/*.scala +core: build + ./run.bash build -# fsc -d build -target:jvm-1.5 -classpath ~/workspace-3.2/zharva:build -sourcepath src:scala-tui:scala-commons src/zdb/*.scala scala-tui/tui/*.scala scala-commons/commons/*.scala -# scalac -d build -classpath ~/workspace-3.2/zharva:build:~/tmp/pkg/pure/todo//charva/java/lib/commons-logging.jar:~/tmp/pkg/pure/todo//charva/java/lib/commons-logging-api.jar -sourcepath src:scala-tui:scala-commons src/zdb/Ui.scala scala-tui/tui/Tui.scala +stop: + fsc -shutdown +# fsc -d build -target:jvm-1.5 -classpath ~/workspace-3.2/zharva:build -sourcepath src:scala-tui:$(COMMONS) src/zdb/*.scala scala-tui/tui/*.scala $(COMMONS)/commons/*.scala +# scalac -d build -classpath ~/workspace-3.2/zharva:build:~/tmp/pkg/pure/todo//charva/java/lib/commons-logging.jar:~/tmp/pkg/pure/todo//charva/java/lib/commons-logging-api.jar -sourcepath src:scala-tui:$(COMMONS) src/zdb/Ui.scala scala-tui/tui/Tui.scala + # .PATH.scala = src/tui #.scala: Added: zdb/trunk/doc/manual.txt =================================================================== --- zdb/trunk/doc/manual.txt (rev 0) +++ zdb/trunk/doc/manual.txt 2008-03-05 22:59:46 UTC (rev 613) @@ -0,0 +1,8 @@ +Requirements +------------ + +java 6 for the sun http server +scala 2.6.0 +scala-commons +ostermillerutils_1_06_01.jar +jscrape Modified: zdb/trunk/run.bash =================================================================== --- zdb/trunk/run.bash 2008-03-05 21:16:43 UTC (rev 612) +++ zdb/trunk/run.bash 2008-03-05 22:59:46 UTC (rev 613) @@ -1,7 +1,29 @@ #!/usr/bin/env bash # vim:et:sw=2:ts=2 +if [ ! -f javabib-bin.jar ] +then wget 'http://www-plan.cs.colorado.edu/henkel/stuff/javabib/20040801/javabib-bin.jar' +fi + +export COMMONS=~/scom/src +export CLASSPATH=javabib-bin.jar:ostermillerutils_1_06_01.jar:jscrape/libs/commons-codec-1.3.jar:jscrape/libs/commons-httpclient-3.0.1.jar:jscrape/libs/commons-logging-1.1.jar:jscrape/libs/log4j-1.2.11.jar:jscrape/libs/saxon8-dom.jar:jscrape/libs/saxon8.jar:jscrape/libs/saxon8-xpath.jar:jscrape/libs/saxon8-xqj.jar:jscrape/libs/tagsoup-1.1.jar:jscrape/libs/xalan.jar:jscrape/jscrape.jar + +run() { + CLASSPATH=build:$CLASSPATH "$@" +} + +if (( $# == 0 )) +then echo "specify 'web' or 'file'"; exit 1 +fi + case "$1" in - web ) scala -classpath build:javabib-bin.jar zdb.WebUi - file ) scala -classpath build:javabib-bin.jar zdb.FileIo + build ) fsc -deprecation -d build \ + src/zdb/Core.scala \ + src/zdb/AltUi.scala \ + $COMMONS/commons/*.scala \ + $COMMONS/commons/extras/*.scala ;; + web ) run scala zdb.WebUi ;; + file ) run scala zdb.FileIo ;; + repl ) run rlwrap scala ;; + * ) run scala "$@" ;; esac Added: zdb/trunk/src/lzx/explorer.lzx =================================================================== --- zdb/trunk/src/lzx/explorer.lzx (rev 0) +++ zdb/trunk/src/lzx/explorer.lzx 2008-03-05 22:59:46 UTC (rev 613) @@ -0,0 +1,3 @@ +<canvas> + <autocompletecombobox contentpath=""> +</canvas> Modified: zdb/trunk/src/zdb/AltUi.scala =================================================================== --- zdb/trunk/src/zdb/AltUi.scala 2008-03-05 21:16:43 UTC (rev 612) +++ zdb/trunk/src/zdb/AltUi.scala 2008-03-05 22:59:46 UTC (rev 613) @@ -2,37 +2,187 @@ import Zdb._ import ZdbUtil._ +import ObjUser._ import commons.Control._ import commons.Io._ +import commons.Misc._ +import commons.extras._ +import java.io._ + +import scala.collection.jcl._ + object FileIo { def main(args: Array[String]) { loadFilePickle("data/data") using (TextWriter("output")) { w => for (obj <- universe.objs) { - w println (printSummObj(obj)); + w println printSummObj(obj) } } } } -import com.sun.net.httpserver._ +object WebUi { + // TODO make into enum + class FieldType + object ReadOnly extends FieldType + object Editable extends FieldType + type Field = (String, FieldType, String, Seq[String]) + def handleCiteseer(url: String, title: String) = { + val bibtex = JScraper scrapeForString (url, "//xhtml:pre") + println(bibtex) + val (entries, exs) = JavaBib parse bibtex + exs foreach (_ printStackTrace) + val entry = entries(0) + assert(entries.length == 1) + println(entry) -object WebUi { - def dialog(s: String) = { - "This is the response" + val title = entry("title")(0) + val (obj, exists) = try { + (deref(getObj(title)), true) + } catch { + case _ => (deref(mk(title)("BibTeX item")), false) + } + + for ((rawName, value) <- entry elements) { + val name = if (rawName == "title") "name" else rawName + if (!success(obj getProp name)) { + prop("BibTeX item", name, "string set") + } + set(title, name)(value(0)) // obj setProp mkStrSetV(obj getProp name) + } + + val fields = for ((owner, name, info, value) <- getProps(obj)) + yield (name, + ReadOnly, + <p>{name} ({printSummObj(owner)})</p>.text, + List(optionize(value.get.asInstanceOf[StrSetV].s.elements.next) getOrElse "")) // TODO only a single value + + List(("exists", ReadOnly, "already exists", List(exists toString))) ++ fields toList } + def handleWebsite(url: String, title: String) = List[Field]() + def dialog(method: String, + headers: SunHttpServer.HeaderMap, + uri: java.net.URI, + params: SunHttpServer.ParamMap, + in: String) = { + val (url, title) = (params("url"), params("title")) + val bookmarklet = "javascript: var pw = window.open( 'http://localhost:8888/?url=' + encodeURIComponent(location.href) + '&title=' + encodeURIComponent(document.title) + '&body=' + encodeURIComponent(document.body), 'zdb popup post', 'width=400,height=400,scrollbars=1,resizable=1' ); void(window.setTimeout('pw.focus()', 300));" + //val bookmarklet = "javascript: var pw = window.open( 'http://localhost:8888/?url=' + escape(location.href) + '&title=' + escape(document.title) + '&body=' + escape(document.body), 'zdb popup post', 'width=400,height=400,scrollbars=1,resizable=1' ); void(window.setTimeout('pw.focus()', 300));" + println(url + " " + title) + if (url != "") { + val fields: Seq[Field] = + if ((url startsWith "http://citeseer.ist.psu.edu") && + (title contains " (ResearchIndex)")) + handleCiteseer(url, title) + else + handleWebsite(url, title) + val res = + <html> + <head> + <!--CSS file (default YUI Sam Skin) --> + <link type="text/css" rel="stylesheet" href="http://yui.yahooapis.com/2.3.1/build/autocomplete/assets/skins/sam/autocomplete.css"/> + <!-- Dependencies --> + <script type="text/javascript" src="http://yui.yahooapis.com/2.3.1/build/yahoo-dom-event/yahoo-dom-event.js"></script> + <!-- OPTIONAL: Connection (required only if using XHR DataSource) --> + <script type="text/javascript" src="http://yui.yahooapis.com/2.3.1/build/connection/connection-min.js"></script> + <!-- OPTIONAL: Animation (required only if enabling animation) --> + <script type="text/javascript" src="http://yui.yahooapis.com/2.3.1/build/animation/animation-min.js"></script> + <!-- OPTIONAL: External JSON parser from http://www.json.org/ (enables JSON validation) --> + <script type="text/javascript" src="http://www.json.org/json.js"></script> + <!-- Source file --> + <script type="text/javascript" src="http://yui.yahooapis.com/2.3.1/build/autocomplete/autocomplete-min.js"></script> + <style>{scala.xml.Unparsed(""" + /* custom styles for multiple stacked instances */ + .autocomp { + width:15em; /* set width here */ + padding-bottom:2em; + z-index:9000; /* z-index needed on top instance for ie & sf absolute inside relative issue */ + } + /*.autoinput { + _position:absolute; /* abs pos needed for ie quirks */ + }*/ + """)}</style> + </head> + <body> + <form action="/" method="post"> + { + val handles = new HandleGenerator("xxx") + def quote(x: String) = x replaceAll ("\\\\","\\\\\\\\") replaceAll ("\"", "\\\\\"") + def jsarray(xs: List[String]) = xs map quote mkString ("[\"", "\",\"", "\"]") + for ((name, typ, label, values) <- fields) yield { + // typ match { + // case ReadOnly => + // <p>{label}:</p> // <input type="text" name="{name}" value={value}/></p> + // case Editable => + // <p>{label}:</p> // <input type="text" name="{name}" value={value}/></p> + // } + val arrayHandle, datasourceHandle, inputHandle, containerHandle, autocompHandle = + handles next; + <p>{label}: <input type="text" name={name} value={values mkString ","}/></p> +// <div style="z-index: 9000;"> +// {label}: +// <input name={name} id={inputHandle} type="text" value={values mkString ";"}/> +// <div id={containerHandle}/> +// </div> +// <script type="text/javascript"> +// {scala.xml.Unparsed(<p> +// var {arrayHandle} = {jsarray(List("a","aa","aa\"a\\a"))}; +// var {datasourceHandle} = new YAHOO.widget.DS_JSArray({arrayHandle}); +// var {autocompHandle} = new YAHOO.widget.AutoComplete("{inputHandle}","{containerHandle}", {datasourceHandle}); +// {autocompHandle}.queryDelay = 0; +// {autocompHandle}.prehighlightClassName = "yui-ac-prehighlight"; +// //{autocompHandle}.typeAhead = true; +// {autocompHandle}.useShadow = true; +// {autocompHandle}.minQueryLength = 0; +// //{autocompHandle}.textboxFocusEvent.subscribe(function() {{ +// // var sInputValue = YAHOO.util.Dom.get("{inputHandle}").value; +// // if(sInputValue.length === 0) {{ +// // var oSelf = this; +// // setTimeout(function(){{oSelf.sendQuery(sInputValue);}},0); +// // }} +// //}}); +// //{autocompHandle}.forceSelection = true; +// </p>.text)} +// </script> + } + } + <input type="submit" name="submit"/> + </form> + bookmarklet: <a href={bookmarklet}>Process in ZDB</a> + </body> + </html> toString; + res + } else { + <html> + <head> + <script> + window.close(); + </script> + </head> + </html> toString + } + /* + val fname = save + import commons.Debug._ + info(<p>saved to {fname}: {title}</p>.text) + */ + } def main(args: Array[String]) { - val server = HttpServer create (new InetSocketAddress(8888)) - server createContext ("/", new HttpHandler { - override def handle(t: HttpExchange) { - val response = dialog(t getRequestBody) - t sendResponseHeaders (200, response length) - using(t getResponseBody) (_ write response.getBytes) - } - }) - server setExecutor null - server start + load + SunHttpServer start dialog + println("started") } } + +object ConsoleTest { + def main(args: Array[String]) { + //val url = "http://citeseer.ist.psu.edu/desikan03lightweight.html" + //val query = "//xhtml:pre" + //println(WebUi handleCiteseer (url, query)) + val bib = using (TextReader("bib")) (_ read) + JavaBib parse bib + } +} Modified: zdb/trunk/src/zdb/Core.scala =================================================================== --- zdb/trunk/src/zdb/Core.scala 2008-03-05 21:16:43 UTC (rev 612) +++ zdb/trunk/src/zdb/Core.scala 2008-03-05 22:59:46 UTC (rev 613) @@ -166,9 +166,23 @@ case _ => throw new MultiResultException(objs.size, name, objs) } } + def ancestors(x: Obj): Set[Obj] = { + Set(x) ++ strictAncestors(x) + } + def strictAncestors(x: Obj): Set[Obj] = { + val as = for (p <- x.parents map deref; + a <- ancestors(p)) yield p + Set(as toList: _*) + } + // given an object, returns a list of all the properties associated with the object, including those from its parents + def getProps(x: Obj) = { + for (a <- ancestors(x); + (propname, prop) <- a.props.elements.toList) + yield (a, propname, prop, optionize(x getProp propname)) + } def pickleStrSetT: SPU[Type] = wrap( - (x: String) => StrSetT, + (x: String) => StrSetT(), (t: Type) => t match { case StrSetT() => "" }, string ) @@ -193,7 +207,7 @@ triple(pickleType, pickleVal, bool) ) def pickleNilV: SPU[Val] = wrap( - (s: String) => NilV, + (s: String) => NilV(), (v: Val) => v match { case NilV() => "" }, string ) @@ -258,7 +272,11 @@ ) val defaultBase = "data/data." def fnameGen = Iterator from 0 map (defaultBase +) - def save = saveFile( fnameGen find not(fileExists) get ) + def save = { + val fname = fnameGen find not(fileExists) get; + saveFile( fname ) + fname + } def load = loadFile( fnameGen takeWhile fileExists last ) // def saveLoad = { save; load } // def saveMem = pickle(pickleUniverse, universe) @@ -624,10 +642,10 @@ val obj = deref(getObj(objName)) val dflt = default match { case Some(s) => mkStrSetV(s) - case None => NilV + case None => NilV() } propType match { - case "string set" => obj.addProp(propName, StrSetT, dflt, opt) + case "string set" => obj.addProp(propName, StrSetT(), dflt, opt) case _ => throw new BadTypeException() } } @@ -731,6 +749,12 @@ } rmObjLossless(b) } + + def props(x: Obj) = { + val xs = for ((owner, name, info, value) <- getProps(x)) + yield <p>{name} ({owner}): {optionize(print(value.get))}</p> + xs mkString "\n" + } } import ObjUser._ @@ -1036,7 +1060,7 @@ while (true) { Console print "> " val line = Console.readLine - val cmd :: rest = split(line).toList + val cmd :: rest = words(line).toList return } } @@ -1048,7 +1072,7 @@ } def bigbang = { val concept = mkObj(Set()) - concept.addProp("names", StrSetT, NilV, false) + concept.addProp("names", StrSetT(), NilV(), false) concept.setProp("names", mkStrSetV("concept")) } def findAndRefineDups = { @@ -1059,6 +1083,8 @@ obj.infoProp(name) match { case Prop(ObjSetT(rels),_,_) => { for (val t <- rels map (_._1)) { + // verify that the object refs satisfy the type constraints, + // which limit which types of objects we can reference if (!(vs map deref forall (_.parents.contains(t)))) { Console.err printf ("%-40s%s", Array[Object](nameAndId(obj), "")) Console.err println; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |