/*
 * 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 org.json.JSONObject;

public abstract class Node {
    public static final int SYNC_ACTION_NONE = 0;

    public static final int SYNC_ACTION_ADD_REMOTE = 1;

    public static final int SYNC_ACTION_ADD_LOCAL = 2;

    public static final int SYNC_ACTION_DEL_REMOTE = 3;

    public static final int SYNC_ACTION_DEL_LOCAL = 4;

    public static final int SYNC_ACTION_UPDATE_REMOTE = 5;

    public static final int SYNC_ACTION_UPDATE_LOCAL = 6;

    public static final int SYNC_ACTION_UPDATE_CONFLICT = 7;

    public static final int SYNC_ACTION_ERROR = 8;

    private String mGid;

    private String mName;

    private long mLastModified;

    private boolean mDeleted;
/*这是一个抽象类 Node 的定义，其中包含以下几个字段和常量：

字段 mGid：表示节点的全局唯一标识符 gid，每个节点都有一个唯一的 gid。

字段 mName：表示节点的名称，该字段为字符串类型。

字段 mLastModified：表示节点最后修改的时间戳，以毫秒为单位。

字段 mDeleted：表示节点是否被删除（true 表示已删除，false 表示未删除）。

常量 SYNC_ACTION_*：这些常量表示同步操作的各种情况。可以使用这些常量来指定要执行的同步操作类型。具体而言，这些常量的含义分别如下：

SYNC_ACTION_NONE：不进行同步操作；

SYNC_ACTION_ADD_REMOTE：在远程服务器上添加一个新节点；

SYNC_ACTION_ADD_LOCAL：在本地数据库中添加一个新节点；

SYNC_ACTION_DEL_REMOTE：在远程服务器上删除一个节点；

SYNC_ACTION_DEL_LOCAL：在本地数据库中删除一个节点；

SYNC_ACTION_UPDATE_REMOTE：在远程服务器上更新一个节点；

SYNC_ACTION_UPDATE_LOCAL：在本地数据库中更新一个节点；

SYNC_ACTION_UPDATE_CONFLICT：发生同步冲突，需要解决冲突；

SYNC_ACTION_ERROR：同步错误，同步失败。

此外，Node 类还是一个抽象类，无法直接创建它的实例。所有的节点都是 Node 类的子类，以具体类型的形式继承 Node 类，并提供它们自己的实现。*/
    public Node() {
        mGid = null;
        mName = "";
        mLastModified = 0;
        mDeleted = false;
    }
/*这是 Node 类的默认构造方法。该方法会初始化节点的各个字段，包括 mGid、mName、mLastModified 和 mDeleted。

具体而言，mGid 字段被初始化为 null，表示此时节点没有被分配一个全局唯一标识符；
mName 字段被初始化为空字符串，表示节点名称为空；
mLastModified 字段被初始化为 0，表示节点最后修改时间的时间戳为 0（即从未修改过）；
mDeleted 字段被初始化为 false，表示节点当前未被删除。
 */
    public abstract JSONObject getCreateAction(int actionId);

    public abstract JSONObject getUpdateAction(int actionId);

    public abstract void setContentByRemoteJSON(JSONObject js);

    public abstract void setContentByLocalJSON(JSONObject js);

    public abstract JSONObject getLocalJSONFromContent();

    public abstract int getSyncAction(Cursor c);
