Source code: org/alicebot/server/core/targeting/Target.java
1 // Decompiled by Jad v1.5.8c. Copyright 2001 Pavel Kouznetsov.
2 // Jad home page: http://www.geocities.com/kpdus/jad.html
3 // Decompiler options: packimports(3)
4
5 package org.alicebot.server.core.targeting;
6
7 import java.util.*;
8 import org.alicebot.server.core.util.*;
9
10 // Referenced classes of package org.alicebot.server.core.targeting:
11 // TargetExtensions, Category, TargetInputs, CannotExtendException
12
13 public class Target
14 {
15
16 public Target(String s, String s1, String s2, String s3, String s4, String s5, String s6,
17 String s7)
18 {
19 extensions = new TargetExtensions();
20 replies = new LinkedList();
21 newCategory = new Category();
22 activations = 1;
23 match = new Category(s, s1, s2, s3);
24 inputs = new TargetInputs(s4, s5, s6);
25 replies.add(s7);
26 }
27
28 public int hashCode()
29 {
30 return (match.getPattern() + match.getThat() + match.getTopic()).hashCode();
31 }
32
33 public static int generateHashCode(String s, String s1, String s2)
34 {
35 return (s + s1 + s2).hashCode();
36 }
37
38 public void merge(Target target)
39 {
40 if(hashCode() != target.hashCode())
41 throw new DeveloperError("Targets with non-matching <match> segments cannot be merged!");
42 Iterator iterator = target.getInputs().iterator();
43 Iterator iterator1 = target.getReplies().iterator();
44 Iterator iterator2 = target.getExtensions().iterator();
45 while(iterator.hasNext())
46 {
47 StringTriple stringtriple = (StringTriple)iterator.next();
48 StringTriple stringtriple1 = null;
49 try
50 {
51 stringtriple1 = (StringTriple)iterator2.next();
52 }
53 catch(NoSuchElementException nosuchelementexception) { }
54 String s = (String)iterator1.next();
55 if(!inputs.contains(stringtriple))
56 {
57 inputs.add(stringtriple);
58 replies.add(s);
59 if(stringtriple1 != null)
60 extensions.add(stringtriple1);
61 }
62 }
63 if(inputs.size() != replies.size())
64 {
65 throw new DeveloperError("Merge operation failed to maintain stable activation count.");
66 } else
67 {
68 activations = inputs.size();
69 return;
70 }
71 }
72
73 public String getMatchPattern()
74 {
75 return match.getPattern();
76 }
77
78 public String getMatchThat()
79 {
80 return match.getThat();
81 }
82
83 public String getMatchTopic()
84 {
85 return match.getTopic();
86 }
87
88 public String getMatchTemplate()
89 {
90 return match.getTemplate();
91 }
92
93 public StringTripleMatrix getInputs()
94 {
95 return inputs;
96 }
97
98 public LinkedList getInputTexts()
99 {
100 return inputs.getTexts();
101 }
102
103 public LinkedList getInputThats()
104 {
105 return inputs.getThats();
106 }
107
108 public LinkedList getInputTopics()
109 {
110 return inputs.getTopics();
111 }
112
113 public String getFirstInputText()
114 {
115 return (String)inputs.getTexts().getFirst();
116 }
117
118 public String getFirstInputThat()
119 {
120 return (String)inputs.getThats().getFirst();
121 }
122
123 public String getFirstInputTopic()
124 {
125 return (String)inputs.getTopics().getFirst();
126 }
127
128 public String getLastInputText()
129 {
130 return (String)inputs.getTexts().getLast();
131 }
132
133 public String getLastInputThat()
134 {
135 return (String)inputs.getThats().getLast();
136 }
137
138 public String getLastInputTopic()
139 {
140 return (String)inputs.getTopics().getLast();
141 }
142
143 public String getNthInputText(int i)
144 {
145 return (String)inputs.getTexts().get(i);
146 }
147
148 public String getNthInputThat(int i)
149 {
150 return (String)inputs.getThats().get(i);
151 }
152
153 public String getNthInputTopic(int i)
154 {
155 return (String)inputs.getTopics().get(i);
156 }
157
158 public StringTripleMatrix getExtensions()
159 {
160 return extensions;
161 }
162
163 public LinkedList getExtensionPatterns()
164 {
165 return extensions.getPatterns();
166 }
167
168 public LinkedList getExtensionThats()
169 {
170 return extensions.getThats();
171 }
172
173 public LinkedList getExtensionTopics()
174 {
175 return extensions.getTopics();
176 }
177
178 public String getFirstExtensionPattern()
179 {
180 return (String)extensions.getPatterns().getFirst();
181 }
182
183 public String getFirstExtensionThat()
184 {
185 return (String)extensions.getThats().getFirst();
186 }
187
188 public String getFirstExtensionTopic()
189 {
190 return (String)extensions.getTopics().getFirst();
191 }
192
193 public String getLastExtensionPattern()
194 {
195 return (String)extensions.getPatterns().getLast();
196 }
197
198 public String getLastExtensionThat()
199 {
200 return (String)extensions.getThats().getLast();
201 }
202
203 public String getLastExtensionTopic()
204 {
205 return (String)extensions.getTopics().getLast();
206 }
207
208 public String getNthExtensionPattern(int i)
209 {
210 extend(i);
211 return (String)extensions.getPatterns().get(i);
212 }
213
214 public String getNthExtensionThat(int i)
215 {
216 extend(i);
217 return (String)extensions.getThats().get(i);
218 }
219
220 public String getNthExtensionTopic(int i)
221 {
222 extend(i);
223 return (String)extensions.getTopics().get(i);
224 }
225
226 public LinkedList getReplies()
227 {
228 return replies;
229 }
230
231 public String getFirstReply()
232 {
233 return (String)replies.getFirst();
234 }
235
236 public String getLastReply()
237 {
238 return (String)replies.getLast();
239 }
240
241 public String getNthReply(int i)
242 {
243 return (String)replies.get(i);
244 }
245
246 public String getNewPattern()
247 {
248 return newCategory.getPattern();
249 }
250
251 public String getNewThat()
252 {
253 return newCategory.getThat();
254 }
255
256 public String getNewTopic()
257 {
258 return newCategory.getTopic();
259 }
260
261 public String getNewTemplate()
262 {
263 return newCategory.getTemplate();
264 }
265
266 public void setNewPattern(String s)
267 {
268 newCategory.setPattern(s);
269 }
270
271 public void setNewThat(String s)
272 {
273 newCategory.setThat(s);
274 }
275
276 public void setNewTopic(String s)
277 {
278 newCategory.setTopic(s);
279 }
280
281 public void setNewTemplate(String s)
282 {
283 newCategory.setTemplate(s);
284 }
285
286 public int getActivations()
287 {
288 return activations;
289 }
290
291 public void extend()
292 {
293 for(int i = activations; --i >= 0;)
294 extend(i);
295
296 }
297
298 private void extend(int i)
299 {
300 extensions.ensureSize(i + 1);
301 String s = getNthInputText(i);
302 String s1 = getNthInputThat(i);
303 String s2 = getNthInputTopic(i);
304 String s3;
305 String s4;
306 String s5;
307 try
308 {
309 s3 = InputNormalizer.patternFit(extend(match.getPattern(), s));
310 s4 = InputNormalizer.patternFit(match.getThat());
311 s5 = InputNormalizer.patternFit(match.getTopic());
312 }
313 catch(CannotExtendException cannotextendexception)
314 {
315 s3 = InputNormalizer.patternFit(match.getPattern());
316 try
317 {
318 s4 = InputNormalizer.patternFit(extend(match.getThat(), s1));
319 s5 = InputNormalizer.patternFit(match.getTopic());
320 }
321 catch(CannotExtendException cannotextendexception1)
322 {
323 s4 = InputNormalizer.patternFit(match.getThat());
324 try
325 {
326 s5 = InputNormalizer.patternFit(extend(match.getTopic(), s2));
327 }
328 catch(CannotExtendException cannotextendexception2)
329 {
330 return;
331 }
332 }
333 }
334 extensions.getFirsts().set(i, s3);
335 extensions.getSeconds().set(i, s4);
336 extensions.getThirds().set(i, s5);
337 }
338
339 private static String extend(String s, String s1)
340 throws CannotExtendException
341 {
342 if(s.indexOf('*') == -1 && s.indexOf('_') == -1)
343 throw new CannotExtendException();
344 StringTokenizer stringtokenizer = new StringTokenizer(s);
345 StringTokenizer stringtokenizer1 = new StringTokenizer(s1);
346 int i = stringtokenizer.countTokens();
347 int j = stringtokenizer1.countTokens();
348 if(i > j)
349 i = j;
350 StringBuffer stringbuffer = new StringBuffer();
351 boolean flag = false;
352 for(int k = 0; k < i && !flag; k++)
353 {
354 String s2 = stringtokenizer.nextToken();
355 if(s2.equals("*") || s2.equals("_"))
356 flag = true;
357 stringbuffer.append(stringtokenizer1.nextToken());
358 stringbuffer.append(' ');
359 }
360
361 if(stringtokenizer1.hasMoreTokens())
362 stringbuffer.append("*");
363 return stringbuffer.toString();
364 }
365
366 private Category match;
367 private TargetInputs inputs;
368 private TargetExtensions extensions;
369 private LinkedList replies;
370 private Category newCategory;
371 private int activations;
372 }