summaryrefslogtreecommitdiffstats
path: root/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/domain/FormHistoryRecord.java
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/domain/FormHistoryRecord.java')
-rw-r--r--mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/domain/FormHistoryRecord.java139
1 files changed, 139 insertions, 0 deletions
diff --git a/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/domain/FormHistoryRecord.java b/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/domain/FormHistoryRecord.java
new file mode 100644
index 000000000..e7ca70cb4
--- /dev/null
+++ b/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/domain/FormHistoryRecord.java
@@ -0,0 +1,139 @@
+/* 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.domain;
+
+import org.mozilla.gecko.background.common.log.Logger;
+import org.mozilla.gecko.sync.ExtendedJSONObject;
+import org.mozilla.gecko.sync.Utils;
+import org.mozilla.gecko.sync.repositories.android.RepoUtils;
+
+/**
+ * A FormHistoryRecord represents a saved form element.
+ *
+ * I map a <code>fieldName</code> string to a <code>value</code> string.
+ *
+ * @see "<a href='http://dxr.mozilla.org/services-central/source/services-central/services/sync/modules/engines/forms.js'>http://dxr.mozilla.org/services-central/source/services-central/services/sync/modules/engines/forms.js</a>."
+ */
+public class FormHistoryRecord extends Record {
+ private static final String LOG_TAG = "FormHistoryRecord";
+
+ public static final String COLLECTION_NAME = "forms";
+ private static final String PAYLOAD_NAME = "name";
+ private static final String PAYLOAD_VALUE = "value";
+ public static final long FORMS_TTL = 3 * 365 * 24 * 60 * 60; // Three years in seconds.
+
+ /**
+ * The name of the saved form field.
+ */
+ public String fieldName;
+
+ /**
+ * The value of the saved form field.
+ */
+ public String fieldValue;
+
+ public FormHistoryRecord(String guid, String collection, long lastModified, boolean deleted) {
+ super(guid, collection, lastModified, deleted);
+ this.ttl = FORMS_TTL;
+ }
+
+ public FormHistoryRecord(String guid, String collection, long lastModified) {
+ this(guid, collection, lastModified, false);
+ }
+
+ public FormHistoryRecord(String guid, String collection) {
+ this(guid, collection, 0, false);
+ }
+
+ public FormHistoryRecord(String guid) {
+ this(guid, COLLECTION_NAME, 0, false);
+ }
+
+ public FormHistoryRecord() {
+ this(Utils.generateGuid(), COLLECTION_NAME, 0, false);
+ }
+
+ @Override
+ public Record copyWithIDs(String guid, long androidID) {
+ FormHistoryRecord out = new FormHistoryRecord(guid, this.collection, this.lastModified, this.deleted);
+ out.androidID = androidID;
+ out.sortIndex = this.sortIndex;
+
+ // Copy FormHistoryRecord fields.
+ out.fieldName = this.fieldName;
+ out.fieldValue = this.fieldValue;
+
+ return out;
+ }
+
+ @Override
+ public void populatePayload(ExtendedJSONObject payload) {
+ putPayload(payload, PAYLOAD_NAME, this.fieldName);
+ putPayload(payload, PAYLOAD_VALUE, this.fieldValue);
+ }
+
+ @Override
+ public void initFromPayload(ExtendedJSONObject payload) {
+ this.fieldName = payload.getString(PAYLOAD_NAME);
+ this.fieldValue = payload.getString(PAYLOAD_VALUE);
+ }
+
+ /**
+ * We consider two form history records to be congruent if they represent the
+ * same form element regardless of times used.
+ */
+ @Override
+ public boolean congruentWith(Object o) {
+ if (!(o instanceof FormHistoryRecord)) {
+ return false;
+ }
+ FormHistoryRecord other = (FormHistoryRecord) o;
+ if (!super.congruentWith(other)) {
+ return false;
+ }
+ return RepoUtils.stringsEqual(this.fieldName, other.fieldName) &&
+ RepoUtils.stringsEqual(this.fieldValue, other.fieldValue);
+ }
+
+ @Override
+ public boolean equalPayloads(Object o) {
+ if (!(o instanceof FormHistoryRecord)) {
+ Logger.debug(LOG_TAG, "Not a FormHistoryRecord: " + o.getClass());
+ return false;
+ }
+ FormHistoryRecord other = (FormHistoryRecord) o;
+ if (!super.equalPayloads(other)) {
+ Logger.debug(LOG_TAG, "super.equalPayloads returned false.");
+ return false;
+ }
+
+ if (this.deleted) {
+ // FormHistoryRecords are equal if they are both deleted (which
+ // they are, since super.equalPayloads is true) and have the
+ // same GUID.
+ if (other.deleted) {
+ return RepoUtils.stringsEqual(this.guid, other.guid);
+ }
+ return false;
+ }
+
+ return RepoUtils.stringsEqual(this.fieldName, other.fieldName) &&
+ RepoUtils.stringsEqual(this.fieldValue, other.fieldValue);
+ }
+
+ public FormHistoryRecord log(String logTag) {
+ try {
+ Logger.debug(logTag, "Returning form history record " + guid + " (" + androidID + ")");
+ Logger.debug(logTag, "> Last modified: " + lastModified);
+ if (Logger.LOG_PERSONAL_INFORMATION) {
+ Logger.pii(logTag, "> Field name: " + fieldName);
+ Logger.pii(logTag, "> Field value: " + fieldValue);
+ }
+ } catch (Exception e) {
+ Logger.debug(logTag, "Exception logging form history record " + this, e);
+ }
+ return this;
+ }
+}