Skip to content
Snippets Groups Projects

feat: publication storage service on file system

Merged Hugues.Cazeaux requested to merge HCA-DepositService into master
3 unresolved threads
Files
16
@@ -7,11 +7,12 @@ import static ch.unige.aou.model.publication.Publication.PublicationStatus.SUBMI
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
import ch.unige.aou.AouMetadataVersion;
import ch.unige.aou.controller.AouResourceController;
import ch.unige.aou.rest.ResourceName;
import ch.unige.aou.service.MetadataService;
import ch.unige.solidify.rest.ActionName;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.core.io.ClassPathResource;
import org.springframework.data.domain.Page;
@@ -35,10 +36,13 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import ch.unige.solidify.SolidifyConstants;
import ch.unige.solidify.config.SolidifyEventPublisher;
import ch.unige.solidify.exception.SolidifyResourceNotFoundException;
import ch.unige.solidify.model.RoleApplication;
import ch.unige.solidify.rest.ActionName;
import ch.unige.solidify.rest.Collection;
import ch.unige.solidify.rest.Result;
import ch.unige.solidify.security.NoOnePermissions;
@@ -46,23 +50,21 @@ import ch.unige.solidify.security.UserPermissions;
import ch.unige.solidify.util.StringTool;
import ch.unige.aou.AouConstants;
import ch.unige.aou.AouMetadataVersion;
import ch.unige.aou.business.PersonService;
import ch.unige.aou.business.PublicationService;
import ch.unige.aou.controller.AdminController;
import ch.unige.aou.controller.AouResourceController;
import ch.unige.aou.message.PublicationMessage;
import ch.unige.aou.model.StatusHistory;
import ch.unige.aou.model.publication.Comment;
import ch.unige.aou.model.publication.Publication;
import ch.unige.aou.model.publication.Publication.PublicationStatus;
import ch.unige.aou.model.settings.Person;
import ch.unige.aou.rest.AouActionName;
import ch.unige.aou.rest.ResourceName;
import ch.unige.aou.rest.UrlPath;
import org.springframework.web.servlet.mvc.method.annotation.StreamingResponseBody;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import ch.unige.aou.service.MetadataService;
@UserPermissions
@RestController
@@ -148,13 +150,18 @@ public class PublicationController extends AouResourceController<Publication> {
@PostMapping(SolidifyConstants.URL_ID_PLUS_SEP + AouActionName.SUBMIT_FOR_VALIDATION)
@PreAuthorize("@publicationPermissionService.isAllowed(#id, 'SUBMIT_FOR_VALIDATION')")
public HttpEntity<Result> submitForApproval(@PathVariable String id) {
return this.changePublicationStatus(IN_VALIDATION, id);
return new ResponseEntity<>(this.changePublicationStatus(IN_VALIDATION, id), HttpStatus.OK);
}
@PostMapping(SolidifyConstants.URL_ID_PLUS_SEP + AouActionName.SUBMIT)
@PreAuthorize("@publicationPermissionService.isAllowed(#id, 'SUBMIT')")
public HttpEntity<Result> submit(@PathVariable String id) {
return this.changePublicationStatus(SUBMITTED, id);
Result result = this.changePublicationStatus(SUBMITTED, id);
// Put publication in queue to be processed
if (result.getStatus() == Result.ActionStatus.EXECUTED) {
    • For the DocumentFile treatment, the workflow is started by using an entity listener (DocumentFileEntityListener) who publishes the event. I would use the same logic for both.

Please register or sign in to reply
SolidifyEventPublisher.getPublisher().publishEvent(new PublicationMessage(id));
}
return new ResponseEntity<>(result, HttpStatus.OK);
}
@PostMapping(SolidifyConstants.URL_ID_PLUS_SEP + AouActionName.REJECT)
@@ -164,7 +171,7 @@ public class PublicationController extends AouResourceController<Publication> {
if (reason.isBlank()) {
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
return this.changePublicationStatus(REJECTED, id, reason);
return new ResponseEntity<>(this.changePublicationStatus(REJECTED, id, reason), HttpStatus.OK);
}
@PostMapping(SolidifyConstants.URL_ID_PLUS_SEP + AouActionName.ASK_FEEDBACK)
@@ -174,7 +181,7 @@ public class PublicationController extends AouResourceController<Publication> {
if (reason.isBlank()) {
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
}
return this.changePublicationStatus(FEEDBACK_REQUIRED, id, reason);
return new ResponseEntity<>(this.changePublicationStatus(FEEDBACK_REQUIRED, id, reason), HttpStatus.OK);
}
@Override
@@ -218,24 +225,23 @@ public class PublicationController extends AouResourceController<Publication> {
@GetMapping(AouActionName.GET_MY_DEFAULT_PROFILE_DATA)
public HttpEntity<String> getDefaultProfileDataToJson() {
Person creator = this.personService.getLinkedPerson(SecurityContextHolder.getContext().getAuthentication());
String jsonResult = ((PublicationService)this.itemService).convertDefaultProfileDataToJson(creator);
String jsonResult = ((PublicationService) this.itemService).convertDefaultProfileDataToJson(creator);
final HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
return new ResponseEntity<>(jsonResult, headers, HttpStatus.OK);
}
private HttpEntity<Result> changePublicationStatus(PublicationStatus newStatus, String id) {
private Result changePublicationStatus(PublicationStatus newStatus, String id) {
return this.changePublicationStatus(newStatus, id, null);
}
private HttpEntity<Result> changePublicationStatus(PublicationStatus newStatus, String id, String statusMessage) {
private Result changePublicationStatus(PublicationStatus newStatus, String id, String statusMessage) {
final Publication item = this.itemService.findOne(id);
final Result res = new Result(id);
if (item == null) {
res.setStatus(Result.ActionStatus.NOT_EXECUTED);
return new ResponseEntity<>(res, HttpStatus.NOT_FOUND);
} else if (((PublicationService) this.itemService).statusUpdateIsValid(item, newStatus)) {
item.setStatus(newStatus);
item.setStatusMessage(statusMessage);
@@ -256,12 +262,11 @@ public class PublicationController extends AouResourceController<Publication> {
this.itemService.save(item);
res.setStatus(Result.ActionStatus.EXECUTED);
res.setMesssage("Publication status changed successfully");
return new ResponseEntity<>(res, HttpStatus.OK);
} else {
res.setStatus(Result.ActionStatus.NON_APPLICABLE);
res.setMesssage("Publications's status cannot be altered in this way");
return new ResponseEntity<>(res, HttpStatus.BAD_REQUEST);
}
return res;
}
private boolean userCanBypassValidationRights() {
Loading