From 39a60ba8743f6122d62fbe9f8fa37dfb52940155 Mon Sep 17 00:00:00 2001 From: Benjamin Gaidioz Date: Mon, 25 Nov 2024 10:41:59 +0100 Subject: [PATCH] RD-15160: Add e-mail addresses (creator and assignee) to the issues table (#11) Also: * Added quotes to filter values to protect from spaces, '@', * Fixed a bit the phrasing in the field descriptions. --- .../DASJiraIssueTransformationTable.java | 12 ++++++++++ .../jira/tables/DASJiraJqlQueryBuilder.java | 7 +++--- .../definitions/DASJiraBacklogIssueTable.java | 12 ++++++++++ .../tables/definitions/DASJiraIssueTable.java | 23 +++++++++++++++---- .../tables/DASJiraJqlQueryBuilderTest.java | 4 ++-- 5 files changed, 48 insertions(+), 10 deletions(-) diff --git a/das-jira-connector/src/main/java/com/rawlabs/das/jira/tables/DASJiraIssueTransformationTable.java b/das-jira-connector/src/main/java/com/rawlabs/das/jira/tables/DASJiraIssueTransformationTable.java index 8c53903..0353752 100644 --- a/das-jira-connector/src/main/java/com/rawlabs/das/jira/tables/DASJiraIssueTransformationTable.java +++ b/das-jira-connector/src/main/java/com/rawlabs/das/jira/tables/DASJiraIssueTransformationTable.java @@ -40,6 +40,12 @@ protected void processFields( assignee.map(a -> a.get("accountId")).orElse(null), columns); + addToRow( + "assignee_email_address", + rowBuilder, + assignee.map(a -> a.get("emailAddress")).orElse(null), + columns); + addToRow( "assignee_display_name", rowBuilder, @@ -61,6 +67,12 @@ protected void processFields( creator.map(c -> c.get("accountId")).orElse(null), columns); + addToRow( + "creator_email_address", + rowBuilder, + creator.map(c -> c.get("emailAddress")).orElse(null), + columns); + addToRow( "creator_display_name", rowBuilder, diff --git a/das-jira-connector/src/main/java/com/rawlabs/das/jira/tables/DASJiraJqlQueryBuilder.java b/das-jira-connector/src/main/java/com/rawlabs/das/jira/tables/DASJiraJqlQueryBuilder.java index e2a535c..6a668a7 100644 --- a/das-jira-connector/src/main/java/com/rawlabs/das/jira/tables/DASJiraJqlQueryBuilder.java +++ b/das-jira-connector/src/main/java/com/rawlabs/das/jira/tables/DASJiraJqlQueryBuilder.java @@ -30,18 +30,19 @@ static String mapOperator(Operator operator) { } static String mapValue(Value value) { - return switch (value) { + String s = switch (value) { case Value v when v.hasString() -> v.getString().getV(); case Value v when v.hasTime() -> { OffsetTime time = (OffsetTime) extractValueFactory.extractValue(value); - yield "\"" + time.format(formatter) + "\""; + yield time.format(formatter); } case Value v when (v.hasTimestamp() || v.hasDate()) -> { OffsetDateTime time = (OffsetDateTime) extractValueFactory.extractValue(value); - yield "\"" + time.format(formatter) + "\""; + yield time.format(formatter); } default -> throw new IllegalArgumentException("Unexpected value: " + value); }; + return "\"" + s + "\""; } private static String getIssueJqlKey(String columnName) { diff --git a/das-jira-connector/src/main/java/com/rawlabs/das/jira/tables/definitions/DASJiraBacklogIssueTable.java b/das-jira-connector/src/main/java/com/rawlabs/das/jira/tables/definitions/DASJiraBacklogIssueTable.java index 4aeb4e8..09e6936 100644 --- a/das-jira-connector/src/main/java/com/rawlabs/das/jira/tables/definitions/DASJiraBacklogIssueTable.java +++ b/das-jira-connector/src/main/java/com/rawlabs/das/jira/tables/definitions/DASJiraBacklogIssueTable.java @@ -184,6 +184,12 @@ protected LinkedHashMap buildColumnDefinitions() { "assignee_account_id", "Account Id the user/application that the issue is assigned to work.", createStringType())); + columnDefinitions.put( + "assignee_email_address", + createColumn( + "assignee_email_address", + "The e-mail address of the user or application to whom the issue is assigned", + createStringType())); columnDefinitions.put( "assignee_display_name", createColumn( @@ -199,6 +205,12 @@ protected LinkedHashMap buildColumnDefinitions() { "creator_account_id", "Account Id of the user/application that created the issue.", createStringType())); + columnDefinitions.put( + "creator_email_address", + createColumn( + "creator_email_address", + "The e-mail address of the user/application that created the issue", + createStringType())); columnDefinitions.put( "creator_display_name", createColumn( diff --git a/das-jira-connector/src/main/java/com/rawlabs/das/jira/tables/definitions/DASJiraIssueTable.java b/das-jira-connector/src/main/java/com/rawlabs/das/jira/tables/definitions/DASJiraIssueTable.java index da285e1..5c29a89 100644 --- a/das-jira-connector/src/main/java/com/rawlabs/das/jira/tables/definitions/DASJiraIssueTable.java +++ b/das-jira-connector/src/main/java/com/rawlabs/das/jira/tables/definitions/DASJiraIssueTable.java @@ -88,9 +88,10 @@ public Row next() { @Override public DASJiraPage fetchPage(long offset) { try { + String jql = DASJiraJqlQueryBuilder.buildJqlQuery(quals); var result = issueSearchApi.searchForIssuesUsingJql( - DASJiraJqlQueryBuilder.buildJqlQuery(quals), + jql, Math.toIntExact(offset), withMaxResultOrLimit(limit), null, @@ -214,25 +215,37 @@ protected LinkedHashMap buildColumnDefinitions() { "assignee_account_id", createColumn( "assignee_account_id", - "Account Id the user/application that the issue is assigned to work", + "The account ID of the user or application to whom the issue is assigned", + createStringType())); + columns.put( + "assignee_email_address", + createColumn( + "assignee_email_address", + "The e-mail address of the user or application to whom the issue is assigned", createStringType())); columns.put( "assignee_display_name", createColumn( "assignee_display_name", - "Display name the user/application that the issue is assigned to work", + "The display name of the user or application to whom the issue is assigned", createStringType())); columns.put( "creator_account_id", createColumn( "creator_account_id", - "Account Id of the user/application that created the issue", + "The account ID of the user/application that created the issue", + createStringType())); + columns.put( + "creator_email_address", + createColumn( + "creator_email_address", + "The e-mail address of the user/application that created the issue", createStringType())); columns.put( "creator_display_name", createColumn( "creator_display_name", - "Display name of the user/application that created the issue", + "The display name of the user/application that created the issue", createStringType())); columns.put( "created", diff --git a/das-jira-connector/src/test/java/com/rawlabs/das/jira/tables/DASJiraJqlQueryBuilderTest.java b/das-jira-connector/src/test/java/com/rawlabs/das/jira/tables/DASJiraJqlQueryBuilderTest.java index 79a6377..0b549c0 100644 --- a/das-jira-connector/src/test/java/com/rawlabs/das/jira/tables/DASJiraJqlQueryBuilderTest.java +++ b/das-jira-connector/src/test/java/com/rawlabs/das/jira/tables/DASJiraJqlQueryBuilderTest.java @@ -34,7 +34,7 @@ public void shouldMapValues() { valueFactory.createValue( new ValueTypeTuple("2021-01-01T00:00:00Z", createTimestampType()))); - assertEquals("DAS", string); + assertEquals("\"DAS\"", string); assertEquals("\"2021-01-01 00:00\"", timestamp); assertThrows( IllegalArgumentException.class, @@ -80,6 +80,6 @@ public void shouldGenerateJqlQuery() { "due_date"))); assertEquals( - "summary = DAS AND created >= \"2021-01-01 00:00\" AND due <= \"2021-01-01 00:00\"", result); + "summary = \"DAS\" AND created >= \"2021-01-01 00:00\" AND due <= \"2021-01-01 00:00\"", result); } }