Skip to content

Commit 305fdc0

Browse files
committed
Adapt to syncing to the cloud instance
1 parent b2bc64d commit 305fdc0

File tree

6 files changed

+32
-12
lines changed

6 files changed

+32
-12
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,13 @@ interface IssueLinkTypeValueMapping extends ValueMapping {
290290
* {@code "globalId": "appId=5e7d6222-8225-3bcd-be58-5fe3980b0fae&issueId=65806"}
291291
*/
292292
Optional<String> applicationIdForRemoteLinkType();
293+
294+
/**
295+
* @return the appId to be used to create a globalId for a remote link, e.g.:
296+
* Jira Cloud has the format:
297+
* {@code "globalId": "system=http://www.mycompany.com/support&id=1"}
298+
*/
299+
Optional<String> systemForRemoteLinkType();
293300
}
294301

295302
interface IssueTypeValueMapping extends ValueMapping {

src/main/java/org/hibernate/infra/replicate/jira/service/jira/HandlerProjectContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ public AtomicLong currentIssueKeyNumber() {
7272
public Long getLargestSyncedJiraIssueKeyNumber() {
7373
JiraIssues issues = projectGroupContext.destinationJiraClient()
7474
.find("project = %s and summary !~\"%s\" ORDER BY key DESC".formatted(project.projectId(),
75-
SYNC_ISSUE_PLACEHOLDER_SUMMARY), 0, 1);
75+
SYNC_ISSUE_PLACEHOLDER_SUMMARY), null, 1, List.of("key"));
7676
if (issues.issues.isEmpty()) {
7777
return 0L;
7878
} else {
@@ -100,7 +100,7 @@ public Optional<JiraIssue> getNextIssueToSync(Long latestSyncedJiraIssueKeyNumbe
100100
private Long getCurrentLatestJiraIssueKeyNumber() {
101101
try {
102102
JiraIssues issues = projectGroupContext.destinationJiraClient()
103-
.find("project = %s ORDER BY created DESC".formatted(project.projectId()), 0, 1);
103+
.find("project = %s ORDER BY created DESC".formatted(project.projectId()), null, 1, List.of("key"));
104104
if (issues.issues.isEmpty()) {
105105
return 0L;
106106
} else {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import jakarta.ws.rs.core.UriBuilder;
2222

2323
public abstract class JiraEventHandler implements Runnable {
24-
protected static final int MAX_CONTENT_SIZE = 65_535;
24+
protected static final int MAX_CONTENT_SIZE = 32_766;
2525

2626
protected final Long objectId;
2727
protected final FailureCollector failureCollector;

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -94,17 +94,15 @@ protected JiraRemoteLink remoteSelfLink(JiraIssue sourceIssue) {
9494
// And if the appid/names are available then we can make it also look as if it
9595
// is not a remote link:
9696

97-
Optional<String> appId = context.projectGroup().issueLinkTypes().applicationIdForRemoteLinkType();
98-
link.globalId = appId.map(s -> "appId=%s&issueId=%s".formatted(s, sourceIssue.id))
99-
.orElseGet(jiraLink::toString);
97+
Optional<String> formattedId = JiraRemoteLink.createGlobalId(context.projectGroup().issueLinkTypes(),
98+
sourceIssue.key);
99+
link.globalId = formattedId.orElseGet(jiraLink::toString);
100100

101101
link.relationship = "Upstream issue";
102102
link.object.title = sourceIssue.key;
103103
link.object.url = jiraLink;
104104
link.object.summary = "Link to an upstream JIRA issue, from which this one was cloned.";
105105

106-
Optional<String> applicationName = context.projectGroup().issueLinkTypes().applicationNameForRemoteLinkType();
107-
link.application = applicationName.map(JiraRemoteLink.Application::new).orElse(null);
108106
return link;
109107
}
110108

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,13 +86,13 @@ private void createAsRemoteLink(JiraIssueLink sourceLink, String linkedIssueKey,
8686
Optional<String> appId = context.projectGroup().issueLinkTypes().applicationIdForRemoteLinkType();
8787
link.globalId = appId.map(s -> "appId=%s&issueId=%s".formatted(s, linkedIssueId))
8888
.orElseGet(() -> sourceLink.self.toString());
89+
Optional<String> formattedId = JiraRemoteLink.createGlobalId(context.projectGroup().issueLinkTypes(),
90+
linkedIssueKey);
91+
link.globalId = formattedId.orElseGet(jiraLink::toString);
92+
8993
link.relationship = sourceLink.type.name;
9094
link.object.title = linkedIssueKey;
9195
link.object.url = jiraLink;
92-
93-
Optional<String> applicationName = context.projectGroup().issueLinkTypes().applicationNameForRemoteLinkType();
94-
link.application = applicationName.map(JiraRemoteLink.Application::new).orElse(null);
95-
context.destinationJiraClient().upsertRemoteLink(currentIssue, link);
9696
}
9797

9898
@Override

src/main/java/org/hibernate/infra/replicate/jira/service/jira/model/rest/JiraRemoteLink.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package org.hibernate.infra.replicate.jira.service.jira.model.rest;
22

33
import java.net.URI;
4+
import java.util.Optional;
45

6+
import org.hibernate.infra.replicate.jira.JiraConfig;
57
import org.hibernate.infra.replicate.jira.service.jira.model.JiraBaseObject;
68

79
public class JiraRemoteLink extends JiraBaseObject {
@@ -11,6 +13,19 @@ public class JiraRemoteLink extends JiraBaseObject {
1113
public LinkObject object = new LinkObject();
1214
public Application application;
1315

16+
public static Optional<String> createGlobalId(JiraConfig.IssueLinkTypeValueMapping issueLinkTypeValueMapping,
17+
String sourceIssue) {
18+
Optional<String> appId = issueLinkTypeValueMapping.applicationIdForRemoteLinkType();
19+
if (appId.isPresent()) {
20+
return appId.map(s -> "appId=%s&issueId=%s".formatted(s, sourceIssue));
21+
}
22+
Optional<String> system = issueLinkTypeValueMapping.systemForRemoteLinkType();
23+
if (system.isPresent()) {
24+
return system.map(s -> "system=%s&id=%s".formatted(s, sourceIssue));
25+
}
26+
return Optional.empty();
27+
}
28+
1429
@Override
1530
public String toString() {
1631
return "JiraRemoteLink{" + "globalId='" + globalId + '\'' + ", self=" + self + ", relationship='" + relationship

0 commit comments

Comments
 (0)