Commit 835fa9c7 authored by Richard Newman's avatar Richard Newman
Browse files

Bug 709403 - Part 1: refactor envelope/payload logic in Record. r=nalexander

parent b18907c7
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -236,12 +236,22 @@ public class CryptoRecord extends Record {
  }

  @Override
  public void initFromPayload(CryptoRecord payload) {
  public void initFromEnvelope(CryptoRecord payload) {
    throw new IllegalStateException("Can't do this with a CryptoRecord.");
  }

  @Override
  public CryptoRecord getPayload() {
  public CryptoRecord getEnvelope() {
    throw new IllegalStateException("Can't do this with a CryptoRecord.");
  }

  @Override
  protected void populatePayload(ExtendedJSONObject payload) {
    throw new IllegalStateException("Can't do this with a CryptoRecord.");
  }

  @Override
  protected void initFromPayload(ExtendedJSONObject payload) {
    throw new IllegalStateException("Can't do this with a CryptoRecord.");
  }

+1 −1
Original line number Diff line number Diff line
@@ -216,7 +216,7 @@ public class Crypto5MiddlewareRepositorySession extends RepositorySession {
    if (delegate == null) {
      throw new NoStoreDelegateException();
    }
    CryptoRecord rec = record.getPayload();
    CryptoRecord rec = record.getEnvelope();
    rec.keyBundle = this.keyBundle;
    try {
      rec.encrypt();
+27 −51
Original line number Diff line number Diff line
@@ -39,7 +39,6 @@
package org.mozilla.gecko.sync.repositories.domain;

import org.json.simple.JSONArray;
import org.mozilla.gecko.sync.CryptoRecord;
import org.mozilla.gecko.sync.ExtendedJSONObject;
import org.mozilla.gecko.sync.Logger;
import org.mozilla.gecko.sync.NonArrayJSONException;
@@ -143,33 +142,19 @@ public class BookmarkRecord extends Record {
  }

  @Override
  public void initFromPayload(CryptoRecord payload) {
    ExtendedJSONObject p = payload.payload;

    // All.
    this.guid = payload.guid;
    checkGUIDs(p);

    final Object del = p.get("deleted");
    if (del instanceof Boolean) {
      this.deleted = (Boolean) del;
    }

    this.collection    = payload.collection;
    this.lastModified  = payload.lastModified;

    this.type          = (String) p.get("type");
    this.title         = (String) p.get("title");
    this.description   = (String) p.get("description");
    this.parentID      = (String) p.get("parentid");
    this.parentName    = (String) p.get("parentName");
  protected void initFromPayload(ExtendedJSONObject payload) {
    this.type        = (String) payload.get("type");
    this.title       = (String) payload.get("title");
    this.description = (String) payload.get("description");
    this.parentID    = (String) payload.get("parentid");
    this.parentName  = (String) payload.get("parentName");

    // Bookmark.
    if (isBookmark()) {
      this.bookmarkURI = (String) p.get("bmkUri");
      this.keyword     = (String) p.get("keyword");
      this.bookmarkURI = (String) payload.get("bmkUri");
      this.keyword     = (String) payload.get("keyword");
      try {
        this.tags = p.getArray("tags");
        this.tags = payload.getArray("tags");
      } catch (NonArrayJSONException e) {
        Log.e(LOG_TAG, "Got non-array tags in bookmark record " + this.guid, e);
        this.tags = new JSONArray();
@@ -179,7 +164,7 @@ public class BookmarkRecord extends Record {
    // Folder.
    if (isFolder()) {
      try {
        this.children = p.getArray("children");
        this.children = payload.getArray("children");
      } catch (NonArrayJSONException e) {
        Log.e(LOG_TAG, "Got non-array children in bookmark record " + this.guid, e);
        // Let's see if we can recover later by using the parentid pointers.
@@ -200,38 +185,29 @@ public class BookmarkRecord extends Record {
     */
  }

  public boolean isBookmark() {
    return AndroidBrowserBookmarksDataAccessor.TYPE_BOOKMARK.equalsIgnoreCase(this.type);
  }

  public boolean isFolder() {
    return AndroidBrowserBookmarksDataAccessor.TYPE_FOLDER.equalsIgnoreCase(this.type);
  }

  @Override
  public CryptoRecord getPayload() {
    CryptoRecord rec = new CryptoRecord(this);
    rec.payload = new ExtendedJSONObject();
    rec.payload.put("id", this.guid);

    if (this.deleted) {
      rec.payload.put("deleted", true);
    } else {
      putPayload(rec, "type", this.type);
      putPayload(rec, "title", this.title);
      putPayload(rec, "description", this.description);
      putPayload(rec, "parentid", this.parentID);
      putPayload(rec, "parentName", this.parentName);
  protected void populatePayload(ExtendedJSONObject payload) {
    putPayload(payload, "type", this.type);
    putPayload(payload, "title", this.title);
    putPayload(payload, "description", this.description);
    putPayload(payload, "parentid", this.parentID);
    putPayload(payload, "parentName", this.parentName);

    if (isBookmark()) {
        rec.payload.put("bmkUri", bookmarkURI);
        rec.payload.put("keyword", keyword);
        rec.payload.put("tags", this.tags);
      payload.put("bmkUri", bookmarkURI);
      payload.put("keyword", keyword);
      payload.put("tags", this.tags);
    } else if (isFolder()) {
        rec.payload.put("children", this.children);
      payload.put("children", this.children);
    }
  }
    return rec;

  public boolean isBookmark() {
    return AndroidBrowserBookmarksDataAccessor.TYPE_BOOKMARK.equalsIgnoreCase(this.type);
  }

  public boolean isFolder() {
    return AndroidBrowserBookmarksDataAccessor.TYPE_FOLDER.equalsIgnoreCase(this.type);
  }

  private void trace(String s) {
+1 −1
Original line number Diff line number Diff line
@@ -51,7 +51,7 @@ public class BookmarkRecordFactory extends RecordFactory {
  @Override
  public Record createRecord(Record record) {
    BookmarkRecord r = new BookmarkRecord();
    r.initFromPayload((CryptoRecord) record);
    r.initFromEnvelope((CryptoRecord) record);
    return r;
  }

+11 −33
Original line number Diff line number Diff line
@@ -41,7 +41,6 @@ import java.util.HashMap;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.mozilla.gecko.sync.CryptoRecord;
import org.mozilla.gecko.sync.ExtendedJSONObject;
import org.mozilla.gecko.sync.Logger;
import org.mozilla.gecko.sync.NonArrayJSONException;
@@ -109,46 +108,25 @@ public class HistoryRecord extends Record {
  }

  @Override
  public void initFromPayload(CryptoRecord payload) {
    ExtendedJSONObject p = payload.payload;

    this.guid = payload.guid;
    this.checkGUIDs(p);

    this.lastModified  = payload.lastModified;
    final Object del = p.get("deleted");
    if (del instanceof Boolean) {
      this.deleted = (Boolean) del;
  protected void populatePayload(ExtendedJSONObject payload) {
    putPayload(payload, "id",      this.guid);
    putPayload(payload, "title",   this.title);
    putPayload(payload, "histUri", this.histURI);             // TODO: encoding?
    payload.put("visits",  this.visits);
  }

    this.histURI = (String) p.get("histUri");
    this.title   = (String) p.get("title");
  @Override
  protected void initFromPayload(ExtendedJSONObject payload) {
    this.histURI = (String) payload.get("histUri");
    this.title   = (String) payload.get("title");
    try {
      this.visits = p.getArray("visits");
      this.visits = payload.getArray("visits");
    } catch (NonArrayJSONException e) {
      Logger.error(LOG_TAG, "Got non-array visits in history record " + this.guid, e);
      this.visits = new JSONArray();
    }
  }

  @Override
  public CryptoRecord getPayload() {
    CryptoRecord rec = new CryptoRecord(this);
    rec.payload = new ExtendedJSONObject();
    Logger.debug(LOG_TAG, "Getting payload for history record " + this.guid + " (" + this.guid.length() + ").");

    if (this.deleted) {
      rec.payload.put("deleted", true);
    } else {
      putPayload(rec, "id",      this.guid);
      putPayload(rec, "title",   this.title);
      putPayload(rec, "histUri", this.histURI);             // TODO: encoding?
      rec.payload.put("visits",  this.visits);
    }
    return rec;
  }


  /**
   * We consider two history records to be congruent if they represent the
   * same history record regardless of visits.
Loading