00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00026 package comedyarch;
00027
00028 import cast.AlreadyExistsOnWMException;
00029 import cast.DoesNotExistOnWMException;
00030 import cast.UnknownSubarchitectureException;
00031 import cast.architecture.ChangeFilterFactory;
00032 import cast.architecture.ManagedComponent;
00033 import cast.architecture.WorkingMemoryChangeReceiver;
00034 import cast.cdl.FilterRestriction;
00035 import cast.cdl.WorkingMemoryChange;
00036 import cast.cdl.WorkingMemoryOperation;
00037 import cast.core.CASTUtils;
00038
00039 import comedyarch.autogen.DirectorAction;
00040 import comedyarch.autogen.DirectorActionType;
00041 import comedyarch.autogen.Joke;
00042 import comedyarch.autogen.Reaction;
00043 import comedyarch.autogen.TwoLiner;
00044
00051 public class AssistantDirector extends ManagedComponent {
00052
00053 private void handleJoke(WorkingMemoryChange _wmc) {
00054 try {
00055
00056
00057
00058 TwoLiner joke = getMemoryEntry(_wmc.address, TwoLiner.class);
00059
00060
00061 if ((!joke.setup.equals("")) && (!joke.punchline.equals(""))) {
00062
00063 println("is that a joke I hear?!");
00064
00065
00066 DirectorAction action = new DirectorAction(
00067 DirectorActionType.AskTheAudience, _wmc.address);
00068
00069
00070 addToWorkingMemory(newDataID(), action);
00071 }
00072
00073 } catch (DoesNotExistOnWMException e) {
00074 e.printStackTrace();
00075 } catch (AlreadyExistsOnWMException e) {
00076 e.printStackTrace();
00077 } catch (UnknownSubarchitectureException e) {
00078 e.printStackTrace();
00079 }
00080 }
00081
00082
00083
00084
00085
00086
00087
00088
00089 @Override
00090 public void start() {
00091 WorkingMemoryChangeReceiver jokeReceiver = new WorkingMemoryChangeReceiver() {
00092 public void workingMemoryChanged(WorkingMemoryChange _wmc) {
00093 log(CASTUtils.toString(_wmc));
00094 handleJoke(_wmc);
00095 }
00096 };
00097
00098
00099
00100
00101 addChangeFilter(ChangeFilterFactory.createChangeFilter(TwoLiner.class,
00102 WorkingMemoryOperation.OVERWRITE, "", "", "stage.subarch",
00103 FilterRestriction.ALLSA), jokeReceiver);
00104
00105 WorkingMemoryChangeReceiver reactionReceiver = new WorkingMemoryChangeReceiver() {
00106
00107 public void workingMemoryChanged(WorkingMemoryChange _wmc) {
00108 handleReaction(_wmc);
00109 }
00110 };
00111
00112
00113 addChangeFilter(ChangeFilterFactory.createGlobalTypeFilter(
00114 Reaction.class, WorkingMemoryOperation.ADD), reactionReceiver);
00115
00116 }
00117
00123 private void handleReaction(WorkingMemoryChange _wmc) {
00124 println("is that a reaction I hear?!");
00125
00126
00127
00128
00129
00130 DirectorAction action = new DirectorAction(
00131 DirectorActionType.CheckTheReaction, _wmc.address);
00132
00133
00134 try {
00135 addToWorkingMemory(newDataID(), action);
00136 } catch (AlreadyExistsOnWMException e) {
00137 e.printStackTrace();
00138 }
00139
00140 }
00141
00142 }