Android Open Source - Mamytas Abstract Rest Method






From Project

Back to project page Mamytas.

License

The source code is released under:

GNU General Public License

If you think the Android project Mamytas listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package mn.aug.restfulandroid.rest;
//  w  w w  .ja  v a 2  s. c  o  m
import java.util.List;
import java.util.Map;

import android.content.Context;

import mn.aug.restfulandroid.rest.resource.Resource;
import mn.aug.restfulandroid.security.AuthorizationManager;
import mn.aug.restfulandroid.security.RequestSigner;
import mn.aug.restfulandroid.util.Logger;


public abstract class AbstractRestMethod<T extends Resource> implements RestMethod<T> {

  private static final String DEFAULT_ENCODING = "UTF-8";
    private Request request;

  public RestMethodResult<T> execute() {

    request = buildRequest();
    if (requiresAuthorization()) {
      RequestSigner signer = AuthorizationManager.getInstance(getContext());
      signer.authorize(request);
    }
    Response response = doRequest(request);
    return buildResult(response);
  }
  
  protected abstract Context getContext();

  /**
   * Subclasses can overwrite for full control, eg. need to do special
   * inspection of response headers, etc.
   * 
   * @param response
   * @return
   */
  protected RestMethodResult<T> buildResult(Response response) {

    int status = response.status;
    String statusMsg = "";
    String responseBody = null;
    T resource = null;

    try {
      responseBody = new String(response.body, getCharacterEncoding(response.headers));
            if(status==200 && request.getMethod()!= RestMethodFactory.Method.DELETE)
          resource = parseResponseBody(responseBody);

    } catch (Exception ex) {
      // TODO Should we set some custom status code?
      status += 500; // spec only defines up to 505
      statusMsg = ex.getMessage();
            ex.printStackTrace();
        }
    return new RestMethodResult<T>(status, statusMsg, resource);
  }

  protected abstract Request buildRequest();
  
  protected boolean requiresAuthorization() {
    return true;
  }

  protected abstract T parseResponseBody(String responseBody) throws Exception;

  private Response doRequest(Request request) {

    RestClient client = new RestClient();
    return client.execute(request);
  }

  private String getCharacterEncoding(Map<String, List<String>> headers) {
    // TODO get value from headers
    return DEFAULT_ENCODING;
  }

}




Java Source Code List

mn.aug.restfulandroid.activity.AboutActivity.java
mn.aug.restfulandroid.activity.LoginActivity.java
mn.aug.restfulandroid.activity.ProjectEditor.java
mn.aug.restfulandroid.activity.ProjectsActivity.java
mn.aug.restfulandroid.activity.ProjectsArrayAdapter.java
mn.aug.restfulandroid.activity.TaskActivity.java
mn.aug.restfulandroid.activity.TaskEditor.java
mn.aug.restfulandroid.activity.TasksActivity.java
mn.aug.restfulandroid.activity.TasksArrayAdapter.java
mn.aug.restfulandroid.activity.TimerServiceHelper.java
mn.aug.restfulandroid.activity.TimerService.java
mn.aug.restfulandroid.activity.TimersArrayAdapter.java
mn.aug.restfulandroid.activity.base.RESTfulActivity.java
mn.aug.restfulandroid.activity.base.RESTfulListActivity.java
mn.aug.restfulandroid.activity.base.UndoBarController.java
mn.aug.restfulandroid.provider.CommentsDBAccess.java
mn.aug.restfulandroid.provider.ListsDBAccess.java
mn.aug.restfulandroid.provider.OwnershipDBAccess.java
mn.aug.restfulandroid.provider.ProviderDbHelper.java
mn.aug.restfulandroid.provider.RemindersDBAccess.java
mn.aug.restfulandroid.provider.TasksDBAccess.java
mn.aug.restfulandroid.provider.UsersDBAccess.java
mn.aug.restfulandroid.rest.AbstractRestMethod.java
mn.aug.restfulandroid.rest.DeleteListRestMethod.java
mn.aug.restfulandroid.rest.DeleteTaskRestMethod.java
mn.aug.restfulandroid.rest.GetListsRestMethod.java
mn.aug.restfulandroid.rest.GetTasksRestMethod.java
mn.aug.restfulandroid.rest.GetTimersRestMethod.java
mn.aug.restfulandroid.rest.LoginRestMethod.java
mn.aug.restfulandroid.rest.PostListRestMethod.java
mn.aug.restfulandroid.rest.PostTaskRestMethod.java
mn.aug.restfulandroid.rest.PostTimerRestMethod.java
mn.aug.restfulandroid.rest.PutListRestMethod.java
mn.aug.restfulandroid.rest.PutTaskRestMethod.java
mn.aug.restfulandroid.rest.PutTimerRestMethod.java
mn.aug.restfulandroid.rest.Request.java
mn.aug.restfulandroid.rest.Response.java
mn.aug.restfulandroid.rest.RestClient.java
mn.aug.restfulandroid.rest.RestMethodFactory.java
mn.aug.restfulandroid.rest.RestMethodResult.java
mn.aug.restfulandroid.rest.RestMethod.java
mn.aug.restfulandroid.rest.ShareListRestMethod.java
mn.aug.restfulandroid.rest.resource.Comment.java
mn.aug.restfulandroid.rest.resource.Lists.java
mn.aug.restfulandroid.rest.resource.Listw.java
mn.aug.restfulandroid.rest.resource.Login.java
mn.aug.restfulandroid.rest.resource.Reminder.java
mn.aug.restfulandroid.rest.resource.Resource.java
mn.aug.restfulandroid.rest.resource.TaskList.java
mn.aug.restfulandroid.rest.resource.Task.java
mn.aug.restfulandroid.rest.resource.Tasks.java
mn.aug.restfulandroid.rest.resource.Timer.java
mn.aug.restfulandroid.rest.resource.Timers.java
mn.aug.restfulandroid.security.AuthorizationManager.java
mn.aug.restfulandroid.security.RequestSigner.java
mn.aug.restfulandroid.service.ListProcessor.java
mn.aug.restfulandroid.service.ListsProcessor.java
mn.aug.restfulandroid.service.LoginProcessor.java
mn.aug.restfulandroid.service.ProcessorCallback.java
mn.aug.restfulandroid.service.ShareProcessor.java
mn.aug.restfulandroid.service.TaskProcessor.java
mn.aug.restfulandroid.service.TasksProcessor.java
mn.aug.restfulandroid.service.TimersProcessor.java
mn.aug.restfulandroid.service.WunderlistServiceHelper.java
mn.aug.restfulandroid.service.WunderlistService.java
mn.aug.restfulandroid.util.DateHelper.java
mn.aug.restfulandroid.util.DatePickerFragment.java
mn.aug.restfulandroid.util.Logger.java
mn.aug.restfulandroid.util.TimePickerFragment.java