com.github.leonardoxh.temporeal.app.service.UserService.java Source code

Java tutorial

Introduction

Here is the source code for com.github.leonardoxh.temporeal.app.service.UserService.java

Source

/*
 * Copyright 2014 Leonardo Rossetto
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.github.leonardoxh.temporeal.app.service;

import android.content.Intent;

import com.github.leonardoxh.temporeal.app.model.User;
import com.github.leonardoxh.temporeal.app.model.dao.UserDao;
import com.github.leonardoxh.temporeal.app.utils.JsonUtils;
import com.squareup.okhttp.Response;

import java.io.IOException;

/**
 * Este servico e o responsavel por fazer a comunicacao com o servidor
 * e enviar/receber dados relativos ao nosso usuario para o servidor
 */
public class UserService extends AbstractService {

    /**
     * Esta e a acao de broadcast que mandamos para quem chamou o nosso servico
     * indicando se ha falhas ou sucesso na execucao do servico
     */
    public static final String BROADCAST_INTENT_FILTER = "com.github.leonardoxh.temporeal.app.USER_RESULT";

    /**
     * Extras que podemos passar para o nosso servico,
     * nesse caso esse e o nome da chave para resgatar o parametro do usuario
     * no servico a partir de quem chamou o mesmo
     */
    public static final String EXTRA_USER = "user";

    /**
     * Indica ao nosso broadcast se houve ou nao erro durante ao processo
     */
    public static final String RESULT_ERROR = "error";

    public UserService() {
        super(UserService.class.getSimpleName());
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        User user = intent.getExtras().getParcelable(EXTRA_USER);
        Response response = makeRequest(Constants.USER_ENDPOINT, user);
        if (response.isSuccessful()) {
            try {
                User serverUser = JsonUtils.fromJson(response.body().string(), User.class);
                /* O usuario foi cadastrado no servidor corretamente, entao so persistimos ele
                 * e indicamos a nossa Activity o sucesso do mesmo */
                new UserDao(this).saveOrUpdate(serverUser);
                sendSuccess(serverUser);
            } catch (IOException e) {
                /* Essa exception sera lancada caso tenhamos alguma falha na
                 * leitura da resposta do servidor */
                e.printStackTrace();
                sendFailure();
            }
        } else {
            sendFailure();
        }
    }

    /**
     * Este metodo envia de volta a nossa activity o usuario que recebemos
     * do servico assim indicando o sucesso da requisicao e cadastro, assim podemos prosseguir
     * @param user o usuario retornado do servidor e ja persistido na nossa base de dados
     *             este nunca e null
     * @see android.content.BroadcastReceiver
     */
    private void sendSuccess(User user) {
        sendDefault(user);
    }

    /**
     * Este metodo devolve o status da requisicao feita ao servidor
     * via broadcast para a nossa Activity
     * @see android.content.BroadcastReceiver
     */
    private void sendFailure() {
        sendDefault(null);
    }

    /**
     * Envia o broadcast de fato
     * @param user envia o usuario via broadcast, se for null indicamos erro
     */
    private void sendDefault(User user) {
        Intent intent = new Intent(BROADCAST_INTENT_FILTER);
        if (user == null) {
            intent.putExtra(RESULT_ERROR, true);
        } else {
            intent.putExtra(RESULT_ERROR, false);
            intent.putExtra(EXTRA_USER, user);
        }
        sendBroadcast(intent);
    }

}