diff --git a/app/src/main/java/org/cutem/cutecalendar/model/TodoItem.java b/app/src/main/java/org/cutem/cutecalendar/model/TodoItem.java index 74ec819..7df313e 100644 --- a/app/src/main/java/org/cutem/cutecalendar/model/TodoItem.java +++ b/app/src/main/java/org/cutem/cutecalendar/model/TodoItem.java @@ -98,15 +98,6 @@ public class TodoItem { */ public static final String IMPORTANCE = "importance"; - /** - * Value of a name of possible string-type property index. - * - * The corresponding value of stringProperties is formatted: "parent", "child". - * - * If the instance have no {@code COMPOSITE}, then the corresponding value should be assumed as "parent". - */ - public static final String COMPOSITE = "composite"; - /** * Value of a name of possible string-type property index. *

diff --git a/app/src/main/java/org/cutem/cutecalendar/model/TodoItemUtil.java b/app/src/main/java/org/cutem/cutecalendar/model/TodoItemUtil.java index 30ab38c..e43a2ef 100644 --- a/app/src/main/java/org/cutem/cutecalendar/model/TodoItemUtil.java +++ b/app/src/main/java/org/cutem/cutecalendar/model/TodoItemUtil.java @@ -139,9 +139,9 @@ public class TodoItemUtil { public static boolean isIntersectedConflict(@NotNull TodoItem i1, @NotNull TodoItem i2) { int t1 = i1.getType(); int t2 = i2.getType(); - return isIntersected(i1, i2) - && arrayContains(INTERSECTED_CONFLICT, t1) - && arrayContains(INTERSECTED_CONFLICT, t2); + return arrayContains(INTERSECTED_CONFLICT, t1) + && arrayContains(INTERSECTED_CONFLICT, t2) + && isIntersected(i1, i2); } @@ -232,33 +232,22 @@ public class TodoItemUtil { } - public static boolean isParentChildConflict(@NotNull TodoItem parent, @NotNull TodoItem child) { + public static boolean canBind(@NotNull TodoItem parent, @NotNull TodoItem child) { int pType = parent.getType(); int cType = child.getType(); return pType != cType && arrayContains(PARENT_CHILDREN_CONFLICT, pType) - && arrayContains(PARENT_CHILDREN_CONFLICT, cType); + && arrayContains(PARENT_CHILDREN_CONFLICT, cType) + && isIn(parent, child); } - public static boolean canBecomeSubTodoItem(@NotNull TodoItem parent, @NotNull TodoItem newItem) { - return isIn(parent, newItem) && !isParentChildConflict(parent, newItem); - } - - - public static boolean isParentTodoItem(@NotNull TodoItem item) { - return item.getStringProperty(CHILDREN_IDS) != null; - } - - public static boolean isChildTodoItem(@NotNull TodoItem item) { - return item.getStringProperty(PARENT_ID) != null; - } public static List getAllChildrenIds(@NotNull TodoItem item) { String ids = item.getStringProperty(CHILDREN_IDS); - String[] idsSlice = ids.split("[;,]"); + String[] idsSlice = ids == null ? new String[0] : ids.split("[;,]"); ArrayList result = new ArrayList<>(idsSlice.length); - for (int i = 0; i < ids.length(); i++) { + for (int i = 0; i < result.size(); i++) { long id = Long.parseLong(idsSlice[i]); result.set(i, id); } @@ -267,7 +256,7 @@ public class TodoItemUtil { public static long getParentId(@NotNull TodoItem item) { String id = item.getStringProperty(PARENT_ID); - return Long.parseLong(id); + return id == null ? item.getId() : Long.parseLong(id); } public static String idsToString(@NotNull Collection ids) { @@ -277,21 +266,15 @@ public class TodoItemUtil { for (long i : ids) { if (!first) { builder.append(';'); + } else { + first = false; } builder.append(Long.toString(i)); - first = false; } return builder.toString(); } public static TodoItem[] bind(@NotNull TodoItem parent, @NotNull TodoItem child) { - if (!isParentTodoItem(parent)) { - throw new IllegalArgumentException("parent is not a parent todo-item"); - } - if (!isChildTodoItem(child)) { - throw new IllegalArgumentException("child is not a child todo-item"); - } - TodoItemFactory fParent = new TodoItemFactory().copy(parent); TodoItemFactory fChild = new TodoItemFactory().copy(child); @@ -301,26 +284,18 @@ public class TodoItemUtil { TodoItem newP = fParent .stringProperties(CHILDREN_IDS, idsString) - .stringProperties(COMPOSITE, "parent") .buildId(parent.getId()); String pIdString = Long.toString(parent.getId()); TodoItem newC = fChild .stringProperties(PARENT_ID, pIdString) - .stringProperties(COMPOSITE, "child") .buildId(child.getId()); return new TodoItem[]{newP, newC}; } public static TodoItem[] unbind(@NotNull TodoItem parent, @NotNull TodoItem child) { - if (!isParentTodoItem(parent)) { - throw new IllegalArgumentException("parent is not a parent todo-item"); - } - if (!isChildTodoItem(child)) { - throw new IllegalArgumentException("child is not a child todo-item"); - } TodoItemFactory fParent = new TodoItemFactory().copy(parent); TodoItemFactory fChild = new TodoItemFactory().copy(child); @@ -331,18 +306,15 @@ public class TodoItemUtil { TodoItem newP = fParent .stringProperties(CHILDREN_IDS, idsString) - .stringProperties(COMPOSITE, "parent") .buildId(parent.getId()); TodoItem newC = fChild .stringProperties(PARENT_ID, null) - .stringProperties(COMPOSITE, "parent") .buildId(child.getId()); return new TodoItem[]{newP, newC}; } - public static TodoItem finishSingleTodoItem(@NotNull TodoItem item) { TodoItemFactory factory = new TodoItemFactory(); return factory.copy(item).stringProperties(FINISH, "finish").buildId(item.getId()); @@ -350,7 +322,10 @@ public class TodoItemUtil { public static TodoItem finishTimelessItem(@NotNull String title) { TodoItemFactory factory = new TodoItemFactory(); - return factory.wholeDay(Calendar.getInstance()).title(title).build(); + return factory.wholeDay(Calendar.getInstance()) + .title(title) + .stringProperties(FINISH, "finish") + .build(); } }