Skip to content
Merged
Show file tree
Hide file tree
Changes from 82 commits
Commits
Show all changes
98 commits
Select commit Hold shift + click to select a range
2c03617
#11710 dummy endpoint to start
sekmiller Aug 7, 2025
d37725b
#11710 update path
sekmiller Aug 7, 2025
c2e2166
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Aug 7, 2025
59db4ff
#11710 add api functionality and tests
sekmiller Aug 7, 2025
1203c43
#11710 fix test
sekmiller Aug 8, 2025
67f0048
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Aug 8, 2025
8e8b084
#11710 add "mini" dv to json printer
sekmiller Aug 11, 2025
bb40ca4
#11710 fix templates test for existing databases/templates
sekmiller Aug 11, 2025
791edfb
#11710 code cleanup
sekmiller Aug 12, 2025
61dae90
#11710 add test for perms
sekmiller Aug 12, 2025
32d06ed
#11710 add publish to test
sekmiller Aug 12, 2025
59572c9
#11710 code cleanup
sekmiller Aug 12, 2025
d6625a4
#11710 test that linked dv's are removed from list
sekmiller Aug 12, 2025
12f69ff
#11710 clean up comments
sekmiller Aug 12, 2025
8456b90
Update native-api.rst
sekmiller Aug 12, 2025
bb74b24
Update native-api.rst
sekmiller Aug 12, 2025
01de521
#11710 add test for partial search term
sekmiller Aug 12, 2025
9e39192
Update native-api.rst
sekmiller Aug 12, 2025
7ab43e8
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Aug 13, 2025
3157b24
Create 11710-get-available-dataverses-api.md
sekmiller Aug 13, 2025
250e0e4
#11710 add cleanup after tests
sekmiller Aug 13, 2025
6d110f4
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Aug 13, 2025
9be5fb3
Update native-api.rst
sekmiller Aug 13, 2025
45f5300
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Aug 14, 2025
8eaefbe
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Aug 18, 2025
a451f37
#11710 change search term to query param
sekmiller Aug 18, 2025
f9f66b7
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Aug 18, 2025
645dd38
#11710 test for empty search
sekmiller Aug 18, 2025
694cd34
Update native-api.rst
sekmiller Aug 19, 2025
0bc2093
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Aug 19, 2025
69371d7
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Aug 21, 2025
9eeb6ed
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Aug 25, 2025
b5885e7
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Aug 26, 2025
5c1ce14
#11719 combine perms and search filter for query
sekmiller Aug 26, 2025
2bcfa70
#11710 refactor query update
sekmiller Aug 26, 2025
c688965
#11710 separate perms test from lookup
sekmiller Aug 27, 2025
c62f2c9
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Aug 27, 2025
96c8b25
#11710 remove unused method
sekmiller Aug 27, 2025
ec3f8aa
#11710 fix release note
sekmiller Aug 28, 2025
239af1b
Update native-api.rst
sekmiller Aug 28, 2025
85a3dcc
#11710 some code cleanup
sekmiller Aug 28, 2025
463ce0e
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Aug 28, 2025
286402f
#11710 skip filter if search term empty
sekmiller Aug 28, 2025
026a761
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Sep 2, 2025
725f5a2
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Sep 4, 2025
ff6c4a5
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Sep 5, 2025
5ed86a1
Update doc/sphinx-guides/source/api/native-api.rst
sekmiller Sep 5, 2025
a306592
Update src/main/java/edu/harvard/iq/dataverse/PermissionServiceBean.java
sekmiller Sep 5, 2025
6cc2f6b
Update src/main/java/edu/harvard/iq/dataverse/PermissionServiceBean.java
sekmiller Sep 5, 2025
f7f0d26
Update src/main/java/edu/harvard/iq/dataverse/PermissionServiceBean.java
sekmiller Sep 5, 2025
f071e21
Update src/main/java/edu/harvard/iq/dataverse/PermissionServiceBean.java
sekmiller Sep 5, 2025
5d8eabb
Update src/main/java/edu/harvard/iq/dataverse/util/json/JsonPrinter.java
sekmiller Sep 5, 2025
e975a68
Update src/test/java/edu/harvard/iq/dataverse/api/DataversesIT.java
sekmiller Sep 5, 2025
70b16d5
#11710 fix typo
sekmiller Sep 5, 2025
238db74
#11710 move logic in json printer
sekmiller Sep 8, 2025
f590a9f
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Sep 8, 2025
5791664
#11710 fix comment from copy
sekmiller Sep 10, 2025
6f64328
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Sep 10, 2025
cfb841c
#11710 handle guest users
sekmiller Sep 10, 2025
26661fc
#11710 fix pass bad alias
sekmiller Sep 10, 2025
1316457
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Sep 10, 2025
886256c
#11710 remove parents from available linking DV
sekmiller Sep 10, 2025
76333aa
#11710 allow search term to be null
sekmiller Sep 10, 2025
bafa0d7
#11710 add test for linking child
sekmiller Sep 10, 2025
5774d95
#11710 remove generic exception
sekmiller Sep 10, 2025
97fae8b
#11710 combine search and perms query
sekmiller Sep 11, 2025
ce946d0
#11710 move dv creation for test
sekmiller Sep 11, 2025
3abc4d0
#11710 parametize the query
sekmiller Sep 11, 2025
f7cfd5b
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Sep 11, 2025
cadf11d
#11710 Code Cleanup
sekmiller Sep 11, 2025
d45d0b9
#11710 code cleanup
sekmiller Sep 11, 2025
8d7c441
#11710 implement command
sekmiller Sep 11, 2025
3943cb2
#11710 remove unused comment
sekmiller Sep 11, 2025
70c7430
#11710 simplify logic
sekmiller Sep 12, 2025
adc7d48
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Sep 12, 2025
47d7e3d
Added: GetLinkingDataverseListCommand unit test
GPortas Sep 15, 2025
463d90a
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Sep 16, 2025
72e78a5
#11710 short circuit test for unlinkable
sekmiller Sep 16, 2025
844ca2c
#11710 comment out unused mocks
sekmiller Sep 16, 2025
bd900fb
#11710 another null check
sekmiller Sep 16, 2025
8756f5c
#11710 fix super user query/run
sekmiller Sep 16, 2025
5c8a4eb
#11710 add already linking functionality
sekmiller Sep 18, 2025
eb4ed35
#11710 typo
sekmiller Sep 18, 2025
d4dbd3a
#11710 add search term to already linked
sekmiller Sep 19, 2025
b63555f
#11710 add perms to find already linked
sekmiller Sep 22, 2025
44eec3b
#11710 add test for without perms
sekmiller Sep 22, 2025
5cbf628
Update native-api.rst
sekmiller Sep 22, 2025
a3ed900
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Sep 25, 2025
9e72ba2
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Sep 26, 2025
9679165
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Sep 30, 2025
a4994b2
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Sep 30, 2025
ea511d0
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Oct 1, 2025
3072868
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Oct 2, 2025
bab2ee2
Merge branch 'develop' into 11710-find-dataverses-for-linking
ofahimIQSS Oct 3, 2025
bbdef1b
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Oct 7, 2025
5670585
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Oct 8, 2025
296b50c
Merge branch 'develop' into 11710-find-dataverses-for-linking
sekmiller Oct 9, 2025
0982ff2
Merge branch 'develop' into 11710-find-dataverses-for-linking
ofahimIQSS Oct 9, 2025
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
5 changes: 5 additions & 0 deletions doc/release-notes/11710-get-available-dataverses-api.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
### New API endpoint for retrieving a list of Dataverse Collections to which a given Dataset or Dataverse Collection may be linked

