Newer
Older
CitrusClient / app / src / main / java / com / example / citrusclient / viewmodels / ScheduleViewModel.java
  1. package com.example.citrusclient.viewmodels;
  2.  
  3. import androidx.lifecycle.MutableLiveData;
  4. import androidx.lifecycle.ViewModel;
  5.  
  6. import com.example.citrusclient.models.Schedule;
  7. import com.example.citrusclient.rest.ScheduleRest;
  8.  
  9. import java.util.HashMap;
  10.  
  11. import retrofit2.Call;
  12. import retrofit2.Callback;
  13. import retrofit2.Response;
  14. import retrofit2.Retrofit;
  15. import retrofit2.converter.jackson.JacksonConverterFactory;
  16.  
  17. public class ScheduleViewModel extends ViewModel {
  18.  
  19. private final Retrofit retrofit;
  20.  
  21. private final ScheduleRest scheduleRest;
  22. private final MutableLiveData<HashMap<Integer, //年
  23. HashMap<Integer, //月
  24. HashMap<Integer, //日
  25. HashMap<Integer, //Id
  26. Schedule>>>>> allSchedulesLiveData;
  27.  
  28. private final MutableLiveData<HashMap<Integer, //月
  29. HashMap<Integer, //日
  30. HashMap<Integer, //id
  31. Schedule>>>> schedulesByYear;
  32.  
  33. private final MutableLiveData<HashMap<Integer, //日
  34. HashMap<Integer, //id
  35. Schedule>>> schedulesByMonth;
  36.  
  37. private final MutableLiveData<HashMap<Integer, Schedule>> schedulesByDay;
  38.  
  39. private final MutableLiveData<Schedule> scheduleById;
  40.  
  41. private final MutableLiveData<String> errorLiveData;
  42.  
  43. public ScheduleViewModel(){
  44. retrofit = new Retrofit.Builder()
  45. .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/citrus/")
  46. .addConverterFactory(JacksonConverterFactory.create())
  47. .build();
  48. this.scheduleRest = retrofit.create(ScheduleRest.class);
  49. allSchedulesLiveData = new MutableLiveData<>();
  50. schedulesByYear = new MutableLiveData<>();
  51. schedulesByMonth = new MutableLiveData<>();
  52. schedulesByDay = new MutableLiveData<>();
  53. scheduleById = new MutableLiveData<>();
  54. errorLiveData = new MutableLiveData<>();
  55. }
  56.  
  57. public MutableLiveData<HashMap<Integer, HashMap<Integer, HashMap<Integer, HashMap<Integer, Schedule>>>>> getAllSchedulesLiveData() {
  58. return allSchedulesLiveData;
  59. }
  60.  
  61. public MutableLiveData<HashMap<Integer, HashMap<Integer, HashMap<Integer, Schedule>>>> getSchedulesByYear() {
  62. return schedulesByYear;
  63. }
  64.  
  65. public MutableLiveData<HashMap<Integer, HashMap<Integer, Schedule>>> getSchedulesByMonth() {
  66. return schedulesByMonth;
  67. }
  68.  
  69. public MutableLiveData<HashMap<Integer, Schedule>> getSchedulesByDay() {
  70. return schedulesByDay;
  71. }
  72.  
  73. public MutableLiveData<Schedule> getScheduleById() {
  74. return scheduleById;
  75. }
  76.  
  77. public MutableLiveData<String> getErrorLiveData() {
  78. return errorLiveData;
  79. }
  80.  
  81. /**
  82. * スケジュールを作成する
  83. *
  84. * @param accountId アカウントid
  85. * @param year 年
  86. * @param month 月
  87. * @param day 日
  88. * @param token トークン
  89. * @param title タイトル
  90. * @param startTime スケジュールの開始日時
  91. * @param endTime スケジュールの終了日時
  92. * @param bookId スケジュールを追加する本
  93. */
  94. public void createSchedule(String accountId, int year, int month, int day, String token,
  95. String title, String startTime, String endTime, int bookId){
  96. Call<Schedule> call = scheduleRest.createSchedule(accountId, year, month, day, title, startTime, endTime, bookId, token);
  97. call.enqueue(new Callback<Schedule>(){
  98. @Override
  99. public void onResponse(Call<Schedule> call, Response<Schedule> response){
  100. if(response.isSuccessful()){
  101.  
  102. }else{
  103. errorLiveData.setValue(response.message());
  104. }
  105. }
  106.  
  107. @Override
  108. public void onFailure(Call<Schedule> call, Throwable t){
  109. errorLiveData.setValue(t.getMessage());
  110. }
  111. });
  112.  
  113. }
  114.  
  115.  
  116. /**
  117. * アカウントを指定してallSchedulesLiveDataを更新する
  118. *
  119. * @param accountId アカウントid
  120. * @param token トークン
  121. */
  122. public void updateAllSchedules(String accountId, String token){
  123. Call<HashMap<Integer, HashMap<Integer,HashMap<Integer,HashMap<Integer,Schedule>>>>>
  124. call = scheduleRest.getAllSchedules(accountId, token);
  125. call.enqueue(new Callback<HashMap<Integer, HashMap<Integer, HashMap<Integer, HashMap<Integer, Schedule>>>>>() {
  126. @Override
  127. public void onResponse(Call<HashMap<Integer, HashMap<Integer, HashMap<Integer, HashMap<Integer, Schedule>>>>> call, Response<HashMap<Integer, HashMap<Integer, HashMap<Integer, HashMap<Integer, Schedule>>>>> response) {
  128. if(response.isSuccessful()){
  129. allSchedulesLiveData.setValue(response.body());
  130. }else{
  131. errorLiveData.setValue(response.message());
  132. }
  133. }
  134. @Override
  135. public void onFailure(Call<HashMap<Integer, HashMap<Integer, HashMap<Integer, HashMap<Integer, Schedule>>>>> call, Throwable t) {
  136. errorLiveData.setValue(t.getMessage());
  137. }
  138. });
  139. }
  140.  
  141.  
  142. /**
  143. * アカウントと年を指定してschedulesByYearを更新する
  144. *
  145. * @param accountId アカウントid
  146. * @param year 年
  147. * @param token トークン
  148. */
  149. public void updateSchedulesByYear(String accountId, int year, String token){
  150. Call<HashMap<Integer, HashMap<Integer, HashMap<Integer, Schedule>>>> call = scheduleRest.getSchedulesByYear(accountId, year, token);
  151. call.enqueue(new Callback<HashMap<Integer, HashMap<Integer, HashMap<Integer, Schedule>>>>() {
  152. @Override
  153. public void onResponse(Call<HashMap<Integer, HashMap<Integer, HashMap<Integer, Schedule>>>> call, Response<HashMap<Integer, HashMap<Integer, HashMap<Integer, Schedule>>>> response) {
  154. if(response.isSuccessful()){
  155. schedulesByYear.setValue(response.body());
  156. } else {
  157. errorLiveData.setValue(response.message());
  158. }
  159. }
  160. @Override
  161. public void onFailure(Call<HashMap<Integer, HashMap<Integer, HashMap<Integer, Schedule>>>> call, Throwable t) {
  162. errorLiveData.setValue(t.getMessage());
  163. }
  164. });
  165.  
  166. }
  167.  
  168.  
  169. /**
  170. * アカウントと年と月を指定してschedulesByMonthを更新する
  171. *
  172. * @param accountId アカウントid
  173. * @param year 年
  174. * @param month 月
  175. * @param token トークン
  176. */
  177. public void updateSchedulesByMonth(String accountId, int year, int month, String token){
  178. Call<HashMap<Integer, HashMap<Integer, Schedule>>> call = scheduleRest.getSchedulesByMonth(accountId, year, month, token);
  179. call.enqueue(new Callback<HashMap<Integer, HashMap<Integer, Schedule>>>() {
  180. @Override
  181. public void onResponse(Call<HashMap<Integer, HashMap<Integer, Schedule>>> call, Response<HashMap<Integer, HashMap<Integer, Schedule>>> response) {
  182. if(response.isSuccessful()){
  183. schedulesByMonth.setValue(response.body());
  184. } else {
  185. errorLiveData.setValue(response.message());
  186. }
  187. }
  188. @Override
  189. public void onFailure(Call<HashMap<Integer, HashMap<Integer, Schedule>>> call, Throwable t) {
  190. errorLiveData.setValue(t.getMessage());
  191. }
  192. });
  193. }
  194.  
  195.  
  196. /**
  197. * アカウントと年と月と日を指定してスケジュールを更新する
  198. *
  199. * @param accountId アカウントid
  200. * @param year 年
  201. * @param month 月
  202. * @param day 日
  203. * @param token トークン
  204. */
  205. public void updateSchedulesByDay(String accountId, int year, int month, int day, String token){
  206. Call<HashMap<Integer, Schedule>> call = scheduleRest.getSchedulesByDay(accountId, year, month, day, token);
  207. call.enqueue(new Callback<HashMap<Integer, Schedule>>() {
  208. @Override
  209. public void onResponse(Call<HashMap<Integer, Schedule>> call, Response<HashMap<Integer, Schedule>> response) {
  210. if(response.isSuccessful()) schedulesByDay.setValue(response.body());
  211. else errorLiveData.setValue(response.message());
  212. }
  213.  
  214. @Override
  215. public void onFailure(Call<HashMap<Integer, Schedule>> call, Throwable t) {
  216. errorLiveData.setValue(t.getMessage());
  217. }
  218. });
  219. }
  220.  
  221.  
  222. /**
  223. * アカウントと年と月と日とスケジュールのidを指定してスケジュールを更新する
  224. *
  225. * @param accountId アカウントid
  226. * @param year 年
  227. * @param month 月
  228. * @param day 日
  229. * @param id id
  230. * @param token トークン
  231. */
  232. public void updateScheduleById(String accountId, int year, int month, int day, int id, String token){
  233. Call<Schedule> call = scheduleRest.getScheduleById(accountId, year, month, day, id, token);
  234. call.enqueue(new Callback<Schedule>() {
  235. @Override
  236. public void onResponse(Call<Schedule> call, Response<Schedule> response) {
  237. if(response.isSuccessful()) scheduleById.setValue(response.body());
  238. else errorLiveData.setValue(response.message());
  239. }
  240.  
  241. @Override
  242. public void onFailure(Call<Schedule> call, Throwable t) {
  243. errorLiveData.setValue(t.getMessage());
  244. }
  245. });
  246. }
  247.  
  248. /**
  249. * アカウントid, 年, 月, 日, スケジュールidを指定してスケジュールを削除する
  250. *
  251. * @param accountId アカウントid
  252. * @param year 年
  253. * @param month 月
  254. * @param day 日
  255. * @param id スケジュールid
  256. * @param token トークン
  257. */
  258. public void deleteScheduleById(String accountId, int year, int month, int day, int id, String token){
  259. Call<String> call = scheduleRest.deleteScheduleById(accountId, year, month, day, id, token);
  260. call.enqueue(new Callback<String>() {
  261. @Override
  262. public void onResponse(Call<String> call, Response<String> response) {
  263. if(response.isSuccessful()){
  264. schedulesByDay.setValue(schedulesByMonth.getValue().remove(day));
  265. }
  266. else errorLiveData.setValue(response.message());
  267. }
  268.  
  269. @Override
  270. public void onFailure(Call<String> call, Throwable t) {
  271. errorLiveData.setValue(t.getMessage());
  272. }
  273. });
  274.  
  275. }
  276.  
  277. /**
  278. * アカウントid, 年, 月, 日, スケジュールidを指定してスケジュールの開始日時を更新する
  279. *
  280. * @param accountId アカウントid
  281. * @param year 年
  282. * @param month 月
  283. * @param day 日
  284. * @param id スケジュールid
  285. * @param token トークン
  286. * @param startTime 開始日時
  287. */
  288. public void setStartTime(String accountId, int year, int month, int day, int id, String token, String startTime){
  289. Call<String> call = scheduleRest.putStartTime(accountId, year, month, day, id, token, startTime);
  290. call.enqueue(new Callback<String>() {
  291. @Override
  292. public void onResponse(Call<String> call, Response<String> response) {
  293. if(response.isSuccessful()) {
  294. Schedule schedule = scheduleById.getValue();
  295. schedule.setStartTime(startTime);
  296. scheduleById.setValue(schedule);
  297. } else errorLiveData.setValue(response.message());
  298. }
  299.  
  300. @Override
  301. public void onFailure(Call<String> call, Throwable t) {
  302. errorLiveData.setValue(t.getMessage());
  303. }
  304. });
  305. }
  306.  
  307. /**
  308. *
  309. * アカウントid, 年, 月, 日, スケジュールidを指定してスケジュールの終了日時を更新する
  310. *
  311. * @param accountId アカウントid
  312. * @param year 年
  313. * @param month 月
  314. * @param day 日
  315. * @param id スケジュールid
  316. * @param token トークン
  317. * @param endTime 終了日時
  318. */
  319. public void setEndTime(String accountId, int year, int month, int day, int id, String token, String endTime){
  320. Call<String> call = scheduleRest.putEndTime(accountId, year, month, day, id, token, endTime);
  321. call.enqueue(new Callback<String>() {
  322. @Override
  323. public void onResponse(Call<String> call, Response<String> response) {
  324. if(response.isSuccessful()){
  325. Schedule schedule = scheduleById.getValue();
  326. schedule.setEndTime(endTime);
  327. scheduleById.setValue(schedule);
  328. }else errorLiveData.setValue(response.message());
  329. }
  330.  
  331. @Override
  332. public void onFailure(Call<String> call, Throwable t) {
  333. errorLiveData.setValue(t.getMessage());
  334. }
  335. });
  336. }
  337.  
  338. /**
  339. * アカウントid, 年, 月, 日, スケジュールidを指定してスケジュールのタイトルを更新する
  340. *
  341. * @param accountId アカウントid
  342. * @param year 年
  343. * @param month 月
  344. * @param day 日
  345. * @param id スケジュールid
  346. * @param token トークン
  347. * @param title タイトル
  348. */
  349. public void setTitle(String accountId, int year, int month, int day, int id, String token, String title){
  350. Call<String> call = scheduleRest.putTitle(accountId, year, month, day, id, token, title);
  351. call.enqueue(new Callback<String>() {
  352. @Override
  353. public void onResponse(Call<String> call, Response<String> response) {
  354. if(response.isSuccessful()){
  355. Schedule schedule = scheduleById.getValue();
  356. schedule.setTitle(title);
  357. scheduleById.setValue(schedule);
  358. }else errorLiveData.setValue(response.message());
  359. }
  360.  
  361. @Override
  362. public void onFailure(Call<String> call, Throwable t) {
  363. errorLiveData.setValue(t.getMessage());
  364. }
  365. });
  366. }
  367.  
  368. /**
  369. * アカウントid, 年, 月, 日, スケジュールidを指定してスケジュールの所属する本を更新する
  370. *
  371. * @param accountId アカウントid
  372. * @param year 年
  373. * @param month 月
  374. * @param day 日
  375. * @param id スケジュールid
  376. * @param token トークン
  377. * @param bookId 本のid
  378. */
  379. public void setBookId(String accountId, int year, int month, int day, int id, String token, int bookId){
  380. Call<String> call = scheduleRest.putBookId(accountId, year, month, day, id, token, bookId);
  381. call.enqueue(new Callback<String>() {
  382. @Override
  383. public void onResponse(Call<String> call, Response<String> response) {
  384. if(response.isSuccessful()){
  385. Schedule schedule = scheduleById.getValue();
  386. schedule.setBookId(bookId);
  387. scheduleById.setValue(schedule);
  388. } else errorLiveData.setValue(response.message());
  389. }
  390.  
  391. @Override
  392. public void onFailure(Call<String> call, Throwable t) {
  393. errorLiveData.setValue(t.getMessage());
  394. }
  395. });
  396. }
  397. }