source: AgentMind/branches/FAtiMA-Modular/FAtiMA.AdvancedMemory/src/main/java/FAtiMA/advancedMemoryComponent/RuleEngine.java @ 914

Revision 914, 3.2 KB checked in by joao.dias, 8 years ago (diff)
Line 
1package FAtiMA.advancedMemoryComponent;
2
3import java.io.IOException;
4import java.io.ObjectInputStream;
5import java.io.ObjectOutputStream;
6import java.io.Serializable;
7import java.util.ArrayList;
8
9import org.drools.KnowledgeBase;
10import org.drools.KnowledgeBaseFactory;
11import org.drools.builder.KnowledgeBuilder;
12import org.drools.builder.KnowledgeBuilderError;
13import org.drools.builder.KnowledgeBuilderErrors;
14import org.drools.builder.KnowledgeBuilderFactory;
15import org.drools.builder.ResourceType;
16import org.drools.io.ResourceFactory;
17import org.drools.runtime.StatefulKnowledgeSession;
18
19import FAtiMA.Core.memory.episodicMemory.ActionDetail;
20import FAtiMA.Core.memory.episodicMemory.EpisodicMemory;
21import FAtiMA.Core.memory.episodicMemory.MemoryEpisode;
22
23
24public class RuleEngine implements Serializable {
25       
26        /**
27         * for serialization purposes
28         */
29        private static final long serialVersionUID = 1L;
30       
31        protected KnowledgeBuilder _kbuilder;
32        protected KnowledgeBase _kbase;
33        protected StatefulKnowledgeSession _ksession;
34        protected String _rulePath;
35       
36        public RuleEngine(String rulePath)
37        {               
38                _rulePath = rulePath;
39                createKSession();
40        }
41       
42        private void createKSession()
43        {       
44                try {
45                        // load up the knowledge base
46                        _kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
47                        _kbuilder.add(ResourceFactory.newClassPathResource(_rulePath), ResourceType.DRL);
48                        KnowledgeBuilderErrors errors = _kbuilder.getErrors();
49                        if (errors.size() > 0) {
50                                for (KnowledgeBuilderError error: errors) {
51                                        System.err.println(error);
52                                }
53                                throw new IllegalArgumentException("Could not parse knowledge.");
54                        }
55                        _kbase = KnowledgeBaseFactory.newKnowledgeBase();
56                        _kbase.addKnowledgePackages(_kbuilder.getKnowledgePackages());
57                        _ksession = _kbase.newStatefulKnowledgeSession();
58                       
59                } catch (Throwable t) {
60                        t.printStackTrace();
61                }                       
62        }
63       
64        private void writeObject(ObjectOutputStream out) throws IOException
65        {
66                out.writeObject(_rulePath);
67               
68        }
69       
70        private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
71        {
72                _rulePath = (String) in.readObject();
73                createKSession();
74        }
75       
76        protected void AssertData(EpisodicMemory episodicMemory)
77        {
78                try {           
79                        MemoryEpisode event;
80                        ArrayList<ActionDetail> details;
81                        ActionDetail actionDetail;
82                       
83                        _ksession = _kbase.newStatefulKnowledgeSession();
84               
85                        ArrayList<MemoryEpisode> episodes = episodicMemory.GetAllEpisodes();
86                        for (int i = 0; i < episodes.size(); i++)
87                        {
88                                event = (MemoryEpisode) episodes.get(i);
89                                details = event.getDetails();
90                                for (int j = 0; j < details.size(); j++)
91                                {
92                                        actionDetail = (ActionDetail) details.get(j);
93                                        _ksession.insert(actionDetail);
94                                        //cad = new CandidateEvent(actionDetail);
95                                        //_ksession.insert(cad);       
96                                }                               
97                        }
98                       
99                        ArrayList<ActionDetail> records = episodicMemory.getDetails();
100                        for (int j = 0; j < records.size(); j++)
101                        {
102                                actionDetail = (ActionDetail) records.get(j);
103                                _ksession.insert(actionDetail);
104                                //cad = new CandidateEvent(actionDetail);
105                                //_ksession.insert(cad);       
106                        }       
107                } catch (Throwable t) {
108                        t.printStackTrace();
109                }               
110        }       
111}
Note: See TracBrowser for help on using the repository browser.