aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/java/sip/communicator/plugin/busylampfield/BLFContactQuery.java
blob: 2e771604afcfd892bf58ffdb0fd0291cb4376391 (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
153
154
155
156
157
158
159
160
161
162
163
/*
 * Jitsi, the OpenSource Java VoIP and Instant Messaging client.
 *
 * Copyright @ 2015 Atlassian Pty Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
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;
        }
    }
}