package com.example.citrusclient.viewmodels; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModel; import com.example.citrusclient.models.Book; import com.example.citrusclient.rest.BooksRest; import java.util.ArrayList; import java.util.HashMap; import retrofit2.Call; import retrofit2.Callback; import retrofit2.Response; import retrofit2.Retrofit; import retrofit2.converter.jackson.JacksonConverterFactory; public class BooksViewModel extends ViewModel { private final Retrofit retrofit; private final BooksRest booksRest; private final MutableLiveData<HashMap<Integer, Book>> booksLiveData; private final MutableLiveData<String> titleLiveData; private final MutableLiveData<String> colorLiveData; private final MutableLiveData<String> publicityLiveData; private final MutableLiveData<String> errorLiveData; private final MutableLiveData<Boolean> successDeleteBookLiveData; private final MutableLiveData<String> delBookErrorLivedata; public BooksViewModel() { this.retrofit = new Retrofit.Builder() .baseUrl("http://nitta-lab-www.is.konan-u.ac.jp/citrus/") .addConverterFactory(JacksonConverterFactory.create()) .build(); this.booksRest = retrofit.create(BooksRest.class); this.booksLiveData = new MutableLiveData<>(); this.titleLiveData = new MutableLiveData<>(); this.colorLiveData = new MutableLiveData<>(); this.publicityLiveData = new MutableLiveData<>(); this.errorLiveData = new MutableLiveData<>(); this.successDeleteBookLiveData = new MutableLiveData<>(); this.delBookErrorLivedata = new MutableLiveData<>(); } public MutableLiveData<HashMap<Integer, Book>> getBookLiveData() { return this.booksLiveData;} public MutableLiveData<Boolean> getSuccessDeleteBookLiveData() {return successDeleteBookLiveData;} public void createBook(String accountId, String title, String color, Boolean publicity, String token ){ Call<Book> call = booksRest.createBook(accountId , title, color, publicity, token); call.enqueue(new Callback<Book>() { @Override public void onResponse(Call<Book> call, Response<Book> response) { if(response.isSuccessful()) { System.out.println("success!" + response.body()); }else { System.out.println("fail"); errorLiveData.setValue(parseStatusCode(response.code())); } } @Override public void onFailure(Call<Book> call, Throwable t) { } }); } public void loadBooks(String account_id, String token){ Call<HashMap<Integer, Book>> call = booksRest.getBooks(account_id, token); call.enqueue(new Callback<HashMap<Integer, Book>>() { @Override public void onResponse(Call<HashMap<Integer, Book>> call, Response<HashMap<Integer, Book>> response) { if (response.isSuccessful()) { HashMap<Integer, Book> book = response.body(); booksLiveData.setValue(book); } } @Override public void onFailure(Call<HashMap<Integer, Book>> call, Throwable t) { } }); } // private void setBooksLiveData(HashMap<Integer, Book> bookall){ // HashMap<Integer, Book> books = new HashMap<>(); // for(int i = 0; bookall.get(i).keySet().equals(null); i++){ // // } // booksLiveData.setValue(books); // } public void deleteBook(String account_id, Integer book_id, String token){ Call<String> call = booksRest.deleteBook(account_id, book_id, token); call.enqueue(new Callback<String>() { @Override public void onResponse(Call<String> call, Response<String> response) { if (response.isSuccessful()) { deleteBookLiveData(account_id, book_id); System.out.println("DELETE"); } else { System.out.println("response error"); } } @Override public void onFailure(Call<String> call, Throwable t) { System.out.println("correspondence error" + t); } }); } private void deleteBookLiveData(String account_id, Integer book_id) { ArrayList<Book> delData = new ArrayList<>(); } public void setTitle(String account_id, Integer book_id, String title, String token){ Call<String> call = booksRest.putTitle(account_id, book_id, title, token); call.enqueue(new Callback<String>() { @Override public void onResponse(Call<String> call, Response<String> response) { if (response.isSuccessful()){ titleLiveData.setValue(title); System.out.println(response.code()); System.out.println("Success SetTiTle" + title); } else { System.out.println("response error"); } } @Override public void onFailure(Call<String> call, Throwable t) { System.out.println("NetWorkError" + t); } }); } public void setColor(String account_id, Integer book_id, String color, String token){ Call<String> call = booksRest.putColor(account_id, book_id, color, token); call.enqueue(new Callback<String>() { @Override public void onResponse(Call<String> call, Response<String> response) { if (response.isSuccessful()){ colorLiveData.setValue(color); System.out.println(response.code()); System.out.println("Success SetTiTle" + color); } else { System.out.println("response error"); } } @Override public void onFailure(Call<String> call, Throwable t) { System.out.println("NetWorkError" + t); } }); } public void setPublicity(String account_id, Integer book_id, Boolean publicity, String token){ Call<String> call = booksRest.putPublicity(account_id, book_id, publicity, token); call.enqueue(new Callback<String>() { @Override public void onResponse(Call<String> call, Response<String> response) { if (response.isSuccessful()){ String pub = String.valueOf(publicity); publicityLiveData.setValue(pub); System.out.println(response.code()); System.out.println("Success SetTiTle" + publicity); } else { System.out.println("response error"); } } @Override public void onFailure(Call<String> call, Throwable t) { System.out.println("NetWorkError" + t); } }); } private String parseStatusCode(Integer code) { switch (code) { case 404: System.out.println("見つかりませんでした"); return null; case 401: System.out.println("トークンが違います"); return null; case 400: System.out.println("レスポンスエラー"); return null; case 500: System.out.println("サーバーエラー"); return null; default: System.out.println("不明なエラー"); return null; } } }