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.
rjgc/gtask/data/MetaData.java

123 lines
3.8 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 Task中的元数据任务
*/
public class MetaData extends Task {
private final static String TAG = MetaData.class.getSimpleName();
// 关联的任务Gid全局唯一标识符
private String mRelatedGid = null;
/**
* 设置元数据信息
* @param gid 关联的任务全局唯一标识符
* @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");
}
// 将元数据转为字符串存储到notes字段
setNotes(metaInfo.toString());
// 设置元数据任务的固定名称
setName(GTaskStringUtils.META_NOTE_NAME);
}
/**
* 获取关联的任务Gid
* @return 关联的任务全局唯一标识符
*/
public String getRelatedGid() {
return mRelatedGid;
}
/**
* 判断该元数据是否值得保存
* @return 如果notes不为空则返回true
*/
@Override
public boolean isWorthSaving() {
return getNotes() != null;
}
/**
* 从远程JSON数据设置内容
* 解析notes字段获取关联的任务Gid
* @param js 远程服务器返回的JSON对象
*/
@Override
public void setContentByRemoteJSON(JSONObject js) {
super.setContentByRemoteJSON(js);
if (getNotes() != null) {
try {
// 解析notes中的JSON提取关联的Gid
JSONObject metaInfo = new JSONObject(getNotes().trim());
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对象
*/
@Override
public void setContentByLocalJSON(JSONObject js) {
// 此方法不应被调用
throw new IllegalAccessError("MetaData:setContentByLocalJSON should not be called");
}
/**
* 从内容生成本地JSON元数据不应调用此方法
* @return 不会返回,直接抛出异常
*/
@Override
public JSONObject getLocalJSONFromContent() {
throw new IllegalAccessError("MetaData:getLocalJSONFromContent should not be called");
}
/**
* 获取同步操作类型(元数据不应调用此方法)
* @param c 数据库查询游标
* @return 不会返回,直接抛出异常
*/
@Override
public int getSyncAction(Cursor c) {
throw new IllegalAccessError("MetaData:getSyncAction should not be called");
}
}