package com.azimo.tool.utils.converter; import com.azimo.tool.config.AppConfig; import com.azimo.tool.config.AppConfigKey; import com.azimo.tool.firebase.model.CreatedIssue; import com.azimo.tool.jira.model.Issue; import com.azimo.tool.publisher.collection.ReviewCollection; import com.azimo.tool.publisher.model.AppReview; import com.google.api.services.androidpublisher.model.UserComment; import java.util.ArrayList; import java.util.List; /** * Created by F1sherKK on 11/01/17. */ public class IssueConverter { private static final String GOOGLE_PLAY_REVIEW_BASE_PATH = "https://play.google.com/apps/publish/"; private static final String DEV_ACC_PART = "?dev_acc=%s"; private static final String REVIEW_DETAILS_PLACE = "#ReviewDetailsPlace:p=%s"; private static final String REVIEW_ID = "&reviewid=%s"; private AppConfig config; private TimeConverter timeConverter; public IssueConverter(AppConfig config, TimeConverter timeConverter) { this.config = config; this.timeConverter = timeConverter; } public List<Issue> listFromReviewCollection(ReviewCollection reviewCollection) { List<Issue> issues = new ArrayList<>(); for (int i = 0; i < reviewCollection.size(); i++) { issues.add(issueFromAppReview(reviewCollection.get(i))); } return issues; } public Issue issueFromAppReview(AppReview review) { final String summaryLabel = "[Google Play Store]"; final String timeLabel = "*Date:*"; final String titleLabel = "*Title:*"; final String messageLabel = "*Message:*"; final String authorLabel = "*Author:*"; final String languageLabel = "*Reviewer language:*"; final String appVersionLabel = "*App version:*"; final String starRatingLabel = "*Stars:*"; final String linkLabel = "*Link to review:*"; String author = ""; String reviewId = ""; String time = ""; String starRating = ""; String language = ""; String appVersion = ""; String title = ""; String message = ""; String fullMessage = ""; String jira_summary = ""; Issue issue = new Issue(); issue.setProject(config.get(AppConfigKey.JIRA_PROJECT_NAME)); issue.setIssueType(config.get(AppConfigKey.JIRA_ISSUE_TYPE)); issue.setAssignee(config.get(AppConfigKey.JIRA_ASSIGNEE)); author = review.getAuthorName(); reviewId = review.getReviewId(); UserComment comment = review.getFirstUserComment(); if (comment != null) { time = timeConverter.millisToTimestamp(comment.getLastModified().getSeconds() * 1000); starRating = comment.getStarRating().toString(); language = comment.getReviewerLanguage(); appVersion = comment.getAppVersionCode() != null ? comment.getAppVersionCode().toString() : "not specified"; final String newLineCharacter = "\t"; fullMessage = comment.getText(); if (fullMessage.contains(newLineCharacter)) { int titleIndex = fullMessage.indexOf(newLineCharacter); title = fullMessage.substring(0, titleIndex); message = fullMessage.substring(titleIndex, fullMessage.length()).replaceAll(newLineCharacter, ""); } else { title = ""; message = fullMessage; } } jira_summary = summaryLabel + " " + starRating + "-star review from " + author; issue.setSummary(jira_summary); String jira_description = ""; jira_description += authorLabel + " " + author + "\n"; jira_description += timeLabel + " " + time + "\n"; jira_description += starRatingLabel + " " + starRating + "\n"; jira_description += "\n"; jira_description += languageLabel + " " + language + "\n"; jira_description += appVersionLabel + " " + appVersion + "\n"; jira_description += "\n"; jira_description += titleLabel + " " + title + "\n"; jira_description += messageLabel + " " + message + "\n"; jira_description += "\n"; String reviewUrl = GOOGLE_PLAY_REVIEW_BASE_PATH; if (config.contains(AppConfigKey.GOOGLE_DEV_CONSOLE_ACC)) { reviewUrl += String.format(DEV_ACC_PART, config.get(AppConfigKey.GOOGLE_DEV_CONSOLE_ACC)); } reviewUrl += String.format(REVIEW_DETAILS_PLACE, config.get(AppConfigKey.ANDROID_PACKAGE_NAME)); reviewUrl += String.format(REVIEW_ID, reviewId); jira_description += linkLabel + " " + reviewUrl; issue.setDescription(jira_description); return issue; } public CreatedIssue createdIssueFrom(AppReview review) { CreatedIssue createdIssue = new CreatedIssue(); createdIssue.setCreatedReviewId(review.getReviewId()); if (review.getFirstUserComment() != null) { createdIssue.setCreatedReviewTime(review.getFirstUserComment().getLastModified().getSeconds() * 1000); } return createdIssue; } }