1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.xnap.plugin.overnet.net;
21
22 import org.apache.log4j.Logger;
23 import org.xnap.XNap;
24 import org.xnap.plugin.overnet.net.msg.*;
25 import org.xnap.plugin.overnet.*;
26 import org.xnap.plugin.overnet.net.msg.client.SearchMessage;
27 import org.xnap.plugin.overnet.net.msg.core.MessageListener;
28 import org.xnap.plugin.overnet.net.msg.core.SearchResultMessage;
29 import org.xnap.search.AbstractSearch;
30 import org.xnap.search.SearchFilter;
31 import org.xnap.search.SearchHandler;
32
33 public class OvernetSearch extends AbstractSearch implements MessageListener
34 {
35
36
37
38
39 private boolean stopped;
40 private SearchHandler handler;
41 /***
42 * Remember the last search object in order to unsubscribe it before the
43 * new one starts.
44 */
45 private static OvernetSearch lastSearch = null;
46
47 private static Logger logger = Logger.getLogger(OvernetSearch.class);
48
49
50
51 public OvernetSearch(SearchFilter filter)
52 {
53 super(filter);
54 }
55
56
57
58 /***
59 * Returns a string that describes the current status.
60 */
61 public String getStatus()
62 {
63 if (isDone()) {
64 return XNap.tr("finished");
65 }
66 else {
67 return XNap.tr("receiving results") + "...";
68 }
69 }
70
71 /***
72 * Returns true, if this search can not be canceled.
73 */
74 public boolean isDone()
75 {
76 return stopped;
77 }
78
79 /***
80 * Starts this search.
81 *
82 * @param handler the object that handles the results
83 */
84 public void start(SearchHandler handler)
85 {
86 if (lastSearch != null) {
87 lastSearch.stop();
88 }
89 stopped = false;
90 this.handler = handler;
91 lastSearch = this;
92 OvernetPlugin.getMessageHandler().subscribe
93 (SearchResultMessage.TYPE, this);
94 OvernetCore.send(new SearchMessage(getFilter().getText()));
95 }
96
97 /***
98 * Cancels this search.
99 */
100 public void stop()
101 {
102 OvernetPlugin.getMessageHandler().unsubscribe
103 (SearchResultMessage.TYPE, this);
104 stopped = true;
105 }
106
107 public void messageReceived(OvernetMessage msg)
108 {
109 if (!stopped && msg instanceof SearchResultMessage) {
110 SearchResultMessage sm = (SearchResultMessage)msg;
111 handler.resultReceived(new OvernetSearchResult(sm));
112 }
113 }
114 }
115