00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 package comedyarch;
00024
00025 import java.util.Map;
00026
00027 import cast.AlreadyExistsOnWMException;
00028 import cast.DoesNotExistOnWMException;
00029 import cast.UnknownSubarchitectureException;
00030 import cast.architecture.ChangeFilterFactory;
00031 import cast.architecture.ManagedComponent;
00032 import cast.architecture.WorkingMemoryChangeReceiver;
00033 import cast.cdl.WorkingMemoryChange;
00034 import cast.cdl.WorkingMemoryOperation;
00035
00036 import comedyarch.autogen.TwoLiner;
00037 import comedyarch.autogen.Reaction;
00038
00042 public class AudienceMember extends ManagedComponent {
00043
00044 private String m_defaultReaction;
00045
00046
00047
00048
00049
00050
00051 @Override
00052 public void start() {
00053 addChangeFilter(ChangeFilterFactory.createGlobalTypeFilter(
00054 TwoLiner.class, WorkingMemoryOperation.ADD),
00055 new WorkingMemoryChangeReceiver() {
00056
00057 public void workingMemoryChanged(WorkingMemoryChange _wmc) {
00058 newTwoLinerAdded(_wmc);
00059 }
00060 });
00061
00062 addChangeFilter(ChangeFilterFactory.createGlobalTypeFilter(
00063 TwoLiner.class, WorkingMemoryOperation.OVERWRITE),
00064 new WorkingMemoryChangeReceiver() {
00065
00066 public void workingMemoryChanged(WorkingMemoryChange _wmc) {
00067 newTwoLinerAdded(_wmc);
00068 }
00069 });
00070 }
00071
00072
00073
00074
00075
00076
00077
00078
00079 @Override
00080 public void configure(Map<String, String> _config) {
00081 if (_config.containsKey("--reaction")) {
00082 m_defaultReaction = _config.get("--reaction");
00083 } else {
00084 m_defaultReaction = "BOO!";
00085 }
00086 }
00087
00088 private Reaction generateAudienceReaction(TwoLiner _joke) {
00089 return new Reaction(m_defaultReaction);
00090 }
00091
00096 private void newTwoLinerAdded(WorkingMemoryChange _wmc) {
00097
00098
00099 String id = _wmc.address.id;
00100
00101 try {
00102 if (_wmc.address.subarchitecture.equals(getSubarchitectureID())) {
00103
00104
00105 TwoLiner joke = getMemoryEntry(id, TwoLiner.class);
00106 println("(takes deep breath)");
00107 Reaction reaction = generateAudienceReaction(joke);
00108
00109 addToWorkingMemory(newDataID(), reaction);
00110 } else {
00111
00112 log("I'll have a cheeky peek into subarch: "
00113 + _wmc.address.subarchitecture);
00114 TwoLiner joke = getMemoryEntry(_wmc.address, TwoLiner.class);
00115 log("I heard a joke:");
00116 log(joke.setup);
00117 log(joke.punchline);
00118 }
00119 } catch (DoesNotExistOnWMException e) {
00120 e.printStackTrace();
00121 } catch (AlreadyExistsOnWMException e) {
00122 e.printStackTrace();
00123 } catch (UnknownSubarchitectureException e) {
00124 e.printStackTrace();
00125 }
00126
00127 }
00128
00129 }