예제 #1
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();*/
  }
예제 #2
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;
 }
예제 #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);
    }
  }