/* * 版权所有 (c) 2010-2011,MiCode 开源社区 (www.micode.net) * 根据 Apache 许可证 2.0 版本("许可证")授权; * 除非符合许可证的规定,否则不得使用本文件。 * 您可以从以下网址获取许可证副本: * http://www.apache.org/licenses/LICENSE-2.0 * 除非适用法律要求或书面同意,本软件按"原样"分发, * 没有任何明示或暗示的保证或条件。 * 详见许可证中规定的权限和限制。 * (注:这是一份标准的Apache许可证2.0版本的开源声明) */ // 定义MetaData类所在的包路径 package net.micode.notes.gtask.data; // 导入Android数据库Cursor类 import android.database.Cursor; // 导入Android日志工具类 import android.util.Log; // 导入应用中自定义的字符串工具类 import net.micode.notes.tool.GTaskStringUtils; // 导入JSON处理相关类 import org.json.JSONException; import org.json.JSONObject; /** * MetaData类 - 继承自Task类 * 功能:处理Google Tasks元数据信息 * 特性: * 1. 存储关联任务的GID(Google ID) * 2. 将元数据信息以JSON格式存储在notes字段中 * 3. 仅用于远程数据同步,不支持本地操作 */ public class MetaData extends Task { // 日志标签,使用类名作为标识 private final static String TAG = MetaData.class.getSimpleName(); // 存储关联任务的Google ID private String mRelatedGid = null; /** * 设置元数据信息 * @param gid 关联任务的Google ID * @param metaInfo 包含元数据的JSON对象 */ public void setMeta(String gid, JSONObject metaInfo) { try { // 将GID添加到元数据JSON中 metaInfo.put(GTaskStringUtils.META_HEAD_GTASK_ID, gid); } catch (JSONException e) { Log.e(TAG, "failed to put related gid"); // 记录错误日志 } // 将JSON对象转为字符串存储到notes字段 setNotes(metaInfo.toString()); // 设置固定名称标识这是一个元数据任务 setName(GTaskStringUtils.META_NOTE_NAME); } /** * 获取关联任务的Google ID * @return 关联GID,可能为null */ public String getRelatedGid() { return mRelatedGid; } /** * 判断是否值得保存 * @return notes字段不为空时返回true */ @Override public boolean isWorthSaving() { return getNotes() != null; } /** * 从远程JSON数据设置内容 * @param js 包含远程数据的JSON对象 */ @Override public void setContentByRemoteJSON(JSONObject js) { // 先调用父类方法处理基础字段 super.setContentByRemoteJSON(js); // 如果notes字段不为空,解析其中的GID if (getNotes() != null) { try { // 将notes字符串转为JSON对象 JSONObject metaInfo = new JSONObject(getNotes().trim()); // 从JSON中获取关联GID mRelatedGid = metaInfo.getString(GTaskStringUtils.META_HEAD_GTASK_ID); } catch (JSONException e) { Log.w(TAG, "failed to get related gid"); // 记录警告日志 mRelatedGid = null; // 解析失败时重置GID } } } /** * 从本地JSON设置内容(不支持) * @param js JSON对象 * @throws IllegalAccessError 总是抛出此异常 */ @Override public void setContentByLocalJSON(JSONObject js) { // 元数据不应从本地JSON设置,直接抛出异常 throw new IllegalAccessError("MetaData:setContentByLocalJSON should not be called"); } /** * 获取本地JSON内容(不支持) * @throws IllegalAccessError 总是抛出此异常 */ @Override public JSONObject getLocalJSONFromContent() { // 元数据不应生成本地JSON,直接抛出异常 throw new IllegalAccessError("MetaData:getLocalJSONFromContent should not be called"); } /** * 获取同步动作(不支持) * @param c 数据库Cursor * @throws IllegalAccessError 总是抛出此异常 */ @Override public int getSyncAction(Cursor c) { // 元数据不支持同步动作查询,直接抛出异常 throw new IllegalAccessError("MetaData:getSyncAction should not be called"); } }