blob: ef0150a20975bc53456de65895ea144343dfb1dc (
plain)
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
/*
* Jitsi, the OpenSource Java VoIP and Instant Messaging client.
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package net.java.sip.communicator.plugin.busylampfield;
import net.java.sip.communicator.service.contactsource.*;
import net.java.sip.communicator.service.protocol.*;
import net.java.sip.communicator.service.protocol.event.*;
import java.util.*;
/**
* The query that will update lines.
*
* @author Damian Minkov
*/
public class BLFContactQuery
extends AbstractContactQuery<BLFContactSourceService>
{
/**
* The query string.
*/
private String queryString;
/**
* The query result list.
*/
private final List<SourceContact> results;
/**
* Constructs new query.
*
* @param parentService the parent contact source service
* @param queryString the query string
* @param contactCount contacts to process, not used currently.
*/
public BLFContactQuery(
BLFContactSourceService parentService,
Collection<OperationSetTelephonyBLF.Line> monitoredLines,
String queryString, int contactCount)
{
super(parentService);
this.queryString = queryString;
this.results = new ArrayList<SourceContact>();
for(OperationSetTelephonyBLF.Line line : monitoredLines)
{
addLine(line, false);
}
}
/**
* Returns the query string.
*
* @return the query string
*/
@Override
public String getQueryString()
{
return queryString;
}
/**
* Returns the list of query results.
*
* @return the list of query results
*/
@Override
public List<SourceContact> getQueryResults()
{
return results;
}
/**
* Starts this <tt>BLFContactQuery</tt>.
*/
@Override
public void start()
{
for(SourceContact sc : results)
{
fireContactReceived(sc, false);
}
}
/**
* Adds new line to display.
* @param line to display status.
* @param fireEvent whether to fire events
*/
void addLine(OperationSetTelephonyBLF.Line line, boolean fireEvent)
{
for(SourceContact sc : results)
{
BLFSourceContact blfSC = (BLFSourceContact)sc;
if(blfSC.getLine().equals(line))
return;
}
BLFSourceContact sc
= new BLFSourceContact(getContactSource(), line);
results.add(sc);
if(fireEvent)
fireContactReceived(sc, false);
}
/**
* Updates the source contact status.
* @param line
* @param status
*/
void updateLineStatus(OperationSetTelephonyBLF.Line line, int status)
{
for(SourceContact sc : results)
{
BLFSourceContact blfSC = (BLFSourceContact)sc;
if(blfSC.getLine().equals(line))
{
blfSC.setPresenceStatus(getPresenceStatus(status));
fireContactChanged(blfSC);
break;
}
}
}
/**
* Maps BLFStatusEvent.type to BLFPresenceStatus.
* @param status the staus to map.
* @return the corresponding BLFPresenceStatus.
*/
private BLFPresenceStatus getPresenceStatus(int status)
{
switch(status)
{
case BLFStatusEvent.STATUS_BUSY:
return BLFPresenceStatus.BLF_BUSY;
case BLFStatusEvent.STATUS_OFFLINE:
return BLFPresenceStatus.BLF_OFFLINE;
case BLFStatusEvent.STATUS_RINGING:
return BLFPresenceStatus.BLF_RINGING;
case BLFStatusEvent.STATUS_FREE:
return BLFPresenceStatus.BLF_FREE;
default:
return null;
}
}
}
|