/*这是 Node 抽象类中的一些抽象方法，需要在其子类中进行实现。这些方法分别如下：

getCreateAction(int actionId)：该方法用于生成在远程服务器上创建一个新节点的 JSON 数据。actionId 表示同步操作类型，可以根据不同的同步操作类型来生成对应的 JSON 数据。

getUpdateAction(int actionId)：该方法用于生成在远程服务器上更新一个节点的 JSON 数据，与 getCreateAction 方法类似，actionId 表示同步操作类型。

setContentByRemoteJSON(JSONObject js)：该方法用于从远程服务器返回的 JSON 数据中设置节点对象的属性值。

setContentByLocalJSON(JSONObject js)：该方法用于从本地数据库中读取的 JSON 数据中设置节点对象的属性值。

getLocalJSONFromContent()：该方法将节点对象转换为本地数据库中的 JSON 形式。

getSyncAction(Cursor c)：该方法返回表示节点同步操作的常量。

这些抽象方法是用于描述哪些数据需要被从远程服务器或本地数据库中读取或写入，并且确定在特定同步操作期间执行的操作类型。这使得 Node 的子类可以根据具体情况对这些方法进行自定义实现，以适应不同场景的需求。*/
    public void setGid(String gid) {
        this.mGid = gid;
    }
/*这是 Node 类的 setGid 方法，用于设置节点的唯一标识符 gid。
该方法接收一个 String 类型的参数 gid，表示要为节点设置的全局唯一标识符。
在执行该方法时，将会将传入的 gid 参数赋值给 mGid 字段，以便在后续的操作中使用该值。
这个方法可以被其子类调用来设置自己的 gid 值。
 */
    public void setName(String name) {
        this.mName = name;
    }
/*这是 Node 类的一个方法，用于设置节点的名称 mName 的值。
它接受一个字符串类型的参数 name，并将它赋值给 mName 字段。
this 表示当前对象实例。
 */
    public void setLastModified(long lastModified) {
        this.mLastModified = lastModified;
    }
/*setLastModified具有一个long类型的参数lastModified，表示将该对象的最后修改时间设置为给定值。
在方法体内，关键字this表示当前对象的引用，即在调用该方法的对象。
将参数lastModified的值分配给该对象的私有成员变量mLastModified，以便以后可以通过getter方法检索该值。
 */
    public void setDeleted(boolean deleted) {
        this.mDeleted = deleted;
    }
/*这是一个Java类中的公共方法，名称为setDeleted，它具有一个boolean类型的参数deleted，表示将该对象的删除状态设置为给定的值。

在方法体内，关键字this表示当前对象的引用，即在调用该方法的对象。
将参数deleted的值分配给该对象的私有成员变量mDeleted，以便以后可以通过getter方法检索该值。
如果参数deleted的值为true，则表示该对象被删除；如果参数deleted的值为false，则表示该对象未被删除。
 */
    public String getGid() {
        return this.mGid;
    }

    public String getName() {
        return this.mName;
    }
/*这是一个Java类中的公共方法，名称分别为getGid和getName，它们都不具有任何参数，并返回该对象的私有成员变量mGid和mName的值，分别表示该对象的ID和名称。

在方法体内，关键字this表示当前对象的引用，即在调用该方法的对象。
这些方法通常用于获取对象的状态，而不是修改状态。
例如，在代码中调用getGid方法将返回该对象的ID，以便在其他操作中使用该ID。
同样，调用getName方法将返回该对象的名称。
 */
    public long getLastModified() {
        return this.mLastModified;
    }
/*这是一个Java类中的公共方法，名称为getLastModified，它不具有任何参数，并返回该对象的私有成员变量mLastModified的值，表示该对象的最后修改时间。

在方法体内，关键字this表示当前对象的引用，即在调用该方法的对象。
这个方法通常用于获取对象的状态，以便在其他操作中使用该状态。
例如，在代码中调用getLastModified方法将返回该对象的最后修改时间，以便在其他操作中使用该时间戳。
 */
    public boolean getDeleted() {
        return this.mDeleted;
    }
/*这是一个Java类中的公共方法，名称为getDeleted，它不具有任何参数，并返回该对象的私有成员变量mDeleted的值，表示该对象是否被删除。

在方法体内，关键字this表示当前对象的引用，即在调用该方法的对象。
这个方法通常用于获取对象的状态，以便在其他操作中使用该状态。
例如，在代码中调用getDeleted方法将返回一个boolean类型的值，表示该对象是否被删除。
如果该值为true，则表示该对象已被删除；如果该值为false，则表示该对象未被删除。
 */
}
