//------------------------------------------------------------------------------ // Copyright (c) 2012 Microsoft Corporation. All rights reserved. //------------------------------------------------------------------------------ package com.uphyca.kitkat.storage.skydrive; import org.json.JSONObject; public abstract class SkyDriveObject { public interface Visitor { public void visit(SkyDriveAlbum album); public void visit(SkyDriveAudio audio); public void visit(SkyDrivePhoto photo); public void visit(SkyDriveFolder folder); public void visit(SkyDriveFile file); public void visit(SkyDriveVideo video); } public static class From { private final JSONObject mFrom; public From(JSONObject from) { assert from != null; mFrom = from; } public String getName() { return mFrom.optString("name"); } public String getId() { return mFrom.optString("id"); } public JSONObject toJson() { return mFrom; } } public static class SharedWith { private final JSONObject mSharedWidth; public SharedWith(JSONObject sharedWith) { assert sharedWith != null; mSharedWidth = sharedWith; } public String getAccess() { return mSharedWidth.optString("access"); } public JSONObject toJson() { return mSharedWidth; } } public static SkyDriveObject create(JSONObject skyDriveObject) { String type = skyDriveObject.optString("type"); if (type.equals(SkyDriveFolder.TYPE)) { return new SkyDriveFolder(skyDriveObject); } else if (type.equals(SkyDriveFile.TYPE)) { return new SkyDriveFile(skyDriveObject); } else if (type.equals(SkyDriveAlbum.TYPE)) { return new SkyDriveAlbum(skyDriveObject); } else if (type.equals(SkyDrivePhoto.TYPE)) { return new SkyDrivePhoto(skyDriveObject); } else if (type.equals(SkyDriveVideo.TYPE)) { return new SkyDriveVideo(skyDriveObject); } else if (type.equals(SkyDriveAudio.TYPE)) { return new SkyDriveAudio(skyDriveObject); } throw new AssertionError("Unknown SkyDriveObject type"); } protected final JSONObject mObject; public SkyDriveObject(JSONObject object) { assert object != null; mObject = object; } public abstract void accept(Visitor visitor); public String getId() { return mObject.optString("id"); } public From getFrom() { return new From(mObject.optJSONObject("from")); } public String getName() { return mObject.optString("name"); } public String getParentId() { return mObject.optString("parent_id"); } public String getDescription() { return mObject.isNull("description") ? null : mObject.optString("description"); } public String getType() { return mObject.optString("type"); } public String getLink() { return mObject.optString("link"); } public String getCreatedTime() { return mObject.optString("created_time"); } public String getUpdatedTime() { return mObject.optString("updated_time"); } public String getUploadLocation() { return mObject.optString("upload_location"); } public SharedWith getSharedWith() { return new SharedWith(mObject.optJSONObject("shared_with")); } public JSONObject toJson() { return mObject; } }