Skip to content

Commit 422f08e

Browse files
committed
Include user display name for mapped users
1 parent dc7078c commit 422f08e

File tree

4 files changed

+59
-13
lines changed

4 files changed

+59
-13
lines changed

src/main/java/org/hibernate/infra/replicate/jira/JiraConfig.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,20 @@ interface UserValueMapping extends ValueMapping {
253253
* Jira.
254254
*/
255255
Optional<String> notMappedAssignee();
256+
257+
/**
258+
* Allows specifying an URL template that will be passed exactly 1 argument
259+
* (mapped user value). E.g. a template can look like
260+
* {@code https://my-jira-server/secure/ViewProfile.jspa?name={arg1}}, where
261+
* {@code arg1} is the mapped user value from {@link #mapping()}. If not
262+
* specified the link to the upstream profile will be created with a template of
263+
* {@code https://my-upstream-jira-server/jira/people/{arg1}}, where
264+
* {@code arg1} is the original user id i.e. the {@link #mapping() mapping key}.
265+
* <p>
266+
* Note, this profile URL only applies to the profiles that have a defined
267+
* {@link #mapping() mapping}.
268+
*/
269+
Optional<String> profileUrl();
256270
}
257271

258272
/**

src/main/java/org/hibernate/infra/replicate/jira/service/jira/handler/JiraCommentUpsertEventHandler.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import org.hibernate.infra.replicate.jira.service.jira.model.rest.JiraComment;
99
import org.hibernate.infra.replicate.jira.service.jira.model.rest.JiraComments;
1010
import org.hibernate.infra.replicate.jira.service.jira.model.rest.JiraIssue;
11-
import org.hibernate.infra.replicate.jira.service.jira.model.rest.JiraTextContent;
1211
import org.hibernate.infra.replicate.jira.service.reporting.ReportingConfig;
1312

1413
public class JiraCommentUpsertEventHandler extends JiraCommentEventHandler {
@@ -57,12 +56,12 @@ private JiraComment prepareComment(JiraIssue issue, JiraComment source) {
5756

5857
private String prepareCommentQuote(JiraIssue issue, JiraComment comment) {
5958
URI jiraCommentUri = createJiraCommentUri(issue, comment);
60-
URI jiraUserUri = createJiraUserUri(comment.self, comment.author);
59+
UserData userData = userData(comment.self, comment.author, "the user %s");
6160
String content = """
62-
{quote}This [comment|%s] was posted by the [user %s|%s].{quote}
61+
{quote}This [comment|%s] was posted by [%s|%s].{quote}
6362
6463
65-
""".formatted(jiraCommentUri, JiraTextContent.userIdPart(comment.author), jiraUserUri);
64+
""".formatted(jiraCommentUri, userData.name(), userData.uri());
6665
return truncateContent(content);
6766
}
6867

src/main/java/org/hibernate/infra/replicate/jira/service/jira/handler/JiraEventHandler.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import org.hibernate.infra.replicate.jira.service.jira.model.rest.JiraComment;
1313
import org.hibernate.infra.replicate.jira.service.jira.model.rest.JiraIssue;
1414
import org.hibernate.infra.replicate.jira.service.jira.model.rest.JiraSimpleObject;
15+
import org.hibernate.infra.replicate.jira.service.jira.model.rest.JiraTextContent;
1516
import org.hibernate.infra.replicate.jira.service.jira.model.rest.JiraUser;
1617
import org.hibernate.infra.replicate.jira.service.reporting.FailureCollector;
1718
import org.hibernate.infra.replicate.jira.service.reporting.ReportingConfig;
@@ -133,6 +134,38 @@ protected Optional<String> user(JiraUser sourceUser) {
133134
userId -> context.projectGroup().users().mapping().get(sourceUser.accountId)));
134135
}
135136

137+
protected UserData userData(URI someUpstreamUri, JiraUser user) {
138+
return userData(someUpstreamUri, user, "user %s");
139+
}
140+
141+
protected UserData userData(URI someUpstreamUri, JiraUser user, String unmappedUserPattern) {
142+
if (user == null) {
143+
return null;
144+
}
145+
Optional<String> mappedUser = user(user);
146+
URI jiraUserUri;
147+
String userName;
148+
if (mappedUser.isPresent()) {
149+
// means it is one of the users that we've mapped so we would want to point it
150+
// to the user on the "downstream" side and also add a name:
151+
Optional<String> template = context.projectGroup().users().profileUrl();
152+
if (template.isPresent()) {
153+
jiraUserUri = UriBuilder.fromUri(template.get()).build(mappedUser.get());
154+
} else {
155+
jiraUserUri = createJiraUserUri(someUpstreamUri, user);
156+
}
157+
// NOTE: we are using the upstream username here, so that we do not make an
158+
// extra call to get the downstream name. We probably can do that once at the
159+
// start and cache it, but for now this should be a "good-enough-approximation".
160+
userName = user.displayName;
161+
162+
} else {
163+
jiraUserUri = createJiraUserUri(someUpstreamUri, user);
164+
userName = unmappedUserPattern.formatted(JiraTextContent.userIdPart(user));
165+
}
166+
return new UserData(userName, jiraUserUri);
167+
}
168+
136169
private static Map<String, String> createMapping(List<JiraSimpleObject> source,
137170
List<JiraSimpleObject> destination) {
138171
Map<String, String> mapping = new HashMap<>();
@@ -189,4 +222,7 @@ protected String toDestinationKey(String key) {
189222
}
190223

191224
public abstract String toString();
225+
226+
protected record UserData(String name, URI uri) {
227+
}
192228
}

src/main/java/org/hibernate/infra/replicate/jira/service/jira/handler/JiraIssueAbstractEventHandler.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import org.hibernate.infra.replicate.jira.service.jira.model.rest.JiraIssueLink;
1414
import org.hibernate.infra.replicate.jira.service.jira.model.rest.JiraRemoteLink;
1515
import org.hibernate.infra.replicate.jira.service.jira.model.rest.JiraSimpleObject;
16-
import org.hibernate.infra.replicate.jira.service.jira.model.rest.JiraTextContent;
1716
import org.hibernate.infra.replicate.jira.service.jira.model.rest.JiraTransition;
1817
import org.hibernate.infra.replicate.jira.service.jira.model.rest.JiraUser;
1918
import org.hibernate.infra.replicate.jira.service.reporting.ReportingConfig;
@@ -161,8 +160,10 @@ protected Optional<JiraIssueLink> prepareParentLink(String destinationKey, JiraI
161160

162161
private String prepareDescriptionQuote(JiraIssue issue) {
163162
URI issueUri = createJiraIssueUri(issue);
164-
URI reporterUri = createJiraUserUri(issue.self, issue.fields.reporter);
165-
URI assigneeUri = createJiraUserUri(issue.self, issue.fields.assignee);
163+
164+
UserData assignee = userData(issue.self, issue.fields.assignee);
165+
UserData reporter = userData(issue.self, issue.fields.reporter);
166+
166167
return """
167168
{quote}This issue is created as a copy of [%s|%s].
168169
@@ -172,12 +173,8 @@ private String prepareDescriptionQuote(JiraIssue issue) {
172173
173174
174175
""".formatted(issue.key, issueUri,
175-
assigneeUri == null
176-
? " Unassigned"
177-
: "[user %s|%s]".formatted(JiraTextContent.userIdPart(issue.fields.assignee), assigneeUri),
178-
reporterUri == null
179-
? " Unknown"
180-
: "[user %s|%s]".formatted(JiraTextContent.userIdPart(issue.fields.reporter), reporterUri));
176+
assignee == null ? " Unassigned" : "[%s|%s]".formatted(assignee.name(), assignee.uri()),
177+
reporter == null ? " Unknown" : "[%s|%s]".formatted(reporter.name(), reporter.uri()));
181178
}
182179

183180
}

0 commit comments

Comments
 (0)