-The end point also takes in a search term which currently must be part of the collections' names.
-The user calling this API must have Link Dataset or Link Dataverse permission on the Dataverse Collections returned.
-If the Collection has already been linked to the given Dataset or Collection, it will not be returned.
44 changes: 44 additions & 0 deletions doc/sphinx-guides/source/api/native-api.rst
Original file line number Diff line number Diff line change
Expand Up @@ -732,6 +732,50 @@ Note: you must have "Add Dataset" permission in the given collection to invoke t

.. _featured-collections:

List Dataverse Collections to Which a Given Dataset or Dataverse Collection May Be Linked
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

The user may provide a search term to limit the list of Dataverse Collections returned. The search term will be compared to the name of the Dataverse Collections.
The response is a JSON array of the ids, aliases, and names of the Dataverse collections to which a given Dataset or Dataverse Collection may be linked:

For a given Dataverse Collection:

.. code-block:: bash

export API_TOKEN=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
export SERVER_URL=https://demo.dataverse.org
export OBJECT_TYPE=dataverse
export ID=collectionAlias
export SEARCH_TERM=searchOn

curl -H "X-Dataverse-key:$API_TOKEN" -X GET "$SERVER_URL/api/dataverses/$ID/$OBJECT_TYPE/linkingDataverses?searchTerm=$SEARCH_TERM"

