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.

124 lines
4.0 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;
/**
* Google任务元数据类继承自Task基类
* 用于存储Google任务与本地便签的关联元数据信息
* 主要功能管理Google任务ID与本地便签的映射关系
*/
public class MetaData extends Task {
private final static String TAG = MetaData.class.getSimpleName();
// 关联的Google任务GID全局唯一标识
private String mRelatedGid = null;
/**
* 设置元数据信息
* @param gid Google任务GID
* @param metaInfo 元数据JSON对象
*/
public void setMeta(String gid, JSONObject metaInfo) {
try {
// 将Google任务GID存入元数据头部
metaInfo.put(GTaskStringUtils.META_HEAD_GTASK_ID, gid);
} catch (JSONException e) {
Log.e(TAG, "failed to put related gid");
}
// 将元数据JSON转为字符串存储到便签内容中
setNotes(metaInfo.toString());
// 设置元数据便签的名称固定为META_NOTE_NAME
setName(GTaskStringUtils.META_NOTE_NAME);
}
/**
* 获取关联的Google任务GID
* @return Google任务GID
*/
public String getRelatedGid() {
return mRelatedGid;
}
/**
* 判断元数据是否值得保存(只要便签内容不为空即值得保存)
* @return 是否值得保存
*/
@Override
public boolean isWorthSaving() {
return getNotes() != null;
}
/**
* 从远程JSON数据设置内容重写Task基类方法
* @param js 远程JSON数据
*/
@Override
public void setContentByRemoteJSON(JSONObject js) {
super.setContentByRemoteJSON(js);
if (getNotes() != null) {
try {
// 解析便签内容中的元数据JSON
JSONObject metaInfo = new JSONObject(getNotes().trim());
// 提取关联的Google任务GID
mRelatedGid = metaInfo.getString(GTaskStringUtils.META_HEAD_GTASK_ID);
} catch (JSONException e) {
Log.w(TAG, "failed to get related gid");
mRelatedGid = null;
}
}
}
/**
* 从本地JSON数据设置内容禁止调用
* @param js 本地JSON数据
* @throws IllegalAccessError 始终抛出异常,禁止使用该方法
*/
@Override
public void setContentByLocalJSON(JSONObject js) {
throw new IllegalAccessError("MetaData:setContentByLocalJSON should not be called");
}
/**
* 从内容获取本地JSON数据禁止调用
* @return 本地JSON数据始终抛出异常
* @throws IllegalAccessError 始终抛出异常,禁止使用该方法
*/
@Override
public JSONObject getLocalJSONFromContent() {
throw new IllegalAccessError("MetaData:getLocalJSONFromContent should not be called");
}
/**
* 获取同步操作类型(禁止调用)
* @param c 数据库游标
* @return 同步操作类型(始终抛出异常)
* @throws IllegalAccessError 始终抛出异常,禁止使用该方法
*/
@Override
public int getSyncAction(Cursor c) {
throw new IllegalAccessError("MetaData:getSyncAction should not be called");
}
}