From 85e789a5a1ade9a3a92160dd27feeba069c560ea Mon Sep 17 00:00:00 2001 From: Matija Obreza Date: Thu, 27 Feb 2014 03:41:23 +0100 Subject: [PATCH] CropTaxonomy linked to Taxonomy2 --- .../server/model/genesys/Taxonomy.java | 15 ----- .../server/model/genesys/Taxonomy2.java | 16 ++++- .../server/model/impl/CropTaxonomy.java | 9 ++- .../domain/CropTaxonomyRepository.java | 7 +-- .../domain/Taxonomy2Repository.java | 6 ++ .../genesys2/server/service/CropService.java | 3 - .../server/service/impl/CropServiceImpl.java | 59 +++++++++---------- .../impl/GenesysFilterServiceImpl.java | 5 +- .../service/impl/GenesysServiceImpl.java | 2 +- .../service/impl/TaxonomyServiceImpl.java | 12 +++- 10 files changed, 67 insertions(+), 67 deletions(-) diff --git a/src/main/java/org/genesys2/server/model/genesys/Taxonomy.java b/src/main/java/org/genesys2/server/model/genesys/Taxonomy.java index d3aec0736..2eead795a 100644 --- a/src/main/java/org/genesys2/server/model/genesys/Taxonomy.java +++ b/src/main/java/org/genesys2/server/model/genesys/Taxonomy.java @@ -17,17 +17,13 @@ package org.genesys2.server.model.genesys; import java.text.MessageFormat; -import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.UniqueConstraint; import org.genesys2.server.model.BusinessModel; -import org.genesys2.server.model.impl.CropTaxonomy; import org.hibernate.search.annotations.Field; import org.hibernate.search.annotations.Indexed; import org.hibernate.search.annotations.Store; @@ -50,9 +46,6 @@ public class Taxonomy extends BusinessModel { @Field(name = "title", store = Store.NO) private String taxonName; - @OneToMany(cascade = {}, fetch = FetchType.LAZY, mappedBy = "taxonomy") - private List cropTaxonomies; - public String getGenus() { return this.genus; } @@ -77,14 +70,6 @@ public class Taxonomy extends BusinessModel { this.taxonName = taxonName; } - public List getCropTaxonomies() { - return cropTaxonomies; - } - - public void setCropTaxonomies(List cropTaxonomies) { - this.cropTaxonomies = cropTaxonomies; - } - @Override public String toString() { return MessageFormat.format("Tax id={0} genus={1} sp={2}, full={3}", id, genus, species, taxonName); diff --git a/src/main/java/org/genesys2/server/model/genesys/Taxonomy2.java b/src/main/java/org/genesys2/server/model/genesys/Taxonomy2.java index d5ecac19c..bce048ace 100644 --- a/src/main/java/org/genesys2/server/model/genesys/Taxonomy2.java +++ b/src/main/java/org/genesys2/server/model/genesys/Taxonomy2.java @@ -17,15 +17,19 @@ package org.genesys2.server.model.genesys; import java.text.MessageFormat; +import java.util.List; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.Lob; +import javax.persistence.OneToMany; import javax.persistence.PrePersist; import javax.persistence.Table; import javax.persistence.UniqueConstraint; import org.genesys2.server.model.GlobalVersionedAuditedModel; +import org.genesys2.server.model.impl.CropTaxonomy; import org.hibernate.search.annotations.Indexed; @Entity @@ -59,8 +63,8 @@ public class Taxonomy2 extends GlobalVersionedAuditedModel { private Long taxSpecies; - // @OneToMany(cascade = {}, fetch = FetchType.LAZY, mappedBy = "taxonomy") - // private List cropTaxonomies; + @OneToMany(cascade = {}, fetch = FetchType.LAZY, mappedBy = "taxonomy") + private List cropTaxonomies; @PrePersist private void prePersist() { @@ -152,6 +156,14 @@ public class Taxonomy2 extends GlobalVersionedAuditedModel { this.taxSpecies = taxSpecies; } + public List getCropTaxonomies() { + return cropTaxonomies; + } + + public void setCropTaxonomies(List cropTaxonomies) { + this.cropTaxonomies = cropTaxonomies; + } + @Override public String toString() { return MessageFormat.format("Tax id={0} taxonName={1}", id, getTaxonName()); diff --git a/src/main/java/org/genesys2/server/model/impl/CropTaxonomy.java b/src/main/java/org/genesys2/server/model/impl/CropTaxonomy.java index 08fc2d272..7e7a28a3c 100644 --- a/src/main/java/org/genesys2/server/model/impl/CropTaxonomy.java +++ b/src/main/java/org/genesys2/server/model/impl/CropTaxonomy.java @@ -22,9 +22,8 @@ import javax.persistence.ManyToOne; import javax.persistence.Table; import org.genesys2.server.model.BusinessModel; -import org.genesys2.server.model.genesys.Taxonomy; +import org.genesys2.server.model.genesys.Taxonomy2; -// TODO FIXME Need to link to {@link Taxonomy2} @Entity @Table(name = "croptaxonomy") public class CropTaxonomy extends BusinessModel { @@ -36,7 +35,7 @@ public class CropTaxonomy extends BusinessModel { @ManyToOne(cascade = {}, optional = false) @JoinColumn(name = "taxonomyId") - private Taxonomy taxonomy; + private Taxonomy2 taxonomy; public Crop getCrop() { return crop; @@ -46,11 +45,11 @@ public class CropTaxonomy extends BusinessModel { this.crop = crop; } - public Taxonomy getTaxonomy() { + public Taxonomy2 getTaxonomy() { return taxonomy; } - public void setTaxonomy(Taxonomy taxonomy) { + public void setTaxonomy(Taxonomy2 taxonomy) { this.taxonomy = taxonomy; } diff --git a/src/main/java/org/genesys2/server/persistence/domain/CropTaxonomyRepository.java b/src/main/java/org/genesys2/server/persistence/domain/CropTaxonomyRepository.java index 6e5e5b06c..ba990a9a9 100644 --- a/src/main/java/org/genesys2/server/persistence/domain/CropTaxonomyRepository.java +++ b/src/main/java/org/genesys2/server/persistence/domain/CropTaxonomyRepository.java @@ -18,7 +18,7 @@ package org.genesys2.server.persistence.domain; import java.util.List; -import org.genesys2.server.model.genesys.Taxonomy; +import org.genesys2.server.model.genesys.Taxonomy2; import org.genesys2.server.model.impl.Crop; import org.genesys2.server.model.impl.CropTaxonomy; import org.springframework.data.domain.Page; @@ -39,12 +39,11 @@ public interface CropTaxonomyRepository extends JpaRepository findByCrop(Crop crop, Pageable pageable); - // TODO FIXME todo @Query("select distinct t from CropTaxonomy ct inner join ct.taxonomy t where ct.crop = ?1") - List findTaxonomiesByCrop(Crop crop); + List findTaxonomiesByCrop(Crop crop); @Query("select distinct ct.crop from CropTaxonomy ct where ct.taxonomy= ?1") - List findByTaxonomy(Taxonomy taxonomy); + List findByTaxonomy(Taxonomy2 taxonomy); @Modifying @Query("delete from CropTaxonomy ct where ct.crop = ?1") diff --git a/src/main/java/org/genesys2/server/persistence/domain/Taxonomy2Repository.java b/src/main/java/org/genesys2/server/persistence/domain/Taxonomy2Repository.java index f222693eb..1234ce847 100644 --- a/src/main/java/org/genesys2/server/persistence/domain/Taxonomy2Repository.java +++ b/src/main/java/org/genesys2/server/persistence/domain/Taxonomy2Repository.java @@ -32,4 +32,10 @@ public interface Taxonomy2Repository extends JpaRepository { List autocompleteTaxonomy(String term, Pageable page); Taxonomy2 findByGenusAndSpeciesAndSpAuthorAndSubtaxaAndSubtAuthor(String genus, String species, String spAuthor, String subtaxa, String subtAuthor); + + List findByGenus(String genus); + + List findByGenusAndSpecies(String genus, String species); + + List findByGenusAndSpeciesAndSubtaxa(String genus, String species, String subtaxa); } diff --git a/src/main/java/org/genesys2/server/service/CropService.java b/src/main/java/org/genesys2/server/service/CropService.java index 41e208a12..72de09c7f 100644 --- a/src/main/java/org/genesys2/server/service/CropService.java +++ b/src/main/java/org/genesys2/server/service/CropService.java @@ -19,7 +19,6 @@ package org.genesys2.server.service; import java.util.List; import java.util.Locale; -import org.genesys2.server.model.genesys.Taxonomy; import org.genesys2.server.model.genesys.Taxonomy2; import org.genesys2.server.model.impl.Crop; import org.genesys2.server.model.impl.CropRule; @@ -35,8 +34,6 @@ public interface CropService { List list(Locale locale); - List getCrops(Taxonomy taxonomy); - List getCrops(Taxonomy2 taxonomy2); void rebuildTaxonomies(); diff --git a/src/main/java/org/genesys2/server/service/impl/CropServiceImpl.java b/src/main/java/org/genesys2/server/service/impl/CropServiceImpl.java index 02a8ff97c..b7bd9410a 100644 --- a/src/main/java/org/genesys2/server/service/impl/CropServiceImpl.java +++ b/src/main/java/org/genesys2/server/service/impl/CropServiceImpl.java @@ -22,10 +22,11 @@ import java.util.Comparator; import java.util.List; import java.util.Locale; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.Predicate; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.genesys2.server.model.genesys.Taxonomy; import org.genesys2.server.model.genesys.Taxonomy2; import org.genesys2.server.model.impl.Crop; import org.genesys2.server.model.impl.CropRule; @@ -33,7 +34,7 @@ import org.genesys2.server.model.impl.CropTaxonomy; import org.genesys2.server.persistence.domain.CropRepository; import org.genesys2.server.persistence.domain.CropRuleRepository; import org.genesys2.server.persistence.domain.CropTaxonomyRepository; -import org.genesys2.server.persistence.domain.TaxonomyRepository; +import org.genesys2.server.persistence.domain.Taxonomy2Repository; import org.genesys2.server.service.CropService; import org.genesys2.server.service.HtmlSanitizer; import org.springframework.beans.factory.annotation.Autowired; @@ -60,10 +61,10 @@ public class CropServiceImpl implements CropService { CropTaxonomyRepository cropTaxonomyRepository; @Autowired - TaxonomyRepository taxonomyRepository; + private HtmlSanitizer htmlSanitizer; @Autowired - private HtmlSanitizer htmlSanitizer; + private Taxonomy2Repository taxonomy2Repository; @Override public Crop getCrop(String shortName) { @@ -87,15 +88,9 @@ public class CropServiceImpl implements CropService { return crops; } - @Override - public List getCrops(Taxonomy taxonomy) { - return cropTaxonomyRepository.findByTaxonomy(taxonomy); - } - @Override public List getCrops(Taxonomy2 taxonomy2) { - // TODO FIXME get the crops! - return null; + return cropTaxonomyRepository.findByTaxonomy(taxonomy2); } @Override @@ -135,35 +130,35 @@ public class CropServiceImpl implements CropService { LOG.info("Included: " + includedTaxa.size()); LOG.info("Excluded: " + excludedTaxa.size()); - List taxa = new ArrayList(); + List taxa = new ArrayList(); for (CropRule cr : includedTaxa) { - if (cr.getSpecies() == null) { - taxa.addAll(taxonomyRepository.findByGenus(cr.getGenus())); + if (cr.getSpecies() == null && cr.getSubtaxa() == null) { + taxa.addAll(taxonomy2Repository.findByGenus(cr.getGenus())); + } else if (cr.getSubtaxa() == null) { + taxa.addAll(taxonomy2Repository.findByGenusAndSpecies(cr.getGenus(), cr.getSpecies())); } else { - taxa.add(taxonomyRepository.getByGenusAndSpecies(cr.getGenus(), cr.getSpecies())); + taxa.addAll(taxonomy2Repository.findByGenusAndSpeciesAndSubtaxa(cr.getGenus(), cr.getSpecies(), cr.getSubtaxa())); } } - for (CropRule cr : excludedTaxa) { - if (cr.getSpecies() == null) { - for (Taxonomy notincluded : taxonomyRepository.findByGenus(cr.getGenus())) { - for (int i = taxa.size() - 1; i >= 0; i--) { - if (taxa.get(i).getId().equals(notincluded.getId())) { - taxa.remove(i); - } + for (final CropRule cr : excludedTaxa) { + CollectionUtils.filterInverse(taxa, new Predicate() { + @Override + public boolean evaluate(Taxonomy2 taxonomy) { + if (cr.getSpecies() == null && cr.getSubtaxa() == null) { + return StringUtils.equalsIgnoreCase(taxonomy.getSubtaxa(), cr.getSubtaxa()) + && StringUtils.equalsIgnoreCase(taxonomy.getSpecies(), cr.getSpecies()); + } else if (cr.getSubtaxa() == null) { + return StringUtils.equalsIgnoreCase(taxonomy.getSpecies(), cr.getSpecies()); + } else { + return StringUtils.equalsIgnoreCase(taxonomy.getGenus(), cr.getGenus()); } } - } else { - Taxonomy notincluded = taxonomyRepository.getByGenusAndSpecies(cr.getGenus(), cr.getSpecies()); - for (int i = taxa.size() - 1; i >= 0; i--) { - if (taxa.get(i).getId().equals(notincluded.getId())) { - taxa.remove(i); - } - } - } + }); } + LOG.warn("Clearing crop taxonomy for " + crop.getName()); // To check @@ -176,7 +171,7 @@ public class CropServiceImpl implements CropService { long taxonomyId = ct.getTaxonomy().getId(); boolean found = false; - for (Taxonomy taxonomy : taxa) { + for (Taxonomy2 taxonomy : taxa) { if (taxonomyId == taxonomy.getId()) { found = true; break; @@ -191,7 +186,7 @@ public class CropServiceImpl implements CropService { List toAdd = new ArrayList(); // To add - for (Taxonomy taxonomy : taxa) { + for (Taxonomy2 taxonomy : taxa) { boolean found = false; for (CropTaxonomy ct : existing) { diff --git a/src/main/java/org/genesys2/server/service/impl/GenesysFilterServiceImpl.java b/src/main/java/org/genesys2/server/service/impl/GenesysFilterServiceImpl.java index c270d65da..38a9d305c 100644 --- a/src/main/java/org/genesys2/server/service/impl/GenesysFilterServiceImpl.java +++ b/src/main/java/org/genesys2/server/service/impl/GenesysFilterServiceImpl.java @@ -70,7 +70,6 @@ import com.fasterxml.jackson.databind.node.ObjectNode; @Service @Transactional(readOnly = true) -// FIXME TODO Change taxonomy to taxonomy2 public class GenesysFilterServiceImpl implements GenesysFilterService { private static final Log LOG = LogFactory.getLog(GenesysFilterServiceImpl.class); @@ -215,7 +214,7 @@ public class GenesysFilterServiceImpl implements GenesysFilterService { StringBuffer sb = new StringBuffer(); sb.append(" from accession a "); if (jsonTree.has("crop") || jsonTree.has("genus") || jsonTree.has("taxon")) { - sb.append(" inner join taxonomy t on t.id=a.taxonomyId "); + sb.append(" inner join taxonomy2 t on t.id=a.taxonomyId2 "); if (jsonTree.has("crop")) { sb.append(" inner join croptaxonomy ct on ct.taxonomyId=t.id inner join crop on crop.id=ct.cropId "); } @@ -682,7 +681,7 @@ public class GenesysFilterServiceImpl implements GenesysFilterService { final StringBuffer sb = new StringBuffer(); sb.append(" from accessiongeo geo inner join accession a on a.id=geo.accessionId "); if (jsonTree.has("crop") || jsonTree.has("genus") || jsonTree.has("taxon")) { - sb.append(" inner join taxonomy t on t.id=a.taxonomyId "); + sb.append(" inner join taxonomy2 t on t.id=a.taxonomyId2 "); if (jsonTree.has("crop")) { sb.append(" inner join croptaxonomy ct on ct.taxonomyId=t.id inner join crop on crop.id=ct.cropId "); } diff --git a/src/main/java/org/genesys2/server/service/impl/GenesysServiceImpl.java b/src/main/java/org/genesys2/server/service/impl/GenesysServiceImpl.java index 4cc401af4..17137ec6d 100644 --- a/src/main/java/org/genesys2/server/service/impl/GenesysServiceImpl.java +++ b/src/main/java/org/genesys2/server/service/impl/GenesysServiceImpl.java @@ -389,7 +389,7 @@ public class GenesysServiceImpl implements GenesysService, TraitService, Dataset @Override public Page listAccessionsByCrop(Crop crop, Pageable pageable) { - List taxonomies = null;// FIXME TODO cropTaxonomyRepository.findTaxonomiesByCrop(crop); + List taxonomies = cropTaxonomyRepository.findTaxonomiesByCrop(crop); if (taxonomies == null || taxonomies.size() == 0) { return null; } diff --git a/src/main/java/org/genesys2/server/service/impl/TaxonomyServiceImpl.java b/src/main/java/org/genesys2/server/service/impl/TaxonomyServiceImpl.java index b3ef7d6f9..9ec5d65d2 100644 --- a/src/main/java/org/genesys2/server/service/impl/TaxonomyServiceImpl.java +++ b/src/main/java/org/genesys2/server/service/impl/TaxonomyServiceImpl.java @@ -86,12 +86,12 @@ public class TaxonomyServiceImpl implements TaxonomyService { @Override public List autocompleteGenus(String term) { - return taxonomyRepository.autocompleteGenus(term + "%", new PageRequest(0, 10)); + return taxonomy2Repository.autocompleteGenus(term + "%", new PageRequest(0, 10)); } @Override public List autocompleteTaxonomy(String term) { - return taxonomyRepository.autocompleteTaxonomy("%" + term + "%", new PageRequest(0, 10)); + return taxonomy2Repository.autocompleteTaxonomy("%" + term + "%", new PageRequest(0, 10)); } @Override @@ -207,11 +207,19 @@ public class TaxonomyServiceImpl implements TaxonomyService { return taxonomy2Repository.count(); } + /** + * @deprecated Will be removed when {@link Taxonomy} is removed. + */ + // TODO FIXME Remove @Override public List findAll() { return taxonomyRepository.findAll(); } + /** + * @deprecated Will be removed when {@link Taxonomy} is removed. + */ + // TODO FIXME Remove @Override @Transactional public long upgradeTaxonomy(Taxonomy t1, Taxonomy2 t2) { -- GitLab