Advertisement
edartuz

scala_props

Mar 17th, 2013
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 2.36 KB | None | 0 0
  1. package ul
  2.  
  3. import java.net.{URLDecoder,URLEncoder}
  4.  
  5. trait Props {
  6.     val propsContainer = this;
  7.     val props = new PropsMan {
  8.         container = propsContainer;
  9.     }
  10. }
  11.  
  12. class PropsMan {
  13.     var container:AnyRef = null;
  14.     val attrs = new collection.mutable.ArrayBuffer[PropAttr];
  15.    
  16.     def apply(name:String):Any =
  17.         container.getClass.getMethods.find(_.getName == name).get.invoke(container);
  18.     def get(name:String) = apply(name);
  19.  
  20.     def update(name:String, value:Int):PropsMan = update(name, new java.lang.Integer(value));
  21.     def update(name:String, value:Double):PropsMan = update(name, new java.lang.Double(value));
  22.     def update(name:String, value:Object):PropsMan = {
  23.         container.getClass.getMethods.find(_.getName == name+"_$eq").get.invoke(container, value);
  24.         this
  25.     }
  26.     def updateString(name:String, value:String):PropsMan = {
  27.         update(name, apply(name) match {
  28.             case i:java.lang.Integer => new java.lang.Integer(java.lang.Integer.parseInt(value))
  29.             case d:java.lang.Double  => new java.lang.Double(java.lang.Double.parseDouble(value))
  30.             case b:java.lang.Boolean => new java.lang.Boolean(java.lang.Boolean.parseBoolean(value))
  31.             case s:java.lang.String  => value
  32.             case _                   => value
  33.         });
  34.         this
  35.     }
  36.    
  37.     def tags = (for (a<-attrs) yield a.tag);
  38.     def names = (for (a<-attrs) yield a.name);
  39.     def attr(aTag:String) = attrs.find(_.tag == aTag).get;
  40.    
  41.     def toConf:String = (
  42.         for (a <- attrs) yield
  43.             a.tag + " = " + URLEncoder.encode(apply(a.tag).toString, "UTF-8")
  44.         ).mkString("\n");
  45.     def fromConf(s:String) {
  46.         for (l <- s.lines) {
  47.             val snv = l.split(" = ");
  48.             if ((snv.length == 2)&&(tags.contains(snv(0))))
  49.                 updateString(snv(0), URLDecoder.decode(snv(1), "UTF-8"))
  50.         }
  51.     }
  52.    
  53.     def toXml:String = {
  54.         ""
  55.     }
  56.     def fromXml(s:String) {
  57.     }
  58.    
  59.     def toJson:String = {
  60.         ""
  61.     }
  62.     def fromJson(s:String) {
  63.     }
  64. }
  65.  
  66. class PropAttr(
  67.     var tag:String   = "",
  68.     var name:String  = "",
  69.     var descr:String = "",
  70.     var hide:Boolean = false,
  71.     var ro:Boolean   = false
  72. ) {
  73.     def this(aTag:String, aName:String) = this(aTag,aName,"");
  74.     def this(aTag:String) = this(aTag,aTag);
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement