Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import au.org.aodn.ogcapi.server.core.parser.stac.GeometryVisitor;
import au.org.aodn.ogcapi.server.core.util.ConstructUtils;
import au.org.aodn.ogcapi.server.core.util.GeometryUtils;
import au.org.aodn.ogcapi.server.core.util.LinkUtils;
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;
Expand Down Expand Up @@ -116,6 +117,7 @@ default <D extends StacCollectionModel> Collection getCollection(D m, Filter fil
.type(l.getType())
.rel(l.getRel())
.title(l.getTitle())
.description(l.getDescription())
.aiGroup(l.getAiGroup())
)
.toList()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ public class ExtendedLink extends Link {
@JsonProperty("ai:group")
private String aiGroup;

@JsonProperty("description")
private String description;

public ExtendedLink() {
super();
}
Expand All @@ -21,6 +24,11 @@ public ExtendedLink aiGroup(String aiGroup) {
return this;
}

public ExtendedLink description(String description) {
this.description = description;
return this;
}

@Override
public ExtendedLink href(String href) {
super.href(href);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package au.org.aodn.ogcapi.server.core.model;

import au.org.aodn.ogcapi.server.core.util.LinkUtils;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
Expand All @@ -18,4 +19,15 @@ public class LinkModel {

@JsonProperty("ai:group")
protected String aiGroup;

@JsonProperty("description")
protected String description;

public void setTitle(String title) {
String[] parsed = LinkUtils.parseLinkTitleDescription(title);
this.title = parsed[0];
if (this.description == null) {
this.description = parsed[1];
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package au.org.aodn.ogcapi.server.core.util;

public class LinkUtils {
public static String[] parseLinkTitleDescription(String combinedTitle) {
// if combinedTitle is null, return null for both title and description
if (combinedTitle == null) {
return new String[]{null, null};
}
// Otherwise, find the last bracket
int bracketCount = 0;
for (int i = combinedTitle.length() - 1; i >= 0; i--) {
if (combinedTitle.charAt(i) == ']') {
bracketCount++;
} else if (combinedTitle.charAt(i) == '[') {
bracketCount--;
if (bracketCount == 0) {
String title = combinedTitle.substring(0, i).trim();
String description = combinedTitle.substring(i + 1, combinedTitle.length() - 1).trim();
return new String[]{
title,
description.isEmpty() ? null : description
};
}
}
}
// return null description if no matching bracket found
return new String[]{combinedTitle, null};
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -81,13 +81,15 @@ public void verifyAddingPropertyWorks() {
.type("text/html")
.title("Data Link")
.aiGroup("data-access")
.description("description")
.build();
var link2 = LinkModel.builder()
.rel("self")
.href("https://example.com/self")
.type("application/json")
.title("Self Link")
.aiGroup("ai-group")
.description("description")
.build();
var theme = ThemeModel.builder()
.scheme("scheme")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package au.org.aodn.ogcapi.server.core.util;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

public class LinkUtilsTest {
@Test
void testParseLinkTitleDescription_normalCase() {
String[] result = LinkUtils.parseLinkTitleDescription("mnf:adcp_public_data[ADCP data for Southern Surveyor Voyage SS 09/2003]");

assertEquals("mnf:adcp_public_data", result[0]);
assertEquals("ADCP data for Southern Surveyor Voyage SS 09/2003", result[1]);
}

@Test
void testParseLinkTitleDescription_emptyDescription() {
String[] result = LinkUtils.parseLinkTitleDescription("Ocean Radar page on IMOS website[]");

assertEquals("Ocean Radar page on IMOS website", result[0]);
assertNull(result[1]);
}

@Test
void testParseLinkTitleDescription_titleWithBrackets() {
String[] result = LinkUtils.parseLinkTitleDescription("DATA ACCESS - GBR10 benthic habitat type [Geotiff direct download][]");

assertEquals("DATA ACCESS - GBR10 benthic habitat type [Geotiff direct download]", result[0]);
assertNull(result[1]);
}

@Test
void testParseLinkTitleDescription_emptyTitleAndDescription() {
String[] result = LinkUtils.parseLinkTitleDescription(null);

assertNull(result[0]);
assertNull(result[1]);
}

@Test
void testParseLinkTitleDescription_multipleNestedBrackets() {
String[] result = LinkUtils.parseLinkTitleDescription("Title [level1 [level2]] [Final Description]");

assertEquals("Title [level1 [level2]]", result[0]);
assertEquals("Final Description", result[1]);
}

@Test
void testParseLinkTitleDescription_whitespaceOnlyDescription() {
String[] result = LinkUtils.parseLinkTitleDescription("Title[ ]");

assertEquals("Title", result[0]);
assertNull(result[1]);
}
}