summaryrefslogtreecommitdiffstats
path: root/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/HashSetStoreTracker.java
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();
  }
}