X-Git-Url: https://dev.e-taxonomy.eu/gitweb/cdmlib.git/blobdiff_plain/db18558d0dcdf482310a5736d964ab50642348f9..3213eac225db1dc21d21adbbc9dec311acd12106:/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/TaxonPortalController.java diff --git a/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/TaxonPortalController.java b/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/TaxonPortalController.java index 8d6509dae9..0c5a7f78bb 100644 --- a/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/TaxonPortalController.java +++ b/cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/TaxonPortalController.java @@ -29,6 +29,7 @@ import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.ObjectUtils; import org.apache.http.HttpRequest; import org.apache.log4j.Logger; +import org.apache.lucene.queryParser.ParseException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.WebDataBinder; @@ -49,21 +50,25 @@ import eu.etaxonomy.cdm.api.service.IService; import eu.etaxonomy.cdm.api.service.ITaxonService; import eu.etaxonomy.cdm.api.service.IClassificationService; import eu.etaxonomy.cdm.api.service.ITermService; -import eu.etaxonomy.cdm.api.service.config.ITaxonServiceConfigurator; -import eu.etaxonomy.cdm.api.service.config.TaxonServiceConfiguratorImpl; +import eu.etaxonomy.cdm.api.service.config.IFindTaxaAndNamesConfigurator; +import eu.etaxonomy.cdm.api.service.config.FindTaxaAndNamesConfiguratorImpl; import eu.etaxonomy.cdm.api.service.pager.Pager; +import eu.etaxonomy.cdm.api.service.search.SearchResult; import eu.etaxonomy.cdm.database.UpdatableRoutingDataSource; import eu.etaxonomy.cdm.model.common.DefinedTermBase; import eu.etaxonomy.cdm.model.common.IdentifiableEntity; import eu.etaxonomy.cdm.model.common.IdentifiableSource; +import eu.etaxonomy.cdm.model.common.Language; import eu.etaxonomy.cdm.model.common.Marker; import eu.etaxonomy.cdm.model.common.MarkerType; import eu.etaxonomy.cdm.model.common.RelationshipBase.Direction; import eu.etaxonomy.cdm.model.description.DescriptionElementBase; +import eu.etaxonomy.cdm.model.description.Feature; import eu.etaxonomy.cdm.model.description.TaxonDescription; import eu.etaxonomy.cdm.model.location.NamedArea; import eu.etaxonomy.cdm.model.location.NamedAreaLevel; import eu.etaxonomy.cdm.model.media.Media; +import eu.etaxonomy.cdm.model.media.MediaRepresentation; import eu.etaxonomy.cdm.model.media.MediaRepresentationPart; import eu.etaxonomy.cdm.model.media.MediaUtils; import eu.etaxonomy.cdm.model.name.NameRelationship; @@ -76,6 +81,7 @@ import eu.etaxonomy.cdm.model.taxon.TaxonRelationship; import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType; import eu.etaxonomy.cdm.model.taxon.Classification; import eu.etaxonomy.cdm.persistence.query.MatchMode; +import eu.etaxonomy.cdm.persistence.query.OrderHint; import eu.etaxonomy.cdm.remote.controller.util.PagerParameters; import eu.etaxonomy.cdm.remote.editor.CdmTypePropertyEditor; import eu.etaxonomy.cdm.remote.editor.MatchModePropertyEditor; @@ -127,11 +133,7 @@ public class TaxonPortalController extends BaseController markerTypeService; + private ITermService termService; @Autowired private IFeatureTreeService featureTreeService; @@ -293,10 +295,10 @@ public class TaxonPortalController extends BaseController TYPEDESIGNATION_INIT_STRATEGY = Arrays.asList(new String []{ - //"$", "typeSpecimen.$", "citation.authorTeam.$", "typeName", + "typeStatus" }); protected static final List TAXONNODE_WITHTAXON_INIT_STRATEGY = Arrays.asList(new String []{ @@ -406,7 +408,7 @@ public class TaxonPortalController extends BaseController) service.findTaxaAndNames(config); } + /** + * @param clazz + * @param queryString + * @param treeUuid + * @param languages + * @param features one or more feature uuids + * @param pageNumber + * @param pageSize + * @param request + * @param response + * @return + * @throws IOException + * @throws ParseException + */ + @RequestMapping(method = RequestMethod.GET, value={"/portal/taxon/findByDescriptionElementFullText"}) + public Pager> dofindByDescriptionElementFullText( + @RequestParam(value = "clazz", required = false) Class clazz, + @RequestParam(value = "query", required = true) String queryString, + @RequestParam(value = "tree", required = false) UUID treeUuid, + @RequestParam(value = "features", required = false) UuidList featureUuids, + @RequestParam(value = "languages", required = false) List languages, + @RequestParam(value = "hl", required = false) Boolean highlighting, + @RequestParam(value = "pageNumber", required = false) Integer pageNumber, + @RequestParam(value = "pageSize", required = false) Integer pageSize, + HttpServletRequest request, + HttpServletResponse response + ) + throws IOException, ParseException { + + logger.info("findByDescriptionElementFullText : " + request.getRequestURI() + "?" + request.getQueryString() ); + + PagerParameters pagerParams = new PagerParameters(pageSize, pageNumber); + pagerParams.normalizeAndValidate(response); + + if(highlighting == null){ + highlighting = false; + } + + Classification classification = null; + if(treeUuid != null){ + classification = classificationService.find(treeUuid); + } + + List features = null; + if(featureUuids != null){ + features = new ArrayList(featureUuids.size()); + for(UUID uuid : featureUuids){ + features.add((Feature) termService.find(uuid)); + } + } + + Pager> pager = service.findByDescriptionElementFullText(clazz, queryString, classification, features, languages, highlighting, pagerParams.getPageSize(), pagerParams.getPageIndex(), ((List)null), SIMPLE_TAXON_INIT_STRATEGY); + return pager; + } + /** * Get the synonymy for a taxon identified by the {taxon-uuid}. * The synonymy consists @@ -694,24 +751,24 @@ public class TaxonPortalController extends BaseController markerTypeTerms = null; Set sMarkerTypeUUIDs = null; if(markerTypeUUIDs != null && !markerTypeUUIDs.isEmpty()){ - sMarkerTypeUUIDs = new HashSet(markerTypeUUIDs); - markerTypeTerms = markerTypeService.find(sMarkerTypeUUIDs); + sMarkerTypeUUIDs = new HashSet(markerTypeUUIDs); + markerTypeTerms = termService.find(sMarkerTypeUUIDs); } else if(markerTypeUUIDs != null && markerTypeUUIDs.isEmpty()){ markerTypeTerms = new ArrayList(); } Set markerTypes = new HashSet(); List descriptions = new ArrayList(); if (markerTypeTerms != null) { - for (DefinedTermBase markerTypeTerm : markerTypeTerms) { - markerTypes.add((MarkerType)markerTypeTerm); - } + for (DefinedTermBase markerTypeTerm : markerTypeTerms) { + markerTypes.add((MarkerType)markerTypeTerm); + } } Taxon t = getCdmBaseInstance(Taxon.class, uuid, response, (List)null); if (markerTypeTerms == null) { @@ -727,14 +784,14 @@ public class TaxonPortalController extends BaseController)null); //MarkerType useMarkerType = (MarkerType) markerTypeService.find(UUID.fromString("2e6e42d9-e92a-41f4-899b-03c0ac64f059")); - MarkerType useMarkerType = (MarkerType) markerTypeService.find(UUID.fromString("2e6e42d9-e92a-41f4-899b-03c0ac64f039")); + MarkerType useMarkerType = (MarkerType) termService.find(UUID.fromString("2e6e42d9-e92a-41f4-899b-03c0ac64f039")); //find(UUID.fromString("2e6e42d9-e92a-41f4-899b-03c0ac64f059")); Set markerTypes = new HashSet(); @@ -926,40 +983,19 @@ public class TaxonPortalController extends BaseController getMediaForTaxon(Taxon taxon, Class type, String[] mimeTypes, Integer widthOrDuration, Integer height, Integer size){ - Pager p = - descriptionService.getTaxonDescriptions(taxon, null, null, null, null, TAXONDESCRIPTION_MEDIA_INIT_STRATEGY); - - // pars the media and quality parameters + List taxonGalleryMedia = service.listTaxonDescriptionMedia(taxon, false, TAXONDESCRIPTION_MEDIA_INIT_STRATEGY); + Map mediaRepresentationMap = MediaUtils.findPreferredMedia(taxonGalleryMedia, type, + mimeTypes, null, widthOrDuration, height, size); - // collect all media of the given taxon - boolean limitToGalleries = false; - List taxonMedia = new ArrayList(); - List taxonGalleryMedia = new ArrayList(); - for(TaxonDescription desc : p.getRecords()){ - - if(desc.isImageGallery()){ - for(DescriptionElementBase element : desc.getElements()){ - for(Media media : element.getMedia()){ - taxonGalleryMedia.add(media); - } - } - } else if(!limitToGalleries){ - for(DescriptionElementBase element : desc.getElements()){ - for(Media media : element.getMedia()){ - taxonMedia.add(media); - } - } - } - + List filteredMedia = new ArrayList(mediaRepresentationMap.size()); + for(Media media : mediaRepresentationMap.keySet()){ + media.getRepresentations().clear(); + media.addRepresentation(mediaRepresentationMap.get(media)); + filteredMedia.add(media); } - taxonGalleryMedia.addAll(taxonMedia); - - List returnMedia = MediaUtils.findPreferredMedia(taxonGalleryMedia, type, - mimeTypes, null, widthOrDuration, height, size); - - return returnMedia; + return filteredMedia; }