From 0ccffba53b87917a5697836241a38f22a7cb3fec Mon Sep 17 00:00:00 2001 From: Simon Brown Date: Thu, 28 Dec 2023 12:23:04 +0000 Subject: [PATCH] Adds support for inter-workspace URLs of the form `{workspace:123456}/diagrams`. --- docs/changelog.md | 1 + .../src/com/structurizr/model/ModelItem.java | 4 +++- .../src/com/structurizr/util/Url.java | 3 ++- .../com/structurizr/model/ModelItemTests.java | 16 +++++++++++++++- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/docs/changelog.md b/docs/changelog.md index 7e2e1a92..e02d8083 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -3,6 +3,7 @@ ## 1.29.0 (unreleased) - Adds `com.structurizr.api.AdminApiClient` as a client for the cloud service/on-premises admin APIs. +- Adds support for inter-workspace URLs of the form `{workspace:123456}/diagrams`. ## 1.28.1 (11th December 2023) diff --git a/structurizr-core/src/com/structurizr/model/ModelItem.java b/structurizr-core/src/com/structurizr/model/ModelItem.java index ac81b391..2be654cd 100644 --- a/structurizr-core/src/com/structurizr/model/ModelItem.java +++ b/structurizr-core/src/com/structurizr/model/ModelItem.java @@ -123,7 +123,9 @@ public void setUrl(String url) { if (StringUtils.isNullOrEmpty(url)) { this.url = null; } else { - if (url.startsWith(Url.WORKSPACE_URL_PREFIX)) { + if (url.startsWith(Url.INTRA_WORKSPACE_URL_PREFIX)) { + this.url = url; + } else if (url.matches(Url.INTER_WORKSPACE_URL_REGEX)) { this.url = url; } else if (Url.isUrl(url)) { this.url = url; diff --git a/structurizr-core/src/com/structurizr/util/Url.java b/structurizr-core/src/com/structurizr/util/Url.java index 49e69ab8..adf0989a 100644 --- a/structurizr-core/src/com/structurizr/util/Url.java +++ b/structurizr-core/src/com/structurizr/util/Url.java @@ -8,7 +8,8 @@ */ public class Url { - public static final String WORKSPACE_URL_PREFIX = "{workspace}"; + public static final String INTRA_WORKSPACE_URL_PREFIX = "{workspace}"; + public static final String INTER_WORKSPACE_URL_REGEX = "\\{workspace:\\d+\\}.*"; /** * Determines whether the supplied string is a valid URL. diff --git a/structurizr-core/test/unit/com/structurizr/model/ModelItemTests.java b/structurizr-core/test/unit/com/structurizr/model/ModelItemTests.java index 9cb5565f..783a1c54 100644 --- a/structurizr-core/test/unit/com/structurizr/model/ModelItemTests.java +++ b/structurizr-core/test/unit/com/structurizr/model/ModelItemTests.java @@ -234,10 +234,24 @@ void setUrl_AcceptsAUrl() { } @Test - void setUrl_AcceptsAWorkspaceUrl() { + void setUrl_AcceptsAnIntraWorkspaceUrl() { Element element = model.addSoftwareSystem("Name"); element.setUrl("{workspace}/diagrams#key"); assertEquals("{workspace}/diagrams#key", element.getUrl()); } + @Test + void setUrl_AcceptsAnInterWorkspaceUrl() { + Element element = model.addSoftwareSystem("Name"); + + element.setUrl("{workspace:123456}"); + assertEquals("{workspace:123456}", element.getUrl()); + + element.setUrl("{workspace:123456}/diagrams#key"); + assertEquals("{workspace:123456}/diagrams#key", element.getUrl()); + + element.setUrl("{workspace:123456}/documentation"); + assertEquals("{workspace:123456}/documentation", element.getUrl()); + } + } \ No newline at end of file