com.sonetel.wizards.impl.AccountBalanceHelper.java Source code

Java tutorial

Introduction

Here is the source code for com.sonetel.wizards.impl.AccountBalanceHelper.java

Source

/**
 * Copyright (C) 2010-2012 Regis Montoya (aka r3gis - www.r3gis.fr)
 * This file is part of CSipSimple.
 *
 *  CSipSimple is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *  If you own a pjsip commercial license you can also redistribute it
 *  and/or modify it under the terms of the GNU Lesser General Public License
 *  as an android library.
 *
 *  CSipSimple is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with CSipSimple.  If not, see <http://www.gnu.org/licenses/>.
 */

package com.sonetel.wizards.impl;

import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;

import com.sonetel.api.SipProfile;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.impl.client.DefaultHttpClient;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public abstract class AccountBalanceHelper extends Handler {

    protected static final int DID_SUCCEED = 0;
    protected static final int DID_ERROR = 1;

    public void launchRequest(final SipProfile acc) {
        Thread t = new Thread() {

            public void run() {
                try {
                    HttpClient httpClient = new DefaultHttpClient();
                    HttpRequestBase req = getRequest(acc);
                    if (req == null) {
                        return;
                    }
                    // Create a response handler
                    HttpResponse httpResponse = httpClient.execute(req);
                    if (httpResponse.getStatusLine().getStatusCode() == 200) {
                        InputStreamReader isr = new InputStreamReader(httpResponse.getEntity().getContent());
                        BufferedReader br = new BufferedReader(isr);

                        String line = null;
                        while ((line = br.readLine()) != null) {
                            String res = parseResponseLine(line);
                            if (!TextUtils.isEmpty(res)) {
                                AccountBalanceHelper.this
                                        .sendMessage(AccountBalanceHelper.this.obtainMessage(DID_SUCCEED, res));
                                break;
                            }
                        }

                    } else {
                        AccountBalanceHelper.this.sendMessage(AccountBalanceHelper.this.obtainMessage(DID_ERROR));
                    }
                } catch (Exception e) {
                    AccountBalanceHelper.this.sendMessage(AccountBalanceHelper.this.obtainMessage(DID_ERROR));
                }
            }
        };
        t.start();
    }

    public void handleMessage(Message message) {
        switch (message.what) {
        case DID_SUCCEED: {
            //Here we get the credit info, now add a row in the interface
            String response = (String) message.obj;
            applyResultSuccess(response);
            break;
        }
        case DID_ERROR: {
            applyResultError();
            break;
        }
        }
    }

    /**
     * Build account balance request
     * @param acc the sip profile to build request for
     * @return
     */
    public abstract HttpRequestBase getRequest(SipProfile acc) throws IOException;

    /**
     * Search account result in the line.
     * @param line The line to parse
     * @return The account balance text if any parsed in this line. Else return empty or null chain to get next line
     */
    public abstract String parseResponseLine(String line);

    /**
     * Apply the error result of balance check
     * This is done in user interface thread so ui can be safely updated here
     */
    public abstract void applyResultError();

    /**
     * Apply the content result of balance check
     * This is done in user interface thread so ui can be safely updated here
     */
    public abstract void applyResultSuccess(String balanceText);
}