summaryrefslogtreecommitdiffstats
path: root/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/uploaders/Payload.java
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/uploaders/Payload.java')
-rw-r--r--mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/uploaders/Payload.java66
1 files changed, 66 insertions, 0 deletions
diff --git a/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/uploaders/Payload.java b/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/uploaders/Payload.java
new file mode 100644
index 000000000..1ed9b5798
--- /dev/null
+++ b/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/uploaders/Payload.java
@@ -0,0 +1,66 @@
+/* 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.uploaders;
+
+import android.support.annotation.CheckResult;
+
+import java.util.ArrayList;
+
+/**
+ * Owns per-payload record byte and recordGuid buffers.
+ */
+/* @ThreadSafe */
+public class Payload extends BufferSizeTracker {
+ // Data of outbound records.
+ /* @GuardedBy("accessLock") */ private final ArrayList<byte[]> recordsBuffer = new ArrayList<>();
+
+ // GUIDs of outbound records. Used to fail entire payloads.
+ /* @GuardedBy("accessLock") */ private final ArrayList<String> recordGuidsBuffer = new ArrayList<>();
+
+ public Payload(Object payloadLock, long maxBytes, long maxRecords) {
+ super(payloadLock, maxBytes, maxRecords);
+ }
+
+ @Override
+ protected boolean addAndEstimateIfFull(long recordDelta) {
+ throw new UnsupportedOperationException();
+ }
+
+ @CheckResult
+ protected boolean addAndEstimateIfFull(long recordDelta, byte[] recordBytes, String guid) {
+ synchronized (accessLock) {
+ recordsBuffer.add(recordBytes);
+ recordGuidsBuffer.add(guid);
+ return super.addAndEstimateIfFull(recordDelta);
+ }
+ }
+
+ @Override
+ protected void reset() {
+ synchronized (accessLock) {
+ super.reset();
+ recordsBuffer.clear();
+ recordGuidsBuffer.clear();
+ }
+ }
+
+ protected ArrayList<byte[]> getRecordsBuffer() {
+ synchronized (accessLock) {
+ return new ArrayList<>(recordsBuffer);
+ }
+ }
+
+ protected ArrayList<String> getRecordGuidsBuffer() {
+ synchronized (accessLock) {
+ return new ArrayList<>(recordGuidsBuffer);
+ }
+ }
+
+ protected boolean isEmpty() {
+ synchronized (accessLock) {
+ return recordsBuffer.isEmpty();
+ }
+ }
+} \ No newline at end of file