目录及笔记的抽象基类,定义了二者的共同属性。
public class FileDataset<T extends FileDataset.FileEntity> extends BaseDataset<T> { public static abstract class FileEntity extends BaseEntity { @SerializedName("name") String name; // real name from user @SerializedName("desc") String desc; // entity description @SerializedName("alias") private String alias; // inner use, alias from app, name first } FolderDataset & FolderEntity目录
public class FolderDataset extends FileDataset<FolderDataset.FolderEntity> { public static class FolderEntity extends FileDataset.FileEntity { public FolderEntity(String id) { super(id); } @Override public boolean isDirectory() { return true; } } } NoteDataset & NoteEntity笔记
public class NoteDataset extends FileDataset<NoteDataset.NoteEntity> { public static class NoteEntity extends FileDataset.FileEntity { public NoteEntity(String id) { super(id); } @Override public boolean isDirectory() { return false; } } } RecordDataset & RecordEntity记录,用于保存目录和笔记的层次关系。
public class RecordDataset extends BaseDataset<RecordDataset.RecordEntity> { static final int TYPE_FOLDER = 0x01; static final int TYPE_NOTE = 0x02; private static final String KEY_FOLDER = "folder"; private static final String KEY_NOTE = "note"; public List<RecordEntity> getChildren(String parent, List<RecordEntity> list) { list = (list == null)? new ArrayList<RecordEntity>(): list; list.clear(); for (RecordEntity e: this.list) { if (e.getParent().equalsIgnoreCase(parent)) { list.add(e); } } return list; } public static class RecordEntity extends BaseEntity { @SerializedName("parent") String parent; @SerializedName("type") String type; private int typeValue; // I prefer to save string value and use int value. :) } NoteManager笔记管理者,通过NoteManager获取到FolderEntity和NoteEntity的所有数据。
核心属性 public static final int TYPE_FOLDER = RecordDataset.TYPE_FOLDER; public static final int TYPE_NOTE = RecordDataset.TYPE_NOTE; public static final int TYPE_ALL = TYPE_FOLDER | TYPE_NOTE; RecordDataset recordDs; // 记录集合 SparseArray<FileDataset<? extends FileDataset.FileEntity>> noteDsArray; // folder and note dataset List<RecordDataset.RecordEntity> recordList; List<FileDataset.FileEntity> fileList; static NoteManager instance;核心方法
获取目录及笔记 public List<FileDataset.FileEntity> getList(String parent, int type, List<FileDataset.FileEntity> list) 创建目录及笔记 public FileDataset.FileEntity create(String parent, int type) 获取名称对name添加序号后缀生成唯一的名称。
public String getName(@NonNull FileDataset.FileEntity entity, @NonNull String name)