예제 #1
0
 /**
  * Initializes and prepares a DELETE request or retrieve it if already pending.
  *
  * @param clazz Class of ResourceRepresentation holds by request
  * @param uri Uri to fetch
  * @param resource Resource to send
  */
 protected <R extends ResourceRepresentation<?>> RESTRequest<R> delete(
     Class<R> clazz, String uri, ResourceRepresentation<?> resource) {
   RESTRequest<R> request = requestRoutine(clazz, uri, resource, true);
   request.setResourceRepresentation(resource);
   initRequest(request, HTTPVerb.DELETE, uri);
   return request;
 }
예제 #2
0
 /**
  * Initializes and prepares a PUT request or retrieve it if already pending.
  *
  * @param clazz Class of ResourceRepresentation holds by request
  * @param uri URI to fetch
  * @param resource Resource to send
  */
 protected <R extends ResourceRepresentation<?>> RESTRequest<R> put(
     Class<R> clazz, String uri, ResourceRepresentation<?> resource) {
   RESTRequest<R> request = requestRoutine(clazz, uri, resource, false);
   request.setResourceRepresentation(resource);
   initRequest(request, HTTPVerb.PUT, uri);
   return request;
 }
예제 #3
0
  /**
   * Initializes and starts the service if the request has to be re-sent
   *
   * @param request Instance of {@link RESTRequest}
   * @see Processor#checkRequest(RESTRequest)
   */
  protected void initAndStartService(RESTRequest<? extends ResourceRepresentation<?>> request) {
    Log.i(RestService.TAG, request.toString());
    boolean proceedRequest = true;
    if (request.getVerb() != HTTPVerb.GET)
      proceedRequest = mModule.getProcessor().checkRequest(request);
    if (proceedRequest) {
      request.setPending(true);
      Intent i = new Intent(mContext, RestService.class);
      i.setData(Uri.parse(request.getUrl()));
      i.putExtra(RestService.REQUEST_KEY, request);
      i.putExtra(RestService.RECEIVER_KEY, mReceiver);

      /* Trigger OnStartedRequest listener */
      for (Iterator<RESTRequest<?>> it = mRequestCollection.iterator(); it.hasNext(); ) {
        RESTRequest<?> r = it.next();
        if (request.getID().equals(r.getID())) {
          r.triggerOnStartedRequestListeners();
        }
      }
      mIntentsMap.put(request.getID(), i);
      mContext.startService(i);
    }
  }
예제 #4
0
  /**
   * Receive result from {@link RestService} and fires callbacks corresponding to the request'state
   *
   * @param resultCode The result code send by the {@link RestService}
   * @param resultData Bundle with result data
   */
  @Override
  public void onReceiveResult(int resultCode, Bundle resultData) {

    RESTRequest<?> r = (RESTRequest<?>) resultData.getSerializable(RestService.REQUEST_KEY);
    List<RESTRequest<? extends ResourceRepresentation<?>>> toRemove =
        new ArrayList<RESTRequest<?>>();
    for (Iterator<RESTRequest<?>> it = mRequestCollection.iterator(); it.hasNext(); ) {
      RESTRequest<?> request = it.next();
      Log.d("RESTDroid", "onReceiveResult");
      if (request.getID().equals(r.getID())) {
        try {
          request.setResultStream(r.getResultStream());
        } catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
        request.setResultCode(resultCode);
        request.setPending(false);
        if (resultCode >= 200 && resultCode <= 210) {
          request.setResourceRepresentation(r.getResourceRepresentation());
          if (request.triggerOnFinishedRequestListeners())
            // it.remove();
            toRemove.add(request);
          Log.d("RESTDroid", "remove");
        } else {
          request.setResourceRepresentation(r.getResourceRepresentation());
          if (request.triggerOnFailedRequestListeners())
            // it.remove();
            toRemove.add(request);
          Log.d("RESTDroid", "remove");
        }

        Intent i = resultData.getParcelable(RestService.INTENT_KEY);
        if (null == mIntentsMap.remove(request.getID()))
          throw new RuntimeException("Cannot find request in intents map");
        mContext.stopService(i);
      }
    }
    Log.d("RESTDroid", "removeAll");
    // mRequestCollection.removeAll(toRemove);
    /*if(resultCode >= 200 && resultCode <= 210)
    retryFailedRequest();*/
  }
예제 #5
0
 /**
  * Resumes all request listeners and if a listener is triggered remove the request from {@link
  * WebService#mRequestCollection}
  *
  * @see RESTRequest#mOnFailedRequestListeners
  * @see RESTRequest#mOnFinishedRequestListeners
  * @see RESTRequest#mOnStartedRequestListeners
  */
 public void onResume() {
   for (Iterator<RESTRequest<?>> it = mRequestCollection.iterator(); it.hasNext(); ) {
     RESTRequest<?> r = it.next();
     if (r.resumeListeners()) it.remove();
   }
 }
예제 #6
0
 /**
  * Pauses all request listeners
  *
  * @see RESTRequest#mOnFailedRequestListeners
  * @see RESTRequest#mOnFinishedRequestListeners
  * @see RESTRequest#mOnStartedRequestListeners
  */
 public void onPause() {
   for (Iterator<RESTRequest<?>> it = mRequestCollection.iterator(); it.hasNext(); ) {
     RESTRequest<?> r = it.next();
     r.pauseListeners();
   }
 }
예제 #7
0
 /**
  * Factory of {@link RESTRequest}. Adds {@link RESTRequest} instance in {@link
  * WebService#mRequestCollection} or retrieve it
  *
  * @param clazz Class object of the {@link ResourceRepresentation} which {@link RESTRequest} is
  *     dealing with
  * @return Instance of {@link RESTRequest}
  * @see RESTRequest
  * @see WebService#mRequestCollection
  * @since 0.6.0
  */
 @SuppressWarnings("unchecked")
 protected <T extends ResourceRepresentation<?>> RESTRequest<T> retrieveRequest(
     Class<T> clazz, String url, ResourceRepresentation<?> resource) {
   RESTRequest<T> r;
   Log.w("intentinfo", "ACTUAL RESOURCE : " + (null == resource ? "null" : resource.toString()));
   for (Iterator<RESTRequest<?>> it = mRequestCollection.iterator(); it.hasNext(); ) {
     RESTRequest<?> request = it.next();
     Log.v(
         "intentinfo",
         "IN RESOURCES COLLECTION "
             + request.getID()
             + " : "
             + (request.getResourceRepresentation() == null
                 ? "null"
                 : request.getResourceRepresentation().toString()));
   }
   for (Iterator<RESTRequest<?>> it = mRequestCollection.iterator(); it.hasNext(); ) {
     r = (RESTRequest<T>) it.next();
     if (r.isPending()) {
       Log.e(
           "intentinfo",
           "PENDING " + r.getID() + " : " + r.getResourceRepresentation().toString());
       if (null == resource) {
         if (r.getUrl().equals(url)
             && r.getResourceRepresentation().equals(resource)
             && r.getResourceClass().equals(clazz)) return r;
       } else if (r.getUrl().equals(url) && r.getResourceRepresentation().equals(resource)) {
         Log.e(
             "intentinfo",
             "ACTUAL " + r.getID() + " RESOURCE : " + r.getResourceRepresentation().toString());
         return r;
       }
     }
   }
   return null;
 }