diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 1a90de7239154f4472704d8e9d73c69503eb519f..b5511df7904d649e1cf5dfc50a6bd2c50ad4e3bc 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -65,7 +65,7 @@ build-loader-docker-image: lint: stage: test tags: - - openstack + - openstack script: "./gradlew lint" cache: key: "$CI_COMMIT_REF_NAME" @@ -135,7 +135,7 @@ test-and-sonarqube-master: build: tags: - - openstack + - openstack stage: build script: - ./gradlew assemble @@ -155,26 +155,26 @@ build: .restart-config-server: &restart_config_server stage: build script: - - eval $(ssh-agent -s) - - ssh-add <(echo "${SSH_PRIVATE_KEY}") - - ssh -o StrictHostKeyChecking=no ${SERVER_USER}@${SERVER_IP} 'echo "Successfully connected on $(hostname)"' - - ssh ${SERVER_USER}@${SERVER_IP} "sudo systemctl restart bootapp@config-server" - - eval $(ssh-agent -k) + - eval $(ssh-agent -s) + - ssh-add <(echo "${SSH_PRIVATE_KEY}") + - ssh -o StrictHostKeyChecking=no ${SERVER_USER}@${SERVER_IP} 'echo "Successfully connected on $(hostname)"' + - ssh ${SERVER_USER}@${SERVER_IP} "sudo systemctl restart bootapp@config-server" + - eval $(ssh-agent -k) allow_failure: true restart-config-server-proxmox: - variables: - SERVER_IP: ${SERVER_IP_PROXMOX} - SERVER_USER: ${SERVER_USER_PROXMOX} - <<: *restart_config_server + variables: + SERVER_IP: ${SERVER_IP_PROXMOX} + SERVER_USER: ${SERVER_USER_PROXMOX} + <<: *restart_config_server restart-config-server-openstack: - tags: - - openstack - variables: - SERVER_IP: ${SERVER_IP_OPENSTACK_DEV} - SERVER_USER: ${SERVER_USER_OPENSTACK} - <<: *restart_config_server + tags: + - openstack + variables: + SERVER_IP: ${SERVER_IP_OPENSTACK_DEV} + SERVER_USER: ${SERVER_USER_OPENSTACK} + <<: *restart_config_server # DEPLOY diff --git a/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/GermplasmController.java b/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/GermplasmController.java index 3a50dff4f31314230d52ec2b68ca668d4e7c8670..2ea27ac7c0c900626eb9d72ec8bf6054d5ac112e 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/GermplasmController.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/api/brapi/v1/GermplasmController.java @@ -12,6 +12,7 @@ import fr.inra.urgi.faidare.domain.criteria.GermplasmGETSearchCriteria; import fr.inra.urgi.faidare.domain.criteria.GermplasmPOSTSearchCriteria; import fr.inra.urgi.faidare.domain.criteria.GermplasmSearchCriteria; import fr.inra.urgi.faidare.domain.criteria.base.PaginationCriteriaImpl; +import fr.inra.urgi.faidare.domain.data.germplasm.GermplasmMcpdVO; import fr.inra.urgi.faidare.domain.response.ApiResponseFactory; import fr.inra.urgi.faidare.domain.response.PaginatedList; import fr.inra.urgi.faidare.domain.response.Pagination; @@ -69,6 +70,21 @@ public class GermplasmController { return searchGermplasmService(criteria); } + /** + * @link https://brapi.docs.apiary.io/#reference/germplasm/germplasm/get-germplasm-mcpd-by-germplasmdbid + */ + @ApiOperation("Get germplasm mcpd by id") + @GetMapping("/brapi/v1/germplasm/{germplasmDbId}/mcpd") + public BrapiResponse<GermplasmMcpdVO> getGermplasmMcpd(@PathVariable String germplasmDbId) { + LOGGER.debug("germplasmDbId = " + germplasmDbId); + GermplasmMcpdVO germplasm = germplasmService.getAsMcpdById(germplasmDbId); + if (germplasm == null) { + throw new NotFoundException("Germplasm not found for id '" + germplasmDbId + "'"); + } + return ApiResponseFactory.createSingleObjectResponse(germplasm, null); + } + + /** * @link https://github.com/plantbreeding/API/blob/master/Specification/Germplasm/GermplasmSearchGET.md */ diff --git a/backend/src/main/java/fr/inra/urgi/faidare/api/faidare/v1/GnpISGermplasmController.java b/backend/src/main/java/fr/inra/urgi/faidare/api/faidare/v1/GnpISGermplasmController.java index adda854aa0578ee311df28c14f25ac44831ab29b..70c262b935def1c8f2bf8a6037e8c7d0fec34598 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/api/faidare/v1/GnpISGermplasmController.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/api/faidare/v1/GnpISGermplasmController.java @@ -3,6 +3,7 @@ package fr.inra.urgi.faidare.api.faidare.v1; import com.google.common.base.Strings; import fr.inra.urgi.faidare.api.BadRequestException; import fr.inra.urgi.faidare.api.NotFoundException; +import fr.inra.urgi.faidare.api.brapi.v1.GermplasmController; import fr.inra.urgi.faidare.domain.criteria.FaidareGermplasmPOSTShearchCriteria; import fr.inra.urgi.faidare.domain.criteria.GermplasmGETSearchCriteria; import fr.inra.urgi.faidare.domain.criteria.GermplasmPOSTSearchCriteria; @@ -12,6 +13,8 @@ import fr.inra.urgi.faidare.domain.response.PaginatedList; import fr.inra.urgi.faidare.service.es.GermplasmService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.io.FileSystemResource; import org.springframework.web.bind.annotation.*; @@ -29,6 +32,7 @@ import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; public class GnpISGermplasmController { private final GermplasmService germplasmService; + private final static Logger LOGGER = LoggerFactory.getLogger(GermplasmController.class); @Autowired public GnpISGermplasmController(GermplasmService germplasmService) { @@ -78,6 +82,7 @@ public class GnpISGermplasmController { return germplasm; } + /** * Webservice for exporting germplasm by criteria into a CSV. * <p> @@ -121,6 +126,27 @@ public class GnpISGermplasmController { return null; } + + + @PostMapping(value = "/germplasm-mcpd-csv", produces = "text/csv", consumes = APPLICATION_JSON_VALUE) + public FileSystemResource exportMcpd(@RequestBody @Valid FaidareGermplasmPOSTShearchCriteria criteria, HttpServletResponse response) { + + long limitResult = 50000L; + long nbResult = germplasmService.germplasmFind(criteria).getMetadata().getPagination().getTotalCount(); + + if (!(nbResult > limitResult)) { + try { + File exportFile = germplasmService.exportGermplasmMcpd(criteria); + response.setHeader("Content-Disposition", "attachment; filename=germplasm.gnpis.csv"); + return new FileSystemResource(exportFile); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("An error occurred when exporting germplasm: " + e.getMessage() + ".", e); + } + } + return null; + } + @ApiOperation("Search list of germplasm") @PostMapping(value = "/search", consumes = APPLICATION_JSON_VALUE) public GermplasmSearchResponse germplasmSearch(@RequestBody @Valid FaidareGermplasmPOSTShearchCriteria criteria) { diff --git a/backend/src/main/java/fr/inra/urgi/faidare/config/FaidareProperties.java b/backend/src/main/java/fr/inra/urgi/faidare/config/FaidareProperties.java index f0d3fdac1e49e4a0e8a693eed3d65ea26fa26905..c4cba9858db96ceb01def7b3a5c26d7bcf759722 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/config/FaidareProperties.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/config/FaidareProperties.java @@ -113,6 +113,7 @@ public class FaidareProperties { } public String getBaseIndexName(String documentType) { + documentType = documentType.replaceAll("([a-z0-9])([A-Z])", "$1-$2").toLowerCase(); return elasticsearchIndexingTemplate .replace("{documentType}", documentType.toLowerCase()); } diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmCollectingInfo.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmCollectingInfo.java new file mode 100644 index 0000000000000000000000000000000000000000..2acbf77fe3b9243509bc769f123ed41c2f529738 --- /dev/null +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmCollectingInfo.java @@ -0,0 +1,25 @@ +package fr.inra.urgi.faidare.domain.brapi.v1.data; + +import com.fasterxml.jackson.annotation.JsonView; +import fr.inra.urgi.faidare.domain.JSONView; +import fr.inra.urgi.faidare.domain.data.germplasm.ExtendedInstitute; +import fr.inra.urgi.faidare.domain.data.germplasm.InstituteVO; + +import java.io.Serializable; +import java.util.List; + +public interface BrapiGermplasmCollectingInfo extends Serializable { + + @JsonView(JSONView.BrapiFields.class) + List<? extends BrapiGermplasmInstitute> getCollectingInstitutes(); + + @JsonView(JSONView.BrapiFields.class) + String getCollectingMissionIdentifier(); + + @JsonView(JSONView.BrapiFields.class) + String getCollectingNumber(); + + @JsonView(JSONView.BrapiFields.class) + BrapiGermplasmCollectingSite getCollectingSite(); + +} diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmCollectingSite.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmCollectingSite.java new file mode 100644 index 0000000000000000000000000000000000000000..c16d41c5f6c0efdb79457536d48e3a77a010813c --- /dev/null +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmCollectingSite.java @@ -0,0 +1,36 @@ +package fr.inra.urgi.faidare.domain.brapi.v1.data; + +import com.fasterxml.jackson.annotation.JsonView; +import fr.inra.urgi.faidare.domain.JSONView; + +import java.io.Serializable; + +public interface BrapiGermplasmCollectingSite extends Serializable { + + @JsonView(JSONView.BrapiFields.class) + String getCoordinateUncertainty(); + + @JsonView(JSONView.BrapiFields.class) + String getElevation(); + + @JsonView(JSONView.BrapiFields.class) + String getGeoreferencingMethod(); + + @JsonView(JSONView.BrapiFields.class) + String getLatitudeDecimal(); + + @JsonView(JSONView.BrapiFields.class) + String getLatitudeDegrees(); + + @JsonView(JSONView.BrapiFields.class) + String getLocationDescription(); + + @JsonView(JSONView.BrapiFields.class) + String getLongitudeDecimal(); + + @JsonView(JSONView.BrapiFields.class) + String getLongitudeDegrees(); + + @JsonView(JSONView.BrapiFields.class) + String getSpatialReferenceSystem(); +} diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmDonorInfo.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmDonorInfo.java new file mode 100644 index 0000000000000000000000000000000000000000..b47883d4e79387623cad7d56bf9ef5c823211872 --- /dev/null +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmDonorInfo.java @@ -0,0 +1,17 @@ +package fr.inra.urgi.faidare.domain.brapi.v1.data; + +import com.fasterxml.jackson.annotation.JsonView; +import fr.inra.urgi.faidare.domain.JSONView; +import fr.inra.urgi.faidare.domain.data.germplasm.ExtendedInstitute; + +import java.io.Serializable; + +public interface BrapiGermplasmDonorInfo extends Serializable { + + @JsonView(JSONView.BrapiFields.class) + String getDonorAccessionNumber(); + + @JsonView(JSONView.BrapiFields.class) + BrapiGermplasmInstitute getDonorInstitute(); + +} diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmInstitute.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmInstitute.java new file mode 100644 index 0000000000000000000000000000000000000000..dfe70de89ab640e3aed3ae90121e4b65819428bb --- /dev/null +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmInstitute.java @@ -0,0 +1,15 @@ +package fr.inra.urgi.faidare.domain.brapi.v1.data; + +import com.fasterxml.jackson.annotation.JsonView; +import fr.inra.urgi.faidare.domain.JSONView; + +/** + * @author gcornut + */ +public interface BrapiGermplasmInstitute { + @JsonView(JSONView.BrapiFields.class) + String getInstituteName(); + + @JsonView(JSONView.BrapiFields.class) + String getInstituteCode(); +} diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmMcpd.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmMcpd.java new file mode 100644 index 0000000000000000000000000000000000000000..f1fea8bc5d27aca6fc77d43c1a3a613d25b501e6 --- /dev/null +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/brapi/v1/data/BrapiGermplasmMcpd.java @@ -0,0 +1,87 @@ +package fr.inra.urgi.faidare.domain.brapi.v1.data; + +import com.fasterxml.jackson.annotation.JsonView; +import fr.inra.urgi.faidare.domain.JSONView; +import fr.inra.urgi.faidare.domain.data.germplasm.DonorInfoVO; +import fr.inra.urgi.faidare.domain.data.germplasm.InstituteVO; + +import java.util.List; + +/** + * @author gcornut + */ +public interface BrapiGermplasmMcpd { + + @JsonView(JSONView.BrapiFields.class) + String getGermplasmDbId(); + + @JsonView(JSONView.BrapiFields.class) + String getGermplasmPUI(); + + @JsonView(JSONView.BrapiFields.class) + String getAccessionNumber(); + + @JsonView(JSONView.BrapiFields.class) + List<String> getAccessionNames(); + + @JsonView(JSONView.BrapiFields.class) + List<String> getAlternateIDs(); + + @JsonView(JSONView.BrapiFields.class) + String getCommonCropName(); + + @JsonView(JSONView.BrapiFields.class) + String getGenus(); + + @JsonView(JSONView.BrapiFields.class) + String getSpecies(); + + @JsonView(JSONView.BrapiFields.class) + String getSpeciesAuthority(); + + @JsonView(JSONView.BrapiFields.class) + String getSubtaxon(); + + @JsonView(JSONView.BrapiFields.class) + String getSubtaxonAuthority(); + + @JsonView(JSONView.BrapiFields.class) + String getAncestralData(); + + @JsonView(JSONView.BrapiFields.class) + String getBiologicalStatusOfAccessionCode(); + + @JsonView(JSONView.BrapiFields.class) + String getMlsStatus(); + + @JsonView(JSONView.BrapiFields.class) + String getCountryOfOriginCode(); + + @JsonView(JSONView.BrapiFields.class) + String getInstituteCode(); + + @JsonView(JSONView.BrapiFields.class) + BrapiGermplasmCollectingInfo getCollectingInfo(); + + @JsonView(JSONView.BrapiFields.class) + String getAcquisitionDate(); + + @JsonView(JSONView.BrapiFields.class) + String getAcquisitionSourceCode(); + + @JsonView(JSONView.BrapiFields.class) + List<DonorInfoVO> getDonorInfo(); + + @JsonView(JSONView.BrapiFields.class) + List<? extends BrapiGermplasmInstitute> getBreedingInstitutes(); + + @JsonView(JSONView.BrapiFields.class) + List<? extends BrapiGermplasmInstitute> getSafetyDuplicateInstitutes(); + + @JsonView(JSONView.BrapiFields.class) + List<String> getStorageTypeCodes(); + + @JsonView(JSONView.BrapiFields.class) + String getRemarks(); + +} diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/GnpISInternal.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/GnpISInternal.java index ce877f5b7375b76b8d0df75f6c64cbd5820a653d..dfecbe9ec9e1c0e5ff454cbbdcb09f0b5d2dd9ef 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/GnpISInternal.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/GnpISInternal.java @@ -13,12 +13,6 @@ import java.util.List; */ public interface GnpISInternal extends Serializable { - /** - * List of species group the VO belongs to - */ - @JsonView(JSONView.Internal.class) - List<Long> getSpeciesGroup(); - /** * Restricted group DB identifier from which the VO belong */ diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/LocationVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/LocationVO.java index f22c2bf57d5745eb3b30c22859f8f4c6edfe6f3d..f392d6f9627c2b5f0c2e7f2811a737da08c984c9 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/LocationVO.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/LocationVO.java @@ -212,15 +212,6 @@ public class LocationVO implements GnpISInternal, BrapiLocation, HasURI, HasURL, this.additionalInfo = additionalInfo; } - @Override - public List<Long> getSpeciesGroup() { - return speciesGroup; - } - - public void setSpeciesGroup(List<Long> speciesGroup) { - this.speciesGroup = speciesGroup; - } - @Override public Long getGroupId() { return groupId; diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/ProgramVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/ProgramVO.java index 07584931139e3f87e52379b05365392ce7bef048..70362a5ea404821db66e96123df5ea87cdb70b83 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/ProgramVO.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/ProgramVO.java @@ -123,15 +123,6 @@ public class ProgramVO implements GnpISInternal, BrapiProgram, HasURI, HasURL, I this.programDbId = programDbId; } - @Override - public List<Long> getSpeciesGroup() { - return speciesGroup; - } - - public void setSpeciesGroup(List<Long> speciesGroup) { - this.speciesGroup = speciesGroup; - } - @Override public Long getGroupId() { return groupId; diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/TrialVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/TrialVO.java index 71a150e390d569f3e840a47f878c24ebb8e7f32d..021533298b85aad42846f7a0c6658d4ff1f8075e 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/TrialVO.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/TrialVO.java @@ -198,15 +198,6 @@ public class TrialVO implements GnpISInternal, BrapiTrial, HasURI, HasURL, Inclu this.additionalInfo = additionalInfo; } - @Override - public List<Long> getSpeciesGroup() { - return speciesGroup; - } - - public void setSpeciesGroup(List<Long> speciesGroup) { - this.speciesGroup = speciesGroup; - } - @Override public Long getGroupId() { return groupId; diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollPop.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollPop.java index b9ab3e1b8f3ce3973eb74607a5d8869f9bcbfc63..32cb9c4b080a7511a2a364ee010c22415f5adb8b 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollPop.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollPop.java @@ -7,18 +7,18 @@ import fr.inra.urgi.faidare.domain.JSONView; * @author gcornut */ public interface CollPop { - @JsonView(JSONView.GnpISFields.class) + @JsonView(JSONView.BrapiFields.class) Long getId(); - @JsonView(JSONView.GnpISFields.class) + @JsonView(JSONView.BrapiFields.class) String getName(); - @JsonView(JSONView.GnpISFields.class) + @JsonView(JSONView.BrapiFields.class) String getType(); - @JsonView(JSONView.GnpISFields.class) + @JsonView(JSONView.BrapiFields.class) PuiNameValue getGermplasmRef(); - @JsonView(JSONView.GnpISFields.class) + @JsonView(JSONView.BrapiFields.class) Integer getGermplasmCount(); } diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollPopVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollPopVO.java index b26131fefef747a8aaeb46ea54640c3446850068..4b62dfc16a6b50117134d15e4b63740a335e6b81 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollPopVO.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollPopVO.java @@ -12,8 +12,8 @@ public class CollPopVO implements Serializable, CollPop { private Long id; private String name; private String type; - private SimpleVO germplasmRef; private Integer germplasmCount; + private PuiNameValueVO germplasmRef; @Override public Long getId() { @@ -43,11 +43,11 @@ public class CollPopVO implements Serializable, CollPop { } @Override - public SimpleVO getGermplasmRef() { + public PuiNameValueVO getGermplasmRef() { return germplasmRef; } - public void setGermplasmRef(SimpleVO germplasmRef) { + public void setGermplasmRef(PuiNameValueVO germplasmRef) { this.germplasmRef = germplasmRef; } diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollectingInfoVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollectingInfoVO.java new file mode 100644 index 0000000000000000000000000000000000000000..a4ec3abe7c23c4b771b9c114311fa1c40d674d5a --- /dev/null +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollectingInfoVO.java @@ -0,0 +1,85 @@ +package fr.inra.urgi.faidare.domain.data.germplasm; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiGermplasmCollectingInfo; +import fr.inra.urgi.faidare.domain.data.germplasm.InstituteVO; + +import java.io.Serializable; +import java.util.List; + +public class CollectingInfoVO implements BrapiGermplasmCollectingInfo, ExtendedCollectingInfo, Serializable { + + @JsonDeserialize(contentAs = InstituteVO.class) + private List<InstituteVO> collectingInstitutes; + + private String collectingMissionIdentifier; + private String collectingNumber; + private String materialType; + private String collectors; + private String collectingDate; + + @JsonDeserialize(as = CollectingSiteVO.class) + private CollectingSiteVO collectingSite; + + @Override + public List<InstituteVO> getCollectingInstitutes() { + return collectingInstitutes; + } + + public void setCollectingInstitutes(List<InstituteVO> collectingInstitutes) { + this.collectingInstitutes = collectingInstitutes; + } + + @Override + public String getCollectingMissionIdentifier() { + return collectingMissionIdentifier; + } + + public void setCollectingMissionIdentifier(String collectingMissionIdentifier) { + this.collectingMissionIdentifier = collectingMissionIdentifier; + } + + @Override + public String getCollectingNumber() { + return collectingNumber; + } + + public void setCollectingNumber(String collectingNumber) { + this.collectingNumber = collectingNumber; + } + + public String getMaterialType() { + return materialType; + } + + public void setMaterialType(String materialType) { + this.materialType = materialType; + } + + public String getCollectors() { + return collectors; + } + + public void setCollectors(String collectors) { + this.collectors = collectors; + } + + public String getCollectingDate() { + return collectingDate; + } + + public void setCollectingDate(String collectingDate) { + this.collectingDate = collectingDate; + } + + @Override + public CollectingSiteVO getCollectingSite() { + return collectingSite; + } + + public void setCollectingSite(CollectingSiteVO collectingSite) { + this.collectingSite = collectingSite; + } + + +} diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollectingSiteVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollectingSiteVO.java new file mode 100644 index 0000000000000000000000000000000000000000..13adda7b27bb5e7c58d262b60262291ee523fcd1 --- /dev/null +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/CollectingSiteVO.java @@ -0,0 +1,127 @@ +package fr.inra.urgi.faidare.domain.data.germplasm; + +import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiGermplasmCollectingSite; + +public class CollectingSiteVO implements BrapiGermplasmCollectingSite, ExtendedCollectingSite { + + private String locationDbId; + private String siteName; + private String siteType; + private String coordinateUncertainty; + private String elevation; + private String georeferencingMethod; + private String latitudeDecimal; + private String latitudeDegrees; + private String locationDescription; + private String longitudeDecimal; + private String longitudeDegrees; + private String spatialReferenceSystem; + + @Override + public String getLocationDbId() { + return locationDbId; + } + + public void setLocationDbId(String locationDbId) { + this.locationDbId = locationDbId; + } + + public String getSiteName() { + return siteName; + } + + public void setSiteName(String siteName) { + this.siteName = siteName; + } + + + public String getSiteType() { + return siteType; + } + + public void setSiteType(String siteType) { + this.siteType = siteType; + } + + @Override + public String getCoordinateUncertainty() { + return coordinateUncertainty; + } + + @Override + public String getElevation() { + return elevation; + } + + @Override + public String getGeoreferencingMethod() { + return georeferencingMethod; + } + + @Override + public String getLatitudeDecimal() { + return latitudeDecimal; + } + + @Override + public String getLatitudeDegrees() { + return latitudeDegrees; + } + + @Override + public String getLocationDescription() { + return locationDescription; + } + + @Override + public String getLongitudeDecimal() { + return longitudeDecimal; + } + + @Override + public String getLongitudeDegrees() { + return longitudeDegrees; + } + + @Override + public String getSpatialReferenceSystem() { + return spatialReferenceSystem; + } + + + public void setCoordinateUncertainty(String coordinateUncertainty) { + this.coordinateUncertainty = coordinateUncertainty; + } + + public void setElevation(String elevation) { + this.elevation = elevation; + } + + public void setGeoreferencingMethod(String georeferencingMethod) { + this.georeferencingMethod = georeferencingMethod; + } + + public void setLatitudeDecimal(String latitudeDecimal) { + this.latitudeDecimal = latitudeDecimal; + } + + public void setLatitudeDegrees(String latitudeDegrees) { + this.latitudeDegrees = latitudeDegrees; + } + + public void setLocationDescription(String locationDescription) { + this.locationDescription = locationDescription; + } + + public void setLongitudeDecimal(String longitudeDecimal) { + this.longitudeDecimal = longitudeDecimal; + } + + public void setLongitudeDegrees(String longitudeDegrees) { + this.longitudeDegrees = longitudeDegrees; + } + + public void setSpatialReferenceSystem(String spatialReferenceSystem) { + this.spatialReferenceSystem = spatialReferenceSystem; + } +} diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/DistributorInfo.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/DistributorInfo.java new file mode 100644 index 0000000000000000000000000000000000000000..91fe99b3689dbb1bace263a4ff847c62277d7e42 --- /dev/null +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/DistributorInfo.java @@ -0,0 +1,20 @@ +package fr.inra.urgi.faidare.domain.data.germplasm; +import com.fasterxml.jackson.annotation.JsonView; +import fr.inra.urgi.faidare.domain.JSONView; + +import java.io.Serializable; + + +public interface DistributorInfo extends Serializable { + + @JsonView(JSONView.GnpISFields.class) + String getAccessionNumber(); + + @JsonView(JSONView.GnpISFields.class) + ExtendedInstitute getInstitute(); + + @JsonView(JSONView.GnpISFields.class) + String getDistributionStatus(); + +} + diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/DistributorInfoVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/DistributorInfoVO.java new file mode 100644 index 0000000000000000000000000000000000000000..f30df0204a86e925f8e3b1c071c58d904219353d --- /dev/null +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/DistributorInfoVO.java @@ -0,0 +1,35 @@ +package fr.inra.urgi.faidare.domain.data.germplasm; + +public class DistributorInfoVO implements DistributorInfo { + + private String accessionNumber; + private InstituteVO institute; + private String distributionStatus; + + public String getAccessionNumber() { + return accessionNumber; + } + + public void setAccessionNumber(String accessionNumber) { + this.accessionNumber = accessionNumber; + } + + public InstituteVO getInstitute() { + return institute; + } + + public void setInstitute(InstituteVO institute) { + this.institute = institute; + } + + public String getDistributionStatus() { + return distributionStatus; + } + + public void setDistributionStatus(String distributionStatus) { + this.distributionStatus = distributionStatus; + } + + + +} diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/DonorInfoVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/DonorInfoVO.java new file mode 100644 index 0000000000000000000000000000000000000000..e82ff5a28112946d9c3027240c402096f3a6beb5 --- /dev/null +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/DonorInfoVO.java @@ -0,0 +1,36 @@ +package fr.inra.urgi.faidare.domain.data.germplasm; + +import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiGermplasmDonorInfo; + +public class DonorInfoVO implements BrapiGermplasmDonorInfo, ExtendedDonorInfo { + + private String donorAccessionNumber; + private InstituteVO donorInstitute; + private String donationDate; + + @Override + public String getDonorAccessionNumber() { + return donorAccessionNumber; + } + + @Override + public InstituteVO getDonorInstitute() { + return donorInstitute; + } + + public void setDonorAccessionNumber(String donorAccessionNumber) { + this.donorAccessionNumber = donorAccessionNumber; + } + + public void setDonorInstitute(InstituteVO donorInstitute) { + this.donorInstitute = donorInstitute; + } + + public String getDonationDate() { + return donationDate; + } + + public void setDonationDate(String donationDate) { + this.donationDate = donationDate; + } +} diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/DonorVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/DonorVO.java index 8bab9ec7efae8ebfa64e178d299292dfc982a7b8..9c8af10982aef2bed5ba882772e26803cc39e5b5 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/DonorVO.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/DonorVO.java @@ -4,7 +4,7 @@ import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiGermplasmDonor; import java.io.Serializable; -public class DonorVO implements Serializable, BrapiGermplasmDonor, ExtendedDonor { +public class DonorVO implements Serializable, BrapiGermplasmDonor { private static final long serialVersionUID = 7976964107440923573L; @@ -14,6 +14,7 @@ public class DonorVO implements Serializable, BrapiGermplasmDonor, ExtendedDonor private Integer donationDate; private InstituteVO donorInstitute; + @Override public String getDonorGermplasmPUI() { return donorGermplasmPUI; @@ -41,7 +42,7 @@ public class DonorVO implements Serializable, BrapiGermplasmDonor, ExtendedDonor this.donorInstituteCode = donorInstituteCode; } - @Override + public InstituteVO getDonorInstitute() { return donorInstitute; } @@ -50,7 +51,7 @@ public class DonorVO implements Serializable, BrapiGermplasmDonor, ExtendedDonor this.donorInstitute = donorInstitute; } - @Override + public Integer getDonationDate() { return donationDate; } @@ -59,4 +60,5 @@ public class DonorVO implements Serializable, BrapiGermplasmDonor, ExtendedDonor this.donationDate = donationDate; } + } diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedCollectingInfo.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedCollectingInfo.java new file mode 100644 index 0000000000000000000000000000000000000000..b32bc616bf3f718cf3674a9ec2a454f73bcbcd22 --- /dev/null +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedCollectingInfo.java @@ -0,0 +1,16 @@ +package fr.inra.urgi.faidare.domain.data.germplasm; +import fr.inra.urgi.faidare.domain.JSONView; +import com.fasterxml.jackson.annotation.JsonView; +import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiGermplasmCollectingInfo; + +import java.io.Serializable; + +public interface ExtendedCollectingInfo extends Serializable, BrapiGermplasmCollectingInfo { + + @JsonView(JSONView.GnpISFields.class) + String getMaterialType(); + + @JsonView(JSONView.GnpISFields.class) + String getCollectors(); + +} diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedCollectingSite.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedCollectingSite.java new file mode 100644 index 0000000000000000000000000000000000000000..2c13f9b443dcc41fd00f99dc846f51f7ea7fe5da --- /dev/null +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedCollectingSite.java @@ -0,0 +1,19 @@ +package fr.inra.urgi.faidare.domain.data.germplasm; +import com.fasterxml.jackson.annotation.JsonView; +import fr.inra.urgi.faidare.domain.JSONView; +import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiGermplasmCollectingSite; + +import java.io.Serializable; + +public interface ExtendedCollectingSite extends Serializable, BrapiGermplasmCollectingSite { + + @JsonView(JSONView.GnpISFields.class) + String getLocationDbId(); + + @JsonView(JSONView.GnpISFields.class) + String getSiteName(); + + @JsonView(JSONView.GnpISFields.class) + String getSiteType() ; + +} diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedDonorInfo.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedDonorInfo.java new file mode 100644 index 0000000000000000000000000000000000000000..f4d5ba7e132f903f56d95926c2cdde2d4469a2ec --- /dev/null +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedDonorInfo.java @@ -0,0 +1,14 @@ +package fr.inra.urgi.faidare.domain.data.germplasm; +import com.fasterxml.jackson.annotation.JsonView; +import fr.inra.urgi.faidare.domain.JSONView; +import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiGermplasmDonorInfo; + +import java.io.Serializable; + + +public interface ExtendedDonorInfo extends Serializable, BrapiGermplasmDonorInfo { + + @JsonView(JSONView.GnpISFields.class) + String getDonationDate(); + +} diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedGermplasm.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedGermplasm.java index c0d850cafb6c456119fbd43bb2aee65cc30bcd49..6b6201fbff2def00b502d45e0a221fcf85507d49 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedGermplasm.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedGermplasm.java @@ -39,10 +39,10 @@ public interface ExtendedGermplasm extends BrapiGermplasm, GnpISInternal { Photo getPhoto(); @JsonView(JSONView.GnpISFields.class) - Institute getHoldingInstitute(); + InstituteVO getHoldingInstitute(); @JsonView(JSONView.GnpISFields.class) - Institute getHoldingGenbank(); + InstituteVO getHoldingGenbank(); @JsonView(JSONView.GnpISFields.class) String getPresenceStatus(); diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedGermplasmMcpd.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedGermplasmMcpd.java new file mode 100644 index 0000000000000000000000000000000000000000..09c154c70fada1fee50b9af1fb303fd0c104f26f --- /dev/null +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedGermplasmMcpd.java @@ -0,0 +1,47 @@ +package fr.inra.urgi.faidare.domain.data.germplasm; + +import com.fasterxml.jackson.annotation.JsonView; +import fr.inra.urgi.faidare.domain.JSONView; +import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiGermplasmMcpd; +import fr.inra.urgi.faidare.domain.data.GnpISInternal; + +import java.util.List; + +public interface ExtendedGermplasmMcpd extends BrapiGermplasmMcpd, GnpISInternal { + + @JsonView(JSONView.GnpISFields.class) + String getGeneticNature(); + + @JsonView(JSONView.GnpISFields.class) + String getPresenceStatus(); + + @JsonView(JSONView.GnpISFields.class) + String getRemarks(); + + @JsonView(JSONView.GnpISFields.class) + Site getOriginSite(); + + @JsonView(JSONView.GnpISFields.class) + ExtendedInstitute getHoldingInstitute(); + + @JsonView(JSONView.GnpISFields.class) + ExtendedInstitute getHoldingGenbank(); + + @JsonView(JSONView.GnpISFields.class) + List<? extends DistributorInfo> getDistributorInfo(); + + @JsonView(JSONView.GnpISFields.class) + List<? extends ExtendedInstitute> getBreedingInstitutes(); + + @JsonView(JSONView.GnpISFields.class) + String getBreederAccessionNumber(); + + @JsonView(JSONView.GnpISFields.class) + String getBreedingCreationYear(); + + @JsonView(JSONView.GnpISFields.class) + String getCatalogRegistrationYear(); + + @JsonView(JSONView.GnpISFields.class) + String getCatalogDeregistrationYear(); +} diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedInstitute.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedInstitute.java new file mode 100644 index 0000000000000000000000000000000000000000..58a61d8fb7375fe59bd6c3fc3ca18cd29a886d1e --- /dev/null +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/ExtendedInstitute.java @@ -0,0 +1,26 @@ +package fr.inra.urgi.faidare.domain.data.germplasm; +import com.fasterxml.jackson.annotation.JsonView; +import fr.inra.urgi.faidare.domain.JSONView; +import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiGermplasmInstitute; + +public interface ExtendedInstitute extends BrapiGermplasmInstitute { + + @JsonView(JSONView.GnpISFields.class) + String getAcronym(); + + @JsonView(JSONView.GnpISFields.class) + String getOrganisation(); + + @JsonView(JSONView.GnpISFields.class) + String getInstituteType(); + + @JsonView(JSONView.GnpISFields.class) + String getWebSite(); + + @JsonView(JSONView.GnpISFields.class) + String getAddress(); + + @JsonView(JSONView.GnpISFields.class) + String getLogo(); + +} diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/Genealogy.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/Genealogy.java index e9837d90c3e0e3cda986a162fb6f8fafd738c181..5d4f3182ed82561c69963a080504a54cbcc9e787 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/Genealogy.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/Genealogy.java @@ -37,5 +37,5 @@ public interface Genealogy { String getSecondParentType(); @JsonView(JSONView.GnpISFields.class) - List<SimpleVO> getSibblings(); + List<PuiNameValueVO> getSibblings(); } diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GenealogyVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GenealogyVO.java index ba0435e978b54836ef2497a87f75e65813382885..4b4dcfa868af2540f51cace3756d7413fd8d0061 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GenealogyVO.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GenealogyVO.java @@ -21,7 +21,7 @@ public class GenealogyVO implements java.io.Serializable, Genealogy { private String secondParentPUI; private String secondParentType; - private List<SimpleVO> sibblings; // puid + name + private List<PuiNameValueVO> sibblings; // puid + name @Override public String getCrossingPlan() { @@ -105,11 +105,11 @@ public class GenealogyVO implements java.io.Serializable, Genealogy { } @Override - public List<SimpleVO> getSibblings() { + public List<PuiNameValueVO> getSibblings() { return sibblings; } - public void setSibblings(List<SimpleVO> sibblings) { + public void setSibblings(List<PuiNameValueVO> sibblings) { this.sibblings = sibblings; } diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmAttributeValueListVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmAttributeValueListVO.java index 39b810782414faae48f17e861723180ab5724eed..6676f0394d8b4a7276284821fc2291dcd7ae373f 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmAttributeValueListVO.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmAttributeValueListVO.java @@ -43,15 +43,6 @@ public class GermplasmAttributeValueListVO implements BrapiGermplasmAttributeVal this.data = data; } - @Override - public List<Long> getSpeciesGroup() { - return speciesGroup; - } - - public void setSpeciesGroup(List<Long> speciesGroup) { - this.speciesGroup = speciesGroup; - } - @Override public Long getGroupId() { return groupId; diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmInstitute.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmInstitute.java index 692f62f7b58dd83e84ec830d7523da173490dfab..906d6851ef2014321234002f7d19684cf95264aa 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmInstitute.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmInstitute.java @@ -8,7 +8,7 @@ import fr.inra.urgi.faidare.domain.JSONView; */ public interface GermplasmInstitute { @JsonView(JSONView.GnpISFields.class) - Institute getInstitute(); + InstituteVO getInstitute(); @JsonView(JSONView.GnpISFields.class) String getGermplasmPUI(); diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmInstituteVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmInstituteVO.java index e6da09ec204d813ef869e78620a7632c3cd19865..33d5be7f049c37f17965bc367c123f5166671685 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmInstituteVO.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmInstituteVO.java @@ -9,6 +9,10 @@ public class GermplasmInstituteVO implements Serializable, GermplasmInstitute { private static final long serialVersionUID = 7976964107440923573L; + public static long getSerialVersionUID() { + return serialVersionUID; + } + private InstituteVO institute; private String germplasmPUI; private String accessionNumber; diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmMcpdVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmMcpdVO.java new file mode 100644 index 0000000000000000000000000000000000000000..0d475bb1843ad5d432e2b8a986fbec3b3a39409a --- /dev/null +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmMcpdVO.java @@ -0,0 +1,342 @@ +package fr.inra.urgi.faidare.domain.data.germplasm; + +import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiGermplasmMcpd; +import fr.inra.urgi.faidare.elasticsearch.document.annotation.Document; +import fr.inra.urgi.faidare.elasticsearch.document.annotation.Id; + +import java.io.Serializable; +import java.util.List; + +@Document(type = "germplasmMcpd") +public class GermplasmMcpdVO implements Serializable, BrapiGermplasmMcpd, ExtendedGermplasmMcpd { + + private Long groupId; + + @Id + private String germplasmDbId; + private String germplasmPUI; + private String accessionNumber; + private List<String> alternateIDs; + private List<String> accessionNames; + + private String commonCropName; + private String genus; + private String species; + private String speciesAuthority; + private String subtaxon; + private String subtaxonAuthority; + + private String ancestralData; + private String biologicalStatusOfAccessionCode; + private String mlsStatus; + private String geneticNature; + private String presenceStatus; + private String remarks; + + private String countryOfOriginCode; + private SiteVO originSite; + + private String instituteCode; + private InstituteVO holdingInstitute; + private InstituteVO holdingGenbank; + + private CollectingInfoVO collectingInfo; + private String acquisitionDate; + private String acquisitionSourceCode; + + private List<DonorInfoVO> donorInfo; + private List<DistributorInfoVO> distributorInfo; + + + @JsonDeserialize(contentAs = InstituteVO.class) + private List<InstituteVO> breedingInstitutes; + private String breederAccessionNumber; + private String breedingCreationYear; + private String catalogRegistrationYear; + private String catalogDeregistrationYear; + + @JsonDeserialize(contentAs = InstituteVO.class) + private List<InstituteVO> safetyDuplicateInstitutes; + private List<String> storageTypeCodes; + + public Long getGroupId() { + return groupId; + } + + public void setGroupId(Long groupId) { + this.groupId = groupId; + } + + public String getGermplasmDbId() { + return germplasmDbId; + } + + public void setGermplasmDbId(String germplasmDbId) { + this.germplasmDbId = germplasmDbId; + } + + public String getGermplasmPUI() { + return germplasmPUI; + } + + public void setGermplasmPUI(String germplasmPUI) { + this.germplasmPUI = germplasmPUI; + } + + public String getAccessionNumber() { + return accessionNumber; + } + + public void setAccessionNumber(String accessionNumber) { + this.accessionNumber = accessionNumber; + } + + public List<String> getAlternateIDs() { + return alternateIDs; + } + + public void setAlternateIDs(List<String> alternateIDs) { + this.alternateIDs = alternateIDs; + } + + public List<String> getAccessionNames() { + return accessionNames; + } + + public void setAccessionNames(List<String> accessionNames) { + this.accessionNames = accessionNames; + } + + public String getCommonCropName() { + return commonCropName; + } + + public void setCommonCropName(String commonCropName) { + this.commonCropName = commonCropName; + } + + public String getGenus() { + return genus; + } + + public void setGenus(String genus) { + this.genus = genus; + } + + public String getSpecies() { + return species; + } + + public void setSpecies(String species) { + this.species = species; + } + + public String getSpeciesAuthority() { + return speciesAuthority; + } + + public void setSpeciesAuthority(String speciesAuthority) { + this.speciesAuthority = speciesAuthority; + } + + public String getSubtaxon() { + return subtaxon; + } + + public void setSubtaxon(String subtaxon) { + this.subtaxon = subtaxon; + } + + public String getSubtaxonAuthority() { + return subtaxonAuthority; + } + + public void setSubtaxonAuthority(String subtaxonAuthority) { + this.subtaxonAuthority = subtaxonAuthority; + } + + public String getAncestralData() { + return ancestralData; + } + + public void setAncestralData(String ancestralData) { + this.ancestralData = ancestralData; + } + + public String getBiologicalStatusOfAccessionCode() { + return biologicalStatusOfAccessionCode; + } + + public void setBiologicalStatusOfAccessionCode(String biologicalStatusOfAccessionCode) { + this.biologicalStatusOfAccessionCode = biologicalStatusOfAccessionCode; + } + + public String getMlsStatus() { + return mlsStatus; + } + + public void setMlsStatus(String mlsStatus) { + this.mlsStatus = mlsStatus; + } + + public String getGeneticNature() { + return geneticNature; + } + + public void setGeneticNature(String geneticNature) { + this.geneticNature = geneticNature; + } + + public String getPresenceStatus() { + return presenceStatus; + } + + public void setPresenceStatus(String presenceStatus) { + this.presenceStatus = presenceStatus; + } + + public String getRemarks() { + return remarks; + } + + public void setRemarks(String remarks) { + this.remarks = remarks; + } + + public String getCountryOfOriginCode() { + return countryOfOriginCode; + } + + public void setCountryOfOriginCode(String countryOfOriginCode) { + this.countryOfOriginCode = countryOfOriginCode; + } + + public SiteVO getOriginSite() { + return originSite; + } + + public void setOriginSite(SiteVO originSite) { + this.originSite = originSite; + } + + public String getInstituteCode() { + return instituteCode; + } + + public void setInstituteCode(String instituteCode) { + this.instituteCode = instituteCode; + } + + public InstituteVO getHoldingInstitute() { + return holdingInstitute; + } + + public void setHoldingInstitute(InstituteVO holdingInstitute) { + this.holdingInstitute = holdingInstitute; + } + + public InstituteVO getHoldingGenbank() { + return holdingGenbank; + } + + public void setHoldingGenbank(InstituteVO holdingGenbank) { + this.holdingGenbank = holdingGenbank; + } + + public CollectingInfoVO getCollectingInfo() { + return collectingInfo; + } + + public void setCollectingInfo(CollectingInfoVO collectingInfo) { + this.collectingInfo = collectingInfo; + } + + public String getAcquisitionDate() { + return acquisitionDate; + } + + public void setAcquisitionDate(String acquisitionDate) { + this.acquisitionDate = acquisitionDate; + } + + public String getAcquisitionSourceCode() { + return acquisitionSourceCode; + } + + public void setAcquisitionSourceCode(String acquisitionSourceCode) { + this.acquisitionSourceCode = acquisitionSourceCode; + } + + public List<DonorInfoVO> getDonorInfo() { + return donorInfo; + } + + public void setDonorInfo(List<DonorInfoVO> donorInfo) { + this.donorInfo = donorInfo; + } + + public List<DistributorInfoVO> getDistributorInfo() { + return distributorInfo; + } + + public void setDistributorInfo(List<DistributorInfoVO> distributorInfo) { + this.distributorInfo = distributorInfo; + } + + public List<InstituteVO> getBreedingInstitutes() { + return breedingInstitutes; + } + + public void setBreedingInstitutes(List<InstituteVO> breedingInstitutes) { + this.breedingInstitutes = breedingInstitutes; + } + + public String getBreederAccessionNumber() { + return breederAccessionNumber; + } + + public void setBreederAccessionNumber(String breederAccessionNumber) { + this.breederAccessionNumber = breederAccessionNumber; + } + + public String getBreedingCreationYear() { + return breedingCreationYear; + } + + public void setBreedingCreationYear(String breedingCreationYear) { + this.breedingCreationYear = breedingCreationYear; + } + + public String getCatalogRegistrationYear() { + return catalogRegistrationYear; + } + + public void setCatalogRegistrationYear(String catalogRegistrationYear) { + this.catalogRegistrationYear = catalogRegistrationYear; + } + + public String getCatalogDeregistrationYear() { + return catalogDeregistrationYear; + } + + public void setCatalogDeregistrationYear(String catalogDeregistrationYear) { + this.catalogDeregistrationYear = catalogDeregistrationYear; + } + + public List<InstituteVO> getSafetyDuplicateInstitutes() { + return safetyDuplicateInstitutes; + } + + public void setSafetyDuplicateInstitutes(List<InstituteVO> safetyDuplicateInstitutes) { + this.safetyDuplicateInstitutes = safetyDuplicateInstitutes; + } + + public List<String> getStorageTypeCodes() { + return storageTypeCodes; + } + + public void setStorageTypeCodes(List<String> storageTypeCodes) { + this.storageTypeCodes = storageTypeCodes; + } +} diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmVO.java index f6954e78286f0143630e10fc0bd9acad09870249..84426201bf77cdfa0b9ec55a2cd030b56298484f 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmVO.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/GermplasmVO.java @@ -24,7 +24,6 @@ public class GermplasmVO private static final long serialVersionUID = -7719928853974382749L; private Long groupId; - private List<Long> speciesGroup; @Id private String germplasmDbId; @@ -132,15 +131,6 @@ public class GermplasmVO this.groupId = groupId; } - @Override - public List<Long> getSpeciesGroup() { - return speciesGroup; - } - - public void setSpeciesGroup(List<Long> speciesGroup) { - this.speciesGroup = speciesGroup; - } - @Override public String getGermplasmDbId() { return germplasmDbId; diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/InstituteVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/InstituteVO.java index f29691bfbfb8f9a08908a40420aa18203e0035bf..d7bf01506020434e797effd206173f505dec902e 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/InstituteVO.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/InstituteVO.java @@ -1,9 +1,8 @@ package fr.inra.urgi.faidare.domain.data.germplasm; - +import fr.inra.urgi.faidare.domain.brapi.v1.data.BrapiGermplasmInstitute; import java.io.Serializable; -public class InstituteVO implements Serializable, Institute { - +public class InstituteVO implements Serializable, BrapiGermplasmInstitute, ExtendedInstitute { private static final long serialVersionUID = -680211100453576319L; private String instituteName; diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/PuiNameValueVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/PuiNameValueVO.java new file mode 100644 index 0000000000000000000000000000000000000000..a397533bbbe72cc449650940ae33e08fc0af49df --- /dev/null +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/PuiNameValueVO.java @@ -0,0 +1,52 @@ +package fr.inra.urgi.faidare.domain.data.germplasm; + +import java.io.Serializable; + +/** + * @author C. Michotey + */ +public class PuiNameValueVO implements Serializable, PuiNameValue { + + private static final long serialVersionUID = 3440255005695104200L; + + private String pui; + private String name; + private String value; + + public PuiNameValueVO() { + } + + public PuiNameValueVO(String pui, String name, String value) { + this.pui = pui; + this.name = name; + this.value = value; + } + + @Override + public String getPui() { + return pui; + } + + public void setPui(String pui) { + this.pui = pui; + } + + @Override + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + +} diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/Site.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/Site.java index 72479946d41e9a27c1ed62e2b8422edf5ad48f1b..83032740ec7b95fea5bd020d89b44a56c613c9bf 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/Site.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/Site.java @@ -8,7 +8,7 @@ import fr.inra.urgi.faidare.domain.JSONView; */ public interface Site { @JsonView(JSONView.GnpISFields.class) - Long getSiteId(); + String getSiteId(); @JsonView(JSONView.GnpISFields.class) String getSiteName(); diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/SiteVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/SiteVO.java index a62f5e2435f97aee59f79c782f317ec48aad1534..a005a4a35d31f78471bd8a4537432ae19aa78ddd 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/SiteVO.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/germplasm/SiteVO.java @@ -6,18 +6,19 @@ public class SiteVO implements Serializable, Site { private static final long serialVersionUID = 7058708694739141664L; - private Long siteId; + private String siteId; private String siteName; private Float latitude; private Float longitude; private String siteType; @Override - public Long getSiteId() { + public String getSiteId() { return siteId; } - public void setSiteId(Long siteId) { + + public void setSiteId(String siteId) { this.siteId = siteId; } diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/phenotype/ObservationUnitVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/phenotype/ObservationUnitVO.java index 6ad0bb93e8d50c22f27f70d0b3d21715b5358dae..3d163e02e2c7dd725966ce486497c12408afe21f 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/phenotype/ObservationUnitVO.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/phenotype/ObservationUnitVO.java @@ -312,13 +312,5 @@ public class ObservationUnitVO implements BrapiObservationUnit, GnpISInternal, H this.groupId = groupId; } - @Override - public List<Long> getSpeciesGroup() { - return speciesGroup; - } - - public void setSpeciesGroup(List<Long> speciesGroup) { - this.speciesGroup = speciesGroup; - } } diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/study/StudyDetailVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/study/StudyDetailVO.java index 135e3f5efcc6b8b9a9316b8e570648ac5d88fef1..d5a7ea32cc2aa2d12044c95e95308ab9c268cb8a 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/study/StudyDetailVO.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/study/StudyDetailVO.java @@ -236,15 +236,6 @@ public class StudyDetailVO implements GnpISInternal, BrapiStudyDetail, HasURI, H this.additionalInfo = additionalInfo; } - @Override - public List<Long> getSpeciesGroup() { - return speciesGroup; - } - - public void setSpeciesGroup(List<Long> speciesGroup) { - this.speciesGroup = speciesGroup; - } - @Override public Long getGroupId() { return groupId; diff --git a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/study/StudySummaryVO.java b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/study/StudySummaryVO.java index d27d745dcd37d8fb05169e930d48d7c15b6f3010..adfc0d7a680e8eb3a7db53a1ffa71c7d7a6ee0c9 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/domain/data/study/StudySummaryVO.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/domain/data/study/StudySummaryVO.java @@ -244,15 +244,6 @@ public class StudySummaryVO implements GnpISInternal, BrapiStudySummary, HasURI, this.seasons = seasons; } - @Override - public List<Long> getSpeciesGroup() { - return speciesGroup; - } - - public void setSpeciesGroup(List<Long> speciesGroup) { - this.speciesGroup = speciesGroup; - } - @Override public Long getGroupId() { return groupId; diff --git a/backend/src/main/java/fr/inra/urgi/faidare/elasticsearch/repository/impl/ESGenericGetByIdRepository.java b/backend/src/main/java/fr/inra/urgi/faidare/elasticsearch/repository/impl/ESGenericGetByIdRepository.java index 967fc51ff3403acf6eb6e19b895629be3b1ea021..27d3bfda4b3574619b70dff731337dc6e2df5272 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/elasticsearch/repository/impl/ESGenericGetByIdRepository.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/elasticsearch/repository/impl/ESGenericGetByIdRepository.java @@ -64,7 +64,6 @@ public class ESGenericGetByIdRepository<VO> implements ESGetByIdRepository<VO> { // Parse result list List<? extends VO> resultList = parser.parseHits(result, voClass); - if (resultList != null && !resultList.isEmpty()) { if (resultList.size() > 1) { // Should never happen diff --git a/backend/src/main/java/fr/inra/urgi/faidare/repository/es/GermplasmRepository.java b/backend/src/main/java/fr/inra/urgi/faidare/repository/es/GermplasmRepository.java index 0929cda8dc15e0e2f1362e797c093803953fcf95..dafff525774e979f20be09872e5357a888ed01c8 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/repository/es/GermplasmRepository.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/repository/es/GermplasmRepository.java @@ -2,6 +2,7 @@ package fr.inra.urgi.faidare.repository.es; import fr.inra.urgi.faidare.domain.criteria.FaidareGermplasmPOSTShearchCriteria; import fr.inra.urgi.faidare.domain.criteria.GermplasmSearchCriteria; +import fr.inra.urgi.faidare.domain.data.germplasm.GermplasmMcpdVO; import fr.inra.urgi.faidare.domain.data.germplasm.GermplasmVO; import fr.inra.urgi.faidare.domain.data.germplasm.PedigreeVO; import fr.inra.urgi.faidare.domain.data.germplasm.ProgenyVO; @@ -40,6 +41,11 @@ public interface GermplasmRepository */ Iterator<GermplasmVO> scrollAllGermplasm(FaidareGermplasmPOSTShearchCriteria criteria); + /** + * Scroll through all germplasmMcpd matching the given FAIDARE search criteria. + */ + Iterator<GermplasmMcpdVO> scrollAllGermplasmMcpd(FaidareGermplasmPOSTShearchCriteria criteria); + /** * Find pedigree for germplasm by id. */ @@ -50,4 +56,10 @@ public interface GermplasmRepository */ ProgenyVO findProgeny(String germplasmDbId); + /** + * Find germplasm mcpd by id. + */ + GermplasmMcpdVO getAsMcpdById(String germplasmDbId); + + } diff --git a/backend/src/main/java/fr/inra/urgi/faidare/repository/es/GermplasmRepositoryImpl.java b/backend/src/main/java/fr/inra/urgi/faidare/repository/es/GermplasmRepositoryImpl.java index 91db9f00e2c56a1f3a3a8c5f3608ce7a4be2b41f..31a6e1a8c55537fb4ffe7a35b418909c3a8dfede 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/repository/es/GermplasmRepositoryImpl.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/repository/es/GermplasmRepositoryImpl.java @@ -3,6 +3,7 @@ package fr.inra.urgi.faidare.repository.es; import com.fasterxml.jackson.databind.ObjectMapper; import fr.inra.urgi.faidare.domain.criteria.FaidareGermplasmPOSTShearchCriteria; import fr.inra.urgi.faidare.domain.criteria.GermplasmSearchCriteria; +import fr.inra.urgi.faidare.domain.data.germplasm.GermplasmMcpdVO; import fr.inra.urgi.faidare.domain.data.germplasm.GermplasmVO; import fr.inra.urgi.faidare.domain.data.germplasm.PedigreeVO; import fr.inra.urgi.faidare.domain.data.germplasm.ProgenyVO; @@ -63,6 +64,7 @@ public class GermplasmRepositoryImpl implements GermplasmRepository { private final ESFindRepository<GermplasmSearchCriteria, GermplasmVO> findRepository; private final ESGetByIdRepository<GermplasmVO> getByIdRepository; private final ESGenericQueryFactory<GermplasmSearchCriteria> queryFactory; + private final ESGetByIdRepository<GermplasmMcpdVO> getMcpdByIdRepository; @Autowired public GermplasmRepositoryImpl( @@ -76,9 +78,12 @@ public class GermplasmRepositoryImpl implements GermplasmRepository { this.mapper = mapper; this.parser = parser; Class<GermplasmVO> voClass = GermplasmVO.class; + Class<GermplasmMcpdVO> voMcpdClass = GermplasmMcpdVO.class; + this.queryFactory = new ESGenericQueryFactory<>(); this.findRepository = new ESGenericFindRepository<>(client, requestFactory, voClass, this.parser); this.getByIdRepository = new ESGenericGetByIdRepository<>(client, requestFactory, voClass, this.parser); + this.getMcpdByIdRepository = new ESGenericGetByIdRepository<>(client, requestFactory, voMcpdClass, this.parser); Class<GermplasmVO> documentClass = GermplasmVO.class; Class<FaidareGermplasmPOSTShearchCriteria> criteriaClass = FaidareGermplasmPOSTShearchCriteria.class; this.documentMetadata = DocumentAnnotationUtil.getDocumentObjectMetadata(documentClass); @@ -99,6 +104,13 @@ public class GermplasmRepositoryImpl implements GermplasmRepository { return new ESScrollIterator<>(client, requestFactory, parser, GermplasmVO.class, query, fetchSize); } + @Override + public Iterator<GermplasmMcpdVO> scrollAllGermplasmMcpd(FaidareGermplasmPOSTShearchCriteria criteria) { + QueryBuilder query = queryFactory.createShouldFilterQuery(criteria); + int fetchSize = criteria.getPageSize().intValue(); + return new ESScrollIterator<>(client, requestFactory, parser, GermplasmMcpdVO.class, query, fetchSize); + } + @Override public GermplasmVO getById(String germplasmDbId) { return getByIdRepository.getById(germplasmDbId); @@ -128,6 +140,12 @@ public class GermplasmRepositoryImpl implements GermplasmRepository { } } + @Override + public GermplasmMcpdVO getAsMcpdById(String germplasmDbId) { + return getMcpdByIdRepository.getById(germplasmDbId); + } + + @Override public PedigreeVO findPedigree(String germplasmDbId) { QueryBuilder termQuery = QueryBuilders.termQuery("germplasmDbId", germplasmDbId); diff --git a/backend/src/main/java/fr/inra/urgi/faidare/service/es/GermplasmService.java b/backend/src/main/java/fr/inra/urgi/faidare/service/es/GermplasmService.java index 7082135d6e8321035a5c41b64c3ecabdd842f43e..5194804f1231959c8d6151a858e418094fe644a9 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/service/es/GermplasmService.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/service/es/GermplasmService.java @@ -2,6 +2,7 @@ package fr.inra.urgi.faidare.service.es; import fr.inra.urgi.faidare.domain.criteria.FaidareGermplasmPOSTShearchCriteria; import fr.inra.urgi.faidare.domain.criteria.GermplasmSearchCriteria; +import fr.inra.urgi.faidare.domain.data.germplasm.GermplasmMcpdVO; import fr.inra.urgi.faidare.domain.data.germplasm.GermplasmVO; import fr.inra.urgi.faidare.domain.data.germplasm.PedigreeVO; import fr.inra.urgi.faidare.domain.data.germplasm.ProgenyVO; @@ -31,4 +32,9 @@ public interface GermplasmService { ProgenyVO getProgeny(String germplasmDbId); + GermplasmMcpdVO getAsMcpdById(String germplasmDbId); + + File exportGermplasmMcpd(FaidareGermplasmPOSTShearchCriteria criteria); + + } diff --git a/backend/src/main/java/fr/inra/urgi/faidare/service/es/GermplasmServiceImpl.java b/backend/src/main/java/fr/inra/urgi/faidare/service/es/GermplasmServiceImpl.java index cc9c2e09004470c64f08dd8e80a8e585dba0a68e..0ebb89291ce8f4b690464a6e063eb2330a03cfce 100644 --- a/backend/src/main/java/fr/inra/urgi/faidare/service/es/GermplasmServiceImpl.java +++ b/backend/src/main/java/fr/inra/urgi/faidare/service/es/GermplasmServiceImpl.java @@ -4,10 +4,7 @@ import com.opencsv.CSVWriter; import fr.inra.urgi.faidare.api.faidare.v1.GnpISGermplasmController; import fr.inra.urgi.faidare.domain.criteria.FaidareGermplasmPOSTShearchCriteria; import fr.inra.urgi.faidare.domain.criteria.GermplasmSearchCriteria; -import fr.inra.urgi.faidare.domain.data.germplasm.CollPopVO; -import fr.inra.urgi.faidare.domain.data.germplasm.GermplasmVO; -import fr.inra.urgi.faidare.domain.data.germplasm.PedigreeVO; -import fr.inra.urgi.faidare.domain.data.germplasm.ProgenyVO; +import fr.inra.urgi.faidare.domain.data.germplasm.*; import fr.inra.urgi.faidare.domain.datadiscovery.response.GermplasmSearchResponse; import fr.inra.urgi.faidare.domain.response.PaginatedList; import fr.inra.urgi.faidare.repository.es.GermplasmRepository; @@ -23,6 +20,7 @@ import java.nio.file.Path; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.stream.Collectors; /** * @author cpommier, gcornut, jdestin @@ -61,6 +59,25 @@ public class GermplasmServiceImpl implements GermplasmService { } } + @Override + public GermplasmMcpdVO getAsMcpdById(String germplasmDbId) { + return germplasmRepository.getAsMcpdById(germplasmDbId); + } + + @Override + public File exportGermplasmMcpd(FaidareGermplasmPOSTShearchCriteria criteria) { + try { + Iterator<GermplasmMcpdVO> allGermplasm = germplasmRepository.scrollAllGermplasmMcpd(criteria); + Path tmpDirPath = Files.createTempDirectory("germplasm"); + Path tmpFile = Files.createTempFile(tmpDirPath, "germplasm_", ".csv"); + writeMcpdToCSV(tmpFile, allGermplasm); + return tmpFile.toFile(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private void writeToCSV(Path tmpFile, Iterator<GermplasmVO> germplasms) throws IOException { Writer fileStream = new OutputStreamWriter(new FileOutputStream(tmpFile.toFile()), StandardCharsets.UTF_8); CSVWriter csvWriter = new CSVWriter(fileStream, ';', '"', '\\', "\n"); @@ -69,7 +86,6 @@ public class GermplasmServiceImpl implements GermplasmService { "LotName", "LotSynonym", "CollectionName", "CollectionType", "PanelName", "PanelSize"}; csvWriter.writeNext(header); - while (germplasms.hasNext()) { List<String> collectionNames = new ArrayList<>(); List<String> panelNames = new ArrayList<>(); @@ -100,6 +116,88 @@ public class GermplasmServiceImpl implements GermplasmService { csvWriter.close(); } + + + + private void writeMcpdToCSV(Path tmpFile, Iterator<GermplasmMcpdVO> germplasms) throws IOException { + Writer fileStream = new OutputStreamWriter(new FileOutputStream(tmpFile.toFile()), StandardCharsets.UTF_8); + CSVWriter csvWriter = new CSVWriter(fileStream, ';', '"', '\\', "\n"); + String[] header = new String[]{ + "PUID", "INSTCODE", "ACCENUMB", "COLLNUMB", "COLLCODE", "COLLNAME", + "COLLINSTADDRESS", "COLLMISSID", "GENUS", "SPECIES", "SPAUTHOR", "SUBTAXA", + "SUBTAUTHOR", "CROPNAME", "ACCENAME", "ACQDATE", "ORIGCTY", "COLLSITE", + "DECLATITUDE", "LATITUDE", "DECLONGITUDE", "LONGITUDE", "COORDUNCERT", + "COORDDATUM", "GEOREFMETH", "ELEVATION", "COLLDATE", "BREDCODE", + "BREDNAME", "SAMPSTAT", "ANCEST","COLLSRC", "DONORCODE", "DONORNAME", + "DONORNUMB", "OTHERNUMB", "DUPLSITE", "DUPLINSTNAME", "STORAGE", "MLSSTAT", "REMARKS", + }; + csvWriter.writeNext(header); + + while (germplasms.hasNext()) { + List<String> collectionNames = new ArrayList<>(); + List<String> panelNames = new ArrayList<>(); + GermplasmMcpdVO germplasmMcpdVO = germplasms.next(); + + + String[] line = new String[header.length]; + line[0] = germplasmMcpdVO.getGermplasmPUI(); + line[1] = germplasmMcpdVO.getInstituteCode(); + line[2] = germplasmMcpdVO.getAccessionNumber(); + line[3] = germplasmMcpdVO.getCollectingInfo().getCollectingNumber(); + line[4] = germplasmMcpdVO.getCollectingInfo().getCollectingInstitutes().stream() + .map(InstituteVO::getInstituteCode).collect(Collectors.joining(";")); + line[5] = germplasmMcpdVO.getCollectingInfo().getCollectingInstitutes().stream() + .map(InstituteVO::getInstituteName).collect(Collectors.joining(";")); + line[6] = germplasmMcpdVO.getCollectingInfo().getCollectingInstitutes().stream() + .map(InstituteVO::getAddress).collect(Collectors.joining(";")); + line[7] = germplasmMcpdVO.getCollectingInfo().getCollectingMissionIdentifier(); + line[8] = germplasmMcpdVO.getGenus(); + line[9] = germplasmMcpdVO.getSpecies(); + line[10] = germplasmMcpdVO.getSpeciesAuthority(); + line[11] = germplasmMcpdVO.getSubtaxon(); + line[12] = germplasmMcpdVO.getSubtaxonAuthority(); + line[13] = germplasmMcpdVO.getCommonCropName(); + line[14] = String.join(";",germplasmMcpdVO.getAccessionNames()); + line[15] = germplasmMcpdVO.getAcquisitionDate(); + line[16] = germplasmMcpdVO.getCountryOfOriginCode(); + line[18] = germplasmMcpdVO.getCollectingInfo().getCollectingSite().getSiteName(); + line[19] = germplasmMcpdVO.getCollectingInfo().getCollectingSite().getLatitudeDecimal(); + line[20] = germplasmMcpdVO.getCollectingInfo().getCollectingSite().getLatitudeDegrees(); + line[21] = germplasmMcpdVO.getCollectingInfo().getCollectingSite().getLongitudeDecimal(); + line[22] = germplasmMcpdVO.getCollectingInfo().getCollectingSite().getLongitudeDegrees(); + line[23] = germplasmMcpdVO.getCollectingInfo().getCollectingSite().getCoordinateUncertainty(); + line[24] = germplasmMcpdVO.getCollectingInfo().getCollectingSite().getSpatialReferenceSystem(); + line[25] = germplasmMcpdVO.getCollectingInfo().getCollectingSite().getGeoreferencingMethod(); + line[26] = germplasmMcpdVO.getCollectingInfo().getCollectingSite().getElevation(); + line[27] = germplasmMcpdVO.getCollectingInfo().getCollectingDate(); + line[28] = germplasmMcpdVO.getBreedingInstitutes().stream() + .map(InstituteVO::getInstituteCode).collect(Collectors.joining(";")); + line[29] = germplasmMcpdVO.getBreedingInstitutes().stream() + .map(InstituteVO::getInstituteName).collect(Collectors.joining(";")); + line[30] = germplasmMcpdVO.getBiologicalStatusOfAccessionCode(); + line[31] = germplasmMcpdVO.getAncestralData(); + line[32] = germplasmMcpdVO.getAcquisitionSourceCode(); + line[33] = germplasmMcpdVO.getDonorInfo().stream() + .map(donorInfoVO -> donorInfoVO.getDonorInstitute().getInstituteCode()).collect(Collectors.joining(";")); + line[34] = germplasmMcpdVO.getDonorInfo().stream() + .map(donorInfoVO -> donorInfoVO.getDonorInstitute().getInstituteName()).collect(Collectors.joining(";")); + line[35] = germplasmMcpdVO.getDonorInfo().stream() + .map(DonorInfoVO::getDonorAccessionNumber).collect(Collectors.joining(";")); + line[36] = String.join(";", germplasmMcpdVO.getAlternateIDs()); + line[37] = germplasmMcpdVO.getSafetyDuplicateInstitutes().stream() + .map(InstituteVO::getInstituteName).collect(Collectors.joining(";")); + line[38] = String.join(";", germplasmMcpdVO.getStorageTypeCodes()); + line[39] = germplasmMcpdVO.getMlsStatus(); + line[40] = germplasmMcpdVO.getRemarks(); + csvWriter.writeNext(line); + } + csvWriter.close(); + } + + + + + @Override public GermplasmVO getById(String germplasmDbId) { return germplasmRepository.getById(germplasmDbId); diff --git a/backend/src/test/java/fr/inra/urgi/faidare/api/brapi/v1/CallsControllerTest.java b/backend/src/test/java/fr/inra/urgi/faidare/api/brapi/v1/CallsControllerTest.java index a4328166a30ed65903572c0c0698089f385ce7db..9bceca30daaf8da241f439d0585e37d3e3eacebc 100644 --- a/backend/src/test/java/fr/inra/urgi/faidare/api/brapi/v1/CallsControllerTest.java +++ b/backend/src/test/java/fr/inra/urgi/faidare/api/brapi/v1/CallsControllerTest.java @@ -42,7 +42,7 @@ class CallsControllerTest { .andExpect(status().isBadRequest()) .andExpect(content().json("{" + "\"metadata\":{" + - "\"pagination\":{\"pageSize\":100,\"currentPage\":2,\"totalCount\":26,\"totalPages\":1}," + + "\"pagination\":{\"pageSize\":100,\"currentPage\":2,\"totalCount\":27,\"totalPages\":1}," + "\"status\":[{" + "\"name\":\"Bad Request: The current page should be strictly less than the total number of pages.\"," + "\"code\":\"400\"" + @@ -64,7 +64,7 @@ class CallsControllerTest { " \"pagination\": {\n" + " \"pageSize\": 1000,\n" + " \"currentPage\": 0,\n" + - " \"totalCount\": 26,\n" + + " \"totalCount\": 27,\n" + " \"totalPages\": 1\n" + " },\n" + " \"status\": [],\n" + @@ -97,6 +97,11 @@ class CallsControllerTest { " \"methods\": [\"GET\"],\n" + " \"versions\": [\"1.0\", \"1.1\", \"1.2\"]\n" + " }, {\n" + + " \"call\": \"germplasm/{germplasmDbId}/mcpd\",\n" + + " \"datatypes\": [\"json\"],\n" + + " \"methods\": [\"GET\"],\n" + + " \"versions\": [\"1.0\", \"1.1\", \"1.2\"]\n" + + " }, {\n" + " \"call\": \"germplasm/{germplasmDbId}/pedigree\",\n" + " \"datatypes\": [\"json\"],\n" + " \"methods\": [\"GET\"],\n" + diff --git a/backend/src/test/java/fr/inra/urgi/faidare/api/brapi/v1/GermplasmControllerTest.java b/backend/src/test/java/fr/inra/urgi/faidare/api/brapi/v1/GermplasmControllerTest.java index 12fd243970bf52a90c9e0c9610b3280ffb5c8d1f..3a0011514394260fe8e2310743087d43fdf90ebe 100644 --- a/backend/src/test/java/fr/inra/urgi/faidare/api/brapi/v1/GermplasmControllerTest.java +++ b/backend/src/test/java/fr/inra/urgi/faidare/api/brapi/v1/GermplasmControllerTest.java @@ -108,7 +108,6 @@ class GermplasmControllerTest { GermplasmVO germplasm = new GermplasmVO(); germplasm.setGroupId(0L); - germplasm.setSpeciesGroup(Collections.singletonList(1L)); germplasm.setGermplasmDbId("germplasmDbId"); germplasm.setDefaultDisplayName("defaultDisplayName"); @@ -119,7 +118,6 @@ class GermplasmControllerTest { DonorVO donor = new DonorVO(); donor.setDonorGermplasmPUI("pui"); - donor.setDonationDate(1); germplasm.setDonors(Collections.singletonList(donor)); when(service.getById(anyString())).thenReturn(germplasm); diff --git a/backend/src/test/java/fr/inra/urgi/faidare/api/faidare/v1/GnpISGermplasmControllerTest.java b/backend/src/test/java/fr/inra/urgi/faidare/api/faidare/v1/GnpISGermplasmControllerTest.java index a9150b26b6974be834a1e95830caeb977aae2658..ad6f539d096dddb194038ec133c9bb97688c0140 100644 --- a/backend/src/test/java/fr/inra/urgi/faidare/api/faidare/v1/GnpISGermplasmControllerTest.java +++ b/backend/src/test/java/fr/inra/urgi/faidare/api/faidare/v1/GnpISGermplasmControllerTest.java @@ -95,7 +95,6 @@ class GnpISGermplasmControllerTest { GermplasmVO germplasm = new GermplasmVO(); germplasm.setGroupId(0L); - germplasm.setSpeciesGroup(Collections.singletonList(1L)); germplasm.setGermplasmDbId("germplasmDbId"); germplasm.setDefaultDisplayName("defaultDisplayName"); @@ -107,7 +106,6 @@ class GnpISGermplasmControllerTest { DonorVO donor = new DonorVO(); donor.setDonorGermplasmPUI("pui"); - donor.setDonationDate(1); germplasm.setDonors(Collections.singletonList(donor)); PaginatedList<GermplasmVO> germplasmPage = new PaginatedList<>(null, Collections.singletonList(germplasm)); @@ -127,7 +125,7 @@ class GnpISGermplasmControllerTest { .andExpect(jsonPath("$.donors[0].donorGermplasmPUI", is(donor.getDonorGermplasmPUI()))) // GnpIS specific fields should appear - .andExpect(jsonPath("$.donors[0].donationDate", is(donor.getDonationDate()))) + //.andExpect(jsonPath("$.donors[0].donationDate", is(donor.getDonationDate()))) .andExpect(jsonPath("$.collection[0].name", is(collection.getName()))); } diff --git a/backend/src/test/java/fr/inra/urgi/faidare/repository/es/GermplasmRepositoryTest.java b/backend/src/test/java/fr/inra/urgi/faidare/repository/es/GermplasmRepositoryTest.java index 42190131c14ef1b9889611311d0e2812a3990be0..76285c6934b21838e2af8c7c9446aafde00787e5 100644 --- a/backend/src/test/java/fr/inra/urgi/faidare/repository/es/GermplasmRepositoryTest.java +++ b/backend/src/test/java/fr/inra/urgi/faidare/repository/es/GermplasmRepositoryTest.java @@ -22,6 +22,7 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.context.annotation.Import; import org.springframework.test.context.TestPropertySource; import org.springframework.test.context.junit.jupiter.SpringExtension; +import fr.inra.urgi.faidare.domain.data.germplasm.GermplasmMcpdVO; import java.util.Arrays; import java.util.Collections; @@ -47,6 +48,8 @@ class GermplasmRepositoryTest { esSetUp.initialize(GermplasmVO.class, 0L); esSetUp.initialize(ProgenyVO.class, 0L); esSetUp.initialize(PedigreeVO.class, 0L); + esSetUp.initialize(GermplasmMcpdVO.class, 0L); + } @Autowired @@ -71,6 +74,36 @@ class GermplasmRepositoryTest { assertThat(germplasm.get(0).getGermplasmPUI()).isEqualTo(germplasmPUI); } + + @Test + void should_Get_Mcpd_By_Id() { + String germplasmDbId = "13705"; + GermplasmMcpdVO germplasm = repository.getAsMcpdById(germplasmDbId); + assertThat(germplasm).isNotNull(); + assertThat(germplasm.getGermplasmDbId()).isEqualTo(germplasmDbId); + } + + + @Test + void should_Not_Get_Mcpd_With_Wrong_Id() { + String germplasmDbId = "489485184"; + GermplasmMcpdVO germplasm = repository.getAsMcpdById(germplasmDbId); + assertThat(germplasm).isNull(); + } + + @Test + void should_Get_Mcpd_By_Id_checkAll() { + String germplasmDbId = "13705"; + GermplasmMcpdVO germplasm = repository.getAsMcpdById(germplasmDbId); + assertThat(germplasm).isNotNull(); + assertThat(germplasm.getGermplasmDbId()).isEqualTo(germplasmDbId); + assertThat(germplasm.getCollectingInfo()).isNotNull(); + assertThat(germplasm.getCollectingInfo().getCollectingSite()).isNotNull(); + assertThat(germplasm.getCollectingInfo().getCollectingSite().getLocationDbId()).isNotNull(); + assertThat(germplasm.getCollectingInfo().getCollectingSite().getLocationDbId()).isEqualTo("dXJuOlVSR0kvbG9jYXRpb24vNDA2MzU="); + assertThat(germplasm.getCollectingInfo().getCollectingSite().getLocationDbId()).isNotEqualTo("dXJuOlVSR0kvbG9"); + } + @Test void should_Not_Get_By_Incorrect_Id() { String germplasmDbId = "FOOO"; diff --git a/backend/src/test/java/fr/inra/urgi/faidare/repository/es/setup/ESSetUp.java b/backend/src/test/java/fr/inra/urgi/faidare/repository/es/setup/ESSetUp.java index 13a40d2b49294bf5e2bca0f243665c2ea85ef1d3..235e03b61c1439246e811b7ba02355d4f2fe6cd7 100644 --- a/backend/src/test/java/fr/inra/urgi/faidare/repository/es/setup/ESSetUp.java +++ b/backend/src/test/java/fr/inra/urgi/faidare/repository/es/setup/ESSetUp.java @@ -103,7 +103,7 @@ public class ESSetUp { if (response.hasFailures()) { System.err.println(response.buildFailureMessage()); - throw new RuntimeException("Indexing failed (index name: '" + indexName + "'"); + throw new RuntimeException("Indexing failed (index name: '" + indexName + "')"); } } @@ -170,7 +170,11 @@ public class ESSetUp { @SuppressWarnings("UnstableApiUsage") private String readResource(String path) { try { - return CharStreams.toString(new InputStreamReader(getClass().getResourceAsStream(path))); + InputStream resource = getClass().getResourceAsStream(path); + if (resource == null) { + throw new RuntimeException("Could not find resource at path '"+path+"'"); + } + return CharStreams.toString(new InputStreamReader(resource)); } catch (IOException e) { throw new RuntimeException(e); } diff --git a/backend/src/test/resources/fr/inra/urgi/faidare/repository/es/setup/fixture/germplasmMcpd0.json b/backend/src/test/resources/fr/inra/urgi/faidare/repository/es/setup/fixture/germplasmMcpd0.json new file mode 100644 index 0000000000000000000000000000000000000000..676a8611f5b21347b326fdbb924bc453dc9b9ac2 --- /dev/null +++ b/backend/src/test/resources/fr/inra/urgi/faidare/repository/es/setup/fixture/germplasmMcpd0.json @@ -0,0 +1,91 @@ +[{ + "docId": 13705, + "groupId": 0, + "accessionNames": [ + "Belle Magnifique", + "Angleterre tardive,Belle de Chatenay,Belle de Sceaux,Belle de Spa,Cerise d'Agen,Cerise de Crêve,Cerise de Planchoury,Cerise de Saxe,de Spa,Gros de Sceaux,Magnifique de Sceaux" + ], + "accessionNumber": "V3853", + "acquisitionDate": 20040000, + "acquisitionSourceCode": null, + "alternateIDs": [ + "V3853", + "https://doi.org/10.15454/QOYDZ8", + "13705" + ], + "ancestralData": "Il y a deux hypothèses sur l'origine de cette variété : elle aurait été obtenue dans une pépinière de Vitry-sur-Seine ou trouvée dans une propriété à Chatenay (Pomologie de la France 1871).", + "biologicalStatusOfAccessionCode": "test", + "breedingInstitutes": [ + { + "instituteName": null, + "instituteCode": null + } + ], + "collectingInfo": { + "collectingDate": 20040000, + "collectingInstitutes": [ + { + "instituteAddress": "", + "instituteCode": null, + "instituteName": null + } + ], + "collectingMissionIdentifier": null, + "collectingNumber": null, + "collectingSite": { + "locationDbId": "dXJuOlVSR0kvbG9jYXRpb24vNDA2MzU=", + "locationName": "(U) Liamone - ULI", + "latitudeDecimal": 42.124165, + "locationDescription": "Liamone", + "longitudeDecimal": 8.749445, + "locationURI": "urn:URGI/location/40635", + "coordinateUncertainty": "test", + "elevation": "test", + "georeferencingMethod": "test", + "latitudeDegrees": "test", + "longitudeDegrees": "test", + "spatialReferenceSystem": "test" + } + }, + "cropName": "Cherry", + "countryOfOriginCode": "France", + "donorInfo ": [ + { + "donorAccessionNumber": "C101", + "donorInstitute": { + "donorInstituteCode": null, + "donorInstitute": "Conservatoire Végétal Régional d'Aquitaine" + } + } + ], + "genus": "Prunus", + "germplasmDbId": 13705, + "germplasmPUI": "https://doi.org/10.15454/QOYDZ8", + "instituteCode": "FRA057", + "mlsStatus": "0", + "remarks": "Quelques auteurs disent que cette variété a été obtenue vers 1795 par un nommé Chatenay, dit le Magnifique, pépiniériste à Vitry-sur-Seine (Pomologie de la France 1871). D'autres disent qu'elle a été trouvée dans une propriété à Chatenay, et multipliée par les pépiniéristes de Sceaux et de Chatenay, localités où elle a porté pendant longtemps le nom de Cerise de la Madeleine (Pomologie de la France 1871).", + "safetyDuplicateInstitues": [ + { + "instituteCode": null, + "instituteName": null + } + ], + "species": "cerasus", + "speciesAuthority": "L.", + "holdingInstitute": { + "instituteName": "UMR0588-BioForA (Biologie Intégrée pour la valorisation de la diversité des arbres et de la Forêt)", + "acronym": "BioForA", + "organisation": "INRA-ONF", + "instituteType": "Public-sector research organization", + "webSite": "https://www6.val-de-loire.inrae.fr/biofora", + "instituteAddress": "2163 avenue de la Pomme de Pin - CS 40001 ARDON, 45075 ORLÉANS CEDEX 2, France" + }, + "storageTypeCodes": [ + "" + ], + "subtaxon": "subsp. vulgaris", + "subtaxonAuthority": "L.", + "originLocationDbId": "2400", + "originLocationName": "test" +} +] diff --git a/backend/src/test/resources/fr/inra/urgi/faidare/repository/es/setup/index/germplasmMcpd_mapping.json b/backend/src/test/resources/fr/inra/urgi/faidare/repository/es/setup/index/germplasmMcpd_mapping.json new file mode 100644 index 0000000000000000000000000000000000000000..e26ea0b6ab897bd65e7bfd81a90b4c2575eeb0c1 --- /dev/null +++ b/backend/src/test/resources/fr/inra/urgi/faidare/repository/es/setup/index/germplasmMcpd_mapping.json @@ -0,0 +1,455 @@ +{ + "germplasmMcpd": { + "dynamic": "false", + "properties": { + "germplasmURI": { + "type": "keyword" + }, + "germplasmName": { + "type": "keyword", + "doc_values": true + }, + "accessionNames": { + "type": "keyword", + "doc_values": true + }, + "accessionNumber": { + "type": "keyword", + "doc_values": true + }, + "acquisitionDate": { + "type": "integer" + }, + "acquisitionSourceCode": { + "type": "keyword" + }, + "alternateIDs": { + "type": "keyword" + }, + "ancestralData": { + "type": "keyword" + }, + "biologicalStatusOfAccessionCode": { + "type": "keyword" + }, + "breedingInstitutes": { + "properties": { + "instituteCode": { + "type": "keyword" + }, + "instituteName": { + "type": "keyword" + }, + "acronym": { + "type": "keyword" + }, + "organisation": { + "type": "keyword" + }, + "instituteType": { + "type": "keyword" + }, + "webSite": { + "type": "keyword" + }, + "instituteAddress": { + "type": "keyword" + }, + "logo": { + "type": "keyword" + } + } + }, + "breedingMethodDbId": { + "type": "keyword" + }, + "breederAccessionNumber": { + "type": "keyword" + }, + "breedingCreationYear": { + "type": "keyword" + }, + "catalogRegistrationYear": { + "type": "keyword" + }, + "catalogDeregistrationYear": { + "type": "keyword" + }, + "collectingInfo": { + "properties": { + "collectingDate": { + "type": "integer" + }, + "collectingInstitutes": { + "properties": { + "instituteCode": { + "type": "keyword" + }, + "instituteName": { + "type": "keyword" + }, + "acronym": { + "type": "keyword" + }, + "organisation": { + "type": "keyword" + }, + "instituteType": { + "type": "keyword" + }, + "webSite": { + "type": "keyword" + }, + "instituteAddress": { + "type": "keyword" + }, + "logo": { + "type": "keyword" + } + } + }, + "collectingMissionIdentifier": { + "type": "keyword" + }, + "collectingNumber": { + "type": "keyword" + }, + "collectors": { + "type": "keyword" + }, + "materialType": { + "type": "keyword" + }, + "collectingSite": { + "properties": { + "locationDbId": { + "type": "keyword" + }, + "locationName": { + "type": "keyword" + }, + "coordinateUncertainty": { + "type": "keyword" + }, + "elevation": { + "type": "keyword" + }, + "georeferencingMethod":{ + "type": "keyword" + }, + "latitudeDecimal": { + "type": "keyword" + }, + "latitudeDegrees": { + "type": "keyword" + }, + "locationDescription": { + "type": "keyword" + }, + "longitudeDecimal": { + "type": "keyword" + }, + "longitudeDegrees": { + "type": "keyword" + }, + "spatialReferenceSystem": { + "type": "keyword" + }, + "locationURI": { + "type": "keyword" + } + + } + + } + + } + }, + "commonCropName": { + "type": "keyword", + "doc_values": true + }, + "countryOfOrigin": { + "type": "keyword" + }, + "countryOfOriginCode": { + "type": "keyword" + }, + "originLocationDbId": { + "type": "keyword" + }, + "originLocationName": { + "type": "keyword" + }, + "documentationURL": { + "type": "keyword" + }, + "donors": { + "properties": { + "donorInstituteCode": { + "type": "keyword" + }, + "donorGermplasmPUI": { + "type": "keyword" + }, + "germplasmPUI": { + "type": "keyword" + }, + "donorAccessionNumber": { + "type": "keyword" + }, + "donorInstitute": { + "properties": { + "instituteName": { + "type": "keyword" + }, + "instituteCode": { + "type": "keyword" + }, + "acronym": { + "type": "keyword" + }, + "organisation": { + "type": "keyword" + }, + "instituteType": { + "type": "keyword" + }, + "webSite": { + "type": "keyword" + }, + "address": { + "type": "keyword" + }, + "logo": { + "type": "keyword" + } + } + }, + "donationDate": { + "type": "integer" + } + } + }, + "donorInfo": { + "properties":{ + "donorAccessionNumber": { + "type": "keyword" + }, + "donorAccessionPui": { + "type": "keyword" + }, + "donationDate": { + "type": "keyword" + }, + "donorInstitute": { + "properties":{ + "instituteCode": { + "type": "keyword" + }, + "instituteName": { + "type": "keyword" + }, + "acronym": { + "type": "keyword" + }, + "organisation": { + "type": "keyword" + }, + "instituteType": { + "type": "keyword" + }, + "webSite": { + "type": "keyword" + }, + "instituteAddress": { + "type": "keyword" + }, + "logo": { + "type": "keyword" + } + } + } + } + }, + "genus":{ + "type": "keyword", + "doc_values": true + }, + "genusSpecies": { + "type": "keyword", + "doc_values": true + }, + "germplasmDbId": { + "type": "keyword" + }, + "germplasmMcpdDbId": { + "type": "keyword" + }, + "germplasmMcpdURI": { + "type": "keyword" + }, + "germplasmGenus": { + "type": "keyword", + "doc_values": true + }, + "germplasmPUI": { + "type": "keyword" + }, + "germplasmSpecies": { + "type": "keyword", + "doc_values": true + }, + "holdingInstitute": { + "properties": { + "instituteName": { + "type": "keyword" + }, + "instituteCode": { + "type": "keyword" + }, + "acronym": { + "type": "keyword" + }, + "organisation": { + "type": "keyword" + }, + "instituteType": { + "type": "keyword" + }, + "webSite": { + "type": "keyword" + }, + "instituteAddress": { + "type": "keyword" + }, + "logo": { + "type": "keyword" + } + } + }, + "holdingGenbank": { + "properties": { + "instituteName": { + "type": "keyword", + "doc_values": true + }, + "instituteCode": { + "type": "keyword" + }, + "webSite": { + "type": "keyword" + }, + "logo": { + "type": "keyword" + } + } + }, + "distributorInfos": { + "properties": { + "institute": { + "properties": { + "instituteName": { + "type": "keyword" + }, + "instituteCode": { + "type": "keyword" + }, + "acronym": { + "type": "keyword" + }, + "organisation": { + "type": "keyword" + }, + "instituteType": { + "type": "keyword" + }, + "webSite": { + "type": "keyword" + }, + "instituteAddress": { + "type": "keyword" + }, + "logo": { + "type": "keyword" + } + } + }, + "accessionNumber": { + "type": "keyword" + }, + "distributionStatus": { + "type": "keyword" + } + } + }, + "instituteCode": { + "type": "keyword" + }, + "mlsStatus": { + "type": "keyword" + }, + "remarks": { + "type": "keyword" + }, + "safetyDuplicateInstitutes": { + "properties":{ + "instituteCode": { + "type": "keyword" + }, + "instituteName": { + "type": "keyword" + } + } + }, + "geneticNature": { + "type": "keyword" + }, + "species": { + "type": "keyword" + }, + "speciesAuthority": { + "type": "keyword" + }, + "storageTypeCodes": { + "type": "keyword" + }, + "subtaxon": { + "type": "keyword" + }, + "subtaxonAuthority": { + "type": "keyword" + }, + "subtaxaAuthority": { + "type": "keyword" + }, + "groupId": { + "type": "long" + }, + "presenceStatus": { + "type": "keyword" + }, + "@type": { + "type": "keyword" + }, + "@id": { + "type": "keyword" + }, + "schema:includedInDataCatalog": { + "type": "keyword" + }, + "schema:identifier": { + "type": "keyword" + }, + "schema:name": { + "type": "keyword" + }, + "schema:url": { + "type": "keyword" + }, + "defaultDisplayName": { + "type": "keyword" + } + } + } +} diff --git a/frontend/src/app/brapi.service.spec.ts b/frontend/src/app/brapi.service.spec.ts index 7f60d4fa9ea5b9e2ec28d0add5926bf412616a31..521ac19c2866e62618d5153a4660e40b42befa12 100644 --- a/frontend/src/app/brapi.service.spec.ts +++ b/frontend/src/app/brapi.service.spec.ts @@ -1,10 +1,13 @@ import { BrapiService } from './brapi.service'; import { + BrapiCollectingSite, BrapiContacts, BrapiGermplasm, BrapiGermplasmAttributes, + BrapiGermplasmMcpd, BrapiGermplasmPedigree, BrapiGermplasmProgeny, + BrapiInstitute, BrapiLocation, BrapiObservationVariable, BrapiProgeny, @@ -14,9 +17,19 @@ import { BrapiStudy, BrapiTrial } from './models/brapi.model'; -import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing'; +import { + HttpClientTestingModule, + HttpTestingController +} from '@angular/common/http/testing'; import { TestBed } from '@angular/core/testing'; -import { Donor, Germplasm, GermplasmInstitute, GermplasmSet, Institute, Site } from './models/gnpis.model'; +import { + Donor, + Germplasm, + GermplasmInstitute, + GermplasmSet, + Institute, + Site +} from './models/gnpis.model'; describe('BrapiService', () => { @@ -214,6 +227,16 @@ describe('BrapiService', () => { address: '12', logo: null }; + const brapiInstitute: BrapiInstitute = { + instituteName: 'INRAE URGI', + instituteCode: '78000', + acronym: 'INRAE', + organisation: 'inrae', + instituteType: 'lab', + webSite: 'www.labo.fr', + instituteAddress: '18', + logo: null + }; const origin: GermplasmInstitute = { ...institute, institute: institute, @@ -226,6 +249,20 @@ describe('BrapiService', () => { distributionStatus: null }; + const collectingSite: BrapiCollectingSite = { + locationDbId: 'FR-78-INRAE', + locationName: 'Versailles', + coordinateUncertainty: null, + elevation: null, + georeferencingMethod: null, + latitudeDecimal: null, + latitudeDegrees: null, + locationDescription: null, + longitudeDecimal: null, + longitudeDegrees: null, + spatialReferenceSystem: null, + }; + const brapiDonor: Donor = { donorInstitute: institute, donorGermplasmPUI: '12', @@ -303,6 +340,62 @@ describe('BrapiService', () => { 'schema:includedInDataCatalog': null }; + const germplasmMcpdTest: BrapiGermplasmMcpd = { + groupId: '0', + accessionNames: ['test accession'], + accessionNumber: '01', + acquisitionDate: '2021', + acquisitionSourceCode: 'FR-urgi', + alternateIDs: ['Id1', 'Id2'], + ancestralData: null, + biologicalStatusOfAccessionCode: 'maintained', + breedingInstitutes: brapiInstitute, + collectingInfo: { + collectingDate: '2021', + collectingInstitutes: brapiInstitute, + collectingMissionIdentifier: '007', + collectingNumber: '3', + collectors: 'urgi', + materialType: 'germplasm', + collectingSite: collectingSite, + }, + commonCropName: 'wheat', + countryOfOriginCode: 'FR', + donorInfo: { + donorAccessionNumber: 'ING007', + donorInstitute: brapiInstitute, + donationDate: '2021', + }, + genus: 'Triti', + germplasmDbId: 'Fr-007', + germplasmPUI: 'urn/fr-007', + instituteCode: 'FR-INRAE', + mlsStatus: '0', + remarks: null, + safetyDuplicateInstitutes: null, + species: 'Triti', + speciesAuthority: null, + storageTypeCodes: null, + subtaxon: null, + subtaxonAuthority: null, + breederAccessionNumber: null, + breedingCreationYear: null, + catalogRegistrationYear: null, + catalogDeregistrationYear: null, + originLocationDbId: 'FR-Ver', + originLocationName: 'Versailles', + holdingInstitute: brapiInstitute, + holdingGenbank: brapiInstitute, + geneticNature: 'hybrid', + presenceStatus: null, + distributorInfos: null + }; + + const germplasmMcpdTestResult: BrapiResult<BrapiGermplasmMcpd> = { + metadata: null, + result: germplasmMcpdTest + }; + let brapiService: BrapiService; let http: HttpTestingController; @@ -428,4 +521,18 @@ describe('BrapiService', () => { }); + it('should fetch the germplasm mcpd', () => { + + let fetchedGermplasmMcpd: BrapiResult<BrapiGermplasmMcpd>; + const germplasmDbId: string = germplasmTest.germplasmDbId; + brapiService.germplasmMcpd(germplasmDbId).subscribe(response => { + fetchedGermplasmMcpd = response; + }); + http.expectOne(`brapi/v1/germplasm/${germplasmDbId}/mcpd`) + .flush(germplasmMcpdTestResult); + + expect(fetchedGermplasmMcpd).toEqual(germplasmMcpdTestResult); + + }); + }); diff --git a/frontend/src/app/brapi.service.ts b/frontend/src/app/brapi.service.ts index e1b0b584f2b933f24b58f62f1221648ebbc3ed57..aca2463a41295b6b0d303e164733b13d5f96ab02 100644 --- a/frontend/src/app/brapi.service.ts +++ b/frontend/src/app/brapi.service.ts @@ -4,6 +4,7 @@ import { HttpClient } from '@angular/common/http'; import { BrapiGermplasm, BrapiGermplasmAttributes, + BrapiGermplasmMcpd, BrapiGermplasmPedigree, BrapiLocation, BrapiObservationVariable, @@ -13,6 +14,7 @@ import { BrapiTrial } from './models/brapi.model'; + export const BASE_URL = 'brapi/v1'; @Injectable({ @@ -60,6 +62,10 @@ export class BrapiService { return this.http .get<BrapiResult<BrapiTrial>>(`${BASE_URL}/trials/${trialsId}`); } + germplasmMcpd(germplasmDbId: string): Observable<BrapiResult<BrapiGermplasmMcpd>> { + return this.http + .get<BrapiResult<BrapiGermplasmMcpd>>(`${BASE_URL}/germplasm/${germplasmDbId}/mcpd`); + } /** diff --git a/frontend/src/app/germplasm-card/germplasm-card.component.html b/frontend/src/app/germplasm-card/germplasm-card.component.html index 053b76ff0d3315bdad63d6f6b133e0b956f41551..188729a86340ebc0e6e7cf62af5e51473016601f 100644 --- a/frontend/src/app/germplasm-card/germplasm-card.component.html +++ b/frontend/src/app/germplasm-card/germplasm-card.component.html @@ -42,6 +42,7 @@ </ng-template> </faidare-card-row> + <faidare-card-row label="Authority" [test]="germplasmTaxonAuthor"> @@ -280,7 +281,7 @@ <faidare-card-row label="Pedigree" - [value]="germplasmGnpis.pedigree"> + [value]="germplasmGnpis.pedigree"> </faidare-card-row> <faidare-card-row @@ -298,6 +299,14 @@ </ng-template> </faidare-card-row> + <faidare-card-row + label="MLS status" + [test]="germplasmMcpd && germplasmMcpd.mlsStatus"> + <ng-template> + {{ germplasmMcpd.mlsStatus }} + </ng-template> + </faidare-card-row> + </div> </ng-template> </faidare-card-section> @@ -344,7 +353,6 @@ label="Presence status" [value]="germplasmGnpis.presenceStatus"> </faidare-card-row> - </div> </ng-template> </faidare-card-section> @@ -366,6 +374,14 @@ </ng-template> </faidare-card-row> + <faidare-card-row + label="Acquisition Source Code" + [test]="germplasmMcpd && germplasmMcpd.acquisitionSourceCode"> + <ng-template> + {{ germplasmMcpd.acquisitionSourceCode }} + </ng-template> + </faidare-card-row> + <faidare-card-row label="Material type" [test]="germplasmGnpis.collector && germplasmGnpis.collector.materialType"> @@ -483,7 +499,7 @@ ]" [rows]="germplasmGnpis.donors"> <ng-template let-row> - <tr> + <tr *ngIf="row.donorInstitute"> <ng-template #donorInstituteTemplate> <ng-container *ngTemplateOutlet="instituteTemplate;context:row.donorInstitute"> </ng-container> diff --git a/frontend/src/app/germplasm-card/germplasm-card.component.spec.ts b/frontend/src/app/germplasm-card/germplasm-card.component.spec.ts index b0fa68a891c1b0ab425b895723bec06825e81f2a..4f0d779fd44741e9649e3321bb997730dd9a0089 100644 --- a/frontend/src/app/germplasm-card/germplasm-card.component.spec.ts +++ b/frontend/src/app/germplasm-card/germplasm-card.component.spec.ts @@ -14,8 +14,22 @@ import { CardSectionComponent } from '../card-section/card-section.component'; import { CardRowComponent } from '../card-row/card-row.component'; import { CardTableComponent } from '../card-table/card-table.component'; import { MapComponent } from '../map/map.component'; -import { BrapiGermplasmAttributes, BrapiGermplasmPedigree, BrapiResult, BrapiSibling } from '../models/brapi.model'; -import { Donor, Germplasm, GermplasmInstitute, GermplasmSet, Institute, Site } from '../models/gnpis.model'; +import { + BrapiCollectingSite, + BrapiGermplasmAttributes, + BrapiGermplasmMcpd, + BrapiGermplasmPedigree, + BrapiInstitute, + BrapiResult, + BrapiSibling +} from '../models/brapi.model'; +import { + Donor, + Germplasm, + GermplasmInstitute, + GermplasmSet, + Institute +} from '../models/gnpis.model'; import { DataDiscoverySource } from '../models/data-discovery.model'; import { MockComponent } from 'ng-mocks'; import { XrefsComponent } from '../xrefs/xrefs.component'; @@ -38,6 +52,14 @@ describe('GermplasmCardComponent', () => { get cardHeader() { return this.elements('div.card-header'); } + + get cardRowField() { + return this.elements('div.field'); + } + + get cardRowValue() { + return this.elements('div.value'); + } } const brapiSibling: BrapiSibling = { @@ -84,6 +106,17 @@ describe('GermplasmCardComponent', () => { logo: null }; + const brapiInstitute: BrapiInstitute = { + instituteName: 'INRAE URGI', + instituteCode: '78000', + acronym: 'INRAE', + organisation: 'inrae', + instituteType: 'lab', + webSite: 'www.labo.fr', + instituteAddress: '18', + logo: null + }; + const gnpisGermplasmInstitute: GermplasmInstitute = { ...gnpisInstitute, institute: gnpisInstitute, @@ -96,6 +129,20 @@ describe('GermplasmCardComponent', () => { distributionStatus: null }; + const collectingSite: BrapiCollectingSite = { + locationDbId: 'FR-78-INRAE', + locationName: 'Versailles', + coordinateUncertainty: null, + elevation: null, + georeferencingMethod: null, + latitudeDecimal: null, + latitudeDegrees: null, + locationDescription: null, + longitudeDecimal: null, + longitudeDegrees: null, + spatialReferenceSystem: null, + }; + const gnpisDonor: Donor = { donorInstitute: gnpisInstitute, donorGermplasmPUI: '12', @@ -138,7 +185,7 @@ describe('GermplasmCardComponent', () => { germplasmDbId: 'test', defaultDisplayName: 'test', accessionNumber: 'test', - germplasmName: 'test', + germplasmName: 'testName', germplasmPUI: 'doi:1256', pedigree: 'tree', seedSource: 'inra', @@ -181,6 +228,61 @@ describe('GermplasmCardComponent', () => { 'schema:includedInDataCatalog': source }; + const germplasmMcpdTest: BrapiGermplasmMcpd = { + groupId: '0', + accessionNames: ['test accession'], + accessionNumber: '01', + acquisitionDate: '2021', + acquisitionSourceCode: 'FR-urgi', + alternateIDs: ['Id1', 'Id2'], + ancestralData: null, + biologicalStatusOfAccessionCode: 'maintained', + breedingInstitutes: brapiInstitute, + collectingInfo: { + collectingDate: '2021', + collectingInstitutes: brapiInstitute, + collectingMissionIdentifier: '007', + collectingNumber: '3', + collectors: 'urgi', + materialType: 'germplasm', + collectingSite: collectingSite, + }, + commonCropName: 'wheat', + countryOfOriginCode: 'FR', + donorInfo: { + donorAccessionNumber: 'ING007', + donorInstitute: brapiInstitute, + donationDate: '2021', + }, + genus: 'Triti', + germplasmDbId: 'Fr-007', + germplasmPUI: 'urn/fr-007', + instituteCode: 'FR-INRAE', + mlsStatus: '0', + remarks: null, + safetyDuplicateInstitutes: null, + species: 'Triti', + speciesAuthority: null, + storageTypeCodes: null, + subtaxon: null, + subtaxonAuthority: null, + breederAccessionNumber: null, + breedingCreationYear: null, + catalogRegistrationYear: null, + catalogDeregistrationYear: null, + originLocationDbId: 'FR-Ver', + originLocationName: 'Versailles', + holdingInstitute: brapiInstitute, + holdingGenbank: brapiInstitute, + geneticNature: 'hybrid', + presenceStatus: null, + distributorInfos: null + }; + const germplasmMcpdTestResult: BrapiResult<BrapiGermplasmMcpd> = { + metadata: null, + result: germplasmMcpdTest + }; + const gnpisService = jasmine.createSpyObj( 'GnpisService', [ 'getGermplasm', @@ -194,12 +296,14 @@ describe('GermplasmCardComponent', () => { 'BrapiService', [ // 'germplasmProgeny', 'germplasmPedigree', - 'germplasmAttributes' + 'germplasmAttributes', + 'germplasmMcpd' ] ); // brapiService.germplasmProgeny.and.returnValue(of(brapiGermplasmProgeny)); brapiService.germplasmPedigree.and.returnValue(of(brapiGermplasmPedigree)); brapiService.germplasmAttributes.and.returnValue(of(brapiGermplasmAttributes)); + brapiService.germplasmMcpd.and.returnValue(of(germplasmMcpdTestResult)); const activatedRouteParams = { @@ -236,15 +340,22 @@ describe('GermplasmCardComponent', () => { component.loaded.then(() => { expect(component.germplasmGnpis).toBeTruthy(); + expect(component.germplasmMcpd).toBeTruthy(); tester.detectChanges(); expect(tester.title).toContainText('Germplasm: test'); expect(tester.cardHeader[0]).toContainText('Identification'); + expect(tester.cardRowField[0]).toContainText('Germplasm name'); + expect(tester.cardRowValue[0]).toContainText('testName'); + expect(tester.cardHeader[1]).toContainText('Depositary'); expect(tester.cardHeader[2]).toContainText('Collector'); expect(tester.cardHeader[3]).toContainText('Breeder'); expect(tester.cardHeader[4]).toContainText('Donor'); expect(tester.cardHeader[5]).toContainText('Distributor'); expect(tester.cardHeader[6]).toContainText('Evaluation Data'); + + expect(tester.cardRowField[5]).toContainText('MLS status'); + expect(tester.cardRowValue[5]).toContainText('0'); }); })); diff --git a/frontend/src/app/germplasm-card/germplasm-card.component.ts b/frontend/src/app/germplasm-card/germplasm-card.component.ts index 6c8d91088dc726cf22f485fa4d9198ab5cf07313..2569cee684c4e6d78bbdb8393855d96c11963374 100644 --- a/frontend/src/app/germplasm-card/germplasm-card.component.ts +++ b/frontend/src/app/germplasm-card/germplasm-card.component.ts @@ -4,9 +4,10 @@ import { BrapiService } from '../brapi.service'; import { GnpisService } from '../gnpis.service'; import { BrapiAttributeData, + BrapiGermplasmMcpd, BrapiGermplasmPedigree, BrapiLocation, - BrapiTaxonIds + BrapiTaxonIds, } from '../models/brapi.model'; import { Children, Germplasm, Site } from '../models/gnpis.model'; import { environment } from '../../environments/environment'; @@ -26,6 +27,7 @@ export class GermplasmCardComponent implements OnInit { taxonIdsWithURL: BrapiTaxonIds[] = []; germplasmGnpis: Germplasm; + germplasmMcpd: BrapiGermplasmMcpd; germplasmPedigree: BrapiGermplasmPedigree; germplasmProgeny: Children[]; germplasmAttributes: BrapiAttributeData[]; @@ -45,7 +47,6 @@ export class GermplasmCardComponent implements OnInit { .then(germplasm => { const germplasmId = id || germplasm.germplasmDbId; this.germplasmGnpis = germplasm; - this.getTaxon(); this.reformatData(); // TODO use the progeny call when the information about parent will be added. @@ -55,6 +56,12 @@ export class GermplasmCardComponent implements OnInit { this.germplasmProgeny = germplasmProgeny.result; });*/ + + this.brapiService.germplasmMcpd(germplasmId).subscribe(germplasmMcpd => { + this.germplasmMcpd = germplasmMcpd.result; + }); + this.getTaxon(); + this.germplasmPedigree = null; this.brapiService.germplasmPedigree(germplasmId) .subscribe(germplasmPedigree => { diff --git a/frontend/src/app/germplasm-result-page/germplasm-result-page.component.html b/frontend/src/app/germplasm-result-page/germplasm-result-page.component.html index 0c1539367f44f43d0deb9ddf1c58ecc0799fb245..feda59ea7d9f7c4c359d38729226913315f4902e 100644 --- a/frontend/src/app/germplasm-result-page/germplasm-result-page.component.html +++ b/frontend/src/app/germplasm-result-page/germplasm-result-page.component.html @@ -23,12 +23,19 @@ You must filter your results to have less than <strong>50,000 results</strong> before exporting the data. </div> - <button type="button" class="btn btn-outline-success mb-2" + <button type="button" class="btn btn-outline-success btn-sm mb-2" (click)="exportPlantMaterial(localCriteria)"> <span class="iconify" data-icon="fa-solid:file-csv" data-inline="false"></span> Export Plant Material list </button> +<!--TODO Activate when export webservice will be ready--> +<!-- <button type="button" class="btn btn-outline-info btn-sm ml-3 mb-2"--> +<!-- (click)="exportMcpd(localCriteria)">--> +<!-- <span class="iconify" data-icon="fa-solid:file-csv" data-inline="false"></span>--> +<!-- Export MCPD list--> +<!-- </button>--> + <!-- Loading spinner--> <div class="text-center"> <faidare-loading-spinner [loading]="loading"></faidare-loading-spinner> diff --git a/frontend/src/app/germplasm-result-page/germplasm-result-page.component.ts b/frontend/src/app/germplasm-result-page/germplasm-result-page.component.ts index 585f960620c1e7501ee3a99cd76f823166535755..a4b993e1b348a7702f8a8a7c623593f6a95203ed 100644 --- a/frontend/src/app/germplasm-result-page/germplasm-result-page.component.ts +++ b/frontend/src/app/germplasm-result-page/germplasm-result-page.component.ts @@ -131,7 +131,24 @@ export class GermplasmResultPageComponent implements OnInit { result => { if (result) { const blob = new Blob([result], { type: 'text/plain;charset=utf-8' }); - saveAs(blob, 'germplasm.gnpis.csv'); + saveAs(blob, 'germplasm_gnpis.csv'); + } else { + this.overLimitSizeExport = true; + } + this.loading = false; + }, + error => { + console.log(error); + }); + } + + exportMcpd(criteria: GermplasmSearchCriteria) { + this.loading = true; + this.service.mcpdExport(criteria).subscribe( + result => { + if (result) { + const blob = new Blob([result], { type: 'text/plain;charset=utf-8' }); + saveAs(blob, 'germplasm_mcpd.csv'); } else { this.overLimitSizeExport = true; } diff --git a/frontend/src/app/gnpis.service.ts b/frontend/src/app/gnpis.service.ts index 32e43a0ae23c348f0a8e19bd8f0881e4d1972a3e..bf0b3b2a44fe9862498e028673e6562d80aa6dac 100644 --- a/frontend/src/app/gnpis.service.ts +++ b/frontend/src/app/gnpis.service.ts @@ -152,6 +152,19 @@ export class GnpisService { ); } + // TODO Change the service's response to return an object with the number of results and handle here if the number is over the limit + mcpdExport(criteria: GermplasmSearchCriteria): Observable<any> { + const requestOptions: Object = { + /* other options here */ + responseType: 'text' + }; + return this.http.post<any>( + `${BASE_URL}/germplasm/germplasm-mcpd-csv`, + criteria, + requestOptions + ); + } + getSourcesName(sourceByURI, response) { response.facets = response.facets.map((facet: DataDiscoveryFacet) => { facet.terms = facet.terms.map(term => { diff --git a/frontend/src/app/models/brapi.model.ts b/frontend/src/app/models/brapi.model.ts index f8630ff08b968c324a9e842a9707c1aa9ae5c64d..27a75f05e8c6ead1870c4f886311ddd271e5f82c 100644 --- a/frontend/src/app/models/brapi.model.ts +++ b/frontend/src/app/models/brapi.model.ts @@ -177,6 +177,89 @@ export interface BrapiGermplasm extends BrapiHasDocumentationURL, schema.Dataset acquisitionDate: string; } +export interface BrapiGermplasmMcpd extends BrapiHasDocumentationURL { + groupId: string; + accessionNames: string[]; + accessionNumber: string; + acquisitionDate: string; + acquisitionSourceCode: string; + alternateIDs: string[]; + ancestralData: string; + biologicalStatusOfAccessionCode: string; + breedingInstitutes: BrapiInstitute; + collectingInfo: { + collectingDate: string; + collectingInstitutes: BrapiInstitute; + collectingMissionIdentifier: string; + collectingNumber: string; + collectors: string; + materialType: string; + collectingSite: BrapiCollectingSite + }; + commonCropName: string; + countryOfOriginCode: string; + donorInfo: { + donorAccessionNumber: string; + donorInstitute: BrapiInstitute; + donationDate: string; + }; + genus: string; + germplasmDbId: string; + germplasmPUI: string; + instituteCode: string; + mlsStatus: string; + remarks: string; + safetyDuplicateInstitutes: { + instituteCode: string; + instituteName: string; + }[]; + species: string; + speciesAuthority: string; + storageTypeCodes: string[]; + subtaxon: string; + subtaxonAuthority: string; + breederAccessionNumber: string; + breedingCreationYear: string; + catalogRegistrationYear: string; + catalogDeregistrationYear: string; + originLocationDbId: string; + originLocationName: string; + holdingInstitute: BrapiInstitute; + holdingGenbank: BrapiInstitute; + geneticNature: string; + presenceStatus: string; + distributorInfos: { + institute: BrapiInstitute; + accessionNumber: string; + distrubutionStatus: string; + }; +} + +export interface BrapiInstitute { + instituteName: string; + instituteCode: string; + acronym: string; + organisation: string; + instituteType: string; + webSite: string; + instituteAddress: string; + logo: string; +} + +export interface BrapiCollectingSite { + locationDbId: string; + locationName: string; + coordinateUncertainty: string; + elevation: string; + georeferencingMethod: string; + latitudeDecimal: string; + latitudeDegrees: string; + locationDescription: string; + longitudeDecimal: string; + longitudeDegrees: string; + spatialReferenceSystem: string; +} + export interface BrapiTaxonIds { sourceName: string; diff --git a/frontend/src/app/models/gnpis.model.ts b/frontend/src/app/models/gnpis.model.ts index 93760346383a76dcc5e9d8ee4e46cd4a8dd40d01..8e9ebeb989ea827de823db84753534efa851154b 100644 --- a/frontend/src/app/models/gnpis.model.ts +++ b/frontend/src/app/models/gnpis.model.ts @@ -60,6 +60,12 @@ export interface Germplasm extends BrapiGermplasm { 'schema:includedInDataCatalog': any; } + +/* export interface GermplasmMcpd extends BrapiGermplasm { + mlsStatus: string; +} */ + + export interface Site { latitude: number; longitude: number; @@ -125,4 +131,6 @@ export interface GermplasmSet { pui: string; name: string; }; + + } diff --git a/frontend/src/app/site-card/site-card.component.html b/frontend/src/app/site-card/site-card.component.html index 928a341b2d5670ffa717231ab76633b78c06e467..0a8f72355067335c4139ef656b61aef8283672c0 100644 --- a/frontend/src/app/site-card/site-card.component.html +++ b/frontend/src/app/site-card/site-card.component.html @@ -52,7 +52,7 @@ <faidare-card-row label="Coordinates precision" - [test]="location.additionalInfo && location.additionalInfo[' Coordinates precision']"> + [test]="location.additionalInfo && location.additionalInfo['Coordinates precision']"> <ng-template> {{ location.additionalInfo['Coordinates precision'] }} </ng-template> @@ -76,7 +76,7 @@ <faidare-card-row label="Geographical location" - [test]="location.additionalInfo && location.additionalInfo[' Geographical location']"> + [test]="location.additionalInfo && location.additionalInfo['Geographical location']"> <ng-template> {{ location.additionalInfo['Geographical location'] }} </ng-template> @@ -84,7 +84,7 @@ <faidare-card-row label="Country name" - [test]="location.countryName && !location.additionalInfo['Geographical location']"> + [test]="location.countryName"> <ng-template> {{ location.countryName }} </ng-template> @@ -92,7 +92,7 @@ <faidare-card-row label="Country code" - [test]="location.countryCode && location.additionalInfo && !location.additionalInfo['Geographical location']"> + [test]="location.countryCode"> <ng-template> {{ location.countryCode }} </ng-template> @@ -113,7 +113,7 @@ <faidare-card-row label="Exposure" - [test]="location.additionalInfo && location.additionalInfo[' Exposure']"> + [test]="location.additionalInfo && location.additionalInfo['Exposure']"> <ng-template> {{ location.additionalInfo['Exposure'] }} </ng-template> @@ -121,7 +121,7 @@ <faidare-card-row label="Topography" - [test]="location.additionalInfo && location.additionalInfo[' Topography']"> + [test]="location.additionalInfo && location.additionalInfo['Topography']"> <ng-template> {{ location.additionalInfo['Topography'] }} </ng-template> @@ -129,7 +129,7 @@ <faidare-card-row label="Environment type" - [test]="location.additionalInfo && location.additionalInfo[' Environment type']"> + [test]="location.additionalInfo && location.additionalInfo['Environment type']"> <ng-template> {{ location.additionalInfo['Environment type'] }} </ng-template> @@ -137,7 +137,7 @@ <faidare-card-row label="Distance to city" - [test]="location.additionalInfo && location.additionalInfo[' Distance to city']"> + [test]="location.additionalInfo && location.additionalInfo['Distance to city']"> <ng-template> {{ location.additionalInfo['Distance to city'] }} </ng-template> @@ -145,7 +145,7 @@ <faidare-card-row label="Direction from city" - [test]="location.additionalInfo && location.additionalInfo[' Direction from city']"> + [test]="location.additionalInfo && location.additionalInfo['Direction from city']"> <ng-template> {{ location.additionalInfo['Direction from city'] }} </ng-template> @@ -153,7 +153,7 @@ <faidare-card-row label="Comment" - [test]="location.additionalInfo && location.additionalInfo[' Comment']"> + [test]="location.additionalInfo && location.additionalInfo['Comment']"> <ng-template> {{ location.additionalInfo['Comment'] }} </ng-template> diff --git a/scripts/harvest.sh b/scripts/harvest.sh index 86379b8cb238ac2f34d1742b56385139555a1eaf..7f8672e4784179d5cf5ce8ab14def43b8d3eb267 100755 --- a/scripts/harvest.sh +++ b/scripts/harvest.sh @@ -7,8 +7,7 @@ ES_PORT="9200" ENV="dev" DOCUMENT_TYPES="all" -#ALL_DOCUMENT_TYPES="germplasm germplasmMcpd germplasmAttribute germplasmPedigree germplasmProgeny location program study trial observationUnit datadiscovery" -ALL_DOCUMENT_TYPES="germplasm germplasmAttribute germplasmPedigree germplasmProgeny location program study trial observationUnit datadiscovery" +ALL_DOCUMENT_TYPES="germplasm germplasmMcpd germplasmAttribute germplasmPedigree germplasmProgeny location program study trial observationUnit datadiscovery" ALL_ENVS="dev beta staging int prod test" BASEDIR=$(dirname "$0") TMP_FILE="log.tmp"