/** * 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();*/ }
/** * 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; }
/** * 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); } }