Repository navigation
Expand file tree
/
Copy pathSearchTaskQueue.java
More file actions
124 lines (112 loc) · 2.99 KB
/
Copy pathSearchTaskQueue.java
File metadata and controls
124 lines (112 loc) · 2.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package SearchProcessor;
import java.util.concurrent.*;
import java.io.*;
import org.json.*;
/**
*
* @author Pallavi
*/
public class SearchTaskQueue
{
protected SearchTask thisSearch = null;
protected SearchTask nextSearch = null;
protected String currentQuery = "";
protected final PrintWriter outt;
protected final Semaphore available = new Semaphore(0);
SearchTaskQueue(String uName, String query, String fQuery,PrintWriter out, int count)
{
//out.println("In SearchTaskQueue Constructor");
KBSearchTask kbsearch = new KBSearchTask(uName,query,fQuery,out);
YahooSearchTask websearch = new YahooSearchTask(uName,query,fQuery,out,count);
thisSearch = websearch;
nextSearch = kbsearch;
outt = out;
}
SearchTaskQueue(String uName, String query, String fQuery,PrintWriter out, int count,int numOfQueries,String[] queries)
{
//out.println("In SearchTaskQueue Constructor");
KBSearchTask kbsearch = new KBSearchTask(uName,query,fQuery,out);
YahooSearchTask websearch = new YahooSearchTask(uName,query,fQuery,out,count,numOfQueries,queries);
thisSearch = websearch;
nextSearch = kbsearch;
outt = out;
//thisSearch.run();
//nextSearch.run();
/*try
{
searchKB(uName,query,fQuery,out,count);
}
catch(Exception e)
{
out.println("Exception at call to searchKB "+e.getMessage());
e.printStackTrace();
}*/
}
void put(SearchTask t)
{
insert(t);
available.release();
}
SearchTask take() throws InterruptedException
{
//outt.println("In take");
available.acquire();
return extract();
}
synchronized void insert(SearchTask t)
{
SearchTask q;
if(currentQuery.matches(t.finalQuery))
{
q = thisSearch;
if(q == null)
{
thisSearch = t;
return;
}
}
else
{
q = nextSearch;
if(q == null)
{
thisSearch = t;
return;
}
}
SearchTask trail = q;
q = trail.next;
for(;;)
{
// no extra condition here for ordering search tasks
if(q == null)
{
trail.next = t;
t.next = q;
return;
}
else
{
trail = q;
q = q.next;
}
}
}
synchronized SearchTask extract()
{
outt.println("In extract");
if(thisSearch == null)
{
thisSearch = nextSearch;
nextSearch = null;
}
SearchTask t = thisSearch;
thisSearch = t.next;
currentQuery = t.finalQuery;
return t;
}
}