diff --git a/data-prepper-plugins/saas-source-plugins/jira-source/src/main/java/org/opensearch/dataprepper/plugins/source/jira/JiraItemInfo.java b/data-prepper-plugins/saas-source-plugins/jira-source/src/main/java/org/opensearch/dataprepper/plugins/source/jira/JiraItemInfo.java index 9c77c43527..25bc042b8c 100644 --- a/data-prepper-plugins/saas-source-plugins/jira-source/src/main/java/org/opensearch/dataprepper/plugins/source/jira/JiraItemInfo.java +++ b/data-prepper-plugins/saas-source-plugins/jira-source/src/main/java/org/opensearch/dataprepper/plugins/source/jira/JiraItemInfo.java @@ -8,21 +8,13 @@ import org.opensearch.dataprepper.plugins.source.source_crawler.model.ItemInfo; import java.time.Instant; -import java.time.OffsetDateTime; -import java.time.format.DateTimeFormatter; -import java.util.Date; import java.util.HashMap; import java.util.Map; -import java.util.Objects; import java.util.UUID; -import java.util.regex.Pattern; import static org.opensearch.dataprepper.plugins.source.jira.JiraService.CONTENT_TYPE; import static org.opensearch.dataprepper.plugins.source.jira.utils.Constants.CREATED; import static org.opensearch.dataprepper.plugins.source.jira.utils.Constants.ISSUE_KEY; -import static org.opensearch.dataprepper.plugins.source.jira.utils.Constants.KEY; -import static org.opensearch.dataprepper.plugins.source.jira.utils.Constants.NAME; -import static org.opensearch.dataprepper.plugins.source.jira.utils.Constants.PROJECT; import static org.opensearch.dataprepper.plugins.source.jira.utils.Constants.PROJECT_KEY; import static org.opensearch.dataprepper.plugins.source.jira.utils.Constants.PROJECT_NAME; import static org.opensearch.dataprepper.plugins.source.jira.utils.Constants.UPDATED; @@ -127,47 +119,18 @@ public JiraItemInfoBuilder withIssueType(String issueType) { public JiraItemInfoBuilder withIssueBean(IssueBean issue) { Map issueMetadata = new HashMap<>(); - if (Objects.nonNull(((Map) issue.getFields().get(PROJECT)).get(KEY))) { - issueMetadata.put(PROJECT_KEY, ((Map) issue.getFields().get(PROJECT)).get(KEY).toString()); - this.project = ((Map) issue.getFields().get(PROJECT)).get(KEY).toString(); - } - - if (Objects.nonNull(((Map) issue.getFields().get(PROJECT)).get(NAME))) { - issueMetadata.put(PROJECT_NAME, ((Map) issue.getFields().get(PROJECT)).get(NAME).toString()); - } - - long created = 0; - Pattern JiraDateTimePattern = Pattern.compile( - "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}[-+]\\d{4}$"); - DateTimeFormatter offsetDateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); - if (Objects.nonNull(issue.getFields().get(CREATED)) && JiraDateTimePattern.matcher(issue.getFields().get(CREATED) - .toString()).matches()) { - String charSequence = issue.getFields().get(CREATED).toString(); - OffsetDateTime offsetDateTime = OffsetDateTime.parse(charSequence, offsetDateTimeFormatter); - new Date(offsetDateTime.toInstant().toEpochMilli()); - created = offsetDateTime.toEpochSecond() * 1000; - } - issueMetadata.put(CREATED, String.valueOf(created)); - - long updated = 0; - if (JiraDateTimePattern.matcher(issue.getFields().get(UPDATED).toString()).matches()) { - String charSequence = issue.getFields().get(UPDATED).toString(); - OffsetDateTime offsetDateTime = OffsetDateTime.parse(charSequence, offsetDateTimeFormatter); - new Date(offsetDateTime.toInstant().toEpochMilli()); - updated = offsetDateTime.toEpochSecond() * 1000; - } - issueMetadata.put(UPDATED, String.valueOf(updated)); - + issueMetadata.put(PROJECT_KEY, issue.getProject()); + issueMetadata.put(PROJECT_NAME, issue.getProjectName()); + issueMetadata.put(CREATED, issue.getCreatedTimeMillis()); + issueMetadata.put(UPDATED, issue.getUpdatedTimeMillis()); issueMetadata.put(ISSUE_KEY, issue.getKey()); - this.id = issue.getKey(); - issueMetadata.put(CONTENT_TYPE, JiraContentType.ISSUE.getType()); - this.issueType = JiraContentType.ISSUE.getType(); + this.project = issue.getProject(); + this.id = issue.getKey(); + this.issueType = JiraContentType.ISSUE.getType(); this.itemId = _ISSUE + issueMetadata.get(PROJECT_KEY) + "-" + issue.getKey(); - this.metadata = issueMetadata; - return this; } } diff --git a/data-prepper-plugins/saas-source-plugins/jira-source/src/main/java/org/opensearch/dataprepper/plugins/source/jira/models/IssueBean.java b/data-prepper-plugins/saas-source-plugins/jira-source/src/main/java/org/opensearch/dataprepper/plugins/source/jira/models/IssueBean.java index dbcd65b1bb..f644814af2 100644 --- a/data-prepper-plugins/saas-source-plugins/jira-source/src/main/java/org/opensearch/dataprepper/plugins/source/jira/models/IssueBean.java +++ b/data-prepper-plugins/saas-source-plugins/jira-source/src/main/java/org/opensearch/dataprepper/plugins/source/jira/models/IssueBean.java @@ -1,50 +1,124 @@ package org.opensearch.dataprepper.plugins.source.jira.models; +import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Getter; import lombok.Setter; +import java.time.OffsetDateTime; +import java.time.format.DateTimeFormatter; +import java.util.Date; import java.util.Map; +import java.util.Objects; +import java.util.regex.Pattern; + +import static org.opensearch.dataprepper.plugins.source.jira.utils.Constants.CREATED; +import static org.opensearch.dataprepper.plugins.source.jira.utils.Constants.KEY; +import static org.opensearch.dataprepper.plugins.source.jira.utils.Constants.NAME; +import static org.opensearch.dataprepper.plugins.source.jira.utils.Constants.PROJECT; +import static org.opensearch.dataprepper.plugins.source.jira.utils.Constants.UPDATED; -@Getter -@Setter public class IssueBean { + @JsonIgnore + private final Pattern JiraDateTimePattern = Pattern.compile( + "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}[-+]\\d{4}$"); + @JsonIgnore + private final DateTimeFormatter offsetDateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); + /** * Expand options that include additional issue details in the response. */ + @Getter + @Setter @JsonProperty("expand") private String expand = null; /** * The ID of the issue. */ + @Getter + @Setter @JsonProperty("id") private String id = null; /** * The URL of the issue details. */ + @Getter + @Setter @JsonProperty("self") private String self = null; /** * The key of the issue. */ + @Getter + @Setter @JsonProperty("key") private String key = null; + @Getter + @Setter @JsonProperty("renderedFields") private Map renderedFields = null; + @Getter + @Setter @JsonProperty("properties") private Map properties = null; + @Getter + @Setter @JsonProperty("names") private Map names = null; + @Getter + @Setter @JsonProperty("fields") private Map fields = null; + + @JsonIgnore + public String getProject() { + if (fields != null && Objects.nonNull(((Map) fields.get(PROJECT)).get(KEY))) { + return ((Map) fields.get(PROJECT)).get(KEY).toString(); + } + return null; + } + + @JsonIgnore + public String getProjectName() { + if (fields != null && Objects.nonNull(((Map) fields.get(PROJECT)).get(NAME))) { + ((Map) fields.get(PROJECT)).get(NAME).toString(); + } + return null; + } + + @JsonIgnore + public long getCreatedTimeMillis() { + return getGivenDateField(CREATED); + } + + @JsonIgnore + public long getUpdatedTimeMillis() { + return getGivenDateField(UPDATED); + } + + @JsonIgnore + private long getGivenDateField(String dateTimeFieldToPull) { + long dateTimeField = 0; + + if (fields != null && Objects.nonNull(fields.get(dateTimeFieldToPull)) && JiraDateTimePattern.matcher(fields.get(dateTimeFieldToPull) + .toString()).matches()) { + String charSequence = fields.get(dateTimeFieldToPull).toString(); + OffsetDateTime offsetDateTime = OffsetDateTime.parse(charSequence, offsetDateTimeFormatter); + new Date(offsetDateTime.toInstant().toEpochMilli()); + dateTimeField = offsetDateTime.toEpochSecond() * 1000; + } + return dateTimeField; + } + + } diff --git a/data-prepper-plugins/saas-source-plugins/jira-source/src/main/java/org/opensearch/dataprepper/plugins/source/jira/rest/auth/JiraOauthConfig.java b/data-prepper-plugins/saas-source-plugins/jira-source/src/main/java/org/opensearch/dataprepper/plugins/source/jira/rest/auth/JiraOauthConfig.java index aed6439e6c..620db899a3 100644 --- a/data-prepper-plugins/saas-source-plugins/jira-source/src/main/java/org/opensearch/dataprepper/plugins/source/jira/rest/auth/JiraOauthConfig.java +++ b/data-prepper-plugins/saas-source-plugins/jira-source/src/main/java/org/opensearch/dataprepper/plugins/source/jira/rest/auth/JiraOauthConfig.java @@ -50,7 +50,6 @@ public class JiraOauthConfig implements JiraAuthConfig { private String accessToken; @Getter private String refreshToken; - @Getter private String cloudId = null; public JiraOauthConfig(JiraSourceConfig jiraSourceConfig) {