/*
 * Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
 *
 * 该文件属于Apache License, Version 2.0（“许可证”）下的版权作品；
 * 你不能以不符合许可证的方式使用此文件。
 * 你可以在以下网址获取许可证副本：
 *
 *        http://www.apache.org/licenses/LICENSE-2.0
 *
 * 除非适用法律要求或书面同意，软件
 * 根据许可证分发是在“原样”基础上进行的，
 * 不提供任何形式的保证或条件，无论是明示或暗示的。
 * 查看许可证以获取有关权限和
 * 限制的具体信息。
 */

package net.micode.notes.gtask.data; // 定义该类的位置

import android.database.Cursor; // 导入Android的Cursor类，用于数据库操作
import android.util.Log; // 导入Android的Log类，用于日志输出

import net.micode.notes.tool.GTaskStringUtils; // 导入自定义工具类，用于字符串处理

import org.json.JSONException; // 导入JSON异常处理类
import org.json.JSONObject; // 导入JSON对象类

// MetaData类继承自Task类，表示元数据的管理类
public class MetaData extends Task {
    private final static String TAG = MetaData.class.getSimpleName(); // 获取当前类名作为日志标签

    private String mRelatedGid = null; // 声明一个私有属性，用于存储相关的GID

    // 设置元数据的方法，接收GID和JSON对象作为参数
    public void setMeta(String gid, JSONObject metaInfo) {
        try {
            // 将GID放入metadata信息中
            metaInfo.put(GTaskStringUtils.META_HEAD_GTASK_ID, gid);
        } catch (JSONException e) {
            // 捕获JSON异常并记录错误
            Log.e(TAG, "failed to put related gid");
        }
        // 设置笔记内容为JSON对象的字符串表示
        setNotes(metaInfo.toString());
        // 设置名称为常量名称
        setName(GTaskStringUtils.META_NOTE_NAME);
    }

    // 获取相关GID的方法
    public String getRelatedGid() {
        return mRelatedGid; // 返回相关GID
    }

    // 重写isWorthSaving方法，判断是否值得保存
    @Override
    public boolean isWorthSaving() {
        return getNotes() != null; // 如果笔记内容不为空，则值得保存
    }

    // 重写通过远程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) {
                // 捕获JSON异常并记录警告
                Log.w(TAG, "failed to get related gid");
                mRelatedGid = null; // 将相关GID设置为null
            }
        }
    }

    // 重写通过本地JSON设置内容的方法，该方法不应被调用
    @Override
    public void setContentByLocalJSON(JSONObject js) {
        throw new IllegalAccessError("MetaData:setContentByLocalJSON should not be called"); // 抛出异常，指明不应调用
    }

    // 重写从内容获取本地JSON的方法，该方法不应被调用
    @Override
    public JSONObject getLocalJSONFromContent() {
        throw new IllegalAccessError("MetaData:getLocalJSONFromContent should not be called"); // 抛出异常，指明不应调用
    }

    // 重写获取同步操作的方法，该方法不应被调用
    @Override
    public int getSyncAction(Cursor c) {
        throw new IllegalAccessError("MetaData:getSyncAction should not be called"); // 抛出异常，指明不应调用
    }
}
