Skip to content

Instantly share code, notes, and snippets.

@earldouglas
Created December 30, 2011 18:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save earldouglas/1541001 to your computer and use it in GitHub Desktop.
Save earldouglas/1541001 to your computer and use it in GitHub Desktop.
// -*- mode: Scala;-*-
// Filename: k.scala
// Authors: lgm
// Creation: Wed Dec 28 14:52:27 2011
// Copyright: Not supplied
// Description:
// ------------------------------------------------------------------------
import scala.collection.mutable.HashMap
import scala.util.continuations._
import com.thoughtworks.xstream.XStream
import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver
import biz.source_code.base64Coder.Base64Coder
//import java.util._
import java.io.ObjectInputStream
import java.io.ByteArrayInputStream
import java.io.ObjectOutputStream
import java.io.ByteArrayOutputStream
/**
* Usage sample serializing SomeClass instance
*/
object ObjectToString {
/** Read the object from Base64 string. */
def fromString( s : String ) : java.lang.Object = {
val data : Array[Byte] = Base64Coder.decode( s )
val ois : ObjectInputStream =
new ObjectInputStream( new ByteArrayInputStream( data ) )
val o : java.lang.Object = ois.readObject();
ois.close()
o
}
/** Write the object to a Base64 string. */
def toString( o : Serializable ) : String = {
val baos : ByteArrayOutputStream = new ByteArrayOutputStream()
val oos : ObjectOutputStream = new ObjectOutputStream( baos )
oos.writeObject( o )
oos.close()
new String( Base64Coder.encode( baos.toByteArray() ) )
}
}
object OK {
def coral( useXStream : Boolean )(
kmap : HashMap[String, (String => Unit)],
ksmap : HashMap[String,String],
key : String
) = {
reset {
shift {
( k : ( String => Unit ) ) => {
val ks =
if ( useXStream ) {
new XStream( new JettisonMappedXmlDriver() ).toXML( k )
}
else {
ObjectToString.toString( k.asInstanceOf[Serializable] )
}
println( "continuation as string: " + ks )
ksmap += ( ( key, ks ) )
kmap += ( ( key, k ) )
k( ks )
}
}
println( "resuming..." )
println( "searching kmap : " + kmap )
println( "kmap id : " + System.identityHashCode(kmap)) // add this line
for(
fns <- kmap.get( key )
) {
println( "fns is " + fns );
}
}
}
}
scala> :l k.scala
Loading k.scala...
import scala.collection.mutable.HashMap
import scala.util.continuations._
import biz.source_code.base64Coder.Base64Coder
import java.io.ObjectInputStream
import java.io.ByteArrayInputStream
import java.io.ObjectOutputStream
import java.io.ByteArrayOutputStream
defined module ObjectToString
defined module OK
scala> val ksmap1 = new HashMap[String,String]( )
ksmap1: scala.collection.mutable.HashMap[String,String] = Map()
scala> val kmap1 = new HashMap[String,(String => Unit)]( )
kmap1: scala.collection.mutable.HashMap[String,String => Unit] = Map()
scala> OK.coral( false )( kmap1, ksmap1, "Erp" )
continuation as string: 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
resuming...
searching kmap : Map(Erp -> <function1>)
kmap id : 24530783
fns is <function1>
scala> kmap1( "Erp" )( "Erp" )
resuming...
searching kmap : Map(Erp -> <function1>)
kmap id : 24530783
fns is <function1>
scala> val rK1 = ObjectToString.fromString( ksmap1( "Erp" )
| ).asInstanceOf[( String => Unit )]
rK1: String => Unit = <function1>
scala> rK1( "Erp" )
resuming...
searching kmap : Map()
kmap id : 4430367
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment