samer@0: /* samer@0: * Copyright (c) 2000, Samer Abdallah, King's College London. samer@0: * All rights reserved. samer@0: * samer@0: * This software is provided AS iS and WITHOUT ANY WARRANTY; samer@0: * without even the implied warranty of MERCHANTABILITY or samer@0: * FITNESS FOR A PARTICULAR PURPOSE. samer@0: */ samer@0: samer@0: package samer.maths; samer@0: import samer.core.*; samer@0: import samer.core.types.*; samer@0: import samer.core.util.*; samer@0: import java.awt.*; samer@0: import java.util.*; samer@0: samer@0: /** samer@0: A Viewable random number generator. samer@0: The Generator itself must expose any parameters samer@0: it has, but this object allows the user to samer@0: control what class of generator to use. samer@0: */ samer@0: samer@0: public class VGenerator extends Viewable implements Agent, Generator samer@0: { samer@0: Generator gen; samer@0: String desc; // description of the current generator samer@0: samer@0: public VGenerator(String nm) throws Exception { this(nm,new Zero()); } samer@0: public VGenerator(String nm, Generator g) throws Exception { samer@0: super(nm); setAgent(this); gen = g; samer@0: Shell.registerViewable(this); samer@0: } samer@0: samer@0: public double next() { return gen.next(); } samer@0: public void next(double[] x) { gen.next(x); } samer@0: samer@0: public void dispose() samer@0: { samer@0: Shell.deregisterViewable(this); samer@0: gen.dispose(); samer@0: super.dispose(); samer@0: } samer@0: samer@0: public Generator getGenerator() { return gen; } samer@0: public void setGenerator(Generator g) { samer@0: gen.dispose(); gen=g; changed(); samer@0: } samer@0: samer@0: public Viewer getViewer() { return new UI(); } samer@0: samer@0: private class UI extends BaseViewer { samer@0: UI() { samer@0: super(VGenerator.this); samer@0: update(VGenerator.this,null); samer@0: } samer@0: samer@0: public void update(Observable o, Object arg) { samer@0: super.update(o,arg); samer@0: Shell.trace("VGenerator update to "+gen.toString()); samer@0: setText(getLabel()+": "+gen.toString()); samer@0: } samer@0: } samer@0: samer@0: public void getCommands(Registry r) { r.add("set").add("next"); } samer@0: samer@0: public void execute(String cmd, Environment env) throws Exception samer@0: { samer@0: if (cmd.equals("set")) { samer@0: Shell.push(getNode()); samer@0: setGenerator((Generator)X.object(env.datum())); samer@0: Shell.pop(); samer@0: } else if (cmd.equals("next")) { samer@0: env.add(new Double(gen.next())); samer@0: } samer@0: } samer@0: } samer@0: