1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 package zeus.rete.action;
24 import zeus.rete.*;
25 import zeus.util.*;
26 import zeus.concepts.*;
27 import zeus.concepts.fn.*;
28 import java.util.*;
29 import java.io.*;
30 /***
31
32 @author Simon Thompson
33 @since 1.1
34 */
35 public class SellAction extends ReteAction{
36
37 /***
38 A rete action that gets the agent to sell.
39 */
40 public void executeAction (Action a, Info info) {
41 ReteFact token = (ReteFact)a.head;
42 OntologyDb ont = getOntologyDb();
43 Fact f1 = ont.getFact(Fact.VARIABLE,token.getType());
44 Enumeration enum = token.data.keys();
45 while( enum.hasMoreElements() ) {
46 String attribute = (String)enum.nextElement();
47 ValueFunction value = (ValueFunction)token.data.get(attribute);
48 f1.setValue(attribute,value);
49 }
50
51 if ( !f1.resolve(info.getBindings()) ) {
52 Core.USER_ERROR("Improperly specified fact in Rete action achieve/sell/buy: " + token);
53 return;
54 }
55 ValueFunction end_time = (ValueFunction)a.table.get("end_time");
56 if ( end_time == null || !end_time.isDeterminate() ) {
57 Core.USER_ERROR("End_time not specified in Rete action achieve/sell/buy: " + token);
58 return;
59 }
60 ValueFunction confirm_time = (ValueFunction)a.table.get("confirm_time");
61 if ( confirm_time == null || !confirm_time.isDeterminate() ) {
62 Core.USER_ERROR("Confirm_time not specified in Rete action achieve/sell/buy: " + token);
63 return;
64 }
65
66 if ( context == null ) {
67 Core.USER_ERROR("attempt to use goal orientated behaviour without agent");
68 return;}
69 String gid = context.newId("goal");
70 double now = context.now();
71 int et = (int)(now + ((PrimitiveNumericFn)end_time).intValue());
72 double ct = now + ((PrimitiveNumericFn)confirm_time).doubleValue();
73
74 Goal g = new Goal(gid,f1,et,0,context.whoami(),ct);
75 ValueFunction cost = (ValueFunction)a.table.get("cost");
76 if ( cost != null )
77 g.setCost(((RealFn)cost).getValue());
78
79 Core.DEBUG(2," ==> " + g);
80 context.Engine().sell(g);
81
82 }
83
84
85
86 }