The fully expanded example above (without environment variables) looks like this:

.. code-block:: bash

curl -H "X-Dataverse-key:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" -X GET "https://demo.dataverse.org/api/dataverses/collectionAlias/dataverse/linkingDataverses?searchTerm=searchOn"

For a given Dataset:

.. code-block:: bash

export API_TOKEN=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
export SERVER_URL=https://demo.dataverse.org
export OBJECT_TYPE=dataset
export PERSISTENT_IDENTIFIER=doi:10.5072/FK2/J8SJZB
export SEARCH_TERM=searchOn

curl -H "X-Dataverse-key:$API_TOKEN" -X GET "$SERVER_URL/api/dataverses/:persistentId/$OBJECT_TYPE/linkingDataverses?searchTerm=SEARCH_TERM&persistentId=$PERSISTENT_IDENTIFIER"

The fully expanded example above (without environment variables) looks like this:

.. code-block:: bash

curl -H "X-Dataverse-key:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" -X GET "https://demo.dataverse.org/api/dataverses/:persistentId/dataset/linkingDataverses?searchTerm=searchOn&persistentId=doi:10.5072/FK2/J8SJZB"



List Featured Collections for a Dataverse Collection
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
import jakarta.persistence.EntityManager;
import jakarta.persistence.NoResultException;
import jakarta.persistence.PersistenceContext;
import jakarta.persistence.Query;
import jakarta.persistence.TypedQuery;

