diff --git a/src/main/java/org/genesys2/server/model/json/AccessionJson.java b/src/main/java/org/genesys2/server/model/json/AccessionJson.java new file mode 100644 index 0000000000000000000000000000000000000000..01ddb0d49f6d663c61b489e855fbaa93a21109a9 --- /dev/null +++ b/src/main/java/org/genesys2/server/model/json/AccessionJson.java @@ -0,0 +1,231 @@ +package org.genesys2.server.model.json; + +public class AccessionJson { + private long version = 0; + private Long genesysId; + + private String instCode; + private String acceNumb; + private String genus; + private String species; + private String spauthor; + private String subtaxa; + private String subtauthor; + private String uuid; + private String orgCty; + private String acqDate; + private Boolean mlsStat; + private Boolean inTrust; + private Boolean available; + private int[] storage; + private Integer sampStat; + private String[] duplSite; + private String bredCode; + private String ancest; + private String donorCode; + private String donorNumb; + private String donorName; + private CollectingJson coll; + private GeoJson geo; + + public long getVersion() { + return version; + } + + public void setVersion(long l) { + this.version = l; + } + + public Long getGenesysId() { + return genesysId; + } + + public void setGenesysId(Long genesysId) { + this.genesysId = genesysId; + } + + public String getInstCode() { + return instCode; + } + + public void setInstCode(String instCode) { + this.instCode = instCode; + } + + public String getAcceNumb() { + return acceNumb; + } + + public void setAcceNumb(String acceNumb) { + this.acceNumb = acceNumb; + } + + 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 getSpauthor() { + return spauthor; + } + + public void setSpauthor(String spauthor) { + this.spauthor = spauthor; + } + + public String getSubtaxa() { + return subtaxa; + } + + public void setSubtaxa(String subtaxa) { + this.subtaxa = subtaxa; + } + + public String getSubtauthor() { + return subtauthor; + } + + public void setSubtauthor(String subtauthor) { + this.subtauthor = subtauthor; + } + + public String getUuid() { + return uuid; + } + + public void setUuid(String uuid) { + this.uuid = uuid; + } + + public String getOrgCty() { + return orgCty; + } + + public void setOrgCty(String orgCty) { + this.orgCty = orgCty; + } + + public String getAcqDate() { + return acqDate; + } + + public void setAcqDate(String acqDate) { + this.acqDate = acqDate; + } + + public Boolean getMlsStat() { + return mlsStat; + } + + public void setMlsStat(Boolean mlsStat) { + this.mlsStat = mlsStat; + } + + public Boolean getInTrust() { + return inTrust; + } + + public void setInTrust(Boolean inTrust) { + this.inTrust = inTrust; + } + + public Boolean getAvailable() { + return available; + } + + public void setAvailable(Boolean available) { + this.available = available; + } + + public int[] getStorage() { + return storage; + } + + public void setStorage(int[] storage) { + this.storage = storage; + } + + public Integer getSampStat() { + return sampStat; + } + + public void setSampStat(Integer sampStat) { + this.sampStat = sampStat; + } + + public String[] getDuplSite() { + return duplSite; + } + + public void setDuplSite(String[] duplSite) { + this.duplSite = duplSite; + } + + public String getBredCode() { + return bredCode; + } + + public void setBredCode(String bredCode) { + this.bredCode = bredCode; + } + + public String getAncest() { + return ancest; + } + + public void setAncest(String ancest) { + this.ancest = ancest; + } + + public String getDonorCode() { + return donorCode; + } + + public void setDonorCode(String donorCode) { + this.donorCode = donorCode; + } + + public String getDonorNumb() { + return donorNumb; + } + + public void setDonorNumb(String donorNumb) { + this.donorNumb = donorNumb; + } + + public String getDonorName() { + return donorName; + } + + public void setDonorName(String donorName) { + this.donorName = donorName; + } + + public CollectingJson getColl() { + return coll; + } + + public void setColl(CollectingJson coll) { + this.coll = coll; + } + + public GeoJson getGeo() { + return geo; + } + + public void setGeo(GeoJson geo) { + this.geo = geo; + } + +} diff --git a/src/main/java/org/genesys2/server/model/json/CollectingJson.java b/src/main/java/org/genesys2/server/model/json/CollectingJson.java new file mode 100644 index 0000000000000000000000000000000000000000..82ca50e540d943e6c4cc0d0275367d650cbe4d6c --- /dev/null +++ b/src/main/java/org/genesys2/server/model/json/CollectingJson.java @@ -0,0 +1,77 @@ +package org.genesys2.server.model.json; + +public class CollectingJson { + private String collDate; + private String collSite; + private String collNumb; + private Integer collSrc; + private String collCode; + private String collName; + private String collInstAddress; + private String collMissId; + + public String getCollDate() { + return collDate; + } + + public void setCollDate(String collDate) { + this.collDate = collDate; + } + + public String getCollSite() { + return collSite; + } + + public void setCollSite(String collSite) { + this.collSite = collSite; + } + + public String getCollNumb() { + return collNumb; + } + + public void setCollNumb(String collNumb) { + this.collNumb = collNumb; + } + + public Integer getCollSrc() { + return collSrc; + } + + public void setCollSrc(Integer integer) { + this.collSrc = integer; + } + + public String getCollCode() { + return collCode; + } + + public void setCollCode(String collCode) { + this.collCode = collCode; + } + + public String getCollName() { + return collName; + } + + public void setCollName(String collName) { + this.collName = collName; + } + + public String getCollInstAddress() { + return collInstAddress; + } + + public void setCollInstAddress(String collInstAddress) { + this.collInstAddress = collInstAddress; + } + + public String getCollMissId() { + return collMissId; + } + + public void setCollMissId(String collMissId) { + this.collMissId = collMissId; + } + +} diff --git a/src/main/java/org/genesys2/server/model/json/GenesysJsonFactory.java b/src/main/java/org/genesys2/server/model/json/GenesysJsonFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..d833d728bcccec12c24770bc59518834fdf883a4 --- /dev/null +++ b/src/main/java/org/genesys2/server/model/json/GenesysJsonFactory.java @@ -0,0 +1,100 @@ +package org.genesys2.server.model.json; + +import org.apache.commons.lang3.StringUtils; +import org.genesys2.server.model.genesys.Accession; +import org.genesys2.server.model.genesys.AccessionCollect; +import org.genesys2.server.model.genesys.AccessionGeo; +import org.genesys2.server.model.genesys.Taxonomy2; + +public class GenesysJsonFactory { + + public static AccessionJson from(Accession accession) { + if (accession == null) + return null; + + AccessionJson aj = new AccessionJson(); + aj.setVersion(accession.getVersion()); + aj.setGenesysId(accession.getId()); + + aj.setInstCode(accession.getInstitute().getCode()); + aj.setAcceNumb(accession.getAccessionName()); + aj.setUuid(accession.getUuid()); + + Taxonomy2 tax = accession.getTaxonomy(); + aj.setGenus(tax.getGenus()); + aj.setSpecies(tax.getSpecies()); + aj.setSpauthor(tax.getSpAuthor()); + aj.setSubtaxa(tax.getSubtaxa()); + aj.setSubtauthor(tax.getSubtAuthor()); + aj.setOrgCty(accession.getCountryOfOrigin().getCode3()); + aj.setAcqDate(accession.getAcquisitionDate()); + aj.setMlsStat(accession.getMlsStatus()); + aj.setInTrust(accession.getInTrust()); + aj.setAvailable(accession.getAvailability()); + // private int[] storage; + aj.setStorage(toIntArray(accession.getStorage())); + // private Integer sampStat; + aj.setSampStat(accession.getSampleStatus()); + // private String[] duplSite; + aj.setDuplSite(toStrArr(accession.getDuplSite())); + + // private String bredCode; + // private String ancest; + // private String donorCode; + // private String donorNumb; + // private String donorName; + // private CollectingJson coll; + // private GeoJson geo; + + return aj; + } + + private static String[] toStrArr(String arrString) { + if (StringUtils.isBlank(arrString)) + return null; + return arrString.split("\\s*;\\s*"); + } + + private static int[] toIntArray(String arrString) { + if (StringUtils.isBlank(arrString)) + return null; + String[] split = arrString.trim().split(";"); + int[] intArr = new int[split.length]; + for (int i = 0; i < split.length; i++) { + // TODO Could throw NFE + intArr[i] = Integer.parseInt(split[i]); + } + return intArr; + } + + public static GeoJson from(AccessionGeo geo) { + if (geo == null) + return null; + + GeoJson gj = new GeoJson(); + gj.setCoordDatum(geo.getDatum()); + gj.setCoordUncert(geo.getUncertainty()); + gj.setElevation(geo.getElevation()); + gj.setGeorefMeth(geo.getMethod()); + gj.setLatitude(geo.getLatitude()); + gj.setLongitude(geo.getLongitude()); + return gj; + } + + public static CollectingJson from(AccessionCollect collect) { + if (collect == null) + return null; + + CollectingJson col = new CollectingJson(); + col.setCollCode(collect.getCollCode()); + col.setCollDate(collect.getCollDate()); + col.setCollInstAddress(collect.getCollInstAddress()); + col.setCollMissId(collect.getCollMissId()); + col.setCollName(collect.getCollName()); + col.setCollNumb(collect.getCollNumb()); + col.setCollSite(collect.getCollSite()); + col.setCollSrc(collect.getCollSrc()); + return col; + } + +} diff --git a/src/main/java/org/genesys2/server/model/json/GeoJson.java b/src/main/java/org/genesys2/server/model/json/GeoJson.java new file mode 100644 index 0000000000000000000000000000000000000000..c0a0ee3a95ca1c20d0616c48e11395d48d2535ec --- /dev/null +++ b/src/main/java/org/genesys2/server/model/json/GeoJson.java @@ -0,0 +1,59 @@ +package org.genesys2.server.model.json; + +public class GeoJson { + private Double latitude; + private Double longitude; + private Double elevation; + private Double coordUncert; + private String coordDatum; + private String georefMeth; + + public Double getLatitude() { + return latitude; + } + + public void setLatitude(Double latitude) { + this.latitude = latitude; + } + + public Double getLongitude() { + return longitude; + } + + public void setLongitude(Double longitude) { + this.longitude = longitude; + } + + public Double getElevation() { + return elevation; + } + + public void setElevation(Double elevation) { + this.elevation = elevation; + } + + public Double getCoordUncert() { + return coordUncert; + } + + public void setCoordUncert(Double coordUncert) { + this.coordUncert = coordUncert; + } + + public String getCoordDatum() { + return coordDatum; + } + + public void setCoordDatum(String coordDatum) { + this.coordDatum = coordDatum; + } + + public String getGeorefMeth() { + return georefMeth; + } + + public void setGeorefMeth(String georefMeth) { + this.georefMeth = georefMeth; + } + +} diff --git a/src/main/java/org/genesys2/server/service/BatchRESTService.java b/src/main/java/org/genesys2/server/service/BatchRESTService.java index 0c1ebd599523cb2271e68442e64d917db0e691e0..8cc9cdc6d973c00f90ae6c80e18bc28a19838818 100644 --- a/src/main/java/org/genesys2/server/service/BatchRESTService.java +++ b/src/main/java/org/genesys2/server/service/BatchRESTService.java @@ -21,16 +21,16 @@ import java.util.Map; import org.genesys2.server.model.impl.FaoInstitute; import org.genesys2.server.service.impl.RESTApiException; -import org.genesys2.server.servlet.controller.rest.model.AccessionJson; +import org.genesys2.server.servlet.controller.rest.model.AccessionHeaderJson; import org.genesys2.server.servlet.controller.rest.model.AccessionNamesJson; import com.fasterxml.jackson.databind.node.ObjectNode; public interface BatchRESTService { - boolean upsertAccessionData(FaoInstitute institute, Map batch) throws RESTApiException; + boolean upsertAccessionData(FaoInstitute institute, Map batch) throws RESTApiException; void upsertAccessionNames(FaoInstitute institute, List batch); - int deleteAccessions(FaoInstitute institute, List batch); + int deleteAccessions(FaoInstitute institute, List batch); } diff --git a/src/main/java/org/genesys2/server/service/GenesysRESTService.java b/src/main/java/org/genesys2/server/service/GenesysRESTService.java new file mode 100644 index 0000000000000000000000000000000000000000..6359cdc192c4a7064afc440a2ed2d7d84c6c172f --- /dev/null +++ b/src/main/java/org/genesys2/server/service/GenesysRESTService.java @@ -0,0 +1,9 @@ +package org.genesys2.server.service; + +import org.genesys2.server.model.json.AccessionJson; + +public interface GenesysRESTService { + + AccessionJson getAccessionJSON(String instCode, long accessionId); + +} diff --git a/src/main/java/org/genesys2/server/service/impl/BatchRESTServiceImpl.java b/src/main/java/org/genesys2/server/service/impl/BatchRESTServiceImpl.java index 205655375454b36d9e9508dfe11eebca75745139..f734be73a9603c9aff69e77bed3683c9049c9e99 100644 --- a/src/main/java/org/genesys2/server/service/impl/BatchRESTServiceImpl.java +++ b/src/main/java/org/genesys2/server/service/impl/BatchRESTServiceImpl.java @@ -46,7 +46,7 @@ import org.genesys2.server.service.InstituteService; import org.genesys2.server.service.OrganizationService; import org.genesys2.server.service.TaxonomyService; import org.genesys2.server.servlet.controller.rest.model.AccessionAliasJson; -import org.genesys2.server.servlet.controller.rest.model.AccessionJson; +import org.genesys2.server.servlet.controller.rest.model.AccessionHeaderJson; import org.genesys2.server.servlet.controller.rest.model.AccessionNamesJson; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; @@ -81,7 +81,7 @@ public class BatchRESTServiceImpl implements BatchRESTService { @Override @Transactional @PreAuthorize("hasRole('ADMINISTRATOR') or hasPermission(#institute, 'WRITE') or hasPermission(#institute, 'CREATE')") - public boolean upsertAccessionData(FaoInstitute institute, Map batch) throws RESTApiException { + public boolean upsertAccessionData(FaoInstitute institute, Map batch) throws RESTApiException { LOG.info("Batch processing " + batch.size() + " entries for " + institute); boolean useUniqueAcceNumbs = institute.hasUniqueAcceNumbs(); @@ -97,7 +97,7 @@ public class BatchRESTServiceImpl implements BatchRESTService { Map donorNumbs = new HashMap(); Map collNumbs = new HashMap(); - for (AccessionJson dataJson : batch.keySet()) { + for (AccessionHeaderJson dataJson : batch.keySet()) { if (LOG.isDebugEnabled()) LOG.debug("Loading accession " + dataJson); @@ -666,12 +666,12 @@ public class BatchRESTServiceImpl implements BatchRESTService { @Override @Transactional @PreAuthorize("hasRole('ADMINISTRATOR') or hasPermission(#institute, 'DELETE') or hasPermission(#institute, 'MANAGE')") - public int deleteAccessions(FaoInstitute institute, List batch) { + public int deleteAccessions(FaoInstitute institute, List batch) { LOG.info("Batch deleting " + batch.size() + " entries for " + institute); List toDelete = new ArrayList(batch.size()); boolean useUniqueAcceNumbs = institute.hasUniqueAcceNumbs(); - for (AccessionJson dataJson : batch) { + for (AccessionHeaderJson dataJson : batch) { if (LOG.isDebugEnabled()) LOG.debug("Loading accession " + dataJson); diff --git a/src/main/java/org/genesys2/server/service/impl/GenesysRESTServiceImpl.java b/src/main/java/org/genesys2/server/service/impl/GenesysRESTServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..ce68c4f4c21b1040df15a5f489c0058ef73fead9 --- /dev/null +++ b/src/main/java/org/genesys2/server/service/impl/GenesysRESTServiceImpl.java @@ -0,0 +1,47 @@ +package org.genesys2.server.service.impl; + +import org.apache.commons.lang3.StringUtils; +import org.genesys2.server.model.genesys.Accession; +import org.genesys2.server.model.genesys.AccessionBreeding; +import org.genesys2.server.model.genesys.AccessionCollect; +import org.genesys2.server.model.genesys.AccessionGeo; +import org.genesys2.server.model.json.AccessionJson; +import org.genesys2.server.model.json.GenesysJsonFactory; +import org.genesys2.server.service.GenesysRESTService; +import org.genesys2.server.service.GenesysService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +@Service +@Transactional(readOnly = true) +public class GenesysRESTServiceImpl implements GenesysRESTService { + + @Autowired + private GenesysService genesysService; + + @Override + public AccessionJson getAccessionJSON(String instCode, long accessionId) { + Accession accession = genesysService.getAccession(accessionId); + if (accession == null) { + return null; + } + if (!StringUtils.equalsIgnoreCase(accession.getInstituteCode(), instCode)) { + throw new RuntimeException("Accession " + accessionId + " does not belong to " + instCode); + } + + AccessionJson aj = GenesysJsonFactory.from(accession); + + AccessionBreeding breeding = genesysService.listAccessionBreeding(accession); + if (breeding != null) { + aj.setBredCode(breeding.getBreederCode()); + aj.setAncest(breeding.getPedigree()); + } + AccessionCollect collect = genesysService.listAccessionCollect(accession); + aj.setColl(GenesysJsonFactory.from(collect)); + + AccessionGeo geo = genesysService.listAccessionGeo(accession); + aj.setGeo(GenesysJsonFactory.from(geo)); + return aj; + } +} diff --git a/src/main/java/org/genesys2/server/servlet/controller/rest/AccessionController.java b/src/main/java/org/genesys2/server/servlet/controller/rest/AccessionController.java index 190d70dc6876e0bb8ca5f7873193aad27dcdc637..ccd5fbc42fdec1e84740ce144672858f7d34d2c3 100644 --- a/src/main/java/org/genesys2/server/servlet/controller/rest/AccessionController.java +++ b/src/main/java/org/genesys2/server/servlet/controller/rest/AccessionController.java @@ -24,14 +24,16 @@ import java.util.Map; import org.genesys2.server.model.genesys.Accession; import org.genesys2.server.model.impl.FaoInstitute; +import org.genesys2.server.model.json.AccessionJson; import org.genesys2.server.service.BatchRESTService; +import org.genesys2.server.service.GenesysRESTService; import org.genesys2.server.service.GenesysService; import org.genesys2.server.service.GeoService; import org.genesys2.server.service.InstituteService; import org.genesys2.server.service.TaxonomyService; import org.genesys2.server.service.impl.RESTApiException; import org.genesys2.server.service.impl.RESTApiValueException; -import org.genesys2.server.servlet.controller.rest.model.AccessionJson; +import org.genesys2.server.servlet.controller.rest.model.AccessionHeaderJson; import org.genesys2.server.servlet.controller.rest.model.AccessionNamesJson; import org.genesys2.spring.ResourceNotFoundException; import org.springframework.beans.factory.annotation.Autowired; @@ -73,6 +75,9 @@ public class AccessionController extends RestController { @Autowired TaxonomyService taxonomyService; + @Autowired + GenesysRESTService restService; + /** * Check if accessions exists in the system * @@ -172,18 +177,18 @@ public class AccessionController extends RestController { } JsonNode json = mapper.readTree(content); - Map batch = new HashMap(); + Map batch = new HashMap(); if (json.isArray()) { for (JsonNode j : json) { - AccessionJson dataJson = readAid3(j); + AccessionHeaderJson dataJson = readAid3(j); if (!instCode.equals(dataJson.instCode)) { throw new RuntimeException("Accession does not belong to instCode=" + instCode + " acn=" + dataJson); } batch.put(dataJson, (ObjectNode) j); } } else { - AccessionJson dataJson = readAid3(json); + AccessionHeaderJson dataJson = readAid3(json); if (!instCode.equals(dataJson.instCode)) { throw new RuntimeException("Accession does not belong to instCode=" + instCode + " acn=" + dataJson); } @@ -230,7 +235,7 @@ public class AccessionController extends RestController { */ @RequestMapping(value = "/{instCode}/delete", method = { RequestMethod.POST, RequestMethod.PUT }, consumes = { MediaType.APPLICATION_JSON_VALUE }, produces = { MediaType.APPLICATION_JSON_VALUE }) public @ResponseBody - JsonDeleteResult deleteAccessions(@PathVariable("instCode") String instCode, @RequestBody List batch) { + JsonDeleteResult deleteAccessions(@PathVariable("instCode") String instCode, @RequestBody List batch) { // User's permission to WRITE to this WIEWS institute are checked in // BatchRESTService. FaoInstitute institute = instituteService.getInstitute(instCode); @@ -242,9 +247,15 @@ public class AccessionController extends RestController { LOG.info("Deleted " + deleted + " accessions from " + instCode); return new JsonDeleteResult(deleted); } - - private AccessionJson readAid3(JsonNode json) { - AccessionJson dataJson = new AccessionJson(); + + @RequestMapping(value = "/{instCode}/{id}", method = { RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE }) + public @ResponseBody + AccessionJson get(@PathVariable("instCode") String instCode, @PathVariable("id") long accessionId) { + return restService.getAccessionJSON(instCode, accessionId); + } + + private AccessionHeaderJson readAid3(JsonNode json) { + AccessionHeaderJson dataJson = new AccessionHeaderJson(); dataJson.instCode = json.has("instCode") ? json.get("instCode").textValue() : null; dataJson.acceNumb = json.has("acceNumb") ? json.get("acceNumb").textValue() : null; diff --git a/src/main/java/org/genesys2/server/servlet/controller/rest/model/AccessionJson.java b/src/main/java/org/genesys2/server/servlet/controller/rest/model/AccessionHeaderJson.java similarity index 94% rename from src/main/java/org/genesys2/server/servlet/controller/rest/model/AccessionJson.java rename to src/main/java/org/genesys2/server/servlet/controller/rest/model/AccessionHeaderJson.java index 3c6f8058475fcce08b6e07114e6b07f3a3f5c3a4..c374bb5540a977758d4f8147574480b6746bc152 100644 --- a/src/main/java/org/genesys2/server/servlet/controller/rest/model/AccessionJson.java +++ b/src/main/java/org/genesys2/server/servlet/controller/rest/model/AccessionHeaderJson.java @@ -20,7 +20,7 @@ import java.text.MessageFormat; import org.genesys2.server.model.impl.AccessionIdentifier3; -public class AccessionJson implements AccessionIdentifier3 { +public class AccessionHeaderJson implements AccessionIdentifier3 { public String instCode; public String acceNumb; public String genus; diff --git a/src/main/java/org/genesys2/server/servlet/controller/rest/model/AccessionNamesJson.java b/src/main/java/org/genesys2/server/servlet/controller/rest/model/AccessionNamesJson.java index 28981d4d2723f976f04a959ecb8b938cb97f000a..28a30d1c0855d75fd2bdb30190512db09dc6bac8 100644 --- a/src/main/java/org/genesys2/server/servlet/controller/rest/model/AccessionNamesJson.java +++ b/src/main/java/org/genesys2/server/servlet/controller/rest/model/AccessionNamesJson.java @@ -18,6 +18,6 @@ package org.genesys2.server.servlet.controller.rest.model; import java.util.List; -public class AccessionNamesJson extends AccessionJson { +public class AccessionNamesJson extends AccessionHeaderJson { public List aliases; } diff --git a/src/test/java/org/genesys2/server/test/BatchRESTServiceTest.java b/src/test/java/org/genesys2/server/test/BatchRESTServiceTest.java index 07aba5846b27524f582934b5f15515da8319a68b..15824bf5de3f228d47578ff838706cb67cde9c8e 100644 --- a/src/test/java/org/genesys2/server/test/BatchRESTServiceTest.java +++ b/src/test/java/org/genesys2/server/test/BatchRESTServiceTest.java @@ -15,7 +15,9 @@ import org.apache.velocity.exception.VelocityException; import org.genesys2.server.aspect.AsAdminAspect; import org.genesys2.server.model.genesys.Accession; import org.genesys2.server.model.genesys.Taxonomy2; +import org.genesys2.server.model.impl.Country; import org.genesys2.server.model.impl.FaoInstitute; +import org.genesys2.server.persistence.domain.CountryRepository; import org.genesys2.server.service.AclService; import org.genesys2.server.service.BatchRESTService; import org.genesys2.server.service.ContentService; @@ -37,7 +39,7 @@ import org.genesys2.server.service.impl.OrganizationServiceImpl; import org.genesys2.server.service.impl.RESTApiException; import org.genesys2.server.service.impl.TaxonomyServiceImpl; import org.genesys2.server.service.impl.UserServiceImpl; -import org.genesys2.server.servlet.controller.rest.model.AccessionJson; +import org.genesys2.server.servlet.controller.rest.model.AccessionHeaderJson; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -49,6 +51,7 @@ import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Import; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.transaction.annotation.Transactional; import org.springframework.ui.velocity.VelocityEngineFactoryBean; import com.fasterxml.jackson.databind.ObjectMapper; @@ -142,7 +145,11 @@ public class BatchRESTServiceTest { @Autowired private InstituteService instituteService; + @Autowired + private CountryRepository countryRepository; + @Before + @Transactional public void setup() { System.err.println("Setting up"); Collection institutes = new ArrayList(); @@ -154,6 +161,13 @@ public class BatchRESTServiceTest { institutes.add(institute); } instituteService.update(institutes); + + Country country = new Country(); + country.setCode2("CT"); + country.setCode3("CTY"); + country.setName("Country"); + country.setCurrent(true); + countryRepository.save(country); } @Test @@ -163,9 +177,9 @@ public class BatchRESTServiceTest { assertTrue("institute is null", institute != null); System.err.println(institute); - Map batch = new HashMap(); + Map batch = new HashMap(); - AccessionJson dataJson = new AccessionJson(); + AccessionHeaderJson dataJson = new AccessionHeaderJson(); dataJson.acceNumb = "AC 1"; dataJson.instCode = instCode; @@ -208,7 +222,7 @@ public class BatchRESTServiceTest { System.err.println(accession.getTaxGenus()); System.err.println(accession.getTaxSpecies()); assertFalse(accession.getTaxGenus() == accession.getTaxSpecies()); - + // test nothing try { System.err.println("NO UPDATE!"); @@ -218,4 +232,52 @@ public class BatchRESTServiceTest { } } + @Test + public void testClearOrgCty() { + String instCode = "SYR002"; + FaoInstitute institute = instituteService.getInstitute(instCode); + assertTrue("institute is null", institute != null); + System.err.println(institute); + + Map batch = new HashMap(); + + AccessionHeaderJson dataJson = new AccessionHeaderJson(); + dataJson.acceNumb = "AC 100"; + dataJson.instCode = instCode; + + ObjectNode json = mapper.createObjectNode(); + json.put("genus", "Hordeum"); + json.put("orgCty", "CTY"); + batch.put(dataJson, json); + System.err.println(json); + + try { + batchRESTService.upsertAccessionData(institute, batch); + } catch (RESTApiException e) { + fail(e.getMessage()); + } + + Accession accession = genesysService.getAccession(instCode, "AC 100"); + assertTrue(accession.getId() != null); + assertTrue(accession.getInstituteCode().equals(instCode)); + assertTrue(accession.getInstitute().getId().equals(institute.getId())); + assertTrue(accession.getOrigin() != null); + assertTrue("CTY".equals(accession.getOrigin())); + assertTrue(accession.getCountryOfOrigin() != null); + assertTrue("Country".equals(accession.getCountryOfOrigin().getName())); + + // Modify taxonomy + json.putNull("orgCty"); + System.err.println(json); + try { + batchRESTService.upsertAccessionData(institute, batch); + } catch (RESTApiException e) { + fail(e.getMessage()); + } + // reload + accession = genesysService.getAccession(instCode, "AC 100"); + assertTrue(accession.getOrigin() == null); + assertTrue(accession.getCountryOfOrigin() == null); + } + }