Newer
Older
Cactus-CleanArchitecture / app / src / main / java / org / ntlab / radishforandroidstudio / CactusCleanArchitecture / Controller / UserLoginController.java
package org.ntlab.radishforandroidstudio.CactusCleanArchitecture.Controller;

import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.widget.Toast;

import net.arnx.jsonic.JSON;
import net.arnx.jsonic.TypeReference;

import org.ntlab.radishforandroidstudio.CactusCleanArchitecture.Entities.CactusConnection;
import org.ntlab.radishforandroidstudio.CactusCleanArchitecture.UseCases.UserLoginBoundary;
import org.ntlab.radishforandroidstudio.CactusCleanArchitecture.UseCases.UserLoginControllerBoundary;
import org.ntlab.radishforandroidstudio.CactusCleanArchitecture.UseCases.UserLoginUseCases;
import org.ntlab.radishforandroidstudio.R;
import org.ntlab.radishforandroidstudio.cactusClient.Cactus;
import org.ntlab.radishforandroidstudio.cactusClient.models.account.Account;
import org.ntlab.radishforandroidstudio.cactusClient.models.account.URIAddressedAccount;
import org.ntlab.radishforandroidstudio.cactusClient.views.InstancesFragment;
import org.ntlab.radishforandroidstudio.framework.network.CallBack;

/**
 * Webサーバと通信を行いデータのやりとりをするクラス
 *
 * @author n-konishi
 */

public class UserLoginController {

    private String userID;
    private String userPass;
    private FragmentManager manager;

    private CactusConnection loginConnection;
    private FragmentActivity fragmentActivity;
    private UserLoginControllerBoundary userLoginControllerBoundary;


    public UserLoginController(FragmentActivity fragmentActivity, FragmentManager fragmentManager, UserLoginControllerBoundary userLoginControllerBound) {
        this.fragmentActivity = fragmentActivity;
        this.manager = fragmentManager;

        this. userLoginControllerBoundary = userLoginControllerBound;

        this.userID = userLoginControllerBoundary.getUserID();
        this.userPass = userLoginControllerBoundary.getUserPass();

        UserLoginBoundary userLoginBoundary = null;

        UserLoginUseCases loginUseCases = new UserLoginUseCases(userLoginBoundary);
        String login_URL = loginUseCases.userLoginURL();
        loginConnection = new CactusConnection(login_URL);

    }

    public void addFormParam() {
        loginConnection.addFormParam("userID", userID);
        loginConnection.addFormParam("userPass", userPass);
        loginConnection.doPut();
    }

    private void decodeJson(String response) {
        URIAddressedAccount lac = JSON.decode(response, new TypeReference<URIAddressedAccount>() {
        });
        System.out.println(response);
        Account user = lac.getAccount();
        if (user.isLogin()) {
            System.out.println("成功");
            Toast.makeText(fragmentActivity,"ログインに成功しました。", Toast.LENGTH_SHORT).show();
            Cactus userCactus = (Cactus) fragmentActivity.getApplication();
            userCactus.setMyAccount(user);
            userCactus.setAddressedAccount(lac);

            //画面遷移
            FragmentTransaction transaction = manager.beginTransaction();
            transaction.replace(R.id.fragment_place, new InstancesFragment());
            transaction.commit();
        } else {
            Toast.makeText(fragmentActivity,"ログインに失敗しました。", Toast.LENGTH_SHORT).show();

        }
    }


    public void loginResponse() {

        loginConnection.setCallBack(new CallBack() {
            @Override
            public void onResponse(String response) {
                decodeJson(response);
            }
        });
    }
}