|
7 | 7 | import edu.harvard.iq.dataverse.Dataverse;
|
8 | 8 | import edu.harvard.iq.dataverse.DataverseFacet;
|
9 | 9 | import edu.harvard.iq.dataverse.DataverseContact;
|
| 10 | +import edu.harvard.iq.dataverse.DataverseMetadataBlockFacet; |
10 | 11 | import edu.harvard.iq.dataverse.DataverseServiceBean;
|
11 | 12 | import edu.harvard.iq.dataverse.api.datadeposit.SwordServiceBean;
|
| 13 | +import edu.harvard.iq.dataverse.api.dto.DataverseMetadataBlockFacetDTO; |
12 | 14 | import edu.harvard.iq.dataverse.authorization.DataverseRole;
|
13 | 15 | import edu.harvard.iq.dataverse.DvObject;
|
14 |
| -import edu.harvard.iq.dataverse.DvObjectContainer; |
15 | 16 | import edu.harvard.iq.dataverse.GlobalId;
|
16 | 17 | import edu.harvard.iq.dataverse.GuestbookResponseServiceBean;
|
17 | 18 | import edu.harvard.iq.dataverse.GuestbookServiceBean;
|
18 | 19 | import edu.harvard.iq.dataverse.MetadataBlock;
|
19 | 20 | import edu.harvard.iq.dataverse.RoleAssignment;
|
20 |
| -import static edu.harvard.iq.dataverse.api.AbstractApiBean.error; |
21 | 21 | import edu.harvard.iq.dataverse.api.dto.ExplicitGroupDTO;
|
22 | 22 | import edu.harvard.iq.dataverse.api.dto.RoleAssignmentDTO;
|
23 | 23 | import edu.harvard.iq.dataverse.api.dto.RoleDTO;
|
|
41 | 41 | import edu.harvard.iq.dataverse.engine.command.impl.DeleteDataverseCommand;
|
42 | 42 | import edu.harvard.iq.dataverse.engine.command.impl.DeleteDataverseLinkingDataverseCommand;
|
43 | 43 | import edu.harvard.iq.dataverse.engine.command.impl.DeleteExplicitGroupCommand;
|
| 44 | +import edu.harvard.iq.dataverse.engine.command.impl.UpdateMetadataBlockFacetRootCommand; |
44 | 45 | import edu.harvard.iq.dataverse.engine.command.impl.GetDataverseCommand;
|
45 | 46 | import edu.harvard.iq.dataverse.engine.command.impl.GetDataverseStorageSizeCommand;
|
46 | 47 | import edu.harvard.iq.dataverse.engine.command.impl.GetExplicitGroupCommand;
|
|
49 | 50 | import edu.harvard.iq.dataverse.engine.command.impl.ListDataverseContentCommand;
|
50 | 51 | import edu.harvard.iq.dataverse.engine.command.impl.ListExplicitGroupsCommand;
|
51 | 52 | import edu.harvard.iq.dataverse.engine.command.impl.ListFacetsCommand;
|
| 53 | +import edu.harvard.iq.dataverse.engine.command.impl.ListMetadataBlockFacetsCommand; |
52 | 54 | import edu.harvard.iq.dataverse.engine.command.impl.ListMetadataBlocksCommand;
|
53 | 55 | import edu.harvard.iq.dataverse.engine.command.impl.ListRoleAssignments;
|
54 | 56 | import edu.harvard.iq.dataverse.engine.command.impl.ListRolesCommand;
|
|
62 | 64 | import edu.harvard.iq.dataverse.engine.command.impl.UpdateDataverseDefaultContributorRoleCommand;
|
63 | 65 | import edu.harvard.iq.dataverse.engine.command.impl.UpdateDataverseMetadataBlocksCommand;
|
64 | 66 | import edu.harvard.iq.dataverse.engine.command.impl.UpdateExplicitGroupCommand;
|
| 67 | +import edu.harvard.iq.dataverse.engine.command.impl.UpdateMetadataBlockFacetsCommand; |
65 | 68 | import edu.harvard.iq.dataverse.settings.SettingsServiceBean;
|
66 | 69 | import edu.harvard.iq.dataverse.util.BundleUtil;
|
67 | 70 | import edu.harvard.iq.dataverse.util.ConstraintViolationUtil;
|
68 | 71 | import edu.harvard.iq.dataverse.util.StringUtil;
|
69 | 72 | import static edu.harvard.iq.dataverse.util.StringUtil.nonEmpty;
|
70 | 73 |
|
71 | 74 | import edu.harvard.iq.dataverse.util.json.JSONLDUtil;
|
72 |
| -import edu.harvard.iq.dataverse.util.json.JsonLDTerm; |
73 | 75 | import edu.harvard.iq.dataverse.util.json.JsonParseException;
|
74 | 76 | import static edu.harvard.iq.dataverse.util.json.JsonPrinter.brief;
|
75 | 77 | import java.io.StringReader;
|
|
91 | 93 | import javax.json.JsonValue;
|
92 | 94 | import javax.json.JsonValue.ValueType;
|
93 | 95 | import javax.json.stream.JsonParsingException;
|
94 |
| -import javax.validation.ConstraintViolation; |
95 | 96 | import javax.validation.ConstraintViolationException;
|
96 | 97 | import javax.ws.rs.BadRequestException;
|
97 | 98 | import javax.ws.rs.Consumes;
|
|
114 | 115 | import java.text.SimpleDateFormat;
|
115 | 116 | import java.util.Arrays;
|
116 | 117 | import java.util.Date;
|
117 |
| -import java.util.HashMap; |
118 | 118 | import java.util.Map;
|
119 | 119 | import java.util.Optional;
|
| 120 | +import java.util.stream.Collectors; |
120 | 121 | import javax.servlet.http.HttpServletResponse;
|
121 | 122 | import javax.ws.rs.WebApplicationException;
|
122 | 123 | import javax.ws.rs.core.Context;
|
@@ -713,6 +714,78 @@ public Response setFacets(@PathParam("identifier") String dvIdtf, String facetId
|
713 | 714 | }
|
714 | 715 | }
|
715 | 716 |
|
| 717 | + @GET |
| 718 | + @Path("{identifier}/metadatablockfacets") |
| 719 | + @Produces(MediaType.APPLICATION_JSON) |
| 720 | + public Response listMetadataBlockFacets(@PathParam("identifier") String dvIdtf) { |
| 721 | + try { |
| 722 | + User u = findUserOrDie(); |
| 723 | + DataverseRequest request = createDataverseRequest(u); |
| 724 | + Dataverse dataverse = findDataverseOrDie(dvIdtf); |
| 725 | + List<DataverseMetadataBlockFacet> metadataBlockFacets = Optional.ofNullable(execCommand(new ListMetadataBlockFacetsCommand(request, dataverse))).orElse(Collections.emptyList()); |
| 726 | + List<DataverseMetadataBlockFacetDTO.MetadataBlockDTO> metadataBlocksDTOs = metadataBlockFacets.stream() |
| 727 | + .map(item -> new DataverseMetadataBlockFacetDTO.MetadataBlockDTO(item.getMetadataBlock().getName(), item.getMetadataBlock().getLocaleDisplayFacet())) |
| 728 | + .collect(Collectors.toList()); |
| 729 | + DataverseMetadataBlockFacetDTO response = new DataverseMetadataBlockFacetDTO(dataverse.getId(), dataverse.getAlias(), dataverse.isMetadataBlockFacetRoot(), metadataBlocksDTOs); |
| 730 | + return Response.ok(response).build(); |
| 731 | + } catch (WrappedResponse e) { |
| 732 | + return e.getResponse(); |
| 733 | + } |
| 734 | + } |
| 735 | + |
| 736 | + @POST |
| 737 | + @Path("{identifier}/metadatablockfacets") |
| 738 | + @Consumes(MediaType.APPLICATION_JSON) |
| 739 | + @Produces(MediaType.APPLICATION_JSON) |
| 740 | + public Response setMetadataBlockFacets(@PathParam("identifier") String dvIdtf, List<String> metadataBlockNames) { |
| 741 | + try { |
| 742 | + Dataverse dataverse = findDataverseOrDie(dvIdtf); |
| 743 | + |
| 744 | + if(!dataverse.isMetadataBlockFacetRoot()) { |
| 745 | + return badRequest(String.format("Dataverse: %s must have metadata block facet root set to true", dvIdtf)); |
| 746 | + } |
| 747 | + |
| 748 | + List<DataverseMetadataBlockFacet> metadataBlockFacets = new LinkedList<>(); |
| 749 | + for(String metadataBlockName: metadataBlockNames) { |
| 750 | + MetadataBlock metadataBlock = findMetadataBlock(metadataBlockName); |
| 751 | + if (metadataBlock == null) { |
| 752 | + return badRequest(String.format("Invalid metadata block name: %s", metadataBlockName)); |
| 753 | + } |
| 754 | + |
| 755 | + DataverseMetadataBlockFacet metadataBlockFacet = new DataverseMetadataBlockFacet(); |
| 756 | + metadataBlockFacet.setDataverse(dataverse); |
| 757 | + metadataBlockFacet.setMetadataBlock(metadataBlock); |
| 758 | + metadataBlockFacets.add(metadataBlockFacet); |
| 759 | + } |
| 760 | + |
| 761 | + execCommand(new UpdateMetadataBlockFacetsCommand(createDataverseRequest(findUserOrDie()), dataverse, metadataBlockFacets)); |
| 762 | + return ok(String.format("Metadata block facets updated. DataverseId: %s blocks: %s", dvIdtf, metadataBlockNames)); |
| 763 | + |
| 764 | + } catch (WrappedResponse ex) { |
| 765 | + return ex.getResponse(); |
| 766 | + } |
| 767 | + } |
| 768 | + |
| 769 | + @POST |
| 770 | + @Path("{identifier}/metadatablockfacets/isRoot") |
| 771 | + @Consumes(MediaType.APPLICATION_JSON) |
| 772 | + @Produces(MediaType.APPLICATION_JSON) |
| 773 | + public Response updateMetadataBlockFacetsRoot(@PathParam("identifier") String dvIdtf, String body) { |
| 774 | + try { |
| 775 | + final boolean blockFacetsRoot = parseBooleanOrDie(body); |
| 776 | + Dataverse dataverse = findDataverseOrDie(dvIdtf); |
| 777 | + if(dataverse.isMetadataBlockFacetRoot() == blockFacetsRoot) { |
| 778 | + return ok(String.format("No update needed, dataverse already consistent with new value. DataverseId: %s blockFacetsRoot: %s", dvIdtf, blockFacetsRoot)); |
| 779 | + } |
| 780 | + |
| 781 | + execCommand(new UpdateMetadataBlockFacetRootCommand(createDataverseRequest(findUserOrDie()), dataverse, blockFacetsRoot)); |
| 782 | + return ok(String.format("Metadata block facets root updated. DataverseId: %s blockFacetsRoot: %s", dvIdtf, blockFacetsRoot)); |
| 783 | + |
| 784 | + } catch (WrappedResponse ex) { |
| 785 | + return ex.getResponse(); |
| 786 | + } |
| 787 | + } |
| 788 | + |
716 | 789 | // FIXME: This listContent method is way too optimistic, always returning "ok" and never "error".
|
717 | 790 | // TODO: Investigate why there was a change in the timeframe of when pull request #4350 was merged
|
718 | 791 | // (2438-4295-dois-for-files branch) such that a contributor API token no longer allows this method
|
|
0 commit comments