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.
git-test/src/main/java/net/micode/notes/gtask/data/MetaData.java

148 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;
/**
* MetaData - 元数据类
* <p>
* 继承自Task类用于存储Google Task的元数据信息
* 主要用于关联本地便签和Google Task
* </p>
*/
public class MetaData extends Task {
private final static String TAG = MetaData.class.getSimpleName(); // 日志标签
private String mRelatedGid = null; // 关联的全局唯一标识符
/**
* 设置元数据
* <p>
* 将元数据信息存储到Task的notes字段中并设置名称为META_NOTE_NAME
* </p>
*
* @param gid 关联的全局唯一标识符
* @param metaInfo 元数据JSON对象
*/
public void setMeta(String gid, JSONObject metaInfo) {
try {
metaInfo.put(GTaskStringUtils.META_HEAD_GTASK_ID, gid);
} catch (JSONException e) {
Log.e(TAG, "failed to put related gid");
}
setNotes(metaInfo.toString());
setName(GTaskStringUtils.META_NOTE_NAME);
}
/**
* 获取关联的全局唯一标识符
*
* @return 关联的全局唯一标识符
*/
public String getRelatedGid() {
return mRelatedGid;
}
/**
* 判断元数据是否值得保存
* <p>
* 只要notes字段不为null就值得保存
* </p>
*
* @return 是否值得保存
*/
@Override
public boolean isWorthSaving() {
return getNotes() != null;
}
/**
* 从远程JSON对象设置元数据内容
* <p>
* 调用父类方法后解析notes字段获取关联的GID
* </p>
*
* @param js 远程JSON对象
*/
@Override
public void setContentByRemoteJSON(JSONObject js) {
super.setContentByRemoteJSON(js);
if (getNotes() != null) {
try {
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对象设置元数据内容
* <p>
* 该方法不应该被调用会抛出IllegalAccessError
* </p>
*
* @param js 本地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对象
* <p>
* 该方法不应该被调用会抛出IllegalAccessError
* </p>
*
* @return 本地JSON对象
* @throws IllegalAccessError 调用该方法时抛出
*/
@Override
public JSONObject getLocalJSONFromContent() {
throw new IllegalAccessError("MetaData:getLocalJSONFromContent should not be called");
}
/**
* 获取同步操作类型
* <p>
* 该方法不应该被调用会抛出IllegalAccessError
* </p>
*
* @param c 游标对象
* @return 同步操作类型
* @throws IllegalAccessError 调用该方法时抛出
*/
@Override
public int getSyncAction(Cursor c) {
throw new IllegalAccessError("MetaData:getSyncAction should not be called");
}
}