Skip to content

Commit

Permalink
Merge branch 'develop' of github.com:IQSS/dataverse into 10477-datase…
Browse files Browse the repository at this point in the history
…t-fields-on-create-extension
  • Loading branch information
GPortas committed Apr 23, 2024
2 parents 3a91e95 + 27d3767 commit 019f788
Show file tree
Hide file tree
Showing 6 changed files with 68 additions and 30 deletions.
@@ -0,0 +1,22 @@
The Dataverse object returned by /api/dataverses has been extended to include "isReleased": {boolean}.
```javascript
{
"status": "OK",
"data": {
"id": 32,
"alias": "dv6f645bb5",
"name": "dv6f645bb5",
"dataverseContacts": [
{
"displayOrder": 0,
"contactEmail": "54180268@mailinator.com"
}
],
"permissionRoot": true,
"dataverseType": "UNCATEGORIZED",
"ownerId": 1,
"creationDate": "2024-04-12T18:05:59Z",
"isReleased": true
}
}
```
13 changes: 12 additions & 1 deletion doc/sphinx-guides/source/api/native-api.rst
Expand Up @@ -5686,6 +5686,17 @@ List permissions a user (based on API Token used) has on a Dataverse collection
The ``$identifier`` can be a Dataverse collection alias or database id or a dataset persistent ID or database id.
.. note:: Datasets can be selected using persistent identifiers. This is done by passing the constant ``:persistentId`` where the numeric id of the dataset is expected, and then passing the actual persistent id as a query parameter with the name ``persistentId``.
Example: List permissions a user (based on API Token used) has on a dataset whose DOI is *10.5072/FK2/J8SJZB*:
.. code-block:: bash
export SERVER_URL=https://demo.dataverse.org
export PERSISTENT_IDENTIFIER=doi:10.5072/FK2/J8SJZB
curl -H "X-Dataverse-key:$API_TOKEN" "$SERVER_URL/api/admin/permissions/:persistentId?persistentId=$PERSISTENT_IDENTIFIER"
Show Role Assignee
~~~~~~~~~~~~~~~~~~
Expand Down Expand Up @@ -5918,7 +5929,7 @@ Superusers can add a new license by posting a JSON file adapted from this exampl
.. code-block:: bash
export API_TOKEN=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
curl -X POST -H 'Content-Type: application/json' -H "X-Dataverse-key:$API_TOKEN" --data-binary @add-license.json "$SERVER_URL/api/licenses"
curl -X POST -H 'Content-Type: application/json' -H "X-Dataverse-key:$API_TOKEN" --upload-file add-license.json "$SERVER_URL/api/licenses"
Superusers can change whether an existing license is active (usable for new dataset versions) or inactive (only allowed on already-published versions) specified by the license ``$ID``:
Expand Down
21 changes: 13 additions & 8 deletions src/main/java/edu/harvard/iq/dataverse/api/AbstractApiBean.java
Expand Up @@ -42,6 +42,7 @@
import jakarta.persistence.NoResultException;
import jakarta.persistence.PersistenceContext;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.validation.constraints.NotNull;
import jakarta.ws.rs.container.ContainerRequestContext;
import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.MediaType;
Expand Down Expand Up @@ -531,17 +532,21 @@ protected DvObject findDvo( Long id ) {
* with that alias. If that fails, tries to get a {@link Dataset} with that global id.
* @param id a value identifying the DvObject, either numeric of textual.
* @return A DvObject, or {@code null}
* @throws WrappedResponse
*/
protected DvObject findDvo( String id ) {
if ( isNumeric(id) ) {
return findDvo( Long.valueOf(id)) ;
@NotNull
protected DvObject findDvo(@NotNull final String id) throws WrappedResponse {
DvObject d = null;
if (isNumeric(id)) {
d = findDvo(Long.valueOf(id));
} else {
Dataverse d = dataverseSvc.findByAlias(id);
return ( d != null ) ?
d : datasetSvc.findByGlobalId(id);

d = dataverseSvc.findByAlias(id);
}
}
if (d == null) {
return findDatasetOrDie(id);
}
return d;
}

protected <T> T failIfNull( T t, String errorMessage ) throws WrappedResponse {
if ( t != null ) return t;
Expand Down
38 changes: 18 additions & 20 deletions src/main/java/edu/harvard/iq/dataverse/api/Admin.java
Expand Up @@ -1353,26 +1353,24 @@ public Response convertUserFromBcryptToSha1(String json) {

}

@Path("permissions/{dvo}")
@AuthRequired
@GET
public Response findPermissonsOn(@Context ContainerRequestContext crc, @PathParam("dvo") String dvo) {
try {
DvObject dvObj = findDvo(dvo);
if (dvObj == null) {
return notFound("DvObject " + dvo + " not found");
}
User aUser = getRequestUser(crc);
JsonObjectBuilder bld = Json.createObjectBuilder();
bld.add("user", aUser.getIdentifier());
bld.add("permissions", json(permissionSvc.permissionsFor(createDataverseRequest(aUser), dvObj)));
return ok(bld);

} catch (Exception e) {
logger.log(Level.SEVERE, "Error while testing permissions", e);
return error(Response.Status.INTERNAL_SERVER_ERROR, e.getMessage());
}
}
@Path("permissions/{dvo}")
@AuthRequired
@GET
public Response findPermissonsOn(@Context final ContainerRequestContext crc, @PathParam("dvo") final String dvo) {
try {
final DvObject dvObj = findDvo(dvo);
final User aUser = getRequestUser(crc);
final JsonObjectBuilder bld = Json.createObjectBuilder();
bld.add("user", aUser.getIdentifier());
bld.add("permissions", json(permissionSvc.permissionsFor(createDataverseRequest(aUser), dvObj)));
return ok(bld);
} catch (WrappedResponse r) {
return r.getResponse();
} catch (Exception e) {
logger.log(Level.SEVERE, "Error while testing permissions", e);
return error(Response.Status.INTERNAL_SERVER_ERROR, e.getMessage());
}
}

@Path("assignee/{idtf}")
@GET
Expand Down
Expand Up @@ -292,6 +292,7 @@ public static JsonObjectBuilder json(Dataverse dv, Boolean hideEmail, Boolean re
if (dv.getFilePIDsEnabled() != null) {
bld.add("filePIDsEnabled", dv.getFilePIDsEnabled());
}
bld.add("isReleased", dv.isReleased());

List<DataverseFieldTypeInputLevel> inputLevels = dv.getDataverseFieldTypeInputLevels();
if(!inputLevels.isEmpty()) {
Expand Down
3 changes: 2 additions & 1 deletion src/test/java/edu/harvard/iq/dataverse/api/DataversesIT.java
Expand Up @@ -413,12 +413,13 @@ public void testMoveDataverse() {
Response superuserResponse = UtilIT.makeSuperUser(username);

Response createDataverseResponse = UtilIT.createRandomDataverse(apiToken);
createDataverseResponse.prettyPrint();
assertTrue(createDataverseResponse.prettyPrint().contains("isReleased\": false"));
String dataverseAlias = UtilIT.getAliasFromResponse(createDataverseResponse);
Integer dataverseId = UtilIT.getDataverseIdFromResponse(createDataverseResponse);

Response publishDataverse = UtilIT.publishDataverseViaNativeApi(dataverseAlias, apiToken);//.publishDataverseViaSword(dataverseAlias, apiToken);
assertEquals(200, publishDataverse.getStatusCode());
assertTrue(publishDataverse.prettyPrint().contains("isReleased\": true"));

Response createDataverseResponse2 = UtilIT.createRandomDataverse(apiToken);
createDataverseResponse2.prettyPrint();
Expand Down

0 comments on commit 019f788

Please sign in to comment.