/**
Expand Down
78 changes: 71 additions & 7 deletions src/main/java/edu/harvard/iq/dataverse/DataverseServiceBean.java
Original file line number Diff line number Diff line change
Expand Up @@ -505,35 +505,99 @@ public List<Dataverse> filterByAliasQuery(String filterQuery) {
return ret;
}

public List<Dataverse> filterDataversesForLinking(String query, DataverseRequest req, Dataset dataset) {
public List<Dataverse> filterDataversesForLinking(String query, DataverseRequest req, DvObject dvo) {

List<Dataverse> dataverseList = new ArrayList<>();

List<Dataverse> results = filterDataversesByNamePattern(query);

if (results == null || results.size() == 0) {
return null;

if (results == null || results.isEmpty()) {
return null;
}

Dataset linkedDataset = null;
Dataverse linkedDataverse = null;
List<Object> alreadyLinkeddv_ids;

if ((dvo instanceof Dataset)) {
linkedDataset = (Dataset) dvo;
alreadyLinkeddv_ids = em.createNativeQuery("SELECT linkingdataverse_id FROM datasetlinkingdataverse WHERE dataset_id = " + linkedDataset.getId()).getResultList();
} else {
linkedDataverse = (Dataverse) dvo;
alreadyLinkeddv_ids = em.createNativeQuery("SELECT linkingdataverse_id FROM dataverselinkingdataverse WHERE dataverse_id = " + linkedDataverse.getId()).getResultList();
}

List<Object> alreadyLinkeddv_ids = em.createNativeQuery("SELECT linkingdataverse_id FROM datasetlinkingdataverse WHERE dataset_id = " + dataset.getId()).getResultList();
List<Dataverse> remove = new ArrayList<>();

if (alreadyLinkeddv_ids != null && !alreadyLinkeddv_ids.isEmpty()) {
alreadyLinkeddv_ids.stream().map((testDVId) -> this.find(testDVId)).forEachOrdered((removeIt) -> {
remove.add(removeIt);
});
}


if (dvo instanceof Dataverse dataverse) {
remove.add(dataverse);
}

for (Dataverse res : results) {
if (!remove.contains(res)) {
if (this.permissionService.requestOn(req, res).has(Permission.LinkDataset)) {
if ((linkedDataset != null && this.permissionService.requestOn(req, res).has(Permission.LinkDataset))
|| (linkedDataverse != null && this.permissionService.requestOn(req, res).has(Permission.LinkDataverse))) {
dataverseList.add(res);
}
}
}

return dataverseList;
}

public List<Dataverse> removeUnlinkableDataverses(List<Dataverse> allWithPerms, DvObject dvo) {
List<Dataverse> dataverseList = new ArrayList<>();
Dataset linkedDataset = null;
Dataverse linkedDataverse = null;
List<Object> alreadyLinkeddv_ids;

if ((dvo instanceof Dataset)) {
linkedDataset = (Dataset) dvo;
alreadyLinkeddv_ids = em.createNativeQuery("SELECT linkingdataverse_id FROM datasetlinkingdataverse WHERE dataset_id = " + linkedDataset.getId()).getResultList();
} else {
linkedDataverse = (Dataverse) dvo;
alreadyLinkeddv_ids = em.createNativeQuery("SELECT linkingdataverse_id FROM dataverselinkingdataverse WHERE dataverse_id = " + linkedDataverse.getId()).getResultList();
}

List<Dataverse> remove = new ArrayList<>();

if (alreadyLinkeddv_ids != null && !alreadyLinkeddv_ids.isEmpty()) {
alreadyLinkeddv_ids.stream().map((testDVId) -> this.find(testDVId)).forEachOrdered((removeIt) -> {
remove.add(removeIt);
});
}


if (dvo instanceof Dataverse dataverse) {
remove.add(dataverse);
}

DvObject testDVO = dvo;
//Remove DVO's parent up to Root
while (testDVO != null) {
if (testDVO.getOwner() == null) {
break; // we are at the root; which by definition is metadata block root, regardless of the value
}
remove.add((Dataverse) testDVO.getOwner());
testDVO = testDVO.getOwner();
}

for (Dataverse res : allWithPerms) {
if (!remove.contains(res)) {
dataverseList.add(res);
}
}

return dataverseList;
}


public List<Dataverse> filterDataversesForUnLinking(String query, DataverseRequest req, Dataset dataset) {
List<Object> alreadyLinkeddv_ids = em.createNativeQuery("SELECT linkingdataverse_id FROM datasetlinkingdataverse WHERE dataset_id = " + dataset.getId()).getResultList();
List<Dataverse> dataverseList = new ArrayList<>();
Expand Down
96 changes: 86 additions & 10 deletions src/main/java/edu/harvard/iq/dataverse/PermissionServiceBean.java
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ public class PermissionServiceBean {
DatasetVersionFilesServiceBean datasetVersionFilesServiceBean;

private static final String LIST_ALL_DATAVERSES_SUPERUSER_HAS_PERMISSION = """
SELECT id, name, alias FROM DATAVERSE
SELECT id, name, alias FROM DATAVERSE dv
""";

private static final String LIST_ALL_DATAVERSES_USER_HAS_PERMISSION = """
Expand All @@ -105,7 +105,7 @@ WITH grouplist AS (
WHERE explicitgroup_authenticateduser.containedauthenticatedusers_id = @USERID
)

SELECT * FROM DATAVERSE WHERE id IN (
SELECT * FROM DATAVERSE dv WHERE id IN (
SELECT definitionpoint_id
FROM roleassignment
WHERE roleassignment.assigneeidentifier IN (
Expand Down Expand Up @@ -161,8 +161,24 @@ AND EXISTS (SELECT id FROM dataverserole WHERE dataverserole.id = roleassignment
AND @IPRANGESQL
)
)
)
)
""";

private static final String AND = """
and
""";

private static final String WHERE = """
where
""";

private static final String SEARCH_PARAMS = """
((LOWER(dv.name) LIKE ? and ((SUBSTRING(LOWER(dv.name),0,(LENGTH(dv.name)-9)) LIKE ?)
or (SUBSTRING(LOWER(dv.name),0,(LENGTH(dv.name)-9)) LIKE ?)))
or (LOWER(dv.name) NOT LIKE ? and ((LOWER(dv.name) LIKE ?)
or (LOWER(dv.name) LIKE ?))))
""";

/**
* A request-level permission query (e.g includes IP ras).
*/
Expand Down Expand Up @@ -921,12 +937,21 @@ private boolean hasUnrestrictedReleasedFiles(DatasetVersion targetDatasetVersion
Long result = em.createQuery(criteriaQuery).getSingleResult();
return result > 0;
}

