package com.example.citrusclient.viewmodels; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import com.example.citrusclient.models.Schedule; import com.example.citrusclient.rest.ScheduleRest; import java.util.HashMap; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; public class ScheduleViewModel extends ViewModel { private final Retrofit retrofit; private final ScheduleRest scheduleRest; private final MutableLiveData<HashMap<Integer, //年 HashMap<Integer, //月 HashMap<Integer, //日 HashMap<Integer, //Id Schedule>>>>> allSchedulesLiveData; private final MutableLiveData<HashMap<Integer, //月 HashMap<Integer, //日 HashMap<Integer, //id Schedule>>>> schedulesByYear; private final MutableLiveData<HashMap<Integer, //日 HashMap<Integer, //id Schedule>>> schedulesByMonth; private final MutableLiveData<HashMap<Integer, Schedule>> schedulesByDay; private final MutableLiveData<Schedule> scheduleById; private final MutableLiveData<String> errorLiveData; public ScheduleViewModel(){ retrofit = new Retrofit.Builder() .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/citrus/") .addConverterFactory(JacksonConverterFactory.create()) .build(); this.scheduleRest = retrofit.create(ScheduleRest.class); allSchedulesLiveData = new MutableLiveData<>(); schedulesByYear = new MutableLiveData<>(); schedulesByMonth = new MutableLiveData<>(); schedulesByDay = new MutableLiveData<>(); scheduleById = new MutableLiveData<>(); errorLiveData = new MutableLiveData<>(); } public MutableLiveData<HashMap<Integer, HashMap<Integer, HashMap<Integer, HashMap<Integer, Schedule>>>>> getAllSchedulesLiveData() { return allSchedulesLiveData; } public MutableLiveData<HashMap<Integer, HashMap<Integer, HashMap<Integer, Schedule>>>> getSchedulesByYear() { return schedulesByYear; } public MutableLiveData<HashMap<Integer, HashMap<Integer, Schedule>>> getSchedulesByMonth() { return schedulesByMonth; } public MutableLiveData<HashMap<Integer, Schedule>> getSchedulesByDay() { return schedulesByDay; } public MutableLiveData<Schedule> getScheduleById() { return scheduleById; } public MutableLiveData<String> getErrorLiveData() { return errorLiveData; } /** * スケジュールを作成する * * @param accountId アカウントid * @param year 年 * @param month 月 * @param day 日 * @param token トークン * @param title タイトル * @param startTime スケジュールの開始日時 * @param endTime スケジュールの終了日時 * @param bookId スケジュールを追加する本 */ public void createSchedule(String accountId, int year, int month, int day, String token, String title, String startTime, String endTime, int bookId){ Call<Schedule> call = scheduleRest.createSchedule(accountId, year, month, day, title, startTime, endTime, bookId, token); call.enqueue(new Callback<Schedule>(){ @Override public void onResponse(Call<Schedule> call, Response<Schedule> response){ if(response.isSuccessful()){ }else{ errorLiveData.setValue(response.message()); } } @Override public void onFailure(Call<Schedule> call, Throwable t){ errorLiveData.setValue(t.getMessage()); } }); } /** * アカウントを指定してallSchedulesLiveDataを更新する * * @param accountId アカウントid * @param token トークン */ public void updateAllSchedules(String accountId, String token){ Call<HashMap<Integer, HashMap<Integer,HashMap<Integer,HashMap<Integer,Schedule>>>>> call = scheduleRest.getAllSchedules(accountId, token); call.enqueue(new Callback<HashMap<Integer, HashMap<Integer, HashMap<Integer, HashMap<Integer, Schedule>>>>>() { @Override 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) { if(response.isSuccessful()){ allSchedulesLiveData.setValue(response.body()); }else{ errorLiveData.setValue(response.message()); } } @Override public void onFailure(Call<HashMap<Integer, HashMap<Integer, HashMap<Integer, HashMap<Integer, Schedule>>>>> call, Throwable t) { errorLiveData.setValue(t.getMessage()); } }); } /** * アカウントと年を指定してschedulesByYearを更新する * * @param accountId アカウントid * @param year 年 * @param token トークン */ public void updateSchedulesByYear(String accountId, int year, String token){ Call<HashMap<Integer, HashMap<Integer, HashMap<Integer, Schedule>>>> call = scheduleRest.getSchedulesByYear(accountId, year, token); call.enqueue(new Callback<HashMap<Integer, HashMap<Integer, HashMap<Integer, Schedule>>>>() { @Override public void onResponse(Call<HashMap<Integer, HashMap<Integer, HashMap<Integer, Schedule>>>> call, Response<HashMap<Integer, HashMap<Integer, HashMap<Integer, Schedule>>>> response) { if(response.isSuccessful()){ schedulesByYear.setValue(response.body()); } else { errorLiveData.setValue(response.message()); } } @Override public void onFailure(Call<HashMap<Integer, HashMap<Integer, HashMap<Integer, Schedule>>>> call, Throwable t) { errorLiveData.setValue(t.getMessage()); } }); } /** * アカウントと年と月を指定してschedulesByMonthを更新する * * @param accountId アカウントid * @param year 年 * @param month 月 * @param token トークン */ public void updateSchedulesByMonth(String accountId, int year, int month, String token){ Call<HashMap<Integer, HashMap<Integer, Schedule>>> call = scheduleRest.getSchedulesByMonth(accountId, year, month, token); call.enqueue(new Callback<HashMap<Integer, HashMap<Integer, Schedule>>>() { @Override public void onResponse(Call<HashMap<Integer, HashMap<Integer, Schedule>>> call, Response<HashMap<Integer, HashMap<Integer, Schedule>>> response) { if(response.isSuccessful()){ schedulesByMonth.setValue(response.body()); } else { schedulesByMonth.setValue(new HashMap<>()); errorLiveData.setValue(response.message()); } } @Override public void onFailure(Call<HashMap<Integer, HashMap<Integer, Schedule>>> call, Throwable t) { errorLiveData.setValue(t.getMessage()); } }); } /** * アカウントと年と月を指定してschedulesByMonthを更新する * * @param accountId アカウントid * @param year 年 * @param month 月 * @param token トークン * @param bookId ほんのid */ public void updateSchedulesByMonthAndBookId(String accountId, int year, int month, String token, int bookId){ Call<HashMap<Integer, HashMap<Integer, Schedule>>> call = scheduleRest.getScheduleByMonthAndBookId(accountId, year, month, bookId, token); call.enqueue(new Callback<HashMap<Integer, HashMap<Integer, Schedule>>>() { @Override public void onResponse(Call<HashMap<Integer, HashMap<Integer, Schedule>>> call, Response<HashMap<Integer, HashMap<Integer, Schedule>>> response) { if(response.isSuccessful()){ schedulesByMonth.setValue(response.body()); } else { schedulesByMonth.setValue(new HashMap<>()); errorLiveData.setValue(response.message()); } } @Override public void onFailure(Call<HashMap<Integer, HashMap<Integer, Schedule>>> call, Throwable t) { errorLiveData.setValue(t.getMessage()); } }); } /** * アカウントと年と月と日を指定してスケジュールを更新する * * @param accountId アカウントid * @param year 年 * @param month 月 * @param day 日 * @param token トークン */ public void updateSchedulesByDay(String accountId, int year, int month, int day, String token){ Call<HashMap<Integer, Schedule>> call = scheduleRest.getSchedulesByDay(accountId, year, month, day, token); call.enqueue(new Callback<HashMap<Integer, Schedule>>() { @Override public void onResponse(Call<HashMap<Integer, Schedule>> call, Response<HashMap<Integer, Schedule>> response) { if(response.isSuccessful()) schedulesByDay.setValue(response.body()); else errorLiveData.setValue(response.message()); } @Override public void onFailure(Call<HashMap<Integer, Schedule>> call, Throwable t) { errorLiveData.setValue(t.getMessage()); } }); } public void updateSchedulesByDayAndBookId(String accountId, int year, int month, int day, String token, int bookId){ Call<HashMap<Integer, Schedule>> call = scheduleRest.getSchedulesByDayAndBook(accountId, year, month, day, bookId, token); call.enqueue(new Callback<HashMap<Integer, Schedule>>() { @Override public void onResponse(Call<HashMap<Integer, Schedule>> call, Response<HashMap<Integer, Schedule>> response) { if(response.isSuccessful()) schedulesByDay.setValue(response.body()); else errorLiveData.setValue(response.message()); } @Override public void onFailure(Call<HashMap<Integer, Schedule>> call, Throwable t) { errorLiveData.setValue(t.getMessage()); } }); } /** * アカウントと年と月と日とスケジュールのidを指定してスケジュールを更新する * * @param accountId アカウントid * @param year 年 * @param month 月 * @param day 日 * @param id id * @param token トークン */ public void updateScheduleById(String accountId, int year, int month, int day, int id, String token){ Call<Schedule> call = scheduleRest.getScheduleById(accountId, year, month, day, id, token); call.enqueue(new Callback<Schedule>() { @Override public void onResponse(Call<Schedule> call, Response<Schedule> response) { if(response.isSuccessful()) scheduleById.setValue(response.body()); else errorLiveData.setValue(response.message()); } @Override public void onFailure(Call<Schedule> call, Throwable t) { errorLiveData.setValue(t.getMessage()); } }); } /** * アカウントid, 年, 月, 日, スケジュールidを指定してスケジュールを削除する * * @param accountId アカウントid * @param year 年 * @param month 月 * @param day 日 * @param id スケジュールid * @param token トークン */ public void deleteScheduleById(String accountId, int year, int month, int day, int id, String token){ Call<String> call = scheduleRest.deleteScheduleById(accountId, year, month, day, id, token); call.enqueue(new Callback<String>() { @Override public void onResponse(Call<String> call, Response<String> response) { if(response.isSuccessful()){ schedulesByDay.setValue(schedulesByMonth.getValue().remove(day)); } else errorLiveData.setValue(response.message()); } @Override public void onFailure(Call<String> call, Throwable t) { errorLiveData.setValue(t.getMessage()); } }); } /** * アカウントid, 年, 月, 日, スケジュールidを指定してスケジュールの開始日時を更新する * * @param accountId アカウントid * @param year 年 * @param month 月 * @param day 日 * @param id スケジュールid * @param token トークン * @param startTime 開始日時 */ public void setStartTime(String accountId, int year, int month, int day, int id, String token, String startTime){ Call<String> call = scheduleRest.putStartTime(accountId, year, month, day, id, token, startTime); call.enqueue(new Callback<String>() { @Override public void onResponse(Call<String> call, Response<String> response) { if(response.isSuccessful()) { Schedule schedule = scheduleById.getValue(); schedule.setStartTime(startTime); scheduleById.setValue(schedule); } else errorLiveData.setValue(response.message()); } @Override public void onFailure(Call<String> call, Throwable t) { errorLiveData.setValue(t.getMessage()); } }); } /** * * アカウントid, 年, 月, 日, スケジュールidを指定してスケジュールの終了日時を更新する * * @param accountId アカウントid * @param year 年 * @param month 月 * @param day 日 * @param id スケジュールid * @param token トークン * @param endTime 終了日時 */ public void setEndTime(String accountId, int year, int month, int day, int id, String token, String endTime){ Call<String> call = scheduleRest.putEndTime(accountId, year, month, day, id, token, endTime); call.enqueue(new Callback<String>() { @Override public void onResponse(Call<String> call, Response<String> response) { if(response.isSuccessful()){ Schedule schedule = scheduleById.getValue(); schedule.setEndTime(endTime); scheduleById.setValue(schedule); }else errorLiveData.setValue(response.message()); } @Override public void onFailure(Call<String> call, Throwable t) { errorLiveData.setValue(t.getMessage()); } }); } /** * アカウントid, 年, 月, 日, スケジュールidを指定してスケジュールのタイトルを更新する * * @param accountId アカウントid * @param year 年 * @param month 月 * @param day 日 * @param id スケジュールid * @param token トークン * @param title タイトル */ public void setTitle(String accountId, int year, int month, int day, int id, String token, String title){ Call<String> call = scheduleRest.putTitle(accountId, year, month, day, id, token, title); call.enqueue(new Callback<String>() { @Override public void onResponse(Call<String> call, Response<String> response) { if(response.isSuccessful()){ Schedule schedule = scheduleById.getValue(); schedule.setTitle(title); scheduleById.setValue(schedule); }else errorLiveData.setValue(response.message()); } @Override public void onFailure(Call<String> call, Throwable t) { errorLiveData.setValue(t.getMessage()); } }); } /** * アカウントid, 年, 月, 日, スケジュールidを指定してスケジュールの所属する本を更新する * * @param accountId アカウントid * @param year 年 * @param month 月 * @param day 日 * @param id スケジュールid * @param token トークン * @param bookId 本のid */ public void setBookId(String accountId, int year, int month, int day, int id, String token, int bookId){ Call<String> call = scheduleRest.putBookId(accountId, year, month, day, id, token, bookId); call.enqueue(new Callback<String>() { @Override public void onResponse(Call<String> call, Response<String> response) { if(response.isSuccessful()){ Schedule schedule = scheduleById.getValue(); schedule.setBookId(bookId); scheduleById.setValue(schedule); } else errorLiveData.setValue(response.message()); } @Override public void onFailure(Call<String> call, Throwable t) { errorLiveData.setValue(t.getMessage()); } }); } }