diff --git a/dev/wlp-generateRepositoryContent/src/com/ibm/ws/wlp/repository/esa/EsaDescriptionHtmlGenerator.java b/dev/wlp-generateRepositoryContent/src/com/ibm/ws/wlp/repository/esa/EsaDescriptionHtmlGenerator.java index b7a37a20e91..c0fde35c213 100755 --- a/dev/wlp-generateRepositoryContent/src/com/ibm/ws/wlp/repository/esa/EsaDescriptionHtmlGenerator.java +++ b/dev/wlp-generateRepositoryContent/src/com/ibm/ws/wlp/repository/esa/EsaDescriptionHtmlGenerator.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2015 IBM Corporation and others. + * Copyright (c) 2015, 2025 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at @@ -15,6 +15,10 @@ import java.io.File; import java.io.IOException; import java.nio.file.Files; +import java.util.ArrayList; +import java.util.Collection; +import java.util.LinkedHashSet; +import java.util.List; import java.util.Locale; import org.apache.tools.ant.BuildException; @@ -22,6 +26,7 @@ import com.ibm.ws.kernel.feature.Visibility; import com.ibm.ws.kernel.feature.internal.subsystem.SubsystemFeatureDefinitionImpl; +import com.ibm.ws.kernel.feature.provisioning.FeatureResource; import com.ibm.ws.kernel.feature.provisioning.ProvisioningFeatureDefinition; /** @@ -152,9 +157,44 @@ public String generateDescriptionHtml(ProvisioningFeatureDefinition feature, boo result.append("").append(System.lineSeparator()); } } + List mavenCoordinates = getMavenCoordinates(feature); + if (!mavenCoordinates.isEmpty()) { + result.append("

Maven Coordinates

").append(System.lineSeparator()); + result.append("
").append(System.lineSeparator()); + result.append("The following Maven coordinates can be used to access the APIs this feature provides from your Maven build:
").append(System.lineSeparator()); + for (String coordinate : mavenCoordinates) { + String[] parts = coordinate.split(":"); + result.append("<dependency>
").append(System.lineSeparator()); + result.append("  <groupId>").append(parts[0]).append("</groupId>
").append(System.lineSeparator()); + result.append("  <artifactId>").append(parts[1]).append("</artifactId>
").append(System.lineSeparator()); + result.append("  <version>").append(parts[2]).append("</version>
").append(System.lineSeparator()); + result.append("  <scope>provided</scope>
").append(System.lineSeparator()); + result.append("</dependency>

").append(System.lineSeparator()); + } + result.append("
").append(System.lineSeparator()); + } return result.toString(); } + /** + * Returns the distinct Maven coordinates declared on constituents of this feature, + * preserving encounter order and omitting duplicates. + * + * @param feature the feature whose constituents are inspected + * @return ordered, deduplicated list of "groupId:artifactId:version" strings; never null + */ + static List getMavenCoordinates(ProvisioningFeatureDefinition feature) { + Collection constituents = feature.getConstituents(null); + LinkedHashSet seen = new LinkedHashSet<>(); + for (FeatureResource resource : constituents) { + String coordinate = resource.getAttributes().get("mavenCoordinates"); + if (coordinate != null && !coordinate.isEmpty() && coordinate.split(":").length == 3) { + seen.add(coordinate); + } + } + return new ArrayList<>(seen); + } + /** * @param generateKnowledgeCentreLinks the generateKnowledgeCentreLinks to set */