diff examples/util/ClassInfo.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/examples/util/ClassInfo.java	Tue Jan 17 17:50:20 2012 +0000
@@ -0,0 +1,97 @@
+package eg.util;
+import  samer.core.*;
+import  samer.core.shells.*;
+import  samer.core.types.*;
+import  samer.core.Agent.*;
+import  java.lang.reflect.*;
+import  java.util.*;
+
+public class ClassInfo implements Agent, Observer
+{
+	VString	clname = new VString("class");
+	VBoolean	all = new VBoolean("all",false);;
+	Class		cl;
+
+	public ClassInfo()
+	{
+		clname.addObserver(this);
+		all.addObserver(this);
+		Shell.register(this); 
+		Shell.exposeCommands(this); 
+	}
+
+	public void getCommands(Registry r) { 
+		r.add("class").add("interfaces")
+			.add("methods").add("fields").add("superclass")
+			.add("verbose", all.value);
+	}
+
+	public void execute(String cmd, Environment env) throws Exception
+	{ 
+		if (cmd.equals("class")) {
+			clname.value = X.string(env.datum(),clname.value);
+			clname.changed();
+		} else if (cmd.equals("methods")) {
+			Method		mths[];
+
+			if (all.value) mths = cl.getMethods();
+			else				mths = cl.getDeclaredMethods();
+				
+			Shell.print("Methods: ");
+			for (int i=0;i<mths.length; i++) {
+				Shell.print("\t"+mths[i]);
+			}
+
+		} else if (cmd.equals("fields")) {
+			Field		flds[];
+
+			if (all.value) flds = cl.getFields();
+			else				flds = cl.getDeclaredFields();
+
+			Shell.print("Fields: ");
+			for (int i=0;i<flds.length; i++) {
+				Shell.print("\t"+flds[i]);
+			}
+		} else if (cmd.equals("interfaces")) {
+			Class		ifaces[] = cl.getInterfaces();
+			Shell.print("Interfaces: ");
+			for (int i=0;i<ifaces.length; i++) {
+				Shell.print("\t"+ifaces[i]);
+			}
+		} else if (cmd.equals("superclass")) {
+			setClass(cl.getSuperclass());
+		} else if (cmd.equals("verbose")) {
+			all.value = X._bool(env.datum(),!all.value);
+			all.changed();
+		}
+	}
+
+	public void update(Observable o, Object src)
+	{
+		if (clname.equals(o) && src!=this) { // &&&
+			try { setClass(clname.value); }
+			catch (Exception ex) {}
+		}
+	}
+
+	private void setClass(String n) throws Exception {
+		setClass(Class.forName(n));
+	}
+
+	private void setClass(Class c) throws Exception
+	{
+		clname.value = c.getName();
+		clname.changed(this);
+		cl = c; 
+
+		Constructor cons[] = cl.getConstructors();
+
+		Shell.print("\nClass: "+cl);
+		Shell.print("\textends "+cl.getSuperclass());
+		Shell.print("constructors");
+		for (int i=0;i<cons.length; i++) {
+			Shell.print("\t"+cons[i]);
+		}
+	}
+}
+