[Assorted-commits] SF.net SVN: assorted: [222] scala-commons/trunk/src/commons
Brought to you by:
yangzhang
From: <yan...@us...> - 2008-01-11 03:57:12
|
Revision: 222 http://assorted.svn.sourceforge.net/assorted/?rev=222&view=rev Author: yangzhang Date: 2008-01-10 19:57:11 -0800 (Thu, 10 Jan 2008) Log Message: ----------- - added frontends for javabib, jscrape, sun http server (for zdb) - added handle generator (aka symbol generator) - added single-node-type tree TreeNode - added google ajax search api...this is in java :) stuffing here for now (for zdb) - added optionize(), success() - added run() Modified Paths: -------------- scala-commons/trunk/src/commons/Collections.scala scala-commons/trunk/src/commons/Control.scala scala-commons/trunk/src/commons/Io.scala scala-commons/trunk/src/commons/Misc.scala Added Paths: ----------- scala-commons/trunk/src/commons/GoogleAJAXSearchAPI.java scala-commons/trunk/src/commons/extras/ scala-commons/trunk/src/commons/extras/JScrape.scala scala-commons/trunk/src/commons/extras/JavaBib.scala scala-commons/trunk/src/commons/extras/SunHttpServer.scala Modified: scala-commons/trunk/src/commons/Collections.scala =================================================================== --- scala-commons/trunk/src/commons/Collections.scala 2008-01-04 03:33:45 UTC (rev 221) +++ scala-commons/trunk/src/commons/Collections.scala 2008-01-11 03:57:11 UTC (rev 222) @@ -298,6 +298,19 @@ case class Leaf[a](x: a) extends Tree[a] } + case class TreeNode[a](value: a, children: Seq[TreeNode[a]]) { + def show = { + import Misc._ + def r(n: TreeNode[a], lvl: Int): Stream[String] = { + Stream cons ( + " " * lvl + n.value, + Stream concat (n.children map (n => r(n, lvl+1))) + ) + } + r(this,0) mkString "\n" + } + } + abstract class BoolTree[a] { def sat(f: a => Boolean): Boolean = this match { case And(ts) => ts forall (_ sat f) Modified: scala-commons/trunk/src/commons/Control.scala =================================================================== --- scala-commons/trunk/src/commons/Control.scala 2008-01-04 03:33:45 UTC (rev 221) +++ scala-commons/trunk/src/commons/Control.scala 2008-01-11 03:57:11 UTC (rev 222) @@ -21,6 +21,10 @@ val stop = System.currentTimeMillis stop - start } + def optionize[a](f: => a) = + try { Some(f) } catch { case _ => None } + def success(f: => Any) = + try { f; true } catch { case _ => false } def loop[a](f: => a) { loop(const(f)) } def loop[a](f: Int => a) = for (val x <- Stream from 0) f(x) def lazyLoop[a](f: => a): Stream[a] = lazyLoop(const(f)) Added: scala-commons/trunk/src/commons/GoogleAJAXSearchAPI.java =================================================================== --- scala-commons/trunk/src/commons/GoogleAJAXSearchAPI.java (rev 0) +++ scala-commons/trunk/src/commons/GoogleAJAXSearchAPI.java 2008-01-11 03:57:11 UTC (rev 222) @@ -0,0 +1,29 @@ +import java.io.*; +import java.net.*; + +public class GoogleAJAXSearchAPI { + private static String endpointURL = "http://www.google.com/uds/GwebSearch?"+ + "callback=GwebSearch.Raw" + + "Completion&context=0&lstkp=0&rsz=small&hl=en&" + + "sig=8656f49c146c5220e273d16b4b6978b2&q=Axis2&key=xxxxxxxxxxxxxxxxxx&v=1.0"; + + public static void main(String[] args) throws Exception { + URLConnection uc = new URL(endpointURL).openConnection(); + HttpURLConnection connection = (HttpURLConnection) uc; + connection.setDoOutput(true); + connection.setRequestMethod("GET"); + connection.connect(); + + String line; + InputStream inputStream = null; + try { + inputStream = connection.getInputStream(); + } catch (IOException e) { + inputStream = connection.getErrorStream(); + } + BufferedReader rd = new BufferedReader(new InputStreamReader(inputStream)); + while ((line = rd.readLine()) != null) { + System.out.println(line); + } + } +} Modified: scala-commons/trunk/src/commons/Io.scala =================================================================== --- scala-commons/trunk/src/commons/Io.scala 2008-01-04 03:33:45 UTC (rev 221) +++ scala-commons/trunk/src/commons/Io.scala 2008-01-11 03:57:11 UTC (rev 222) @@ -86,5 +86,17 @@ using (new ObjectOutputStream(bytes)) (_ writeObject x) using (BinaryWriter(fname)) (_ write bytes.toByteArray) } + + def run(cmd: String, input: String) = { + val proc = Runtime.getRuntime.exec(cmd) + using (TextWriter(proc.getOutputStream)) (_ println input) + if (proc.waitFor != 0) { + throw new Exception( + "command failed with exit status " + proc.exitValue + ": " + cmd + ) + } + using (TextReader(proc.getInputStream)) (_ read) + } + } import Io._ Modified: scala-commons/trunk/src/commons/Misc.scala =================================================================== --- scala-commons/trunk/src/commons/Misc.scala 2008-01-04 03:33:45 UTC (rev 221) +++ scala-commons/trunk/src/commons/Misc.scala 2008-01-11 03:57:11 UTC (rev 222) @@ -32,6 +32,13 @@ implicit def str2xstr(s: String): XString = XString(s) implicit def xstr2str(s: XString): String = s.s def id[a](x: a) = x + + // aka symbol generator + class HandleGenerator(base: String) extends Iterator[String] { + val i = Iterator from 0 + override def next = base + i.next + override def hasNext = i.hasNext + } // class OrderedPair[a <: Ordered[a], b](x:a,y:b) extends GPair[a,b](x,y) with Ordered[OrderedPair[a,b]] { // override def compare(o: OrderedPair[a,b]) = x compare o._1 // } Added: scala-commons/trunk/src/commons/extras/JScrape.scala =================================================================== --- scala-commons/trunk/src/commons/extras/JScrape.scala (rev 0) +++ scala-commons/trunk/src/commons/extras/JScrape.scala 2008-01-11 03:57:11 UTC (rev 222) @@ -0,0 +1,26 @@ +package commons.extras + +import com.apsquared.jscrape._ + +object JScraper { + def scrapeForString(url: String, query: String) = { + val q = + """declare namespace xhtml="http://www.w3.org/1999/xhtml";""" + new PageScraper scrapePageForString (url, q + query) + } +// +// def scrapeForList(url: String, query: String) = +// + + def main(args: Array[String]) { + if (args.length > 0) { + val url = args(0) + val query = args(1) + println(scrapeForString(url, query)) + } else { + val url = "http://citeseer.ist.psu.edu/desikan03lightweight.html" + val query = "//xhtml:pre" + println(scrapeForString(url, query)) + } + } +} Added: scala-commons/trunk/src/commons/extras/JavaBib.scala =================================================================== --- scala-commons/trunk/src/commons/extras/JavaBib.scala (rev 0) +++ scala-commons/trunk/src/commons/extras/JavaBib.scala 2008-01-11 03:57:11 UTC (rev 222) @@ -0,0 +1,36 @@ +package commons.extras + +import bibtex.dom._ +import bibtex.parser._ +import java.io._ +import scala.collection.jcl + +object JavaBib { + type Entry = Map[String, Seq[String]] + def list2buffer[a](xs: java.util.List) = new jcl.BufferWrapper[a] { + override def underlying = xs + } + def convert(entry: BibtexEntry): Entry = { + val map = new jcl.MapWrapper[String, BibtexAbstractValue] { + override def underlying = entry.getFields + } + val mappings = for ((k,uncasted) <- map.elements) yield { + val newV = uncasted match { + case v: BibtexPersonList => list2buffer(v getList) + case v: BibtexString => List(v getContent) + } + (k,newV) + } + Map(mappings toList:_*) + } + def parse(value: String): (Seq[Entry], Seq[Exception]) = + parse(new StringReader(value)) + def parse(reader: Reader) = { + val file = new BibtexFile + val parser = new BibtexParser(false) + parser parse (file, reader) + val entries = list2buffer[BibtexEntry](file getEntries) map convert + (entries, parser.getExceptions) + } +} + Added: scala-commons/trunk/src/commons/extras/SunHttpServer.scala =================================================================== --- scala-commons/trunk/src/commons/extras/SunHttpServer.scala (rev 0) +++ scala-commons/trunk/src/commons/extras/SunHttpServer.scala 2008-01-11 03:57:11 UTC (rev 222) @@ -0,0 +1,59 @@ +package commons.extras + +import com.sun.net.httpserver._ +import java.net._ +import commons.Control._ +import commons.Io._ +import scala.collection.{immutable => immut, jcl} +import com.Ostermiller.util._ + +/** + * Servlet-like wrapper around Sun's small HTTP server that comes with Java 6. + * + * Requires ostermillerutils, java 6 + */ +object SunHttpServer { + type HeaderMap = Map[String,Seq[String]] + type ParamMap = Map[String,String] + type Handler = (String, HeaderMap, URI, ParamMap, String) => String + def start(f: Handler) { + val server = HttpServer create (new InetSocketAddress(8888), 1) + server createContext ("/", new HttpHandler { + override def handle(t: HttpExchange) { + val headers = { + val hs = new jcl.MapWrapper[String,java.util.List] { + override def underlying = t.getRequestHeaders + } + Map(hs.elements map { case (k,v) => + val v2 = new jcl.BufferWrapper[String] { + override def underlying = v + } + (k, v2) + } toList: _*) + } + val body = using (TextReader(t getRequestBody)) (_ read) + val method = t getRequestMethod; + val uri = t getRequestURI; + // TODO note that this mapping is lossy (only uses one of multiple + // potential mappings for each key) + val paramMap = { + val params = new CGIParser(uri getQuery) getParameters; + val map = Map(params map { pair => (pair.getName, pair.getValue) }: _*) + map withDefaultValue "" + } + val response = try { + f(method, headers, uri, paramMap, body) + } catch { + case ex: Exception => { + ex.printStackTrace + throw ex + } + } + t sendResponseHeaders (200, response length) + using (t getResponseBody) (_ write response.getBytes) + } + }) + server setExecutor null + server start; + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |