Skip to content

Commit

Permalink
MOB-539: New conv callbacks and error parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
Casey Kulm committed Sep 27, 2017
1 parent c376c0f commit b1f3c1c
Show file tree
Hide file tree
Showing 55 changed files with 4,961 additions and 598 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

package com.bazaarvoice.bvsdkdemoandroid.author;

import android.support.annotation.NonNull;
import android.util.Log;

import com.bazaarvoice.bvandroidsdk.Author;
Expand All @@ -25,9 +26,8 @@
import com.bazaarvoice.bvandroidsdk.AuthorsResponse;
import com.bazaarvoice.bvandroidsdk.BVConversationsClient;
import com.bazaarvoice.bvandroidsdk.Badge;
import com.bazaarvoice.bvandroidsdk.BazaarException;
import com.bazaarvoice.bvandroidsdk.ConversationsCallback;
import com.bazaarvoice.bvandroidsdk.Error;
import com.bazaarvoice.bvandroidsdk.ConversationsDisplayCallback;
import com.bazaarvoice.bvandroidsdk.ConversationsException;
import com.bazaarvoice.bvandroidsdk.Product;
import com.bazaarvoice.bvandroidsdk.ProductDisplayPageRequest;
import com.bazaarvoice.bvandroidsdk.ProductDisplayPageResponse;
Expand Down Expand Up @@ -80,16 +80,9 @@ public void start() {
conversationsClient.prepareCall(request).loadAsync(authorsCb);
}

private ConversationsCallback<AuthorsResponse> authorsCb = new ConversationsCallback<AuthorsResponse>() {
private final ConversationsDisplayCallback<AuthorsResponse> authorsCb = new ConversationsDisplayCallback<AuthorsResponse>() {
@Override
public void onSuccess(AuthorsResponse response) {
if (response.getHasErrors()) {
for (Error error : response.getErrors()) {
Log.e(TAG, error.getMessage());
}
return;
}

public void onSuccess(@NonNull AuthorsResponse response) {
List<Author> authors = response.getResults();
if (authors.size() > 0) {
Author author = authors.get(0);
Expand Down Expand Up @@ -122,20 +115,14 @@ public void onSuccess(AuthorsResponse response) {
}

@Override
public void onFailure(BazaarException exception) {
public void onFailure(@NonNull ConversationsException exception) {
exception.printStackTrace();
}
};

private ConversationsCallback<ProductDisplayPageResponse> pdpCb = new ConversationsCallback<ProductDisplayPageResponse>() {
private final ConversationsDisplayCallback<ProductDisplayPageResponse> pdpCb = new ConversationsDisplayCallback<ProductDisplayPageResponse>() {
@Override
public void onSuccess(ProductDisplayPageResponse response) {
if (response == null || response.getHasErrors()) {
view.showRecentReviewImage(false);
Log.d(TAG, "Failed to get Review Details");
return;
}

public void onSuccess(@NonNull ProductDisplayPageResponse response) {
List<Product> products = response.getResults();
if (products.isEmpty()) {
view.showRecentReviewImage(false);
Expand Down Expand Up @@ -164,7 +151,7 @@ public void onSuccess(ProductDisplayPageResponse response) {
}

@Override
public void onFailure(BazaarException exception) {
public void onFailure(@NonNull ConversationsException exception) {
Log.e(TAG, "Failed to get Review Details", exception);
view.showRecentReviewImage(false);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
package com.bazaarvoice.bvsdkdemoandroid.conversations;

import android.support.annotation.NonNull;

import com.bazaarvoice.bvandroidsdk.Action;
import com.bazaarvoice.bvandroidsdk.AnswerSubmissionRequest;
import com.bazaarvoice.bvandroidsdk.AnswerSubmissionResponse;
import com.bazaarvoice.bvandroidsdk.BVConversationsClient;
import com.bazaarvoice.bvandroidsdk.BazaarException;
import com.bazaarvoice.bvandroidsdk.CommentSubmissionRequest;
import com.bazaarvoice.bvandroidsdk.CommentSubmissionResponse;
import com.bazaarvoice.bvandroidsdk.ConversationsCallback;
import com.bazaarvoice.bvandroidsdk.ConversationsSubmissionResponse;
import com.bazaarvoice.bvandroidsdk.ConversationsSubmissionCallback;
import com.bazaarvoice.bvandroidsdk.ConversationsSubmissionException;
import com.bazaarvoice.bvandroidsdk.FeedbackSubmissionRequest;
import com.bazaarvoice.bvandroidsdk.FeedbackSubmissionResponse;
import com.bazaarvoice.bvandroidsdk.QuestionSubmissionRequest;
Expand Down Expand Up @@ -191,14 +192,14 @@ private void submitReviewWithPhoto(String productId) {
.addPhoto(localImageFile, "What a cute pupper!")
.build();

bvConversationsClient.prepareCall(submission).loadAsync(new ConversationsCallback<ReviewSubmissionResponse>() {
bvConversationsClient.prepareCall(submission).loadAsync(new ConversationsSubmissionCallback<ReviewSubmissionResponse>() {
@Override
public void onSuccess(ReviewSubmissionResponse response) {
handleSubmissionSuccessResponse(response, "review");
public void onSuccess(@NonNull ReviewSubmissionResponse response) {
handleSubmissionSuccessResponse();
}

@Override
public void onFailure(BazaarException exception) {
public void onFailure(@NonNull ConversationsSubmissionException exception) {
handleSubmissionFailureResponse(exception);
}
});
Expand All @@ -217,14 +218,14 @@ private void submitQuestion(String productId) {
.agreedToTermsAndConditions(true)
.build();

bvConversationsClient.prepareCall(submission).loadAsync(new ConversationsCallback<QuestionSubmissionResponse>() {
bvConversationsClient.prepareCall(submission).loadAsync(new ConversationsSubmissionCallback<QuestionSubmissionResponse>() {
@Override
public void onSuccess(QuestionSubmissionResponse response) {
handleSubmissionSuccessResponse(response, "question");
public void onSuccess(@NonNull QuestionSubmissionResponse response) {
handleSubmissionSuccessResponse();
}

@Override
public void onFailure(BazaarException exception) {
public void onFailure(@NonNull ConversationsSubmissionException exception) {
handleSubmissionFailureResponse(exception);
}
});
Expand All @@ -242,14 +243,14 @@ private void submitAnswer(String questionId) {
.agreedToTermsAndConditions(true)
.build();

bvConversationsClient.prepareCall(submission).loadAsync(new ConversationsCallback<AnswerSubmissionResponse>() {
bvConversationsClient.prepareCall(submission).loadAsync(new ConversationsSubmissionCallback<AnswerSubmissionResponse>() {
@Override
public void onSuccess(AnswerSubmissionResponse response) {
handleSubmissionSuccessResponse(response, "answer");
public void onSuccess(@NonNull AnswerSubmissionResponse response) {
handleSubmissionSuccessResponse();
}

@Override
public void onFailure(BazaarException exception) {
public void onFailure(@NonNull ConversationsSubmissionException exception) {
handleSubmissionFailureResponse(exception);
}
});
Expand All @@ -265,14 +266,14 @@ private void submitFeedback(String reviewId) {
.feedbackVote(FeedbackVoteType.POSITIVE)
.build();

bvConversationsClient.prepareCall(submission).loadAsync(new ConversationsCallback<FeedbackSubmissionResponse>() {
bvConversationsClient.prepareCall(submission).loadAsync(new ConversationsSubmissionCallback<FeedbackSubmissionResponse>() {
@Override
public void onSuccess(FeedbackSubmissionResponse response) {
handleSubmissionSuccessResponse(response, "feedback");
handleSubmissionSuccessResponse();
}

@Override
public void onFailure(BazaarException exception) {
public void onFailure(ConversationsSubmissionException exception) {
handleSubmissionFailureResponse(exception);
}
});
Expand All @@ -292,36 +293,27 @@ private void submitComment(String reviewId) {
.addPhoto(localImageFile, "Cute puppy there")
.build();

bvConversationsClient.prepareCall(request).loadAsync(new ConversationsCallback<CommentSubmissionResponse>() {
bvConversationsClient.prepareCall(request).loadAsync(new ConversationsSubmissionCallback<CommentSubmissionResponse>() {
@Override
public void onSuccess(CommentSubmissionResponse response) {
handleSubmissionSuccessResponse(response, "comment");
handleSubmissionSuccessResponse();
}

@Override
public void onFailure(BazaarException exception) {
public void onFailure(ConversationsSubmissionException exception) {
handleSubmissionFailureResponse(exception);
}
});
}

private void handleSubmissionSuccessResponse(ConversationsSubmissionResponse response, String apiMethodName) {
private void handleSubmissionSuccessResponse() {
view.hideProgress();
demoConvResponseHandler.handleSubmissionSuccessResponse(response, apiMethodName, submitAction, new DemoConvResponseHandler.DisplayMessage() {
@Override
public void onSuccessMessage(String message) {
view.showDialogWithMessage(message);
}

@Override
public void onErrorMessage(String errorMessage) {
view.showDialogWithMessage(errorMessage);
}
});
view.showDialogWithMessage(demoConvResponseHandler.getSubmissionSuccessMessage(submitAction));
}

private void handleSubmissionFailureResponse(BazaarException exception) {
private void handleSubmissionFailureResponse(ConversationsSubmissionException exception) {
exception.printStackTrace();
view.hideProgress();
view.showDialogWithMessage(exception.getMessage());
view.showDialogWithMessage(demoConvResponseHandler.getSubmissionErrorMessage(exception));
}
}
Original file line number Diff line number Diff line change
@@ -1,116 +1,40 @@
package com.bazaarvoice.bvsdkdemoandroid.conversations;

import android.util.Log;

import com.bazaarvoice.bvandroidsdk.Action;
import com.bazaarvoice.bvandroidsdk.ConversationsDisplayResponse;
import com.bazaarvoice.bvandroidsdk.ConversationsSubmissionResponse;
import com.bazaarvoice.bvandroidsdk.ConversationsSubmissionException;
import com.bazaarvoice.bvandroidsdk.Error;
import com.bazaarvoice.bvandroidsdk.FieldError;
import com.bazaarvoice.bvandroidsdk.FormData;
import com.bazaarvoice.bvandroidsdk.FormError;
import com.bazaarvoice.bvandroidsdk.FormField;
import com.bazaarvoice.bvsdkdemoandroid.DemoConstants;

import java.util.List;
import java.util.Map;

public class DemoConvResponseHandler {
public interface DisplayMessage {
void onSuccessMessage(String message);
void onErrorMessage(String errorMessage);
}

public <ResultType> void handleDisplaySuccessResponse(ConversationsDisplayResponse<ResultType> response, DisplayMessage displayMessage) {
if (!response.getHasErrors()) {
displayMessage.onSuccessMessage("Successful request");
return;
}
List<Error> errors = response.getErrors();
String genericBvErrorMessage = getGenericBvErrorMessage(errors);
displayMessage.onErrorMessage(genericBvErrorMessage);
}

public void handleSubmissionSuccessResponse(ConversationsSubmissionResponse response, String apiMethodName, Action action, DisplayMessage displayMessage) {
public String getSubmissionSuccessMessage(Action action) {
if (action == Action.Preview) {
if (response.getHasErrors()) {
handlePreviewErrors(response, apiMethodName, displayMessage);
} else {
handlePreviewSuccess(response, apiMethodName, displayMessage);
}
} else if (DemoConstants.SUBMIT_ACTION == Action.Submit) {
if (response.getHasErrors()) {
handleSubmitErrors(response, apiMethodName, displayMessage);
} else {
handleSubmitSuccess(response, apiMethodName, displayMessage);
}
}
}

private void handlePreviewErrors(ConversationsSubmissionResponse response, String apiMethodName, DisplayMessage displayMessage) {
if (response.getFormErrors() != null) {
String formDataReqs = checkFormDataRequirements(response);
Log.d("BVCodeDemo", formDataReqs);
String formErrorMessage = getFormErrorMessage(response.getFormErrors());
displayMessage.onErrorMessage(formErrorMessage);
} else if (response.getErrors() != null) {
String genericBvErrorMessage = getGenericBvErrorMessage(response.getErrors());
displayMessage.onErrorMessage(genericBvErrorMessage);
}
}

private void handlePreviewSuccess(ConversationsSubmissionResponse response, String apiMethodName, DisplayMessage displayMessage) {
String successMessage = String.format("Successful %s preview. Resubmit with Action.SUBMIT to complete.", apiMethodName);
displayMessage.onSuccessMessage(successMessage);
}

private void handleSubmitErrors(ConversationsSubmissionResponse response, String apiMethodName, DisplayMessage displayMessage) {
if (response.getFormErrors() != null) {
String formErrorMessage = getFormErrorMessage(response.getFormErrors());
displayMessage.onErrorMessage(formErrorMessage);
} else if (response.getErrors() != null) {
String genericBvErrorMessage = getGenericBvErrorMessage(response.getErrors());
displayMessage.onErrorMessage(genericBvErrorMessage);
return "Preview was successful. Now run with Action.Submit to complete";
} else {
return "Submitted review successfully";
}
}

private void handleSubmitSuccess(ConversationsSubmissionResponse response, String apiMethodName, DisplayMessage displayMessage) {
String successMessage = String.format("Successful %s submission.", apiMethodName);
displayMessage.onSuccessMessage(successMessage);
}

private String getFormErrorMessage(FormError formErrors) {
StringBuilder formErrorMessage = new StringBuilder("Response has the following form errors. Make sure to parse them from response.getFormData() and add them to your request.\n\n");
for (Map.Entry<String, FieldError> formErrorEntry : formErrors.getFieldErrorMap().entrySet()) {
formErrorMessage.append("key: ").append(formErrorEntry.getKey()).append("\n");
formErrorMessage.append("value: ").append(formErrorEntry.getValue().getMessage());
formErrorMessage.append("\n\n");
}
return formErrorMessage.toString();
}

private String getGenericBvErrorMessage(List<Error> errors) {
StringBuilder genericBvErrorMessage = new StringBuilder("Response has the following errors.\n\n");
for (com.bazaarvoice.bvandroidsdk.Error error : errors) {
genericBvErrorMessage.append("code: ").append(error.getCode());
genericBvErrorMessage.append("message: ").append(error.getMessage());
genericBvErrorMessage.append("\n\n");
public String getSubmissionErrorMessage(ConversationsSubmissionException exception) {
StringBuilder stringBuilder = new StringBuilder();
boolean first = true;
for (Error error : exception.getErrors()) {
if (!first) {
stringBuilder.append("; ");
}
first = false;
stringBuilder
.append("code: ").append(error.getCode()).append(", ")
.append("message: ").append(error.getMessage());
}
return genericBvErrorMessage.toString();
}

private String checkFormDataRequirements(ConversationsSubmissionResponse response) {
StringBuilder formFieldsStr = new StringBuilder("The required and optional form fields for this are:\n\n");
FormData formData = response.getFormData();
Map<String, FormField> formFieldMap = formData.getFormFieldMap();
for (Map.Entry<String, FormField> formFieldEntry : formFieldMap.entrySet()) {
String formKey = formFieldEntry.getKey();
FormField formField = formFieldEntry.getValue();
boolean isRequired = formField.isRequired();
formFieldsStr.append("key: ").append(formKey).append("\n");
formFieldsStr.append("isRequired: ").append(isRequired);
formFieldsStr.append("\n\n");
for (FieldError fieldError : exception.getFieldErrors()) {
if (!first) {
stringBuilder.append("; ");
}
first = false;
stringBuilder
.append("code: ").append(fieldError.getCode()).append(", ")
.append("message: ").append(fieldError.getMessage());
}
return formFieldsStr.toString();
return stringBuilder.toString();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
Expand All @@ -11,8 +12,8 @@

import com.bazaarvoice.bvandroidsdk.Action;
import com.bazaarvoice.bvandroidsdk.BVConversationsClient;
import com.bazaarvoice.bvandroidsdk.BazaarException;
import com.bazaarvoice.bvandroidsdk.ConversationsCallback;
import com.bazaarvoice.bvandroidsdk.ConversationsSubmissionCallback;
import com.bazaarvoice.bvandroidsdk.ConversationsSubmissionException;
import com.bazaarvoice.bvandroidsdk.StoreNotificationManager;
import com.bazaarvoice.bvandroidsdk.StoreReviewSubmissionRequest;
import com.bazaarvoice.bvandroidsdk.StoreReviewSubmissionResponse;
Expand Down Expand Up @@ -174,16 +175,15 @@ public void onClick(View v) {
.addPhoto(localImageFile, "What a cute pupper!")
.build();

client.prepareCall(submission).loadAsync(new ConversationsCallback<StoreReviewSubmissionResponse>() {

client.prepareCall(submission).loadAsync(new ConversationsSubmissionCallback<StoreReviewSubmissionResponse>() {
@Override
public void onSuccess(StoreReviewSubmissionResponse response) {
public void onSuccess(@NonNull StoreReviewSubmissionResponse response) {
progress.dismiss();
showDialogWithMessage("Successful review submission.");
}

@Override
public void onFailure(BazaarException exception) {
public void onFailure(@NonNull ConversationsSubmissionException exception) {
progress.dismiss();
showDialogWithMessage(exception.getMessage());
}
Expand Down
Loading

0 comments on commit b1f3c1c

Please sign in to comment.