Skip to content

Commit 29bce91

Browse files
MarekSuchanekdennisvang
authored andcommitted
cherry-pick 172c2c4: Add permits for index entries
1 parent 6587b09 commit 29bce91

32 files changed

+894
-123
lines changed

src/main/java/nl/dtls/fairdatapoint/api/controller/index/IndexAdminController.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@
3131
import nl.dtls.fairdatapoint.database.rdf.repository.exception.MetadataRepositoryException;
3232
import nl.dtls.fairdatapoint.entity.index.event.Event;
3333
import nl.dtls.fairdatapoint.service.UtilityService;
34+
import nl.dtls.fairdatapoint.service.index.entry.IndexEntryService;
3435
import nl.dtls.fairdatapoint.service.index.event.EventService;
35-
import nl.dtls.fairdatapoint.service.index.harvester.HarvesterService;
3636
import nl.dtls.fairdatapoint.service.index.webhook.WebhookService;
3737
import org.springframework.beans.factory.annotation.Autowired;
3838
import org.springframework.http.HttpStatus;
@@ -57,7 +57,7 @@ public class IndexAdminController {
5757
private WebhookService webhookService;
5858

5959
@Autowired
60-
private HarvesterService harvesterService;
60+
private IndexEntryService indexEntryService;
6161

6262
@Operation(hidden = true)
6363
@PostMapping("/trigger")
@@ -72,7 +72,7 @@ public void triggerMetadataRetrieve(
7272
final Event event = eventService.acceptAdminTrigger(request, reqDto);
7373
webhookService.triggerWebhooks(event);
7474
eventService.triggerMetadataRetrieval(event);
75-
harvesterService.harvest(reqDto.getClientUrl());
75+
indexEntryService.harvest(reqDto.getClientUrl());
7676
}
7777

7878
@Operation(hidden = true)

src/main/java/nl/dtls/fairdatapoint/api/controller/index/IndexEntryController.java

Lines changed: 55 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,26 @@
2323
package nl.dtls.fairdatapoint.api.controller.index;
2424

2525
import io.swagger.v3.oas.annotations.tags.Tag;
26+
import jakarta.servlet.http.HttpServletRequest;
2627
import nl.dtls.fairdatapoint.api.dto.index.entry.IndexEntryDTO;
2728
import nl.dtls.fairdatapoint.api.dto.index.entry.IndexEntryDetailDTO;
2829
import nl.dtls.fairdatapoint.api.dto.index.entry.IndexEntryInfoDTO;
30+
import nl.dtls.fairdatapoint.api.dto.index.entry.IndexEntryUpdateDTO;
31+
import nl.dtls.fairdatapoint.api.dto.index.ping.PingDTO;
2932
import nl.dtls.fairdatapoint.database.rdf.repository.exception.MetadataRepositoryException;
33+
import nl.dtls.fairdatapoint.entity.index.entry.IndexEntryPermit;
34+
import nl.dtls.fairdatapoint.entity.index.event.Event;
3035
import nl.dtls.fairdatapoint.service.index.entry.IndexEntryService;
36+
import nl.dtls.fairdatapoint.service.index.event.EventService;
37+
import nl.dtls.fairdatapoint.service.index.harvester.HarvesterService;
38+
import nl.dtls.fairdatapoint.service.index.webhook.WebhookService;
3139
import org.eclipse.rdf4j.model.Model;
3240
import org.springframework.beans.factory.annotation.Autowired;
3341
import org.springframework.data.domain.Page;
3442
import org.springframework.data.domain.Pageable;
3543
import org.springframework.http.HttpStatus;
3644
import org.springframework.http.MediaType;
45+
import org.springframework.security.access.prepost.PreAuthorize;
3746
import org.springframework.web.bind.annotation.*;
3847

3948
import java.util.List;
@@ -47,19 +56,55 @@ public class IndexEntryController {
4756
@Autowired
4857
private IndexEntryService service;
4958

59+
@Autowired
60+
private HarvesterService harvesterService;
61+
62+
@Autowired
63+
private EventService eventService;
64+
65+
@Autowired
66+
private WebhookService webhookService;
67+
68+
@Autowired
69+
private IndexEntryService indexEntryService;
70+
5071
@GetMapping(path = "", produces = MediaType.APPLICATION_JSON_VALUE)
5172
public Page<IndexEntryDTO> getEntriesPage(
5273
Pageable pageable,
53-
@RequestParam(required = false, defaultValue = "") String state
74+
@RequestParam(required = false, defaultValue = "") String state,
75+
@RequestParam(required = false, defaultValue = "accepted") String permit
5476
) {
55-
return service.getEntriesPageDTOs(pageable, state);
77+
return service.getEntriesPageDTOs(pageable, state, permit);
5678
}
5779

5880
@GetMapping(path = "/{uuid}", produces = MediaType.APPLICATION_JSON_VALUE)
5981
public Optional<IndexEntryDetailDTO> getEntry(@PathVariable final String uuid) {
6082
return service.getEntryDetailDTO(uuid);
6183
}
6284

85+
@PutMapping(path = "/{uuid}", produces = MediaType.APPLICATION_JSON_VALUE)
86+
@PreAuthorize("hasRole('ADMIN')")
87+
public Optional<IndexEntryDetailDTO> updateEntry(
88+
@PathVariable final String uuid,
89+
@RequestBody IndexEntryUpdateDTO reqDto,
90+
HttpServletRequest request
91+
) throws MetadataRepositoryException {
92+
final Optional<IndexEntryDetailDTO> resDto = service.updateEntry(uuid, reqDto);
93+
if (resDto.isPresent()) {
94+
final String clientUrl = resDto.get().getClientUrl();
95+
if (resDto.get().getPermit().equals(IndexEntryPermit.ACCEPTED)) {
96+
final Event event = eventService.acceptAdminTrigger(request, new PingDTO(clientUrl));
97+
webhookService.triggerWebhooks(event);
98+
eventService.triggerMetadataRetrieval(event);
99+
indexEntryService.harvest(clientUrl);
100+
}
101+
else {
102+
harvesterService.deleteHarvestedData(clientUrl);
103+
}
104+
}
105+
return resDto;
106+
}
107+
63108
@GetMapping(path = "/{uuid}/data", produces = "!application/json")
64109
public Model getEntryData(@PathVariable final String uuid) throws MetadataRepositoryException {
65110
return service.getEntryHarvestedData(uuid);
@@ -72,12 +117,16 @@ public void deleteEntry(@PathVariable final String uuid) throws MetadataReposito
72117
}
73118

74119
@GetMapping(path = "/all", produces = MediaType.APPLICATION_JSON_VALUE)
75-
public List<IndexEntryDTO> getEntriesAll() {
76-
return service.getAllEntriesAsDTOs();
120+
public List<IndexEntryDTO> getEntriesAll(
121+
@RequestParam(required = false, defaultValue = "accepted") String permit
122+
) {
123+
return service.getAllEntriesAsDTOs(permit);
77124
}
78125

79126
@GetMapping(path = "/info", produces = MediaType.APPLICATION_JSON_VALUE)
80-
public IndexEntryInfoDTO getEntriesInfo() {
81-
return service.getEntriesInfo();
127+
public IndexEntryInfoDTO getEntriesInfo(
128+
@RequestParam(required = false, defaultValue = "accepted") String permit
129+
) {
130+
return service.getEntriesInfo(permit);
82131
}
83132
}

src/main/java/nl/dtls/fairdatapoint/api/controller/index/IndexPingController.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@
3535
import nl.dtls.fairdatapoint.database.rdf.repository.exception.MetadataRepositoryException;
3636
import nl.dtls.fairdatapoint.entity.index.event.Event;
3737
import nl.dtls.fairdatapoint.service.UtilityService;
38+
import nl.dtls.fairdatapoint.service.index.entry.IndexEntryService;
3839
import nl.dtls.fairdatapoint.service.index.event.EventService;
39-
import nl.dtls.fairdatapoint.service.index.harvester.HarvesterService;
4040
import nl.dtls.fairdatapoint.service.index.webhook.WebhookService;
4141
import org.springframework.beans.factory.annotation.Autowired;
4242
import org.springframework.http.HttpStatus;
@@ -57,7 +57,7 @@ public class IndexPingController {
5757
private WebhookService webhookService;
5858

5959
@Autowired
60-
private HarvesterService harvesterService;
60+
private IndexEntryService indexEntryService;
6161

6262
@Autowired
6363
private UtilityService utilityService;
@@ -100,7 +100,7 @@ public ResponseEntity<Void> receivePing(
100100
final Event event = eventService.acceptIncomingPing(reqDto, request);
101101
log.info("Triggering metadata retrieval for {}", event.getRelatedTo().getClientUrl());
102102
eventService.triggerMetadataRetrieval(event);
103-
harvesterService.harvest(reqDto.getClientUrl());
103+
indexEntryService.harvest(reqDto.getClientUrl());
104104
webhookService.triggerWebhooks(event);
105105
return new ResponseEntity<>(HttpStatus.NO_CONTENT);
106106
}

src/main/java/nl/dtls/fairdatapoint/api/dto/index/entry/IndexEntryDTO.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import lombok.Getter;
2828
import lombok.NoArgsConstructor;
2929
import lombok.Setter;
30+
import nl.dtls.fairdatapoint.entity.index.entry.IndexEntryPermit;
3031
import org.hibernate.validator.constraints.URL;
3132

3233
@NoArgsConstructor
@@ -45,6 +46,9 @@ public class IndexEntryDTO {
4546
@NotNull
4647
private IndexEntryStateDTO state;
4748

49+
@NotNull
50+
private IndexEntryPermit permit;
51+
4852
@NotNull
4953
private String registrationTime;
5054

src/main/java/nl/dtls/fairdatapoint/api/dto/index/entry/IndexEntryDetailDTO.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import lombok.NoArgsConstructor;
2929
import lombok.Setter;
3030
import nl.dtls.fairdatapoint.api.dto.index.event.EventDTO;
31+
import nl.dtls.fairdatapoint.entity.index.entry.IndexEntryPermit;
3132
import nl.dtls.fairdatapoint.entity.index.entry.RepositoryMetadata;
3233
import org.hibernate.validator.constraints.URL;
3334

@@ -49,6 +50,9 @@ public class IndexEntryDetailDTO {
4950
@NotNull
5051
private IndexEntryStateDTO state;
5152

53+
@NotNull
54+
private IndexEntryPermit permit;
55+
5256
@NotNull
5357
private RepositoryMetadata currentMetadata;
5458

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
/**
2+
* The MIT License
3+
* Copyright © 2017 DTL
4+
*
5+
* Permission is hereby granted, free of charge, to any person obtaining a copy
6+
* of this software and associated documentation files (the "Software"), to deal
7+
* in the Software without restriction, including without limitation the rights
8+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
* copies of the Software, and to permit persons to whom the Software is
10+
* furnished to do so, subject to the following conditions:
11+
*
12+
* The above copyright notice and this permission notice shall be included in
13+
* all copies or substantial portions of the Software.
14+
*
15+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21+
* THE SOFTWARE.
22+
*/
23+
package nl.dtls.fairdatapoint.api.dto.index.entry;
24+
25+
import lombok.AllArgsConstructor;
26+
import lombok.Getter;
27+
import lombok.NoArgsConstructor;
28+
import lombok.Setter;
29+
import nl.dtls.fairdatapoint.entity.index.entry.IndexEntryPermit;
30+
31+
@NoArgsConstructor
32+
@AllArgsConstructor
33+
@Getter
34+
@Setter
35+
public class IndexEntryUpdateDTO {
36+
37+
private IndexEntryPermit permit;
38+
}

src/main/java/nl/dtls/fairdatapoint/api/dto/index/settings/IndexSettingsDTO.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ public class IndexSettingsDTO {
3939
@NotNull
4040
private IndexSettingsPingDTO ping;
4141

42+
@NotNull
43+
private Boolean autoPermit;
44+
4245
@NotNull
4346
private Boolean isDefault;
4447
}

src/main/java/nl/dtls/fairdatapoint/api/dto/index/settings/IndexSettingsUpdateDTO.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,7 @@ public class IndexSettingsUpdateDTO {
4141
@Valid
4242
@NotNull
4343
private IndexSettingsPingDTO ping;
44+
45+
@NotNull
46+
private Boolean autoPermit;
4447
}

src/main/java/nl/dtls/fairdatapoint/config/properties/InstanceProperties.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class InstanceProperties {
3838
private boolean behindProxy = true;
3939
private String persistentUrl;
4040
private boolean index;
41+
private boolean indexAutoPermit;
4142

4243
private String title = "FAIR Data Point";
4344
private String subtitle = "Metadata for machines";

0 commit comments

Comments
 (0)