View Javadoc

1   /*
2   * The contents of this file are subject to the BT "ZEUS" Open Source 
3   * Licence (L77741), Version 1.0 (the "Licence"); you may not use this file 
4   * except in compliance with the Licence. You may obtain a copy of the Licence
5   * from $ZEUS_INSTALL/licence.html or alternatively from
6   * http://www.labs.bt.com/projects/agents/zeus/licence.htm
7   * 
8   * Except as stated in Clause 7 of the Licence, software distributed under the
9   * Licence is distributed WITHOUT WARRANTY OF ANY KIND, either express or 
10  * implied. See the Licence for the specific language governing rights and 
11  * limitations under the Licence.
12  * 
13  * The Original Code is within the package zeus.*.
14  * The Initial Developer of the Original Code is British Telecommunications
15  * public limited company, whose registered office is at 81 Newgate Street, 
16  * London, EC1A 7AJ, England. Portions created by British Telecommunications 
17  * public limited company are Copyright 1996-9. All Rights Reserved.
18  * 
19  * THIS NOTICE MUST BE INCLUDED ON ANY COPY OF THIS FILE
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  }