Newer
Older
CitrusClient / app / src / main / java / com / example / citrusclient / viewmodels / BooksViewModel.java
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<HashMap<Integer,Book>> booksIdLiveData;
    private final MutableLiveData<String> titleLiveData;
    private final MutableLiveData<String> colorLiveData;
    private final MutableLiveData<String> publicityLiveData;
    private final MutableLiveData<String> favoritedLiveData;
    private final MutableLiveData<String> errorLiveData;
    private final MutableLiveData<Boolean> successDeleteBookLiveData;
    private final MutableLiveData<String> delBookErrorLivedata;

    public BooksViewModel(MutableLiveData<HashMap<Integer, Book>> booksIdLiveData) {
        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.booksIdLiveData = booksIdLiveData;
        this.titleLiveData = new MutableLiveData<>();
        this.colorLiveData = new MutableLiveData<>();
        this.publicityLiveData = new MutableLiveData<>();
        this.favoritedLiveData = 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<HashMap<Integer,Book>> getBooksIdLiveData() {return this.booksIdLiveData;}//本の情報を取得
    public MutableLiveData<String> getTitleLiveData() {return this.titleLiveData;}//本のタイトルを返す
    public MutableLiveData<String> getPublicityLiveData() {return this.publicityLiveData;}//本の公開状態を返す


    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);
                    System.out.println(response.code());
                }else System.out.println(response.code());
            }

            @Override
            public void onFailure(Call<HashMap<Integer, Book>> call, Throwable t) {
                System.out.println("fail");
            }
        });
    }

    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()) {
                    successDeleteBookLiveData.setValue(true);
                    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) {
        HashMap<Integer,Book> delData = new HashMap<>();
        for (Book book: booksLiveData.getValue()) {
            if (book.getBookId().equals(book_id)) {
                continue;
            }
            delData.add(book);
        }
        booksLiveData.setValue(delData);
    }*/

    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;
        }
    }
}