diff src/samer/core_/util/ConsoleEnvironment.java @ 0:bf79fb79ee13

Initial Mercurial check in.
author samer
date Tue, 17 Jan 2012 17:50:20 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/samer/core_/util/ConsoleEnvironment.java	Tue Jan 17 17:50:20 2012 +0000
@@ -0,0 +1,85 @@
+/*
+ *	ConsoleEnvironment.java	
+ *
+ *	Copyright (c) 2000, Samer Abdallah, King's College London.
+ *	All rights reserved.
+ *
+ *	This software is provided AS IS and WITHOUT ANY WARRANTY; 
+ *	without even the implied warranty of MERCHANTABILITY or 
+ *	FITNESS FOR A PARTICULAR PURPOSE.
+ */
+
+package samer.core.util;
+import  samer.core.*;
+import  java.io.*;
+
+/**	
+  *	Environment which provides access to the user
+  *	using the standard input and output
+  */
+
+public class ConsoleEnvironment extends Environment
+{
+	BufferedReader	in;
+
+	public ConsoleEnvironment(Environment parent) {
+		super(parent,parent.node());
+		in=new BufferedReader(new InputStreamReader(System.in));
+	}
+
+	public Datum datum() { return new Texton("",Null); } // ??
+	public Datum datum(String name) {
+		// should check if use is willing to supply value
+		// if not return Null (or bad score)
+		return new Texton(rel(name),parent.datum(abs(name))); 
+	}
+
+	private class Texton implements Datum 
+	{
+		String	name;			// name of this Binding
+		Datum		inherited;	// parent's binding
+
+		public Texton(String nm, Datum inh) { name=nm; inherited=inh; }
+
+		public String name()  { return this.name; }
+		public int	  score() { return 32; } // less than perfect match
+
+		public Object get(Codec c, Object def)
+		{
+			if (def==null) def=inherited.get(c,def);
+
+			Shell.push(parent);
+			try {
+				System.out.println("Enter value for "+name);
+				if (def!=null) {
+					System.out.println("Default value is: " + def);
+				}
+				String instring=in.readLine();
+
+				if (instring.equals(".")) {
+					System.out.println("returning: "+def);
+					return def;
+				}
+				return c.decode(instring);
+			} catch (Exception ex) { 
+				Shell.trace(ex.toString());
+				throw new Error("get "+name);
+			} finally { Shell.pop(); }
+		}
+
+		public void get(Autocoder obj)
+		{
+			Shell.push(parent);
+			try {
+				System.out.println("Enter value for "+name);
+				System.out.println("Current value is: " + obj.string());
+				String instring=in.readLine();
+				if (!instring.equals(".")) obj.decode(instring);
+			} catch (Exception ex) { 
+				Shell.trace(ex.toString());
+				throw new Error("get "+name);
+			} finally { Shell.pop(); }
+		}
+	}
+}
+