From 5e89d51f90d5de069d56af0792417011d4ca470d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Tue, 2 Jul 2024 15:14:40 +0900 Subject: [PATCH 1/7] =?UTF-8?q?=E6=AF=94=E8=BC=83=E3=81=97=E3=81=A6?= =?UTF-8?q?=E6=AD=A3=E3=81=97=E3=81=84=E3=82=B3=E3=83=BC=E3=83=AB=E3=83=90?= =?UTF-8?q?=E3=83=83=E3=82=AF=E3=82=92=E5=91=BC=E3=81=B6=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nem/kidshift/data/impl/TaskDataImpl.java | 36 +++++++++++++++---- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/data/src/main/java/one/nem/kidshift/data/impl/TaskDataImpl.java b/data/src/main/java/one/nem/kidshift/data/impl/TaskDataImpl.java index 4e13e85..a9aeea1 100644 --- a/data/src/main/java/one/nem/kidshift/data/impl/TaskDataImpl.java +++ b/data/src/main/java/one/nem/kidshift/data/impl/TaskDataImpl.java @@ -2,15 +2,12 @@ package one.nem.kidshift.data.impl; import java.util.List; import java.util.concurrent.CompletableFuture; -import java.util.stream.Collectors; +import java.util.concurrent.atomic.AtomicReference; import javax.inject.Inject; -import javax.security.auth.callback.Callback; import one.nem.kidshift.data.KSActions; import one.nem.kidshift.data.TaskData; -import one.nem.kidshift.data.retrofit.model.converter.TaskModelConverter; -import one.nem.kidshift.data.retrofit.model.task.TaskListResponse; import one.nem.kidshift.data.room.utils.CacheWrapper; import one.nem.kidshift.model.callback.TaskItemModelCallback; import one.nem.kidshift.model.tasks.TaskItemModel; @@ -33,9 +30,35 @@ public class TaskDataImpl implements TaskData { public CompletableFuture> getTasks(TaskItemModelCallback callback) { return CompletableFuture.supplyAsync(() -> { logger.debug("タスク取得開始"); + // 引数付きThreadを生成 + AtomicReference> taskListTmp = new AtomicReference<>(); Thread thread = new Thread(() -> { - // TODO-rca: ちゃんと比較して呼ぶ - ksActions.syncTasks().thenAccept(callback::onUpdated); + ksActions.syncTasks().thenAccept(taskList -> { + if (taskListTmp.get() == null || taskListTmp.get().isEmpty()) { + logger.debug("タスク取得完了: キャッシュよりはやく取得完了 or キャッシュ無し"); + if (taskList == null || taskList.isEmpty()) { + callback.onUnchanged(); + } else { + callback.onUpdated(taskList); + } + } else { + // キャッシュと比較して変更の有無を確認 + boolean isChanged = + taskList.size() != taskListTmp.get().size() || + taskList.stream().anyMatch(task -> taskListTmp.get().stream().noneMatch(taskTmp -> task.getId().equals(taskTmp.getId()))); + if (isChanged) { + logger.debug("タスク取得完了: キャッシュと比較して変更あり"); + callback.onUpdated(taskList); + } else { + logger.debug("タスク取得完了: キャッシュと比較して変更なし"); + callback.onUnchanged(); + } + } + }).exceptionally(e -> { + logger.error("タスク取得失敗: " + e.getMessage()); + callback.onFailed(e.getMessage()); + return null; + }); }); thread.start(); return cacheWrapper.getTaskList().thenApply(taskList -> { @@ -49,6 +72,7 @@ public class TaskDataImpl implements TaskData { } } else { logger.debug("キャッシュ有 (タスク数: " + taskList.size() + ")"); + taskListTmp.set(taskList); return taskList; } }).join(); -- 2.45.1 From a4d08f75958ba99e2c958399c9419107ebebb118 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Tue, 2 Jul 2024 15:15:08 +0900 Subject: [PATCH 2/7] =?UTF-8?q?=E6=B6=88=E3=81=97=E5=BF=98=E3=82=8C?= =?UTF-8?q?=E3=82=B3=E3=83=A1=E3=83=B3=E3=83=88=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/src/main/java/one/nem/kidshift/data/impl/TaskDataImpl.java | 1 - 1 file changed, 1 deletion(-) diff --git a/data/src/main/java/one/nem/kidshift/data/impl/TaskDataImpl.java b/data/src/main/java/one/nem/kidshift/data/impl/TaskDataImpl.java index a9aeea1..eb658b8 100644 --- a/data/src/main/java/one/nem/kidshift/data/impl/TaskDataImpl.java +++ b/data/src/main/java/one/nem/kidshift/data/impl/TaskDataImpl.java @@ -30,7 +30,6 @@ public class TaskDataImpl implements TaskData { public CompletableFuture> getTasks(TaskItemModelCallback callback) { return CompletableFuture.supplyAsync(() -> { logger.debug("タスク取得開始"); - // 引数付きThreadを生成 AtomicReference> taskListTmp = new AtomicReference<>(); Thread thread = new Thread(() -> { ksActions.syncTasks().thenAccept(taskList -> { -- 2.45.1 From 0a595f5a8192d1b03b0177de8895f9c588e1a6ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Tue, 2 Jul 2024 15:17:31 +0900 Subject: [PATCH 3/7] =?UTF-8?q?=E3=83=AA=E3=83=95=E3=82=A1=E3=82=AF?= =?UTF-8?q?=E3=82=BF=E3=83=AA=E3=83=B3=E3=82=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nem/kidshift/data/impl/TaskDataImpl.java | 113 ++++++++++-------- 1 file changed, 66 insertions(+), 47 deletions(-) diff --git a/data/src/main/java/one/nem/kidshift/data/impl/TaskDataImpl.java b/data/src/main/java/one/nem/kidshift/data/impl/TaskDataImpl.java index eb658b8..02e01a5 100644 --- a/data/src/main/java/one/nem/kidshift/data/impl/TaskDataImpl.java +++ b/data/src/main/java/one/nem/kidshift/data/impl/TaskDataImpl.java @@ -1,5 +1,6 @@ package one.nem.kidshift.data.impl; +import java.util.Collections; import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.atomic.AtomicReference; @@ -28,56 +29,74 @@ public class TaskDataImpl implements TaskData { @Override public CompletableFuture> getTasks(TaskItemModelCallback callback) { - return CompletableFuture.supplyAsync(() -> { - logger.debug("タスク取得開始"); - AtomicReference> taskListTmp = new AtomicReference<>(); - Thread thread = new Thread(() -> { - ksActions.syncTasks().thenAccept(taskList -> { - if (taskListTmp.get() == null || taskListTmp.get().isEmpty()) { - logger.debug("タスク取得完了: キャッシュよりはやく取得完了 or キャッシュ無し"); - if (taskList == null || taskList.isEmpty()) { - callback.onUnchanged(); - } else { - callback.onUpdated(taskList); - } - } else { - // キャッシュと比較して変更の有無を確認 - boolean isChanged = - taskList.size() != taskListTmp.get().size() || - taskList.stream().anyMatch(task -> taskListTmp.get().stream().noneMatch(taskTmp -> task.getId().equals(taskTmp.getId()))); - if (isChanged) { - logger.debug("タスク取得完了: キャッシュと比較して変更あり"); - callback.onUpdated(taskList); - } else { - logger.debug("タスク取得完了: キャッシュと比較して変更なし"); - callback.onUnchanged(); - } - } - }).exceptionally(e -> { - logger.error("タスク取得失敗: " + e.getMessage()); - callback.onFailed(e.getMessage()); - return null; - }); - }); - thread.start(); - return cacheWrapper.getTaskList().thenApply(taskList -> { - if (taskList == null || taskList.isEmpty()) { - try { - logger.debug("キャッシュ無: タスク取得スレッド待機"); - thread.join(); - return cacheWrapper.getTaskList().join(); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } else { - logger.debug("キャッシュ有 (タスク数: " + taskList.size() + ")"); - taskListTmp.set(taskList); - return taskList; - } - }).join(); + logger.debug("タスク取得開始"); + + CompletableFuture> cachedTasksFuture = cacheWrapper.getTaskList(); + + return cachedTasksFuture.thenCompose(cachedTasks -> { + if (cachedTasks == null || cachedTasks.isEmpty()) { + logger.debug("キャッシュ無: サーバーからタスクを取得"); + return fetchTasksFromServer(callback); + } else { + logger.debug("キャッシュ有 (タスク数: " + cachedTasks.size() + ")"); + return checkForUpdates(cachedTasks, callback); + } }); } + private CompletableFuture> fetchTasksFromServer(TaskItemModelCallback callback) { + return ksActions.syncTasks().thenApply(serverTasks -> { + if (serverTasks == null || serverTasks.isEmpty()) { + callback.onUnchanged(); + } else { + callback.onUpdated(serverTasks); + } + return serverTasks; + }).exceptionally(e -> { + logger.error("タスク取得失敗: " + e.getMessage()); + callback.onFailed(e.getMessage()); + return Collections.emptyList(); + }); + } + + private CompletableFuture> checkForUpdates(List cachedTasks, TaskItemModelCallback callback) { + return ksActions.syncTasks().thenApply(serverTasks -> { + if (serverTasks == null || serverTasks.isEmpty()) { + callback.onUnchanged(); + return cachedTasks; + } else { + boolean isChanged = isTaskListChanged(cachedTasks, serverTasks); + if (isChanged) { + logger.debug("タスク取得完了: キャッシュと比較して変更あり"); + callback.onUpdated(serverTasks); + return serverTasks; + } else { + logger.debug("タスク取得完了: キャッシュと比較して変更なし"); + callback.onUnchanged(); + return cachedTasks; + } + } + }).exceptionally(e -> { + logger.error("タスク取得失敗: " + e.getMessage()); + callback.onFailed(e.getMessage()); + return cachedTasks; + }); + } + + private boolean isTaskListChanged(List cachedTasks, List serverTasks) { + if (cachedTasks.size() != serverTasks.size()) { + return true; + } + + for (TaskItemModel serverTask : serverTasks) { + boolean exists = cachedTasks.stream().anyMatch(cachedTask -> serverTask.getId().equals(cachedTask.getId())); + if (!exists) { + return true; + } + } + return false; + } + @Override public CompletableFuture> getTasks(String childId, TaskItemModelCallback callback) { return null; -- 2.45.1 From 5674c7ac46966beb64ac653337b007a3880aba48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Tue, 2 Jul 2024 15:26:23 +0900 Subject: [PATCH 4/7] =?UTF-8?q?final=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/one/nem/kidshift/data/impl/TaskDataImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data/src/main/java/one/nem/kidshift/data/impl/TaskDataImpl.java b/data/src/main/java/one/nem/kidshift/data/impl/TaskDataImpl.java index 02e01a5..2ce4397 100644 --- a/data/src/main/java/one/nem/kidshift/data/impl/TaskDataImpl.java +++ b/data/src/main/java/one/nem/kidshift/data/impl/TaskDataImpl.java @@ -16,9 +16,9 @@ import one.nem.kidshift.utils.KSLogger; public class TaskDataImpl implements TaskData { - private KSActions ksActions; - private CacheWrapper cacheWrapper; - private KSLogger logger; + private final KSActions ksActions; + private final CacheWrapper cacheWrapper; + private final KSLogger logger; @Inject public TaskDataImpl(KSActions ksActions, CacheWrapper cacheWrapper, KSLogger logger) { -- 2.45.1 From f386a99857b661c10377b9bba6f4190c2124ae2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Tue, 2 Jul 2024 15:26:58 +0900 Subject: [PATCH 5/7] =?UTF-8?q?final=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/one/nem/kidshift/data/impl/KSActionsImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/data/src/main/java/one/nem/kidshift/data/impl/KSActionsImpl.java b/data/src/main/java/one/nem/kidshift/data/impl/KSActionsImpl.java index 786bb38..5b654ca 100644 --- a/data/src/main/java/one/nem/kidshift/data/impl/KSActionsImpl.java +++ b/data/src/main/java/one/nem/kidshift/data/impl/KSActionsImpl.java @@ -24,10 +24,10 @@ import retrofit2.Response; public class KSActionsImpl implements KSActions { - private UserSettings userSettings; - private KidShiftApiService kidShiftApiService; - private KSLogger logger; - private CacheWrapper cacheWrapper; + private final UserSettings userSettings; + private final KidShiftApiService kidShiftApiService; + private final KSLogger logger; + private final CacheWrapper cacheWrapper; @Inject public KSActionsImpl(UserSettings userSettings, KidShiftApiService kidShiftApiService, KSLogger logger, CacheWrapper cacheWrapper) { -- 2.45.1 From 6bcb2aec3dd2c5873e6ccb531cd223dd51727d7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Tue, 2 Jul 2024 15:27:16 +0900 Subject: [PATCH 6/7] =?UTF-8?q?final=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/one/nem/kidshift/data/impl/ParentDataImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/data/src/main/java/one/nem/kidshift/data/impl/ParentDataImpl.java b/data/src/main/java/one/nem/kidshift/data/impl/ParentDataImpl.java index a8f70d6..184a44e 100644 --- a/data/src/main/java/one/nem/kidshift/data/impl/ParentDataImpl.java +++ b/data/src/main/java/one/nem/kidshift/data/impl/ParentDataImpl.java @@ -16,11 +16,11 @@ public class ParentDataImpl implements ParentData { private KidShiftApiService kidshiftApiService; - private UserSettings userSettings; + private final UserSettings userSettings; - private KSLogger logger; + private final KSLogger logger; - private KSActions ksActions; + private final KSActions ksActions; @Inject public ParentDataImpl(KidShiftApiService kidshiftApiService, UserSettings userSettings, KSLogger logger, KSActions ksActions) { -- 2.45.1 From 756b678f616a41c34f83e5aff2b105ae9f77e285 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E3=82=8D=E3=82=80=E3=81=AD=E3=81=93?= Date: Tue, 2 Jul 2024 15:27:26 +0900 Subject: [PATCH 7/7] =?UTF-8?q?=E6=9C=AA=E4=BD=BF=E7=94=A8=E5=89=8A?= =?UTF-8?q?=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/one/nem/kidshift/data/impl/ParentDataImpl.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/data/src/main/java/one/nem/kidshift/data/impl/ParentDataImpl.java b/data/src/main/java/one/nem/kidshift/data/impl/ParentDataImpl.java index 184a44e..4fcfe57 100644 --- a/data/src/main/java/one/nem/kidshift/data/impl/ParentDataImpl.java +++ b/data/src/main/java/one/nem/kidshift/data/impl/ParentDataImpl.java @@ -14,8 +14,6 @@ import one.nem.kidshift.utils.KSLogger; public class ParentDataImpl implements ParentData { - private KidShiftApiService kidshiftApiService; - private final UserSettings userSettings; private final KSLogger logger; @@ -24,7 +22,6 @@ public class ParentDataImpl implements ParentData { @Inject public ParentDataImpl(KidShiftApiService kidshiftApiService, UserSettings userSettings, KSLogger logger, KSActions ksActions) { - this.kidshiftApiService = kidshiftApiService; this.userSettings = userSettings; this.logger = logger; this.ksActions = ksActions; -- 2.45.1