Skip to content

Commit

Permalink
Merge pull request #38 from elixir-europe/ena-mars-receipt
Browse files Browse the repository at this point in the history
Ena mars receipt
  • Loading branch information
bedroesb authored Jun 26, 2024
2 parents f3c745a + 6860019 commit 5d84a54
Show file tree
Hide file tree
Showing 13 changed files with 690 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import com.elixir.biohackaton.ISAToSRA.model.IsaJson;
import com.elixir.biohackaton.ISAToSRA.model.Study;
import com.elixir.biohackaton.ISAToSRA.sra.service.*;
import com.elixir.biohackaton.ISAToSRA.sra.model.MarsReceipt;
import com.elixir.biohackaton.ISAToSRA.sra.model.Receipt;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
Expand All @@ -30,34 +32,42 @@
@Slf4j
@RestController
public class WebinIsaToXmlSubmissionController {
@Autowired private BioSamplesAccessionsParser bioSamplesAccessionsParser;
@Autowired
private BioSamplesAccessionsParser bioSamplesAccessionsParser;

@Autowired private WebinStudyXmlCreator webinStudyXmlCreator;
@Autowired
private WebinStudyXmlCreator webinStudyXmlCreator;

@Autowired private WebinExperimentXmlCreator webinExperimentXmlCreator;
@Autowired
private WebinExperimentXmlCreator webinExperimentXmlCreator;

@Autowired private WebinProjectXmlCreator webinProjectXmlCreator;
@Autowired
private WebinProjectXmlCreator webinProjectXmlCreator;

@Autowired private WebinRunXmlCreator webinRunXmlCreator;
@Autowired
private WebinRunXmlCreator webinRunXmlCreator;

@Autowired private WebinHttpSubmissionService webinHttpSubmissionService;
@Autowired
private WebinHttpSubmissionService webinHttpSubmissionService;

@Autowired private ObjectMapper objectMapper;
@Autowired
private ObjectMapper objectMapper;

@Autowired private ReceiptConversionService receiptConversionService;
@Autowired
private ReceiptConversionService receiptConversionService;

@ApiResponses(
value = {
@ApiResponse(responseCode = "200", description = "Ok"),
@ApiResponse(responseCode = "401", description = "Unauthorized"),
@ApiResponse(responseCode = "403", description = "Forbidden"),
@ApiResponse(responseCode = "400", description = "Bad request"),
@ApiResponse(responseCode = "408", description = "Request Timeout"),
@ApiResponse(responseCode = "415", description = "Unsupported media type")
})
@PostMapping(
value = "/submit",
consumes = {APPLICATION_JSON_VALUE, APPLICATION_XML_VALUE})
@Autowired
private ReceiptMarsService receiptMarsService;

@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "Ok"),
@ApiResponse(responseCode = "401", description = "Unauthorized"),
@ApiResponse(responseCode = "403", description = "Forbidden"),
@ApiResponse(responseCode = "400", description = "Bad request"),
@ApiResponse(responseCode = "408", description = "Request Timeout"),
@ApiResponse(responseCode = "415", description = "Unsupported media type")
})
@PostMapping(value = "/submit", consumes = { APPLICATION_JSON_VALUE, APPLICATION_XML_VALUE })
public String performSubmissionToEna(
@RequestBody final String submissionPayload,
@RequestParam(value = "webinUserName") String webinUserName,
Expand All @@ -73,9 +83,8 @@ public String performSubmissionToEna(

final IsaJson isaJson = this.objectMapper.readValue(submissionPayload, IsaJson.class);
final List<Study> studies = getStudies(isaJson);
final Map<String, String> typeToBioSamplesAccessionMap =
this.bioSamplesAccessionsParser.parseIsaFileAndGetBioSampleAccessions(
studies, new HashMap<>());
final Map<String, String> typeToBioSamplesAccessionMap = this.bioSamplesAccessionsParser
.parseIsaFileAndGetBioSampleAccessions(studies, new HashMap<>());

final Document document = DocumentHelper.createDocument();
final Element webinElement = startPreparingWebinV2SubmissionXml(document);
Expand All @@ -84,9 +93,8 @@ public String performSubmissionToEna(
this.webinStudyXmlCreator.createENAStudySetElement(
webinElement, studies, randomSubmissionIdentifier);

final Map<Integer, String> experimentSequenceMap =
this.webinExperimentXmlCreator.createENAExperimentSetElement(
typeToBioSamplesAccessionMap, webinElement, studies, randomSubmissionIdentifier);
final Map<Integer, String> experimentSequenceMap = this.webinExperimentXmlCreator.createENAExperimentSetElement(
typeToBioSamplesAccessionMap, webinElement, studies, randomSubmissionIdentifier);

this.webinRunXmlCreator.createENARunSetElement(
webinElement, studies, experimentSequenceMap, randomSubmissionIdentifier);
Expand All @@ -98,11 +106,12 @@ public String performSubmissionToEna(

writer.write(document);

final String receiptXml =
webinHttpSubmissionService.performWebinSubmission(
webinUserName, document.asXML(), webinPassword);
final String receiptXml = webinHttpSubmissionService.performWebinSubmission(
webinUserName, document.asXML(), webinPassword);
final Receipt receiptJson = receiptConversionService.readReceiptXml(receiptXml);
final MarsReceipt marsReceipt = receiptMarsService.convertReceiptToMars(receiptJson, isaJson);

return receiptConversionService.convertReceiptXmlToJson(receiptXml);
return receiptMarsService.convertMarsReceiptToJson(marsReceipt);
}

public List<Study> getStudies(final IsaJson isaJson) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.elixir.biohackaton.ISAToSRA.sra.model;

import lombok.Builder;
import lombok.Data;

@Builder
@Data
public class MarsReceipt {
private String targetRepository;

private MarsReceiptError[] errors;

private MarsReceiptInfo[] info;

private MarsReceiptAccession[] accessions;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.elixir.biohackaton.ISAToSRA.sra.model;

import lombok.Builder;
import lombok.Data;

@Builder
@Data
public class MarsReceiptAccession {
private String value;

private MarsReceiptPath[] path;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.elixir.biohackaton.ISAToSRA.sra.model;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;

import lombok.Builder;
import lombok.Data;

@Builder
@Data
public class MarsReceiptError {
private MarsReceiptErrorType type;

private String message;

@JsonInclude(Include.NON_NULL)
private MarsReceiptPath[] path;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.elixir.biohackaton.ISAToSRA.sra.model;

public enum MarsReceiptErrorType {
INVALID_METADATA,
INVALID_DATA;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.elixir.biohackaton.ISAToSRA.sra.model;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;

import lombok.Builder;
import lombok.Data;

@Builder
@Data
public class MarsReceiptInfo {
@JsonInclude(Include.NON_NULL)
private String name;

private String message;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.elixir.biohackaton.ISAToSRA.sra.model;

import lombok.Builder;
import lombok.Data;
import lombok.Builder.Default;

import java.util.List;
import java.util.ArrayList;

@Builder
@Data
public class MarsReceiptMessage {
@Default
private List<MarsReceiptError> errors = new ArrayList<>();

@Default
private List<MarsReceiptInfo> info= new ArrayList<>();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.elixir.biohackaton.ISAToSRA.sra.model;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;

import lombok.Builder;
import lombok.Data;

@Builder
@Data
public class MarsReceiptPath {
private String key;

@JsonInclude(Include.NON_NULL)
private MarsReceiptWhere where;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.elixir.biohackaton.ISAToSRA.sra.model;

import lombok.Builder;
import lombok.Data;

@Builder
@Data
public class MarsReceiptWhere {
private String key;

private String value;
}
Loading

0 comments on commit 5d84a54

Please sign in to comment.