// NamensSchema.java import tcl.lang.*; public class NamensSchema { /** Erzeugt einen Namen für das Objekt. * Verwendet das Tcl-Skript im File "namensschema.tcl" */ public static String buildName (Demo object) { String retval = null; try { // Interpreter Object Interp interp = new Interp(); // Eingabewert setzen interp.setVar("object", ReflectObject.newInstance (interp, Demo.class, object), 0); // Skript starten String skript = "namensschema.tcl"; interp.evalFile(skript); // Ergebnis abfragen retval = interp.getVar("retval", 0).toString(); // Interpreter löschen interp.dispose(); } catch (TclException tclexp) { System.err.println("Fehler im Skript: " + tclexp.getMessage()); } catch (Exception exp) { if (exp instanceof NameSchemaViolation) { System.err.println("Objekt verletzt Namensschema: " + exp.getMessage()); } else { exp.printStackTrace(); System.err.println("Es trat ein Fehler auf: " + exp.getMessage()); } } return retval; } public static void main (String[] args) { Demo a = new Demo("Einfach"); a.setC(-12); System.out.println("Name für '" + a + "'"); System.out.println("\t\t" + NamensSchema.buildName(a)); a = new Demo("C==0"); a.setC(0); System.out.println("Name für '" + a + "'" ); System.out.println("\t\t" + NamensSchema.buildName(a)); a = new Demo("Verkettet", new Demo("Basis")); a.setC(42); System.out.println("Name für '" + a + "'" ); System.out.println("\t\t" + NamensSchema.buildName(a)); } }