From ba6c743f572beb0bbf91482ded917cc678ef57b4 Mon Sep 17 00:00:00 2001 From: Kouki Hama Date: Fri, 18 Aug 2023 10:49:36 +0900 Subject: [PATCH] feat(ui) : Add changelogs for license pages --- .../datahandler/db/DatabaseHandlerUtil.java | 23 +++++ .../licenses/db/LicenseDatabaseHandler.java | 89 ++++++++++++++++++- .../db/LicenseObligationListRepository.java | 51 +++++++++++ .../sw360/licenses/LicenseHandlerTest.java | 1 + .../portlets/licenses/LicensesPortlet.java | 9 ++ .../licenses/includes/detailOverview.jspf | 14 +++ .../couchdb/DatabaseMixInForChangeLog.java | 47 +++++++++- .../sw360/datahandler/thrift/ThriftUtils.java | 1 + .../src/main/thrift/changelogs.thrift | 5 +- .../src/main/thrift/licenses.thrift | 9 ++ .../core/JacksonCustomizations.java | 2 + 11 files changed, 246 insertions(+), 5 deletions(-) create mode 100644 backend/src/src-licenses/src/main/java/org/eclipse/sw360/licenses/db/LicenseObligationListRepository.java diff --git a/backend/src-common/src/main/java/org/eclipse/sw360/datahandler/db/DatabaseHandlerUtil.java b/backend/src-common/src/main/java/org/eclipse/sw360/datahandler/db/DatabaseHandlerUtil.java index 6e06d91ed8..38e69df0f4 100644 --- a/backend/src-common/src/main/java/org/eclipse/sw360/datahandler/db/DatabaseHandlerUtil.java +++ b/backend/src-common/src/main/java/org/eclipse/sw360/datahandler/db/DatabaseHandlerUtil.java @@ -78,6 +78,7 @@ import org.eclipse.sw360.datahandler.couchdb.DatabaseMixInForChangeLog.RepositoryMixin; import org.eclipse.sw360.datahandler.couchdb.DatabaseMixInForChangeLog.VendorMixin; import org.eclipse.sw360.datahandler.couchdb.DatabaseMixInForChangeLog.ObligationMixin; +import org.eclipse.sw360.datahandler.couchdb.DatabaseMixInForChangeLog.LicenseTypeMixin; import org.eclipse.sw360.datahandler.couchdb.DatabaseMixInForChangeLog.*; import org.eclipse.sw360.datahandler.thrift.ProjectReleaseRelationship; import org.eclipse.sw360.datahandler.thrift.RequestStatus; @@ -118,6 +119,9 @@ import org.eclipse.sw360.datahandler.thrift.spdx.spdxpackageinfo.PackageInformation; import org.eclipse.sw360.datahandler.thrift.spdx.spdxpackageinfo.PackageVerificationCode; import org.eclipse.sw360.datahandler.thrift.licenses.Obligation; +import org.eclipse.sw360.datahandler.thrift.licenses.License; +import org.eclipse.sw360.datahandler.thrift.licenses.LicenseType; +import org.eclipse.sw360.datahandler.thrift.licenses.LicenseObligationList; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; @@ -459,6 +463,16 @@ public static void trimStringFields(T obj, List listOfStrFields) { changeLog.setDocumentId(newPkgVer.getId()); changeLog.setDocumentType(newPkgVer.getType()); changeLog.setDbName(DatabaseSettings.COUCH_DB_DATABASE); + } else if (newDocVersion instanceof License) { + License newProjVer = (License) newDocVersion; + changeLog.setDocumentId(newProjVer.getId()); + changeLog.setDocumentType(newProjVer.getType()); + changeLog.setDbName(DatabaseSettings.COUCH_DB_DATABASE); + } else if (newDocVersion instanceof LicenseObligationList) { + LicenseObligationList newProjVer = (LicenseObligationList) newDocVersion; + changeLog.setDocumentId(newProjVer.getId()); + changeLog.setDocumentType(newProjVer.getType()); + changeLog.setDbName(DatabaseSettings.COUCH_DB_DATABASE); } log.info("Initialize ChangeLogs for Document Id : " + changeLog.getDocumentId()); @@ -649,6 +663,10 @@ private static void changeLogsForNewlyCreatedOrDeleted(T newor fields = Obligation._Fields.values(); } else if (neworDeletedVersion instanceof Package) { fields = Package._Fields.values(); + } else if (neworDeletedVersion instanceof License) { + fields = License._Fields.values(); + } else if (neworDeletedVersion instanceof LicenseObligationList) { + fields = LicenseObligationList._Fields.values(); } else { return; } @@ -683,6 +701,10 @@ private static void changeLogsForNewlyCreatedOrDeleted(T newor fields = Obligation._Fields.values(); } else if (newVersion instanceof Package) { fields = Package._Fields.values(); + } else if (newVersion instanceof License) { + fields = License._Fields.values(); + } else if (newVersion instanceof LicenseObligationList) { + fields = LicenseObligationList._Fields.values(); } else { return; } @@ -908,6 +930,7 @@ private static ObjectMapper initAndGetObjectMapper() { mapper.addMixInAnnotations(SnippetInformation.class, SnippetInformationMixin.class); mapper.addMixInAnnotations(SnippetRange.class, SnippetRangeMixin.class); mapper.addMixInAnnotations(Obligation.class, ObligationMixin.class); + mapper.addMixInAnnotations(LicenseType.class, LicenseTypeMixin.class); } return mapper; } diff --git a/backend/src/src-licenses/src/main/java/org/eclipse/sw360/licenses/db/LicenseDatabaseHandler.java b/backend/src/src-licenses/src/main/java/org/eclipse/sw360/licenses/db/LicenseDatabaseHandler.java index da6363ba33..ecbcec7de5 100644 --- a/backend/src/src-licenses/src/main/java/org/eclipse/sw360/licenses/db/LicenseDatabaseHandler.java +++ b/backend/src/src-licenses/src/main/java/org/eclipse/sw360/licenses/db/LicenseDatabaseHandler.java @@ -27,6 +27,8 @@ import org.eclipse.sw360.datahandler.thrift.users.RequestedAction; import org.eclipse.sw360.datahandler.thrift.users.User; import org.eclipse.sw360.datahandler.thrift.users.UserGroup; +import org.eclipse.sw360.datahandler.thrift.changelogs.ChangeLogs; +import org.eclipse.sw360.datahandler.thrift.changelogs.Operation; import org.eclipse.sw360.licenses.tools.SpdxConnector; import org.eclipse.sw360.licenses.tools.OSADLObligationConnector; import org.apache.http.HttpStatus; @@ -55,7 +57,6 @@ import static org.eclipse.sw360.datahandler.thrift.ThriftValidate.*; import org.eclipse.sw360.datahandler.db.DatabaseHandlerUtil; -import org.eclipse.sw360.datahandler.thrift.changelogs.Operation; import com.google.common.collect.Lists; import org.eclipse.sw360.datahandler.common.DatabaseSettings; import org.spdx.library.InvalidSPDXAnalysisException; @@ -80,6 +81,7 @@ public class LicenseDatabaseHandler { private final ObligationElementRepository obligationElementRepository; private final ObligationNodeRepository obligationNodeRepository; private final LicenseTypeRepository licenseTypeRepository; + private final LicenseObligationListRepository obligationListRepository; private final LicenseModerator moderator; private final CustomPropertiesRepository customPropertiesRepository; private final DatabaseRepositoryCloudantClient[] repositories; @@ -104,6 +106,7 @@ public LicenseDatabaseHandler(Supplier httpClient, String dbName obligationNodeRepository = new ObligationNodeRepository(db); licenseTypeRepository = new LicenseTypeRepository(db); customPropertiesRepository = new CustomPropertiesRepository(db); + obligationListRepository = new LicenseObligationListRepository(db); repositories = new DatabaseRepositoryCloudantClient[]{ licenseRepository, @@ -111,7 +114,8 @@ public LicenseDatabaseHandler(Supplier httpClient, String dbName obligRepository, customPropertiesRepository, obligationElementRepository, - obligationNodeRepository + obligationNodeRepository, + obligationListRepository }; moderator = new LicenseModerator(); @@ -449,12 +453,17 @@ public RequestStatus updateLicense(License inputLicense, User user, User request Optional oldLicense = Optional.ofNullable(inputLicense.getId()) .map(id -> licenseRepository.get(inputLicense.getId())); - boolean isNewLicense = ! oldLicense.isPresent(); + boolean isNewLicense = !oldLicense.isPresent(); + License oldLicenseForChangelogs = new License(); + Set oldObligationDatabaseIds = new HashSet<>(); if(isNewLicense){ validateNewLicense(inputLicense); } else { validateExistingLicense(inputLicense); + oldObligationDatabaseIds = oldLicense.orElse(new License()).getObligationDatabaseIds(); + oldLicenseForChangelogs = setLicenseForChangelogs(oldLicense.orElse(new License())); + oldLicenseForChangelogs.setShortname(inputLicense.getShortname()); } boolean oldLicenseWasChecked = oldLicense.map(License::isChecked).orElse(false); @@ -466,10 +475,56 @@ public RequestStatus updateLicense(License inputLicense, User user, User request return RequestStatus.FAILURE; } + License resultLicenseForChangelogs = setLicenseForChangelogs(resultLicense); + resultLicenseForChangelogs.setShortname(inputLicense.getShortname()); + + LicenseObligationList resultObligationList = new LicenseObligationList(); + Map obligations = new HashMap<>(); + getObligationsByIds(resultLicense.getObligationDatabaseIds()).forEach(oblig -> { + obligations.put(oblig.getTitle(), oblig); + }); + resultObligationList.setLinkedObligations(obligations); + resultObligationList.setLicenseId(resultLicense.getId()); + if(isNewLicense) { + if (!resultLicense.getObligationDatabaseIds().isEmpty()) { + obligationListRepository.add(resultObligationList); + resultLicense.setObligationListId(resultObligationList.getId()); + } licenseRepository.add(resultLicense); + dbHandlerUtil.addChangeLogs(resultLicenseForChangelogs, null, user.getEmail(), Operation.CREATE, null, + Lists.newArrayList(), null, null); + if(resultLicense.getObligationListId() != null){ + dbHandlerUtil.addChangeLogs(resultObligationList, null, user.getEmail(), Operation.CREATE, null, + Lists.newArrayList(), resultLicense.getId(), Operation.LICENSE_CREATE); + } } else { licenseRepository.update(resultLicense); + + dbHandlerUtil.addChangeLogs(resultLicenseForChangelogs, oldLicenseForChangelogs, user.getEmail(), + Operation.UPDATE, null, + Lists.newArrayList(), null, null); + + LicenseObligationList oldObligationList = new LicenseObligationList(); + if (!resultLicense.getObligationDatabaseIds().equals(oldObligationDatabaseIds)) { + resultObligationList.setId(resultLicense.getObligationListId()); + LicenseObligationList baseObligationList = obligationListRepository + .get(resultLicense.getObligationListId()); + resultObligationList.setId(baseObligationList.getId()); + resultObligationList.setRevision(baseObligationList.getRevision()); + obligationListRepository.update(resultObligationList); + + Map oldObligations = new HashMap<>(); + getObligationsByIds(oldObligationDatabaseIds).forEach(oblig -> { + oldObligations.put(oblig.getTitle(), oblig); + }); + oldObligationList.setId(baseObligationList.getId()); + oldObligationList.setLinkedObligations(oldObligations); + oldObligationList.setLicenseId(oldLicense.orElse(new License()).getId()); + dbHandlerUtil.addChangeLogs(resultObligationList, oldObligationList, user.getEmail(), + Operation.UPDATE, null, + Lists.newArrayList(), resultLicense.getId(), Operation.LICENSE_UPDATE); + } } return RequestStatus.SUCCESS; } @@ -520,6 +575,19 @@ private License updateLicenseFromInputLicense(Optional oldLicense, Lice return license; } + public License setLicenseForChangelogs(License license) { + License licenseForChangelogs = license.deepCopy(); + if (licenseForChangelogs.isSetLicenseTypeDatabaseId()) { + LicenseType licenseTypeForChangelogs = getLicenseTypeById(licenseForChangelogs.getLicenseTypeDatabaseId()); + licenseForChangelogs.setLicenseType(licenseTypeForChangelogs); + licenseForChangelogs.unsetLicenseTypeDatabaseId(); + } + if (licenseForChangelogs.isSetObligationDatabaseIds()) { + licenseForChangelogs.unsetObligationDatabaseIds(); + } + return licenseForChangelogs; + } + public RequestStatus updateLicenseFromAdditionsAndDeletions(License licenseAdditions, License licenseDeletions, User user, @@ -699,6 +767,11 @@ public List getObligationElements() { return obligationElements; } + public List getLicenseObligationLists() { + final List licenseObligationLists = obligationListRepository.getAll(); + return licenseObligationLists; + } + public List getLicenseTypesByIds(Collection ids) { return licenseTypeRepository.get(ids); } @@ -815,6 +888,16 @@ public RequestStatus deleteLicense(String id, User user) throws SW360Exception { if (makePermission(license, user).isActionAllowed(RequestedAction.DELETE)) { licenseRepository.remove(license); moderator.notifyModeratorOnDelete(license.getId()); + dbHandlerUtil.addChangeLogs(null, license, user.getEmail(), Operation.DELETE, null, + Lists.newArrayList(), null, null); + + if (license.getObligationListId() != null) { + LicenseObligationList obligationList = obligationListRepository.get(license.getObligationListId()); + obligationListRepository.remove(obligationList); + dbHandlerUtil.addChangeLogs(null, obligationList, user.getEmail(), Operation.DELETE, null, + Lists.newArrayList(), license.getId(), Operation.LICENSE_DELETE); + } + return RequestStatus.SUCCESS; } else { log.error(user + " does not have the permission to delete the license."); diff --git a/backend/src/src-licenses/src/main/java/org/eclipse/sw360/licenses/db/LicenseObligationListRepository.java b/backend/src/src-licenses/src/main/java/org/eclipse/sw360/licenses/db/LicenseObligationListRepository.java new file mode 100644 index 0000000000..e4277b3f34 --- /dev/null +++ b/backend/src/src-licenses/src/main/java/org/eclipse/sw360/licenses/db/LicenseObligationListRepository.java @@ -0,0 +1,51 @@ +/* + * Copyright TOSHIBA CORPORATION, 2023. 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.licenses.db; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +import org.eclipse.sw360.datahandler.cloudantclient.DatabaseConnectorCloudant; +import org.eclipse.sw360.datahandler.cloudantclient.DatabaseRepositoryCloudantClient; +import org.eclipse.sw360.datahandler.thrift.licenses.LicenseObligationList; + +import org.ektorp.support.View; + +import com.cloudant.client.api.model.DesignDocument.MapReduce; + +/** + * CRUD access for the LicenseObligationList class + * + * + */ +public class LicenseObligationListRepository extends DatabaseRepositoryCloudantClient { + + private static final String BY_LICENSE_ID = + "function(doc) {" + + " if (doc.type == 'licenseObligationList') {" + + " emit(doc.licenseId, null);" + + " }" + + "}"; + + private static final String ALL = "function(doc) { if (doc.type == 'licenseObligationList') emit(null, doc._id) }"; + + public LicenseObligationListRepository(DatabaseConnectorCloudant db) { + super(db, LicenseObligationList.class); + Map views = new HashMap(); + views.put("byLicenseId", createMapReduce(BY_LICENSE_ID, null)); + views.put("all", createMapReduce(ALL, null)); + initStandardDesignDocument(views, db); + } + + public Optional getObligationByLicenseid(String licenseId) { + return queryView("byLicenseId", licenseId).stream().findFirst(); + } +} diff --git a/backend/src/src-licenses/src/test/java/org/eclipse/sw360/licenses/LicenseHandlerTest.java b/backend/src/src-licenses/src/test/java/org/eclipse/sw360/licenses/LicenseHandlerTest.java index d7fb89638e..a2fdfd2423 100644 --- a/backend/src/src-licenses/src/test/java/org/eclipse/sw360/licenses/LicenseHandlerTest.java +++ b/backend/src/src-licenses/src/test/java/org/eclipse/sw360/licenses/LicenseHandlerTest.java @@ -130,6 +130,7 @@ public void testAddLicense() throws Exception { License license = new License(); license.setShortname("GPL+3.0"); license.setFullname("The GPL Software License, Version 3.0"); + license.addToObligationDatabaseIds("T1"); RequestStatus status = handler.updateLicense(license, user, user); assertEquals(RequestStatus.SUCCESS, status); diff --git a/frontend/sw360-portlet/src/main/java/org/eclipse/sw360/portal/portlets/licenses/LicensesPortlet.java b/frontend/sw360-portlet/src/main/java/org/eclipse/sw360/portal/portlets/licenses/LicensesPortlet.java index f2f1f160b3..57d8d103a1 100644 --- a/frontend/sw360-portlet/src/main/java/org/eclipse/sw360/portal/portlets/licenses/LicensesPortlet.java +++ b/frontend/sw360-portlet/src/main/java/org/eclipse/sw360/portal/portlets/licenses/LicensesPortlet.java @@ -18,6 +18,7 @@ import com.liferay.portal.kernel.servlet.SessionMessages; import com.liferay.portal.kernel.util.ResourceBundleUtil; import com.liferay.portal.kernel.language.LanguageUtil; +import com.liferay.portal.kernel.json.JSONObject; import org.eclipse.sw360.datahandler.common.CommonUtils; import org.eclipse.sw360.datahandler.permissions.PermissionUtils; @@ -31,6 +32,8 @@ import org.eclipse.sw360.portal.common.ErrorMessages; import org.eclipse.sw360.portal.common.PortalConstants; import org.eclipse.sw360.portal.common.UsedAsLiferayAction; +import org.eclipse.sw360.portal.common.ChangeLogsPortletUtils; +import org.eclipse.sw360.portal.common.PortletUtils; import org.eclipse.sw360.portal.portlets.Sw360Portlet; import org.eclipse.sw360.portal.users.UserCacheHolder; import org.apache.commons.lang.StringUtils; @@ -89,6 +92,12 @@ public void serveResource(ResourceRequest request, ResourceResponse response) th } else if (PortalConstants.LOAD_LICENSE_OBLIGATIONS.equals(action)) { request.setAttribute(LICENSE_OBLIGATION_DATA, loadLicenseObligation(request)); include("/html/licenses/includes/licObligations.jsp", request, response, PortletRequest.RESOURCE_PHASE); + } else if (PortalConstants.LOAD_CHANGE_LOGS.equals(action) || PortalConstants.VIEW_CHANGE_LOGS.equals(action)) { + ChangeLogsPortletUtils changeLogsPortletUtilsPortletUtils = PortletUtils + .getChangeLogsPortletUtils(thriftClients); + JSONObject dataForChangeLogs = changeLogsPortletUtilsPortletUtils.serveResourceForChangeLogs(request, + response, action); + writeJSON(request, response, dataForChangeLogs); } } diff --git a/frontend/sw360-portlet/src/main/resources/META-INF/resources/html/licenses/includes/detailOverview.jspf b/frontend/sw360-portlet/src/main/resources/META-INF/resources/html/licenses/includes/detailOverview.jspf index 637fc8281d..b04fc04adf 100644 --- a/frontend/sw360-portlet/src/main/resources/META-INF/resources/html/licenses/includes/detailOverview.jspf +++ b/frontend/sw360-portlet/src/main/resources/META-INF/resources/html/licenses/includes/detailOverview.jspf @@ -13,6 +13,8 @@ + +
@@ -77,6 +88,9 @@ <%@include file="/html/licenses/includes/detailAddTodo.jspf" %>
+
active show"> + +
diff --git a/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/couchdb/DatabaseMixInForChangeLog.java b/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/couchdb/DatabaseMixInForChangeLog.java index 2bb977ecdd..9e86e5086c 100644 --- a/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/couchdb/DatabaseMixInForChangeLog.java +++ b/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/couchdb/DatabaseMixInForChangeLog.java @@ -32,6 +32,7 @@ import org.eclipse.sw360.datahandler.thrift.spdx.spdxpackageinfo.ExternalReference; import org.eclipse.sw360.datahandler.thrift.spdx.spdxpackageinfo.PackageVerificationCode; import org.eclipse.sw360.datahandler.thrift.licenses.Obligation; +import org.eclipse.sw360.datahandler.thrift.licenses.LicenseType; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; @@ -372,9 +373,53 @@ public static abstract class SnippetRangeMixin extends SnippetRange { "node", "distribution", "development", - "obligationType" + "obligationType", + "id", + "revision", + "type", + "whitelist", + "developmentString", + "distributionString", + "setId", + "setText", + "whitelistSize", + "whitelistIterator", + "setWhitelist", + "setDevelopment", + "setDistribution", + "customPropertyToValueSize", + "setCustomPropertyToValue", + "setDevelopmentString", + "setDistributionString", + "setComments", + "setObligationType", + "setNode", + "setObligationLevel", + "externalIdsSize", + "setExternalIds", + "additionalDataSize", + "setAdditionalData", + "setRevision", + "setType", + "setTitle" }) public static abstract class ObligationMixin extends Obligation { } + @JsonInclude(JsonInclude.Include.NON_NULL) + @JsonIgnoreProperties({ + "id", + "revision", + "type", + "licenseTypeId", + "setId", + "setRevision", + "setType", + "setTitle", + "setLicenseTypeId", + "setLicenseType", + }) + public static abstract class LicenseTypeMixin extends LicenseType { + } + } diff --git a/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/thrift/ThriftUtils.java b/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/thrift/ThriftUtils.java index 201c8e3544..7f5909b9e8 100644 --- a/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/thrift/ThriftUtils.java +++ b/libraries/datahandler/src/main/java/org/eclipse/sw360/datahandler/thrift/ThriftUtils.java @@ -65,6 +65,7 @@ public class ThriftUtils { .add(ObligationNode.class) .add(LicenseType.class) // License service .add(CustomProperties.class) // License service + .add(LicenseObligationList.class) // License service .add(Project.class).add(ObligationList.class).add(UsedReleaseRelations.class).add(ClearingRequest.class) // Project service .add(User.class) // User service .add(Vendor.class) // Vendor service diff --git a/libraries/datahandler/src/main/thrift/changelogs.thrift b/libraries/datahandler/src/main/thrift/changelogs.thrift index f463949ea6..db71deed3f 100644 --- a/libraries/datahandler/src/main/thrift/changelogs.thrift +++ b/libraries/datahandler/src/main/thrift/changelogs.thrift @@ -37,7 +37,10 @@ enum Operation { SPDX_DOCUMENT_CREATION_INFO_CREATE = 16, SPDX_DOCUMENT_CREATION_INFO_DELETE = 17, SPDX_PACKAGE_INFO_CREATE = 18, - SPDX_PACKAGE_INFO_DELETE = 19 + SPDX_PACKAGE_INFO_DELETE = 19, + LICENSE_CREATE = 20, + LICENSE_UPDATE = 21, + LICENSE_DELETE = 22 } struct ChangeLogs { diff --git a/libraries/datahandler/src/main/thrift/licenses.thrift b/libraries/datahandler/src/main/thrift/licenses.thrift index 4ba63a836a..cc009e0654 100644 --- a/libraries/datahandler/src/main/thrift/licenses.thrift +++ b/libraries/datahandler/src/main/thrift/licenses.thrift @@ -100,6 +100,14 @@ struct ObligationElement { 7: optional ObligationElementStatus status } +struct LicenseObligationList { + 1: optional string id, + 2: optional string revision, + 3: optional string type = "licenseObligationList", + 4: required string licenseId, + 5: optional map linkedObligations +} + struct License { 1: optional string id, 2: optional string revision, @@ -123,6 +131,7 @@ struct License { 20: optional list obligations, 21: optional set obligationDatabaseIds, + 22: optional string obligationListId, 25: optional string text, 30: optional bool checked = true; diff --git a/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/core/JacksonCustomizations.java b/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/core/JacksonCustomizations.java index 9a2f5520e9..a4f68ddde1 100644 --- a/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/core/JacksonCustomizations.java +++ b/rest/resource-server/src/main/java/org/eclipse/sw360/rest/resourceserver/core/JacksonCustomizations.java @@ -844,6 +844,7 @@ static abstract class VendorMixin extends Vendor { "reviewdate", "obligations", "obligationDatabaseIds", + "obligationListId", "osiapproved", "fsflibre", "documentState", @@ -860,6 +861,7 @@ static abstract class VendorMixin extends Vendor { "obligationDatabaseIdsSize", "obligationDatabaseIdsIterator", "setObligationDatabaseIds", + "setObligationListId", "setPermissions", "setFullname", "setShortname",