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/src/notes/gtask/data/Node.java

217 lines
7.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 org.json.JSONObject;
/**
* GTask同步的核心抽象节点类
* 该类是所有GTask同步数据如笔记、文件夹的基类定义了同步所需的通用属性GID、名称、修改时间、删除标记
* 同步动作常量以及需要子类实现的抽象方法JSON序列化/反序列化、同步动作判断等)。
* 作为抽象类它封装了GTask同步的通用逻辑子类需根据具体数据类型笔记/文件夹)实现抽象方法,完成具体的同步逻辑。
*
* @author MiCode Open Source Community
* @date 2010-2011
*/
public abstract class Node {
// ====================== 同步动作常量 ======================
/**
* 同步动作:无操作(数据一致,无需同步)
*/
public static final int SYNC_ACTION_NONE = 0;
/**
* 同步动作向远程GTask添加数据本地新增数据需要同步到远程
*/
public static final int SYNC_ACTION_ADD_REMOTE = 1;
/**
* 同步动作向本地添加数据远程GTask新增数据需要同步到本地
*/
public static final int SYNC_ACTION_ADD_LOCAL = 2;
/**
* 同步动作删除远程GTask数据本地删除数据需要同步删除远程数据
*/
public static final int SYNC_ACTION_DEL_REMOTE = 3;
/**
* 同步动作删除本地数据远程GTask删除数据需要同步删除本地数据
*/
public static final int SYNC_ACTION_DEL_LOCAL = 4;
/**
* 同步动作更新远程GTask数据本地数据修改需要同步更新远程数据
*/
public static final int SYNC_ACTION_UPDATE_REMOTE = 5;
/**
* 同步动作更新本地数据远程GTask数据修改需要同步更新本地数据
*/
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;
// ====================== 成员变量 ======================
/**
* GTask的唯一标识IDGid用于关联本地数据和远程GTask数据
*/
private String mGid;
/**
* 节点名称(如笔记标题、文件夹名称)
*/
private String mName;
/**
* 最后修改时间戳(毫秒),用于判断数据是否需要同步(本地与远程时间对比)
*/
private long mLastModified;
/**
* 删除标记true表示数据已被删除本地或远程需要同步删除操作
*/
private boolean mDeleted;
/**
* 构造方法:初始化节点的默认属性
* Gid为null名称为空字符串最后修改时间为0删除标记为false
*/
public Node() {
mGid = null;
mName = "";
mLastModified = 0;
mDeleted = false;
}
// ====================== 抽象方法(子类需实现) ======================
/**
* 获取创建动作的JSON对象用于向远程GTask发送创建请求
* @param actionId 动作ID标识本次创建动作的唯一ID
* @return 包含创建动作信息的JSONObject
*/
public abstract JSONObject getCreateAction(int actionId);
/**
* 获取更新动作的JSON对象用于向远程GTask发送更新请求
* @param actionId 动作ID标识本次更新动作的唯一ID
* @return 包含更新动作信息的JSONObject
*/
public abstract JSONObject getUpdateAction(int actionId);
/**
* 根据远程GTask的JSON数据设置节点内容将远程数据同步到本地
* @param js 远程GTask返回的JSON数据对象
*/
public abstract void setContentByRemoteJSON(JSONObject js);
/**
* 根据本地的JSON数据设置节点内容本地数据序列化后的恢复
* @param js 本地存储的JSON数据对象
*/
public abstract void setContentByLocalJSON(JSONObject js);
/**
* 从节点内容中获取本地JSON数据将本地数据序列化为JSON用于存储或同步
* @return 包含本地节点内容的JSONObject
*/
public abstract JSONObject getLocalJSONFromContent();
/**
* 根据本地数据库的Cursor数据判断当前节点的同步动作类型
* 核心逻辑对比本地数据和远程GTask数据的状态新增、修改、删除返回对应的同步动作常量
* @param c 本地数据库的Cursor对象包含本地数据的状态信息
* @return 同步动作类型对应SYNC_ACTION_*常量)
*/
public abstract int getSyncAction(Cursor c);
// ====================== 成员变量的setter/getter方法 ======================
/**
* 设置GTask的唯一标识IDGid
* @param gid 远程GTask的Gid字符串
*/
public void setGid(String gid) {
this.mGid = gid;
}
/**
* 设置节点名称
* @param name 节点名称字符串(笔记标题/文件夹名称)
*/
public void setName(String name) {
this.mName = name;
}
/**
* 设置最后修改时间戳
* @param lastModified 最后修改时间(毫秒)
*/
public void setLastModified(long lastModified) {
this.mLastModified = lastModified;
}
/**
* 设置删除标记
* @param deleted true表示数据已被删除false表示数据正常
*/
public void setDeleted(boolean deleted) {
this.mDeleted = deleted;
}
/**
* 获取GTask的唯一标识IDGid
* @return Gid字符串若未关联远程数据则返回null
*/
public String getGid() {
return this.mGid;
}
/**
* 获取节点名称
* @return 节点名称字符串
*/
public String getName() {
return this.mName;
}
/**
* 获取最后修改时间戳
* @return 最后修改时间(毫秒)
*/
public long getLastModified() {
return this.mLastModified;
}
/**
* 获取删除标记
* @return true表示数据已被删除false表示数据正常
*/
public boolean getDeleted() {
return this.mDeleted;
}
}