public CloseRequestUserActionEntity newCloseRequest(@NonNull String requestId, @NonNull String closedByUserId, @NonNull String closedComment, @NonNull List<String> closedPictures) { return new CloseRequestUserActionEntity( getDateTime(), requestId, closedByUserId, closedComment, closedPictures); }
public CloseRequestUserActionEntity(String timestamp, @NonNull String requestId, @NonNull String closedByUserId, @NonNull String closedComment, @NonNull List<String> closedPictures) { super(timestamp, UserActions.ENTITY_TYPE_REQUEST, requestId, null, UserActions.ACTION_TYPE_CLOSE_REQUEST, assembleActionParam(closedByUserId, closedComment, closedPictures)); mClosedByUserId = closedByUserId; mClosedComment = closedComment; mClosedPictures = new ArrayList<>(closedPictures); }
public String getClosedAt() { return String.valueOf(getDatetime()); }
private RequestEntity closeRequest(CloseRequestUserActionEntity closeRequestUserAction, RequestEntity requestEntity) { if (requestEntity.getClosedBy() != null && !requestEntity.getClosedBy().isEmpty()) { throw new IllegalArgumentException("request already closed"); } if (requestEntity.getPickedUpBy() == null || requestEntity.getPickedUpBy().isEmpty()) { throw new IllegalArgumentException("request is not picked up"); } if (!requestEntity.getPickedUpBy().equals(closeRequestUserAction.getClosedByUserId())) { throw new IllegalArgumentException("closing user must be the same who picked up"); } return RequestEntity.getBuilder(requestEntity) .setClosedBy(closeRequestUserAction.getClosedByUserId()) .setClosedAt(String.valueOf(closeRequestUserAction.getDatetime())) .setClosedComment(closeRequestUserAction.getClosedComment()) .setClosedPictures(closeRequestUserAction.getClosedPictures()) .build(); }
assertNotNull(updatedInitiallyPickedUpRequest); assertRequestsEqual(updatedInitiallyPickedUpRequest, RequestEntity.getBuilder(initiallyPickedUpRequest) .setClosedBy(closePickedUp.getClosedByUserId()) .setClosedAt(closePickedUp.getClosedAt()) .setClosedComment(closePickedUp.getClosedComment()) .setClosedPictures(closePickedUp.getClosedPictures()) .setClosedVotes(0) .build());
private void syncRequestClosedAction(CloseRequestUserActionEntity userAction) { mLogger.d(TAG, "syncRequestClosedAction(); entity ID: " + userAction.getEntityId()); MultipartBody.Builder builder = new MultipartBody.Builder(); builder.setType(MultipartBody.FORM); builder.addFormDataPart(Constants.FIELD_NAME_REQUEST_ID, userAction.getEntityId()); builder.addFormDataPart(Constants.FIELD_NAME_CLOSED_COMMENT, userAction.getClosedComment()); builder = NetworkingUtils.addPicturesParts( builder, userAction.getClosedPictures(), Constants.FIELD_NAME_CLOSED_PICTURES ); Call<ResponseBody> call = mServerApi.closeRequest(builder.build()); try { Response<ResponseBody> response = call.execute(); if (!response.isSuccessful()) { if (HttpUtils.isClientSideError(response.code())) { mLogger.w(TAG, "close request call failed due to client error; " + "response code: " + response.code() + "\nresponse: " + response.body()); } else { throw new SyncFailedException("close request call failed; response code: " + response.code()); } } } catch (IOException e) { throw new SyncFailedException(e); } }
/** * * @param userAction the user action which should be applied to request * @param requestEntity the request on which to apply the user action * @return new request which is the merge of the provided request and the information from * user action * @throws IllegalArgumentException if the provided user action is not applicable to the * provided request */ public RequestEntity applyUserActionToRequest(@NonNull UserActionEntity userAction, @NonNull RequestEntity requestEntity) { if (!userAction.getEntityType().equals(UserActions.ENTITY_TYPE_REQUEST) || !userAction.getEntityId().equals(requestEntity.getId())) { throw new IllegalArgumentException("user action is not related to the request"); } if (userAction.getActionType().equals(UserActions.ACTION_TYPE_CLOSE_REQUEST)) { return closeRequest(CloseRequestUserActionEntity.fromUserAction(userAction), requestEntity); } else if (userAction.getActionType().equals(UserActions.ACTION_TYPE_PICKUP_REQUEST)) { return pickUpRequest(PickUpRequestUserActionEntity.fromUserAction(userAction), requestEntity); } else if (userAction.getActionType().equals(UserActions.ACTION_TYPE_CREATE_REQUEST)) { // this action is just a "marker" - the actual data has already been written to requests cache return requestEntity; } else if (userAction.getActionType().equals(UserActions.ACTION_TYPE_VOTE_FOR_REQUEST)) { return voteForRequest(VoteForRequestUserActionEntity.fromUserAction(userAction), requestEntity); } else { throw new RuntimeException("invalid user action: " + userAction); } }
syncRequestClosedAction(CloseRequestUserActionEntity.fromUserAction(userAction)); break;
public static CloseRequestUserActionEntity fromUserAction(UserActionEntity userAction) { Gson gson = new Gson(); // TODO: this is inefficient ActionParam actionParam = gson.fromJson(userAction.getActionParam(), ActionParam.class); return new CloseRequestUserActionEntity( userAction.getDatetime(), userAction.getEntityId(), actionParam.closedBy, actionParam.closedComment, StringUtils.commaSeparatedStringToList(actionParam.closedPictures)); }