gecko/mobile/android/base/sync/repositories/HashSetStoreTracker.java

62 lines
1.6 KiB
Java

/* 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 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();
}
}