public List<Dataverse> findPermittedCollections(DataverseRequest request, AuthenticatedUser user, Permission permission) {
return findPermittedCollections(request, user, 1 << permission.ordinal());
return findPermittedCollections(request, user, 1 << permission.ordinal(), "");
}

public List<Dataverse> findPermittedCollections(DataverseRequest request, AuthenticatedUser user, Permission permission, String searchTerm) {
return findPermittedCollections(request, user, 1 << permission.ordinal(), searchTerm);
}

public List<Dataverse> findPermittedCollections(DataverseRequest request, AuthenticatedUser user, int permissionBit) {
return findPermittedCollections(request, user, permissionBit, "");
}


public List<Dataverse> findPermittedCollections(DataverseRequest request, AuthenticatedUser user, int permissionBit, String searchTerm) {
if (user != null) {
// IP Group - Only check IP if a User is calling for themself
String ipRangeSQL = "FALSE";
Expand Down Expand Up @@ -958,13 +983,64 @@ public List<Dataverse> findPermittedCollections(DataverseRequest request, Authen
String sqlCode;
if (user.isSuperuser()) {
sqlCode = LIST_ALL_DATAVERSES_SUPERUSER_HAS_PERMISSION;

if (searchTerm == null || searchTerm.isEmpty()) {
return em.createNativeQuery(sqlCode, Dataverse.class).getResultList();
} else {
sqlCode = LIST_ALL_DATAVERSES_SUPERUSER_HAS_PERMISSION.concat(WHERE).concat(SEARCH_PARAMS);

String pattern = searchTerm.toLowerCase();
String pattern1 = pattern + "%";
String pattern2 = "% " + pattern + "%";

// Adjust the queries for very short, 1
if (pattern.length() == 1) {
pattern1 = pattern;
pattern2 = pattern + " %";
}
Query query = em.createNativeQuery(sqlCode, Dataverse.class);
query.setParameter(1, "%dataverse");
query.setParameter(2, pattern1);
query.setParameter(3, pattern2);
query.setParameter(4, "%dataverse");
query.setParameter(5, pattern1);
query.setParameter(6, pattern2);
return query.getResultList();

}
} else {
sqlCode = LIST_ALL_DATAVERSES_USER_HAS_PERMISSION
.replace("@USERID", String.valueOf(user.getId()))
.replace("@PERMISSIONBIT", String.valueOf(permissionBit))
.replace("@IPRANGESQL", ipRangeSQL);
if (searchTerm == null || searchTerm.isEmpty()) {
sqlCode = LIST_ALL_DATAVERSES_USER_HAS_PERMISSION
.replace("@USERID", String.valueOf(user.getId()))
.replace("@PERMISSIONBIT", String.valueOf(permissionBit))
.replace("@IPRANGESQL", ipRangeSQL);
return em.createNativeQuery(sqlCode, Dataverse.class).getResultList();
} else {
String pattern = searchTerm.toLowerCase();
String pattern1 = pattern + "%";
String pattern2 = "% " + pattern + "%";

// Adjust the queries for very short, 1
if (pattern.length() == 1) {
pattern1 = pattern;
pattern2 = pattern + " %";
}

sqlCode = LIST_ALL_DATAVERSES_USER_HAS_PERMISSION.concat(AND).concat(SEARCH_PARAMS)
.replace("@USERID", String.valueOf(user.getId()))
.replace("@PERMISSIONBIT", String.valueOf(permissionBit))
.replace("@IPRANGESQL", ipRangeSQL);

Query query = em.createNativeQuery(sqlCode, Dataverse.class);
query.setParameter(1, "%dataverse");
query.setParameter(2, pattern1);
query.setParameter(3, pattern2);
query.setParameter(4, "%dataverse");
query.setParameter(5, pattern1);
query.setParameter(6, pattern2);
return query.getResultList();
}
}
return em.createNativeQuery(sqlCode, Dataverse.class).getResultList();
}
return null;
}
Expand Down
10 changes: 8 additions & 2 deletions src/main/java/edu/harvard/iq/dataverse/api/AbstractApiBean.java
Original file line number Diff line number Diff line change
Expand Up @@ -615,11 +615,12 @@ protected DvObject findDvo(@NotNull final String id) throws WrappedResponse {
*
* @param dvIdtf
* @param type
* @param testForReleased
* @return DvObject if type matches or throw exception
* @throws WrappedResponse
*/
@NotNull
protected DvObject findDvoByIdAndFeaturedItemTypeOrDie(@NotNull final String dvIdtf, String type) throws WrappedResponse {
protected DvObject findDvoByIdAndTypeOrDie(@NotNull final String dvIdtf, String type, boolean testForReleased) throws WrappedResponse {
try {
DataverseFeaturedItem.TYPES dvType = DataverseFeaturedItem.getDvType(type);
DvObject dvObject = null;
Expand Down Expand Up @@ -652,7 +653,12 @@ protected DvObject findDvoByIdAndFeaturedItemTypeOrDie(@NotNull final String dvI
}
}
}
DataverseFeaturedItem.validateTypeAndDvObject(dvIdtf, dvObject, dvType);
if (testForReleased){
DataverseFeaturedItem.validateTypeAndDvObject(dvIdtf, dvObject, dvType);
}
if (dvObject == null) {
throw new WrappedResponse(notFound(BundleUtil.getStringFromBundle("find.dvo.error.dvObjectNotFound", Collections.singletonList(dvIdtf))));
}
return dvObject;
} catch (IllegalArgumentException e) {
throw new WrappedResponse(error(Response.Status.BAD_REQUEST, e.getMessage()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ public Response updateFeaturedItem(@Context ContainerRequestContext crc,
if (dataverseFeaturedItem == null) {
throw new WrappedResponse(error(Response.Status.NOT_FOUND, MessageFormat.format(BundleUtil.getStringFromBundle("dataverseFeaturedItems.errors.notFound"), id)));
}
DvObject dvObject = (dvObjectIdtf != null) ? findDvoByIdAndFeaturedItemTypeOrDie(dvObjectIdtf, type) : null;
DvObject dvObject = (dvObjectIdtf != null) ? findDvoByIdAndTypeOrDie(dvObjectIdtf, type, true) : null;
UpdatedDataverseFeaturedItemDTO updatedDataverseFeaturedItemDTO = UpdatedDataverseFeaturedItemDTO.fromFormData(content, displayOrder, keepFile, imageFileInputStream, contentDispositionHeader, type, dvObject);
return ok(json(execCommand(new UpdateDataverseFeaturedItemCommand(createDataverseRequest(getRequestUser(crc)), dataverseFeaturedItem, updatedDataverseFeaturedItemDTO))));
} catch (WrappedResponse e) {
Expand Down
Loading