You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
MiNote/gtask/data/MetaData.java

114 lines
4.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
* Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package net.micode.notes.gtask.data;
import android.database.Cursor;
import android.util.Log;
import net.micode.notes.tool.GTaskStringUtils;
import org.json.JSONException;
import org.json.JSONObject;
/**
* 元数据实体类继承自Task用于存储与Google Tasks相关的元数据信息
* 主要处理元数据的JSON解析、关联GID管理等逻辑
*/
public class MetaData extends Task {
private final static String TAG = MetaData.class.getSimpleName();
// 关联的Google Tasks的GID全局唯一标识符
private String mRelatedGid = null;
/**
* 设置元数据信息
* @param gid 关联的Google Tasks的GID
* @param metaInfo 包含元数据的JSON对象
*/
public void setMeta(String gid, JSONObject metaInfo) {
try {
// 在元数据JSON中添加GID头部信息
metaInfo.put(GTaskStringUtils.META_HEAD_GTASK_ID, gid);
} catch (JSONException e) {
Log.e(TAG, "failed to put related gid");
}
// 将元数据JSON转为字符串存储到便签内容中
setNotes(metaInfo.toString());
// 设置元数据对应的便签名称(固定为预定义常量)
setName(GTaskStringUtils.META_NOTE_NAME);
}
/**
* 获取关联的Google Tasks的GID
* @return 关联的GID若无则返回null
*/
public String getRelatedGid() {
return mRelatedGid;
}
/**
* 判断元数据是否值得保存(当前逻辑:只要便签内容不为空则值得保存)
* @return 便签内容不为null时返回true否则false
*/
@Override
public boolean isWorthSaving() {
return getNotes() != null;
}
/**
* 从远程JSON数据中解析并设置元数据内容供同步模块调用
* @param js 包含远程数据的JSON对象
*/
@Override
public void setContentByRemoteJSON(JSONObject js) {
super.setContentByRemoteJSON(js); // 先调用父类解析逻辑
if (getNotes() != null) {
try {
// 解析便签内容中的元数据JSON
JSONObject metaInfo = new JSONObject(getNotes().trim());
// 提取关联的GID
mRelatedGid = metaInfo.getString(GTaskStringUtils.META_HEAD_GTASK_ID);
} catch (JSONException e) {
Log.w(TAG, "failed to get related gid");
mRelatedGid = null; // 解析失败时清空GID
}
}
}
/**
* 本地JSON内容设置方法禁止调用
* @throws IllegalAccessError 始终抛出异常,表明该方法不允许使用
*/
@Override
public void setContentByLocalJSON(JSONObject js) {
// this function should not be called
throw new IllegalAccessError("MetaData:setContentByLocalJSON should not be called");
}
/**
* 获取本地JSON内容方法禁止调用
* @throws IllegalAccessError 始终抛出异常,表明该方法不允许使用
*/
@Override
public JSONObject getLocalJSONFromContent() {
throw new IllegalAccessError("MetaData:getLocalJSONFromContent should not be called");
}
/**
* 获取同步操作类型(禁止调用)
* @param c 数据库游标(未使用)
* @throws IllegalAccessError 始终抛出异常,表明该方法不允许使用
*/
@Override
public int getSyncAction(Cursor c) {
throw new IllegalAccessError("MetaData:getSyncAction should not be called");
}
}