[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.
|