|
|
/*
|
|
|
* 版权所有 (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");
|
|
|
}
|
|
|
} |