-
Notifications
You must be signed in to change notification settings - Fork 152
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat(rest): Add project export for linked packages.
Signed-off-by: Akshit Joshi <[email protected]>
- Loading branch information
1 parent
de15ed5
commit b8aa09d
Showing
12 changed files
with
335 additions
and
31 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
81 changes: 81 additions & 0 deletions
81
libraries/exporters/src/main/java/org/eclipse/sw360/exporter/PackageExporter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
/* | ||
* Copyright Siemens Healthineers GmBH, 2025. Part of the SW360 Portal Project. | ||
* | ||
* This program and the accompanying materials are made | ||
* available under the terms of the Eclipse Public License 2.0 | ||
* which is available at https://www.eclipse.org/legal/epl-2.0/ | ||
* | ||
* SPDX-License-Identifier: EPL-2.0 | ||
*/ | ||
package org.eclipse.sw360.exporter; | ||
|
||
import com.google.common.collect.ImmutableList; | ||
import org.eclipse.sw360.datahandler.thrift.packages.*; | ||
import org.eclipse.sw360.datahandler.thrift.packages.Package; | ||
import org.eclipse.sw360.datahandler.thrift.components.ComponentService; | ||
import org.eclipse.sw360.datahandler.thrift.users.User; | ||
import org.eclipse.sw360.exporter.helper.PackageHelper; | ||
import java.util.*; | ||
import java.util.stream.Collectors; | ||
import static org.eclipse.sw360.datahandler.common.SW360Utils.displayNameFor; | ||
import static org.eclipse.sw360.datahandler.thrift.packages.Package._Fields.*; | ||
import static org.eclipse.sw360.exporter.ReleaseExporter.RELEASE_HEADERS_PROJECT_EXPORT; | ||
|
||
|
||
public class PackageExporter extends ExcelExporter<Package, PackageHelper> { | ||
|
||
private static final Map<String, String> nameToDisplayName; | ||
|
||
static { | ||
nameToDisplayName = new HashMap<>(); | ||
nameToDisplayName.put(Package._Fields.ID.getFieldName(), "package ID"); | ||
nameToDisplayName.put(Package._Fields.NAME.getFieldName(), "package name"); | ||
nameToDisplayName.put(Package._Fields.VERSION.getFieldName(), "package version"); | ||
nameToDisplayName.put(Package._Fields.DESCRIPTION.getFieldName(), "package description"); | ||
nameToDisplayName.put(Package._Fields.VENDOR.getFieldName(), "package vendor"); | ||
nameToDisplayName.put(Package._Fields.LICENSE_IDS.getFieldName(), "license IDs"); | ||
nameToDisplayName.put(Package._Fields.PACKAGE_TYPE.getFieldName(), "package type"); | ||
nameToDisplayName.put(Package._Fields.PURL.getFieldName(), "purl"); | ||
nameToDisplayName.put(Package._Fields.RELEASE.getFieldName(), "release"); | ||
} | ||
|
||
|
||
public static final List<Package._Fields> PACKAGE_REQUIRED_FIELDS = ImmutableList.<Package._Fields>builder() | ||
.add(ID) | ||
.add(NAME) | ||
.add(VERSION) | ||
.add(PURL) | ||
.add(PACKAGE_TYPE) | ||
.add(RELEASE) | ||
.build(); | ||
|
||
public static final List<Package._Fields> PACKAGE_RENDERED_FIELDS_PROJECTS = Package.metaDataMap.keySet() | ||
.stream() | ||
.filter(k -> PACKAGE_REQUIRED_FIELDS.contains(k)) | ||
.collect(Collectors.toList()); | ||
|
||
|
||
public PackageExporter(PackageService.Iface packageClient, User user, ComponentService.Iface cClient) { | ||
super(new PackageHelper(packageClient, cClient, user)); | ||
} | ||
|
||
public static final List<String> PACKAGE_HEADERS_PROJECT_EXPORT = makePackageHeadersForProjectExport(); | ||
|
||
private static List<String> makePackageHeadersForProjectExport() { | ||
List<String> headers = new ArrayList<>(); | ||
for (Package._Fields field : PACKAGE_RENDERED_FIELDS_PROJECTS) { | ||
addToHeadersForProjectExport(headers, field); | ||
} | ||
return headers; | ||
} | ||
|
||
private static void addToHeadersForProjectExport(List<String> headers, Package._Fields field) { | ||
switch (field) { | ||
case RELEASE: | ||
headers.addAll(RELEASE_HEADERS_PROJECT_EXPORT); | ||
break; | ||
default: | ||
headers.add(displayNameFor(field.getFieldName(), nameToDisplayName)); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
135 changes: 135 additions & 0 deletions
135
libraries/exporters/src/main/java/org/eclipse/sw360/exporter/helper/PackageHelper.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,135 @@ | ||
/* | ||
* Copyright Siemens Healthineers GmBH, 2025. Part of the SW360 Portal Project. | ||
* | ||
* This program and the accompanying materials are made | ||
* available under the terms of the Eclipse Public License 2.0 | ||
* which is available at https://www.eclipse.org/legal/epl-2.0/ | ||
* | ||
* SPDX-License-Identifier: EPL-2.0 | ||
*/ | ||
package org.eclipse.sw360.exporter.helper; | ||
|
||
import org.apache.logging.log4j.LogManager; | ||
import org.apache.logging.log4j.Logger; | ||
import org.apache.thrift.TException; | ||
import org.eclipse.sw360.datahandler.common.ThriftEnumUtils; | ||
import org.eclipse.sw360.datahandler.thrift.SW360Exception; | ||
import org.eclipse.sw360.datahandler.thrift.components.Release; | ||
import org.eclipse.sw360.datahandler.thrift.packages.Package; | ||
import org.eclipse.sw360.datahandler.thrift.packages.PackageService; | ||
import org.eclipse.sw360.datahandler.thrift.components.ComponentService; | ||
import org.eclipse.sw360.datahandler.thrift.users.RequestedAction; | ||
import org.eclipse.sw360.datahandler.thrift.users.User; | ||
import org.eclipse.sw360.exporter.ReleaseExporter; | ||
import org.eclipse.sw360.exporter.utils.SubTable; | ||
import static org.eclipse.sw360.datahandler.common.SW360Utils.fieldValueAsString; | ||
|
||
import java.util.ArrayList; | ||
import java.util.HashSet; | ||
import java.util.List; | ||
import java.util.Set; | ||
import static org.eclipse.sw360.exporter.PackageExporter.*; | ||
import static org.eclipse.sw360.exporter.ProjectExporter.HEADERS; | ||
import static org.eclipse.sw360.exporter.ReleaseExporter.HEADERS_EXTENDED_BY_ADDITIONAL_DATA_PROJECT; | ||
import static org.eclipse.sw360.exporter.ReleaseExporter.RELEASE_RENDERED_FIELDS_PROJECTS; | ||
|
||
public class PackageHelper implements ExporterHelper<Package> { | ||
private static final Logger log = LogManager.getLogger(PackageHelper.class); | ||
private final PackageService.Iface packageClient; | ||
private final ComponentService.Iface cClient; | ||
private final User user; | ||
public static final Set<String> RELEASES_LINKED_TO_PACKAGES = new HashSet<>(); | ||
|
||
public PackageHelper(PackageService.Iface packageClient, ComponentService.Iface cClient, User user) { | ||
this.packageClient = packageClient; | ||
this.cClient = cClient; | ||
this.user = user; | ||
} | ||
|
||
public int getColumns() { | ||
return getHeaders().size(); | ||
} | ||
|
||
public int getColumnsProjExport() { | ||
return getHeadersProjExport().size(); | ||
} | ||
|
||
public List<String> getHeadersProjExport() { | ||
return PACKAGE_HEADERS_PROJECT_EXPORT; | ||
} | ||
|
||
@Override | ||
public List<String> getHeaders() { | ||
return HEADERS; | ||
} | ||
|
||
@Override | ||
public SubTable makeRows(Package document) throws SW360Exception { | ||
List<String> row = new ArrayList<>(); | ||
for(Package._Fields renderedField : PACKAGE_RENDERED_FIELDS_PROJECTS) { | ||
addFieldValueToRow(row, renderedField, document); | ||
} | ||
return new SubTable(row); | ||
} | ||
|
||
public SubTable makeCustomRowsForProjectExport(Package document) throws SW360Exception { | ||
List<String> row = new ArrayList<>(); | ||
for(Package._Fields renderedField : PACKAGE_RENDERED_FIELDS_PROJECTS) { | ||
addFieldValueToRow(row, renderedField, document); | ||
} | ||
return new SubTable(row); | ||
} | ||
private void addFieldValueToRow(List<String> row, Package._Fields field, Package document) throws SW360Exception { | ||
switch (field) { | ||
case ID: | ||
row.add(document.getId()); | ||
break; | ||
case NAME: | ||
row.add(document.getName()); | ||
break; | ||
case VERSION: | ||
row.add(document.getVersion()); | ||
break; | ||
case PURL: | ||
row.add(document.getPurl()); | ||
break; | ||
case PACKAGE_TYPE: | ||
row.add(ThriftEnumUtils.enumToString(document.getPackageType())); | ||
break; | ||
case RELEASE: | ||
try { | ||
if (document.getReleaseId() == null || document.getReleaseId().isEmpty()) { | ||
// Ensure row is filled for each header of the release | ||
for (int i = 0; i < 18; i++) { | ||
row.add(""); | ||
} | ||
break; | ||
}else{ | ||
Release release = cClient.getReleaseById(document.getReleaseId(), user); | ||
RELEASES_LINKED_TO_PACKAGES.add(release.getId()); | ||
ReleaseHelper releaseHelper = new ReleaseHelper(cClient, user); | ||
if (release.isSetPermissions() && release.getPermissions().get(RequestedAction.READ)) { | ||
for (Release._Fields renderedField : RELEASE_RENDERED_FIELDS_PROJECTS) { | ||
releaseHelper.addFieldValueToRow(row, renderedField, release, true); | ||
} | ||
} | ||
} | ||
}catch (TException e) { | ||
log.info("Failed to fetch release for ID for package: " + document.getName(), e); | ||
} | ||
break; | ||
default: | ||
Object fieldValue = document.getFieldValue(field); | ||
row.add(fieldValueAsString(fieldValue)); | ||
} | ||
} | ||
|
||
public List<Package> getPackages(Set<String> packageIds) throws SW360Exception { | ||
try { | ||
return packageClient.getPackageByIds(packageIds); | ||
} catch (TException e) { | ||
log.error("Could not fetch packages", e); | ||
return new ArrayList<>(); | ||
} | ||
} | ||
} |
Oops, something went wrong.