blob: 3b6facc316b8f05b51e7f9c2875c460d353baea6 (
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
|
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.gecko.sync.repositories;
import java.util.HashSet;
import java.util.Iterator;
import org.mozilla.gecko.sync.repositories.domain.Record;
public class HashSetStoreTracker implements StoreTracker {
// Guarded by `this`.
// Used to store GUIDs that were not locally modified but
// have been modified by a call to `store`, and thus
// should not be returned by a subsequent fetch.
private final HashSet<String> guids;
public HashSetStoreTracker() {
guids = new HashSet<String>();
}
@Override
public String toString() {
return "#<Tracker: " + guids.size() + " guids tracked.>";
}
@Override
public synchronized boolean trackRecordForExclusion(String guid) {
return (guid != null) && guids.add(guid);
}
@Override
public synchronized boolean isTrackedForExclusion(String guid) {
return (guid != null) && guids.contains(guid);
}
@Override
public synchronized boolean untrackStoredForExclusion(String guid) {
return (guid != null) && guids.remove(guid);
}
@Override
public RecordFilter getFilter() {
if (guids.size() == 0) {
return null;
}
return new RecordFilter() {
@Override
public boolean excludeRecord(Record r) {
return isTrackedForExclusion(r.guid);
}
};
}
@Override
public Iterator<String> recordsTrackedForExclusion() {
return this.guids.iterator();
}
}
|