mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 19:35:51 +00:00
Bug 709403 - Part 1: refactor envelope/payload logic in Record. r=nalexander
This commit is contained in:
parent
44438d865b
commit
9c7d1e80cd
@ -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.");
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
|
@ -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,6 +185,23 @@ public class BookmarkRecord extends Record {
|
||||
*/
|
||||
}
|
||||
|
||||
@Override
|
||||
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()) {
|
||||
payload.put("bmkUri", bookmarkURI);
|
||||
payload.put("keyword", keyword);
|
||||
payload.put("tags", this.tags);
|
||||
} else if (isFolder()) {
|
||||
payload.put("children", this.children);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isBookmark() {
|
||||
return AndroidBrowserBookmarksDataAccessor.TYPE_BOOKMARK.equalsIgnoreCase(this.type);
|
||||
}
|
||||
@ -208,32 +210,6 @@ public class BookmarkRecord extends Record {
|
||||
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);
|
||||
|
||||
if (isBookmark()) {
|
||||
rec.payload.put("bmkUri", bookmarkURI);
|
||||
rec.payload.put("keyword", keyword);
|
||||
rec.payload.put("tags", this.tags);
|
||||
} else if (isFolder()) {
|
||||
rec.payload.put("children", this.children);
|
||||
}
|
||||
}
|
||||
return rec;
|
||||
}
|
||||
|
||||
private void trace(String s) {
|
||||
Logger.trace(LOG_TAG, s);
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
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.guid = payload.guid;
|
||||
this.checkGUIDs(p);
|
||||
|
||||
this.lastModified = payload.lastModified;
|
||||
final Object del = p.get("deleted");
|
||||
if (del instanceof Boolean) {
|
||||
this.deleted = (Boolean) del;
|
||||
}
|
||||
|
||||
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.
|
||||
|
@ -51,7 +51,7 @@ public class HistoryRecordFactory extends RecordFactory {
|
||||
@Override
|
||||
public Record createRecord(Record record) {
|
||||
HistoryRecord r = new HistoryRecord();
|
||||
r.initFromPayload((CryptoRecord) record);
|
||||
r.initFromEnvelope((CryptoRecord) record);
|
||||
return r;
|
||||
}
|
||||
|
||||
|
@ -37,7 +37,7 @@
|
||||
|
||||
package org.mozilla.gecko.sync.repositories.domain;
|
||||
|
||||
import org.mozilla.gecko.sync.CryptoRecord;
|
||||
import org.mozilla.gecko.sync.ExtendedJSONObject;
|
||||
import org.mozilla.gecko.sync.Utils;
|
||||
import org.mozilla.gecko.sync.repositories.android.RepoUtils;
|
||||
|
||||
@ -98,15 +98,13 @@ public class PasswordRecord extends Record {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initFromPayload(CryptoRecord payload) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
public void initFromPayload(ExtendedJSONObject payload) {
|
||||
// TODO: implement.
|
||||
}
|
||||
|
||||
@Override
|
||||
public CryptoRecord getPayload() {
|
||||
// TODO Auto-generated method stub
|
||||
// TODO: don't forget to set "id" to our GUID.
|
||||
return null;
|
||||
public void populatePayload(ExtendedJSONObject payload) {
|
||||
// TODO: implement.
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -224,8 +224,39 @@ public abstract class Record {
|
||||
return ((Record) o).lastModified == this.lastModified;
|
||||
}
|
||||
|
||||
public abstract void initFromPayload(CryptoRecord payload);
|
||||
public abstract CryptoRecord getPayload();
|
||||
protected abstract void populatePayload(ExtendedJSONObject payload);
|
||||
protected abstract void initFromPayload(ExtendedJSONObject payload);
|
||||
|
||||
public void initFromEnvelope(CryptoRecord envelope) {
|
||||
ExtendedJSONObject p = envelope.payload;
|
||||
this.guid = envelope.guid;
|
||||
checkGUIDs(p);
|
||||
|
||||
this.collection = envelope.collection;
|
||||
this.lastModified = envelope.lastModified;
|
||||
|
||||
final Object del = p.get("deleted");
|
||||
if (del instanceof Boolean) {
|
||||
this.deleted = (Boolean) del;
|
||||
} else {
|
||||
this.initFromPayload(p);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public CryptoRecord getEnvelope() {
|
||||
CryptoRecord rec = new CryptoRecord(this);
|
||||
ExtendedJSONObject payload = new ExtendedJSONObject();
|
||||
payload.put("id", this.guid);
|
||||
|
||||
if (this.deleted) {
|
||||
payload.put("deleted", true);
|
||||
} else {
|
||||
populatePayload(payload);
|
||||
}
|
||||
rec.payload = payload;
|
||||
return rec;
|
||||
}
|
||||
|
||||
public String toJSONString() {
|
||||
throw new RuntimeException("Cannot JSONify non-CryptoRecord Records.");
|
||||
@ -254,6 +285,13 @@ public abstract class Record {
|
||||
rec.payload.put(key, value);
|
||||
}
|
||||
|
||||
protected void putPayload(ExtendedJSONObject payload, String key, String value) {
|
||||
if (value == null) {
|
||||
return;
|
||||
}
|
||||
payload.put(key, value);
|
||||
}
|
||||
|
||||
protected void checkGUIDs(ExtendedJSONObject payload) {
|
||||
String payloadGUID = (String) payload.get("id");
|
||||
if (this.guid == null ||
|
||||
|
Loading…
Reference in New Issue
Block a user