fixing CDM part of #386 (Handle hybrids in data portals)
authorAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Tue, 6 Sep 2011 15:24:48 +0000 (15:24 +0000)
committerAndreas Kohlbecker <a.kohlbecker@bgbm.org>
Tue, 6 Sep 2011 15:24:48 +0000 (15:24 +0000)
cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/controller/TaxonController.java
cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/json/processor/bean/TaxonNameBaseBeanProcessor.java
cdmlib-remote/src/main/java/eu/etaxonomy/cdm/remote/json/processor/bean/TaxonNodeDaoBeanProcessor.java
cdmlib-services/src/main/java/eu/etaxonomy/cdm/api/service/NameServiceImpl.java

index 8994c990dc504310246523599b2a5b218b97ca0b..4a65dfb27715f1a70715d07cb070737509325f0a 100644 (file)
@@ -1,9 +1,9 @@
 // $Id$\r
 /**\r
 * Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy \r
+* European Distributed Institute of Taxonomy\r
 * http://www.e-taxonomy.eu\r
-* \r
+*\r
 * The contents of this file are subject to the Mozilla Public License Version 1.1\r
 * See LICENSE.TXT at the top of this package for the full license terms.\r
 */\r
@@ -43,7 +43,7 @@ import eu.etaxonomy.cdm.strategy.TaggedTextGenerator;
 \r
 /**\r
  * TODO write controller documentation\r
- * \r
+ *\r
  * @author a.kohlbecker\r
  * @date 20.07.2009\r
  *\r
@@ -52,114 +52,114 @@ import eu.etaxonomy.cdm.strategy.TaggedTextGenerator;
 @RequestMapping(value = {"/taxon/{uuid}"})\r
 public class TaxonController extends AnnotatableController<TaxonBase, ITaxonService>\r
 {\r
-       public static final Logger logger = Logger.getLogger(TaxonController.class);\r
-       \r
-       @Autowired\r
-       private IOccurrenceService occurrenceService;\r
-       @Autowired\r
-       private INameService nameService;\r
-       \r
-       protected static final List<String> TAXONNODE_INIT_STRATEGY = Arrays.asList(new String []{\r
-                       "taxonNodes"\r
-       });\r
-       \r
-       public TaxonController(){\r
-               super();\r
-               setInitializationStrategy(Arrays.asList(new String[]{"$","name.nomenclaturalReference"}));\r
-       }\r
-       \r
-\r
-       @Autowired\r
-       public void setService(ITaxonService service) {\r
-               this.service = service;\r
-       }\r
-       \r
-\r
-       /**\r
-        * Get the set of accepted {@link Taxon} entities for a given\r
-        * {@link TaxonBase} entity identified by the <code>{taxon-uuid}</code>.\r
-        * <p>\r
-        * URI: <b>&#x002F;{datasource-name}&#x002F;taxon&#x002F;{taxon-uuid}&#x002F;accepted</b>\r
-        * \r
-        * @param request\r
-        * @param response\r
-        * @return a set on a list of {@link Taxon} entities which are initialized\r
-        *         using the following initialization strategy:\r
-        *         {@link #DEFAULT_INIT_STRATEGY}\r
-        * @throws IOException\r
-        */\r
-       @RequestMapping(value = "accepted", method = RequestMethod.GET)\r
-       public Set<TaxonBase> doGetAccepted(\r
-                       @PathVariable("uuid") UUID uuid,\r
-                       HttpServletRequest request, \r
-                       HttpServletResponse response) throws IOException {\r
-               logger.info("getAccepted() " + request.getServletPath());\r
-               TaxonBase tb = service.load(uuid);\r
-               HashSet<TaxonBase> resultset = new HashSet<TaxonBase>();\r
-               if(tb instanceof Taxon){\r
-                       //the taxon already is accepted\r
-                       //FIXME take the current view into account once views are implemented!!!\r
-                       resultset.add((Taxon)tb);\r
-               } else {\r
-                       Synonym syn = (Synonym)tb;\r
-                       resultset.addAll(syn.getAcceptedTaxa());\r
-                       //TODO init Synonyms\r
-               }\r
-               return resultset;\r
-       }\r
-       \r
-       @RequestMapping(value = "taxonNodes", method = RequestMethod.GET)\r
-       public Set<TaxonNode>  doGetTaxonNodes(\r
-                       @PathVariable("uuid") UUID uuid,\r
-                       HttpServletRequest request, \r
-                       HttpServletResponse response) throws IOException {\r
-               TaxonBase tb = service.load(uuid, TAXONNODE_INIT_STRATEGY);\r
-               if(tb instanceof Taxon){\r
-                       return ((Taxon)tb).getTaxonNodes();\r
-               } else {\r
-                       HttpStatusMessage.UUID_REFERENCES_WRONG_TYPE.send(response);\r
-                       return null;\r
-               }\r
-       }\r
-       \r
-       @RequestMapping(value = "specimensOrObersvations", method = RequestMethod.GET)\r
-       public ModelAndView doListSpecimensOrObersvations(\r
-                       @PathVariable("uuid") UUID uuid,\r
-                       HttpServletRequest request, \r
-                       HttpServletResponse response) throws IOException {\r
-               logger.info("doListSpecimensOrObersvations() - " + request.getServletPath());\r
-               \r
-               ModelAndView mv = new ModelAndView();\r
-\r
-               TaxonBase tb = service.load(uuid);\r
-               \r
-               List<OrderHint> orderHints = new ArrayList<OrderHint>();\r
-               orderHints.add(new OrderHint("titleCache", SortOrder.DESCENDING));\r
-               \r
-               if(tb instanceof Taxon){\r
-                       List<SpecimenOrObservationBase> specimensOrObersvations = occurrenceService.listByAnyAssociation(\r
-                                       null, (Taxon)tb, null, 0, orderHints, null);\r
-                       mv.addObject(specimensOrObersvations);\r
-               } else {\r
-                       HttpStatusMessage.UUID_REFERENCES_WRONG_TYPE.send(response);\r
-                       return null;\r
-               }\r
-               \r
-               return mv;\r
-       }\r
-       \r
-       @RequestMapping(value = "taggedName", method = RequestMethod.GET)\r
-       public ModelAndView doGetTaggedName(\r
-                       @PathVariable("uuid") UUID uuid,\r
-                       HttpServletRequest request, \r
-                       HttpServletResponse response) throws IOException {\r
-               logger.info("doGetDescriptionElementsByType() - " + request.getServletPath());\r
-               \r
-               ModelAndView mv = new ModelAndView();\r
-               \r
-               TaxonBase tb = service.load(uuid, Arrays.asList(new String[] {"name"}));\r
-               mv.addObject(nameService.getTaggedName(tb.getName().getUuid()));\r
-               return mv;\r
-       }\r
-               \r
+    public static final Logger logger = Logger.getLogger(TaxonController.class);\r
+\r
+    @Autowired\r
+    private IOccurrenceService occurrenceService;\r
+    @Autowired\r
+    private INameService nameService;\r
+\r
+    protected static final List<String> TAXONNODE_INIT_STRATEGY = Arrays.asList(new String []{\r
+            "taxonNodes"\r
+    });\r
+\r
+    public TaxonController(){\r
+        super();\r
+        setInitializationStrategy(Arrays.asList(new String[]{"$","name.nomenclaturalReference"}));\r
+    }\r
+\r
+\r
+    @Autowired\r
+    public void setService(ITaxonService service) {\r
+        this.service = service;\r
+    }\r
+\r
+\r
+    /**\r
+     * Get the set of accepted {@link Taxon} entities for a given\r
+     * {@link TaxonBase} entity identified by the <code>{taxon-uuid}</code>.\r
+     * <p>\r
+     * URI: <b>&#x002F;{datasource-name}&#x002F;taxon&#x002F;{taxon-uuid}&#x002F;accepted</b>\r
+     *\r
+     * @param request\r
+     * @param response\r
+     * @return a set on a list of {@link Taxon} entities which are initialized\r
+     *         using the following initialization strategy:\r
+     *         {@link #DEFAULT_INIT_STRATEGY}\r
+     * @throws IOException\r
+     */\r
+    @RequestMapping(value = "accepted", method = RequestMethod.GET)\r
+    public Set<TaxonBase> doGetAccepted(\r
+            @PathVariable("uuid") UUID uuid,\r
+            HttpServletRequest request,\r
+            HttpServletResponse response) throws IOException {\r
+        logger.info("getAccepted() " + request.getServletPath());\r
+        TaxonBase tb = service.load(uuid);\r
+        HashSet<TaxonBase> resultset = new HashSet<TaxonBase>();\r
+        if(tb instanceof Taxon){\r
+            //the taxon already is accepted\r
+            //FIXME take the current view into account once views are implemented!!!\r
+            resultset.add((Taxon)tb);\r
+        } else {\r
+            Synonym syn = (Synonym)tb;\r
+            resultset.addAll(syn.getAcceptedTaxa());\r
+            //TODO init Synonyms\r
+        }\r
+        return resultset;\r
+    }\r
+\r
+    @RequestMapping(value = "taxonNodes", method = RequestMethod.GET)\r
+    public Set<TaxonNode>  doGetTaxonNodes(\r
+            @PathVariable("uuid") UUID uuid,\r
+            HttpServletRequest request,\r
+            HttpServletResponse response) throws IOException {\r
+        TaxonBase tb = service.load(uuid, TAXONNODE_INIT_STRATEGY);\r
+        if(tb instanceof Taxon){\r
+            return ((Taxon)tb).getTaxonNodes();\r
+        } else {\r
+            HttpStatusMessage.UUID_REFERENCES_WRONG_TYPE.send(response);\r
+            return null;\r
+        }\r
+    }\r
+\r
+    @RequestMapping(value = "specimensOrObersvations", method = RequestMethod.GET)\r
+    public ModelAndView doListSpecimensOrObersvations(\r
+            @PathVariable("uuid") UUID uuid,\r
+            HttpServletRequest request,\r
+            HttpServletResponse response) throws IOException {\r
+        logger.info("doListSpecimensOrObersvations() - " + request.getServletPath());\r
+\r
+        ModelAndView mv = new ModelAndView();\r
+\r
+        TaxonBase tb = service.load(uuid);\r
+\r
+        List<OrderHint> orderHints = new ArrayList<OrderHint>();\r
+        orderHints.add(new OrderHint("titleCache", SortOrder.DESCENDING));\r
+\r
+        if(tb instanceof Taxon){\r
+            List<SpecimenOrObservationBase> specimensOrObersvations = occurrenceService.listByAnyAssociation(\r
+                    null, (Taxon)tb, null, 0, orderHints, null);\r
+            mv.addObject(specimensOrObersvations);\r
+        } else {\r
+            HttpStatusMessage.UUID_REFERENCES_WRONG_TYPE.send(response);\r
+            return null;\r
+        }\r
+\r
+        return mv;\r
+    }\r
+\r
+    @RequestMapping(value = "taggedName", method = RequestMethod.GET)\r
+    public ModelAndView doGetTaggedName(\r
+            @PathVariable("uuid") UUID uuid,\r
+            HttpServletRequest request,\r
+            HttpServletResponse response) throws IOException {\r
+        logger.info("doGetDescriptionElementsByType() - " + request.getServletPath());\r
+\r
+        ModelAndView mv = new ModelAndView();\r
+\r
+        TaxonBase tb = service.load(uuid, Arrays.asList(new String[] {"name"}));\r
+        mv.addObject(nameService.getTaggedName(tb.getName().getUuid()));\r
+        return mv;\r
+    }\r
+\r
 }
\ No newline at end of file
index a9f5fe920a76b17800acd249eaeafd11e843d7e6..c33651820585657a1b1975705a310ba784d43f15 100644 (file)
@@ -1,9 +1,9 @@
 // $Id: TaxonBaseBeanProcessor.java 5473 2009-03-25 13:42:07Z a.kohlbecker $\r
 /**\r
  * Copyright (C) 2009 EDIT\r
- * European Distributed Institute of Taxonomy \r
+ * European Distributed Institute of Taxonomy\r
  * http://www.e-taxonomy.eu\r
- * \r
+ *\r
  * The contents of this file are subject to the Mozilla Public License Version 1.1\r
  * See LICENSE.TXT at the top of this package for the full license terms.\r
  */\r
@@ -27,38 +27,39 @@ import eu.etaxonomy.cdm.strategy.TaggedTextGenerator;
  */\r
 public class TaxonNameBaseBeanProcessor extends AbstractCdmBeanProcessor<TaxonNameBase> {\r
 \r
-       public static final Logger logger = Logger.getLogger(TaxonNameBaseBeanProcessor.class);\r
+    public static final Logger logger = Logger.getLogger(TaxonNameBaseBeanProcessor.class);\r
+\r
+    /* (non-Javadoc)\r
+     * @see eu.etaxonomy.cdm.remote.json.processor.AbstractCdmBeanProcessor#getIgnorePropNames()\r
+     */\r
+    @Override\r
+    public List<String> getIgnorePropNames() {\r
+        return Arrays.asList(new String[]{\r
+                // ignore nameRelations to avoid LazyLoadingExceptions coming\r
+                // from NameRelationshipBeanProcessor.secondStep() in which\r
+                // the transient field fromName is added to the serialization\r
+                "relationsFromThisName",\r
+                "relationsToThisName",\r
+                "combinationAuthorTeam",\r
+                "basionymAuthorTeam",\r
+                "exCombinationAuthorTeam",\r
+                "exBasionymAuthorTeam"\r
+        });\r
+    }\r
 \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.remote.json.processor.AbstractCdmBeanProcessor#getIgnorePropNames()\r
-        */\r
-       @Override\r
-       public List<String> getIgnorePropNames() {\r
-               return Arrays.asList(new String[]{\r
-                               // ignore nameRelations to avoid LazyLoadingExceptions coming \r
-                               // from NameRelationshipBeanProcessor.secondStep() in which \r
-                               // the transient field fromName is added to the serialization\r
-                               "relationsFromThisName",\r
-                               "relationsToThisName",\r
-                               "combinationAuthorTeam",\r
-                               "basionymAuthorTeam",\r
-                               "exCombinationAuthorTeam",\r
-                               "exBasionymAuthorTeam"\r
-               });\r
-       }\r
+    /* (non-Javadoc)\r
+     * @see eu.etaxonomy.cdm.remote.json.processor.AbstractCdmBeanProcessor#processBeanSecondStage(java.lang.Object, net.sf.json.JSONObject, net.sf.json.JsonConfig)\r
+     */\r
+    @Override\r
+    public JSONObject processBeanSecondStep(TaxonNameBase bean, JSONObject json, JsonConfig jsonConfig) {\r
+        if(logger.isDebugEnabled()){\r
+            logger.debug("processing second step" + bean);\r
+        }\r
+//             json.element("taggedName", TaggedTextGenerator.getTaggedName(bean), jsonConfig);\r
+        json.element("taggedName", bean.getTaggedName(), jsonConfig);\r
+        return json;\r
+    }\r
 \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.remote.json.processor.AbstractCdmBeanProcessor#processBeanSecondStage(java.lang.Object, net.sf.json.JSONObject, net.sf.json.JsonConfig)\r
-        */\r
-       @Override\r
-       public JSONObject processBeanSecondStep(TaxonNameBase bean, JSONObject json, JsonConfig jsonConfig) {\r
-               if(logger.isDebugEnabled()){\r
-                       logger.debug("processing second step" + bean);\r
-               }\r
-               json.element("taggedName", TaggedTextGenerator.getTaggedName(bean), jsonConfig);\r
-               return json;\r
-       }\r
 \r
-       \r
 \r
 }\r
index 478e11410e0eea3d3454c75b5eb15afbedd3b165..05f79449b1ae263374347dd3f2296cbcdcc8617b 100644 (file)
@@ -27,38 +27,39 @@ import eu.etaxonomy.cdm.strategy.TaggedTextGenerator;
 public class TaxonNodeDaoBeanProcessor implements JsonBeanProcessor {\r
 \r
 \r
-       /* (non-Javadoc)\r
-        * @see net.sf.json.processors.JsonBeanProcessor#processBean(java.lang.Object, net.sf.json.JsonConfig)\r
-        */\r
-       @Override\r
-       public JSONObject processBean(Object bean, JsonConfig jsonConfig) {\r
+    /* (non-Javadoc)\r
+     * @see net.sf.json.processors.JsonBeanProcessor#processBean(java.lang.Object, net.sf.json.JsonConfig)\r
+     */\r
+    @Override\r
+    public JSONObject processBean(Object bean, JsonConfig jsonConfig) {\r
 \r
-               TaxonNode node = (TaxonNode)bean;\r
-               JSONObject json = new JSONObject();\r
-               json.element("class", "TaxonNodeDao");\r
-               json.element("uuid", node.getUuid(), jsonConfig);\r
-               json.element("titleCache", node.getTaxon().getName().getTitleCache(), jsonConfig);\r
-               List<TaggedText> taggedTitle = TaggedTextGenerator.getTaggedName(node.getTaxon().getName());\r
-               json.element("taggedTitle", taggedTitle, jsonConfig);\r
-               json.element("taxonUuid", node.getTaxon().getUuid(), jsonConfig);\r
-               //Sec can be null (web services can return null for sec)\r
-               //comparation made for avoiding view exceptions\r
-               if (node.getTaxon().getSec() == null){\r
-                       json.element("secUuid", "null");\r
-               }else{\r
-                       json.element("secUuid", node.getTaxon().getSec().getUuid(), jsonConfig);\r
-               }\r
-               json.element("taxonomicChildrenCount", node.getCountChildren(), jsonConfig);\r
-               json.element("unplaced", node.getTaxon().isUnplaced());\r
-               json.element("excluded", node.getTaxon().isExcluded());\r
-               String ranklabel = null;\r
-               if(node.getTaxon().getName().getRank() != null){\r
-                       ranklabel = node.getTaxon().getName().getRank().getLabel();\r
-               }\r
-               json.element("rankLabel", ranklabel, jsonConfig);\r
-               //json.element("treeUuid", node.getClassification().getUuid(), jsonConfig);\r
+        TaxonNode node = (TaxonNode)bean;\r
+        JSONObject json = new JSONObject();\r
+        json.element("class", "TaxonNodeDao");\r
+        json.element("uuid", node.getUuid(), jsonConfig);\r
+        json.element("titleCache", node.getTaxon().getName().getTitleCache(), jsonConfig);\r
+//             List<TaggedText> taggedTitle = TaggedTextGenerator.getTaggedName(node.getTaxon().getName());\r
+        List<TaggedText> taggedTitle = node.getTaxon().getName().getTaggedName();\r
+        json.element("taggedTitle", taggedTitle, jsonConfig);\r
+        json.element("taxonUuid", node.getTaxon().getUuid(), jsonConfig);\r
+        //Sec can be null (web services can return null for sec)\r
+        //comparation made for avoiding view exceptions\r
+        if (node.getTaxon().getSec() == null){\r
+            json.element("secUuid", "null");\r
+        }else{\r
+            json.element("secUuid", node.getTaxon().getSec().getUuid(), jsonConfig);\r
+        }\r
+        json.element("taxonomicChildrenCount", node.getCountChildren(), jsonConfig);\r
+        json.element("unplaced", node.getTaxon().isUnplaced());\r
+        json.element("excluded", node.getTaxon().isExcluded());\r
+        String ranklabel = null;\r
+        if(node.getTaxon().getName().getRank() != null){\r
+            ranklabel = node.getTaxon().getName().getRank().getLabel();\r
+        }\r
+        json.element("rankLabel", ranklabel, jsonConfig);\r
+        //json.element("treeUuid", node.getClassification().getUuid(), jsonConfig);\r
 \r
-               return json;\r
-       }\r
+        return json;\r
+    }\r
 \r
 }\r
index 0a5ee01771928ec53084304246c43719ce9bb59f..815db779a1f5d601e90590d36a6437c5e53dc963 100644 (file)
@@ -1,9 +1,9 @@
 // $Id$\r
 /**\r
 * Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy \r
+* European Distributed Institute of Taxonomy\r
 * http://www.e-taxonomy.eu\r
-* \r
+*\r
 * The contents of this file are subject to the Mozilla Public License Version 1.1\r
 * See LICENSE.TXT at the top of this package for the full license terms.\r
 */\r
@@ -67,319 +67,321 @@ import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;
 @Service\r
 @Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
 public class NameServiceImpl extends IdentifiableServiceBase<TaxonNameBase,ITaxonNameDao> implements INameService {\r
-       static private final Logger logger = Logger.getLogger(NameServiceImpl.class);\r
-       \r
-       @Autowired\r
-       protected ITermVocabularyDao vocabularyDao;\r
-       @Autowired\r
-       protected IOrderedTermVocabularyDao orderedVocabularyDao;\r
-       @Autowired\r
-       @Qualifier("refEntDao")\r
+    static private final Logger logger = Logger.getLogger(NameServiceImpl.class);\r
+\r
+    @Autowired\r
+    protected ITermVocabularyDao vocabularyDao;\r
+    @Autowired\r
+    protected IOrderedTermVocabularyDao orderedVocabularyDao;\r
+    @Autowired\r
+    @Qualifier("refEntDao")\r
     protected IReferencedEntityDao<ReferencedEntityBase> referencedEntityDao;\r
-       @Autowired\r
-       private INomenclaturalStatusDao nomStatusDao;\r
-       @Autowired\r
-       private ITypeDesignationDao typeDesignationDao;\r
-       @Autowired\r
-       private IHomotypicalGroupDao homotypicalGroupDao;\r
-\r
-       /**\r
-        * Constructor\r
-        */\r
-       public NameServiceImpl(){\r
-               if (logger.isDebugEnabled()) { logger.debug("Load NameService Bean"); }\r
-       }\r
-\r
-//********************* METHODS ****************************************************************//     \r
-       \r
-       public List getNamesByName(String name){\r
-               return super.findCdmObjectsByTitle(name);\r
-       }\r
-       \r
-       public List<NonViralName> getNamesByNameCache(String nameCache){\r
-               List result = dao.findByName(nameCache, MatchMode.EXACT, null, null, null, null);\r
-               return result;\r
-       }\r
-       \r
-       public List getNamesByName(String name, CdmBase sessionObject){\r
-               return super.findCdmObjectsByTitle(name, sessionObject);\r
-       }\r
-\r
-       public List findNamesByTitle(String title){\r
-               return super.findCdmObjectsByTitle(title);\r
-       }\r
-       \r
-       public List findNamesByTitle(String title, CdmBase sessionObject){\r
-               return super.findCdmObjectsByTitle(title, sessionObject);\r
-       }\r
-       \r
-       @Transactional(readOnly = false)\r
-       public Map<UUID, HomotypicalGroup> saveAllHomotypicalGroups(Collection<HomotypicalGroup> homotypicalGroups){\r
-               return homotypicalGroupDao.saveAll(homotypicalGroups);\r
-       }\r
-       \r
-       @Transactional(readOnly = false)\r
-       public Map<UUID, TypeDesignationBase> saveTypeDesignationAll(Collection<TypeDesignationBase> typeDesignationCollection){\r
-               return typeDesignationDao.saveAll(typeDesignationCollection);\r
-       }\r
-\r
-       @Transactional(readOnly = false)\r
-       public Map<UUID, ReferencedEntityBase> saveReferencedEntitiesAll(Collection<ReferencedEntityBase> referencedEntityCollection){\r
-               return referencedEntityDao.saveAll(referencedEntityCollection);\r
-       }\r
-\r
-       public List<TaxonNameBase> getAllNames(int limit, int start){\r
-               return dao.list(limit, start);\r
-       }\r
-\r
-       public List<NomenclaturalStatus> getAllNomenclaturalStatus(int limit, int start){\r
-               return nomStatusDao.list(limit, start);\r
-       }\r
-        \r
-       public List<TypeDesignationBase> getAllTypeDesignations(int limit, int start){\r
-               return typeDesignationDao.getAllTypeDesignations(limit, start);\r
-       }\r
-        /**\r
-        * FIXME Candidate for harmonization\r
-        * homotypicalGroupService.list\r
-        */\r
-       public List<HomotypicalGroup> getAllHomotypicalGroups(int limit, int start){\r
-               return homotypicalGroupDao.list(limit, start);\r
-       }\r
-       \r
-       /**\r
-        * FIXME Candidate for harmonization\r
-        * remove\r
-        */\r
-       @Deprecated\r
-       public List<RelationshipBase> getAllRelationships(int limit, int start){\r
-               return dao.getRelationships(limit, start);\r
-       }\r
-       \r
-       /**\r
-        * FIXME Candidate for harmonization\r
-        * is this the same as termService.getVocabulary(VocabularyEnum.Rank) \r
-        * (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.service.INameService#getRankVocabulary()\r
-        */\r
-       public OrderedTermVocabulary<Rank> getRankVocabulary() {\r
-               String uuidString = "ef0d1ce1-26e3-4e83-b47b-ca74eed40b1b";\r
-               UUID uuid = UUID.fromString(uuidString);\r
-               OrderedTermVocabulary<Rank> rankVocabulary = \r
-                       (OrderedTermVocabulary)orderedVocabularyDao.findByUuid(uuid);\r
-               return rankVocabulary;\r
-       }\r
-\r
-       /**\r
-        * FIXME Candidate for harmonization\r
-        * is this the same as termService.getVocabulary(VocabularyEnum.NameRelationshipType) \r
-        *  (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.service.INameService#getNameRelationshipTypeVocabulary()\r
-        */\r
-       public TermVocabulary<NameRelationshipType> getNameRelationshipTypeVocabulary() {\r
-               String uuidString = "6878cb82-c1a4-4613-b012-7e73b413c8cd";\r
-               UUID uuid = UUID.fromString(uuidString);\r
-               TermVocabulary<NameRelationshipType> nameRelTypeVocabulary = \r
-                       (TermVocabulary)vocabularyDao.findByUuid(uuid);\r
-               return nameRelTypeVocabulary;\r
-       }\r
-\r
-       /**\r
-        * FIXME Candidate for harmonization\r
-        * is this the same as termService.getVocabulary(VocabularyEnum.StatusType) \r
-        * (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.service.INameService#getStatusTypeVocabulary()\r
-        */\r
-       public TermVocabulary<NomenclaturalStatusType> getStatusTypeVocabulary() {\r
-               String uuidString = "bb28cdca-2f8a-4f11-9c21-517e9ae87f1f";\r
-               UUID uuid = UUID.fromString(uuidString);\r
-               TermVocabulary<NomenclaturalStatusType> nomStatusTypeVocabulary = \r
-                       (TermVocabulary)vocabularyDao.findByUuid(uuid);\r
-               return nomStatusTypeVocabulary;\r
-       }\r
-\r
-       /**\r
-        * FIXME Candidate for harmonization\r
-        * is this the same as termService.getVocabulary(VocabularyEnum.SpecimenTypeDesignationStatus) \r
-        *  (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.service.INameService#getTypeDesignationStatusVocabulary()\r
-        */\r
-       public TermVocabulary<SpecimenTypeDesignationStatus> getSpecimenTypeDesignationStatusVocabulary() {\r
-               String uuidString = "ab177bd7-d3c8-4e58-a388-226fff6ba3c2";\r
-               UUID uuid = UUID.fromString(uuidString);\r
-               TermVocabulary<SpecimenTypeDesignationStatus> typeDesigStatusVocabulary = \r
-                       (TermVocabulary)vocabularyDao.findByUuid(uuid);\r
-               return typeDesigStatusVocabulary;\r
-       }\r
-       \r
-       /**\r
-        * FIXME Candidate for harmonization\r
-        * is this the same as termService.getVocabulary(VocabularyEnum.SpecimenTypeDesignationStatus)\r
-        * and also seems to duplicate the above method, differing only in the DAO used and the return type \r
-        * (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.service.INameService#getTypeDesignationStatusVocabulary()\r
-        */\r
-       public OrderedTermVocabulary<SpecimenTypeDesignationStatus> getSpecimenTypeDesignationVocabulary() {\r
-               String uuidString = "ab177bd7-d3c8-4e58-a388-226fff6ba3c2";\r
-               UUID uuid = UUID.fromString(uuidString);\r
-               OrderedTermVocabulary<SpecimenTypeDesignationStatus> typeDesignationVocabulary = \r
-                       (OrderedTermVocabulary)orderedVocabularyDao.findByUuid(uuid);\r
-               return typeDesignationVocabulary;\r
-       }\r
-\r
-\r
-       @Autowired\r
-       protected void setDao(ITaxonNameDao dao) {\r
-               this.dao = dao;\r
-       }\r
-\r
-       public Pager<HybridRelationship> getHybridNames(NonViralName name,      HybridRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
+    @Autowired\r
+    private INomenclaturalStatusDao nomStatusDao;\r
+    @Autowired\r
+    private ITypeDesignationDao typeDesignationDao;\r
+    @Autowired\r
+    private IHomotypicalGroupDao homotypicalGroupDao;\r
+\r
+    /**\r
+     * Constructor\r
+     */\r
+    public NameServiceImpl(){\r
+        if (logger.isDebugEnabled()) { logger.debug("Load NameService Bean"); }\r
+    }\r
+\r
+//********************* METHODS ****************************************************************//\r
+\r
+    public List getNamesByName(String name){\r
+        return super.findCdmObjectsByTitle(name);\r
+    }\r
+\r
+    public List<NonViralName> getNamesByNameCache(String nameCache){\r
+        List result = dao.findByName(nameCache, MatchMode.EXACT, null, null, null, null);\r
+        return result;\r
+    }\r
+\r
+    public List getNamesByName(String name, CdmBase sessionObject){\r
+        return super.findCdmObjectsByTitle(name, sessionObject);\r
+    }\r
+\r
+    public List findNamesByTitle(String title){\r
+        return super.findCdmObjectsByTitle(title);\r
+    }\r
+\r
+    public List findNamesByTitle(String title, CdmBase sessionObject){\r
+        return super.findCdmObjectsByTitle(title, sessionObject);\r
+    }\r
+\r
+    @Transactional(readOnly = false)\r
+    public Map<UUID, HomotypicalGroup> saveAllHomotypicalGroups(Collection<HomotypicalGroup> homotypicalGroups){\r
+        return homotypicalGroupDao.saveAll(homotypicalGroups);\r
+    }\r
+\r
+    @Transactional(readOnly = false)\r
+    public Map<UUID, TypeDesignationBase> saveTypeDesignationAll(Collection<TypeDesignationBase> typeDesignationCollection){\r
+        return typeDesignationDao.saveAll(typeDesignationCollection);\r
+    }\r
+\r
+    @Transactional(readOnly = false)\r
+    public Map<UUID, ReferencedEntityBase> saveReferencedEntitiesAll(Collection<ReferencedEntityBase> referencedEntityCollection){\r
+        return referencedEntityDao.saveAll(referencedEntityCollection);\r
+    }\r
+\r
+    public List<TaxonNameBase> getAllNames(int limit, int start){\r
+        return dao.list(limit, start);\r
+    }\r
+\r
+    public List<NomenclaturalStatus> getAllNomenclaturalStatus(int limit, int start){\r
+        return nomStatusDao.list(limit, start);\r
+    }\r
+\r
+    public List<TypeDesignationBase> getAllTypeDesignations(int limit, int start){\r
+        return typeDesignationDao.getAllTypeDesignations(limit, start);\r
+    }\r
+      /**\r
+     * FIXME Candidate for harmonization\r
+     * homotypicalGroupService.list\r
+     */\r
+    public List<HomotypicalGroup> getAllHomotypicalGroups(int limit, int start){\r
+        return homotypicalGroupDao.list(limit, start);\r
+    }\r
+\r
+    /**\r
+     * FIXME Candidate for harmonization\r
+     * remove\r
+     */\r
+    @Deprecated\r
+    public List<RelationshipBase> getAllRelationships(int limit, int start){\r
+        return dao.getRelationships(limit, start);\r
+    }\r
+\r
+    /**\r
+     * FIXME Candidate for harmonization\r
+     * is this the same as termService.getVocabulary(VocabularyEnum.Rank)\r
+     * (non-Javadoc)\r
+     * @see eu.etaxonomy.cdm.api.service.INameService#getRankVocabulary()\r
+     */\r
+    public OrderedTermVocabulary<Rank> getRankVocabulary() {\r
+        String uuidString = "ef0d1ce1-26e3-4e83-b47b-ca74eed40b1b";\r
+        UUID uuid = UUID.fromString(uuidString);\r
+        OrderedTermVocabulary<Rank> rankVocabulary =\r
+            (OrderedTermVocabulary)orderedVocabularyDao.findByUuid(uuid);\r
+        return rankVocabulary;\r
+    }\r
+\r
+    /**\r
+      * FIXME Candidate for harmonization\r
+     * is this the same as termService.getVocabulary(VocabularyEnum.NameRelationshipType)\r
+     *  (non-Javadoc)\r
+     * @see eu.etaxonomy.cdm.api.service.INameService#getNameRelationshipTypeVocabulary()\r
+     */\r
+    public TermVocabulary<NameRelationshipType> getNameRelationshipTypeVocabulary() {\r
+        String uuidString = "6878cb82-c1a4-4613-b012-7e73b413c8cd";\r
+        UUID uuid = UUID.fromString(uuidString);\r
+        TermVocabulary<NameRelationshipType> nameRelTypeVocabulary =\r
+            (TermVocabulary)vocabularyDao.findByUuid(uuid);\r
+        return nameRelTypeVocabulary;\r
+    }\r
+\r
+    /**\r
+      * FIXME Candidate for harmonization\r
+     * is this the same as termService.getVocabulary(VocabularyEnum.StatusType)\r
+     * (non-Javadoc)\r
+     * @see eu.etaxonomy.cdm.api.service.INameService#getStatusTypeVocabulary()\r
+     */\r
+    public TermVocabulary<NomenclaturalStatusType> getStatusTypeVocabulary() {\r
+        String uuidString = "bb28cdca-2f8a-4f11-9c21-517e9ae87f1f";\r
+        UUID uuid = UUID.fromString(uuidString);\r
+        TermVocabulary<NomenclaturalStatusType> nomStatusTypeVocabulary =\r
+            (TermVocabulary)vocabularyDao.findByUuid(uuid);\r
+        return nomStatusTypeVocabulary;\r
+    }\r
+\r
+    /**\r
+      * FIXME Candidate for harmonization\r
+     * is this the same as termService.getVocabulary(VocabularyEnum.SpecimenTypeDesignationStatus)\r
+     *  (non-Javadoc)\r
+     * @see eu.etaxonomy.cdm.api.service.INameService#getTypeDesignationStatusVocabulary()\r
+     */\r
+    public TermVocabulary<SpecimenTypeDesignationStatus> getSpecimenTypeDesignationStatusVocabulary() {\r
+        String uuidString = "ab177bd7-d3c8-4e58-a388-226fff6ba3c2";\r
+        UUID uuid = UUID.fromString(uuidString);\r
+        TermVocabulary<SpecimenTypeDesignationStatus> typeDesigStatusVocabulary =\r
+            (TermVocabulary)vocabularyDao.findByUuid(uuid);\r
+        return typeDesigStatusVocabulary;\r
+    }\r
+\r
+    /**\r
+       * FIXME Candidate for harmonization\r
+     * is this the same as termService.getVocabulary(VocabularyEnum.SpecimenTypeDesignationStatus)\r
+     * and also seems to duplicate the above method, differing only in the DAO used and the return type\r
+     * (non-Javadoc)\r
+     * @see eu.etaxonomy.cdm.api.service.INameService#getTypeDesignationStatusVocabulary()\r
+     */\r
+    public OrderedTermVocabulary<SpecimenTypeDesignationStatus> getSpecimenTypeDesignationVocabulary() {\r
+        String uuidString = "ab177bd7-d3c8-4e58-a388-226fff6ba3c2";\r
+        UUID uuid = UUID.fromString(uuidString);\r
+        OrderedTermVocabulary<SpecimenTypeDesignationStatus> typeDesignationVocabulary =\r
+            (OrderedTermVocabulary)orderedVocabularyDao.findByUuid(uuid);\r
+        return typeDesignationVocabulary;\r
+    }\r
+\r
+\r
+    @Autowired\r
+    protected void setDao(ITaxonNameDao dao) {\r
+        this.dao = dao;\r
+    }\r
+\r
+    public Pager<HybridRelationship> getHybridNames(NonViralName name, HybridRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
         Integer numberOfResults = dao.countHybridNames(name, type);\r
-               \r
-               List<HybridRelationship> results = new ArrayList<HybridRelationship>();\r
-               if(AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)) { // no point checking again\r
-                       results = dao.getHybridNames(name, type, pageSize, pageNumber,orderHints,propertyPaths); \r
-               }\r
-               \r
-               return new DefaultPagerImpl<HybridRelationship>(pageNumber, numberOfResults, pageSize, results);\r
-       }\r
-       \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.service.INameService#listNameRelationships(eu.etaxonomy.cdm.model.name.TaxonNameBase, eu.etaxonomy.cdm.model.common.RelationshipBase.Direction, eu.etaxonomy.cdm.model.name.NameRelationshipType, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)\r
-        */\r
-       @Override\r
-       public List<NameRelationship> listNameRelationships(TaxonNameBase name, Direction direction, NameRelationshipType type, Integer pageSize,\r
-                       Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
-               \r
-               Integer numberOfResults = dao.countNameRelationships(name, NameRelationship.Direction.relatedFrom, type);\r
-\r
-               List<NameRelationship> results = new ArrayList<NameRelationship>();\r
-               if (AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)) { // no point checking again\r
-                       results = dao.getNameRelationships(name, direction, type, pageSize,     pageNumber, orderHints, propertyPaths);\r
-               }\r
-               return results;\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.service.INameService#pageNameRelationships(eu.etaxonomy.cdm.model.name.TaxonNameBase, eu.etaxonomy.cdm.model.common.RelationshipBase.Direction, eu.etaxonomy.cdm.model.name.NameRelationshipType, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)\r
-        */\r
-       @Override\r
-       public Pager<NameRelationship> pageNameRelationships(TaxonNameBase name, Direction direction, NameRelationshipType type, Integer pageSize,\r
-                       Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
-               List<NameRelationship> results = listNameRelationships(name, direction, type, pageSize, pageNumber, orderHints, propertyPaths);\r
-               return new DefaultPagerImpl<NameRelationship>(pageNumber, results.size(), pageSize, results);\r
-       }\r
-\r
-       public List<NameRelationship> listFromNameRelationships(TaxonNameBase name, NameRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
-               return listNameRelationships(name, Direction.relatedFrom, type, pageSize, pageNumber, orderHints, propertyPaths);\r
-       }\r
-\r
-       public Pager<NameRelationship> pageFromNameRelationships(TaxonNameBase name, NameRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
-               List<NameRelationship> results = listNameRelationships(name, Direction.relatedFrom, type, pageSize, pageNumber, orderHints, propertyPaths);\r
-               return new DefaultPagerImpl<NameRelationship>(pageNumber, results.size(), pageSize, results);\r
-       }\r
-       \r
-       public List<NameRelationship> listToNameRelationships(TaxonNameBase name, NameRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
-               return listNameRelationships(name, Direction.relatedTo, type, pageSize, pageNumber, orderHints, propertyPaths);\r
-       }\r
-       \r
-       public Pager<NameRelationship> pageToNameRelationships(TaxonNameBase name, NameRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
-               List<NameRelationship> results = listNameRelationships(name, Direction.relatedTo, type, pageSize, pageNumber, orderHints, propertyPaths);\r
-               return new DefaultPagerImpl<NameRelationship>(pageNumber, results.size(), pageSize, results);\r
-       }\r
-       \r
-       public Pager<TypeDesignationBase> getTypeDesignations(TaxonNameBase name, SpecimenTypeDesignationStatus status, \r
-                       Integer pageSize, Integer pageNumber) { \r
-               return getTypeDesignations(name, status, pageSize, pageNumber, null);\r
-       }\r
-       \r
-       public Pager<TypeDesignationBase> getTypeDesignations(TaxonNameBase name, SpecimenTypeDesignationStatus status, \r
-                               Integer pageSize, Integer pageNumber, List<String> propertyPaths){\r
+\r
+        List<HybridRelationship> results = new ArrayList<HybridRelationship>();\r
+        if(AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)) { // no point checking again\r
+            results = dao.getHybridNames(name, type, pageSize, pageNumber,orderHints,propertyPaths);\r
+        }\r
+\r
+        return new DefaultPagerImpl<HybridRelationship>(pageNumber, numberOfResults, pageSize, results);\r
+    }\r
+\r
+    /* (non-Javadoc)\r
+     * @see eu.etaxonomy.cdm.api.service.INameService#listNameRelationships(eu.etaxonomy.cdm.model.name.TaxonNameBase, eu.etaxonomy.cdm.model.common.RelationshipBase.Direction, eu.etaxonomy.cdm.model.name.NameRelationshipType, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)\r
+     */\r
+    @Override\r
+    public List<NameRelationship> listNameRelationships(TaxonNameBase name,    Direction direction, NameRelationshipType type, Integer pageSize,\r
+            Integer pageNumber, List<OrderHint> orderHints,    List<String> propertyPaths) {\r
+\r
+        Integer numberOfResults = dao.countNameRelationships(name, NameRelationship.Direction.relatedFrom, type);\r
+\r
+        List<NameRelationship> results = new ArrayList<NameRelationship>();\r
+        if (AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)) { // no point checking again\r
+            results = dao.getNameRelationships(name, direction, type, pageSize,        pageNumber, orderHints, propertyPaths);\r
+        }\r
+        return results;\r
+    }\r
+\r
+    /* (non-Javadoc)\r
+     * @see eu.etaxonomy.cdm.api.service.INameService#pageNameRelationships(eu.etaxonomy.cdm.model.name.TaxonNameBase, eu.etaxonomy.cdm.model.common.RelationshipBase.Direction, eu.etaxonomy.cdm.model.name.NameRelationshipType, java.lang.Integer, java.lang.Integer, java.util.List, java.util.List)\r
+     */\r
+    @Override\r
+    public Pager<NameRelationship> pageNameRelationships(TaxonNameBase name, Direction direction, NameRelationshipType type, Integer pageSize,\r
+            Integer pageNumber, List<OrderHint> orderHints,    List<String> propertyPaths) {\r
+        List<NameRelationship> results = listNameRelationships(name, direction, type, pageSize, pageNumber, orderHints, propertyPaths);\r
+        return new DefaultPagerImpl<NameRelationship>(pageNumber, results.size(), pageSize, results);\r
+    }\r
+\r
+    public List<NameRelationship> listFromNameRelationships(TaxonNameBase name, NameRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
+        return listNameRelationships(name, Direction.relatedFrom, type, pageSize, pageNumber, orderHints, propertyPaths);\r
+    }\r
+\r
+    public Pager<NameRelationship> pageFromNameRelationships(TaxonNameBase name, NameRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
+        List<NameRelationship> results = listNameRelationships(name, Direction.relatedFrom, type, pageSize, pageNumber, orderHints, propertyPaths);\r
+        return new DefaultPagerImpl<NameRelationship>(pageNumber, results.size(), pageSize, results);\r
+    }\r
+\r
+    public List<NameRelationship> listToNameRelationships(TaxonNameBase name, NameRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
+        return listNameRelationships(name, Direction.relatedTo, type, pageSize, pageNumber, orderHints, propertyPaths);\r
+    }\r
+\r
+    public Pager<NameRelationship> pageToNameRelationships(TaxonNameBase name, NameRelationshipType type, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, List<String> propertyPaths) {\r
+        List<NameRelationship> results = listNameRelationships(name, Direction.relatedTo, type, pageSize, pageNumber, orderHints, propertyPaths);\r
+        return new DefaultPagerImpl<NameRelationship>(pageNumber, results.size(), pageSize, results);\r
+    }\r
+\r
+    public Pager<TypeDesignationBase> getTypeDesignations(TaxonNameBase name, SpecimenTypeDesignationStatus status,\r
+            Integer pageSize, Integer pageNumber) {\r
+        return getTypeDesignations(name, status, pageSize, pageNumber, null);\r
+    }\r
+\r
+    public Pager<TypeDesignationBase> getTypeDesignations(TaxonNameBase name, SpecimenTypeDesignationStatus status,\r
+                Integer pageSize, Integer pageNumber, List<String> propertyPaths){\r
         Integer numberOfResults = dao.countTypeDesignations(name, status);\r
-               \r
-               List<TypeDesignationBase> results = new ArrayList<TypeDesignationBase>();\r
-               if(numberOfResults > 0) { // no point checking again  //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)\r
-                       results = dao.getTypeDesignations(name, status, pageSize, pageNumber, propertyPaths); \r
-               }\r
-               \r
-               return new DefaultPagerImpl<TypeDesignationBase>(pageNumber, numberOfResults, pageSize, results);\r
-       }\r
-       \r
+\r
+        List<TypeDesignationBase> results = new ArrayList<TypeDesignationBase>();\r
+        if(numberOfResults > 0) { // no point checking again  //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)\r
+            results = dao.getTypeDesignations(name, status, pageSize, pageNumber, propertyPaths);\r
+        }\r
+\r
+        return new DefaultPagerImpl<TypeDesignationBase>(pageNumber, numberOfResults, pageSize, results);\r
+    }\r
+\r
     /**\r
      * FIXME Candidate for harmonization\r
-        * rename search\r
+     * rename search\r
      */\r
-       public Pager<TaxonNameBase> searchNames(String uninomial,String infraGenericEpithet, String specificEpithet, String infraspecificEpithet, Rank rank, Integer pageSize,  Integer pageNumber, List<OrderHint> orderHints,\r
-                       List<String> propertyPaths) {\r
+    public Pager<TaxonNameBase> searchNames(String uninomial,String infraGenericEpithet, String specificEpithet, String infraspecificEpithet, Rank rank, Integer pageSize,     Integer pageNumber, List<OrderHint> orderHints,\r
+            List<String> propertyPaths) {\r
         Integer numberOfResults = dao.countNames(uninomial, infraGenericEpithet, specificEpithet, infraspecificEpithet, rank);\r
-               \r
-               List<TaxonNameBase> results = new ArrayList<TaxonNameBase>();\r
-               if(numberOfResults > 0) { // no point checking again  //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)\r
-                       results = dao.searchNames(uninomial, infraGenericEpithet, specificEpithet, infraspecificEpithet, rank, pageSize, pageNumber, orderHints, propertyPaths); \r
-               }\r
-               \r
-               return new DefaultPagerImpl<TaxonNameBase>(pageNumber, numberOfResults, pageSize, results);\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.service.INameService#getUuidAndTitleCacheOfNames()\r
-        */\r
-       public List<UuidAndTitleCache> getUuidAndTitleCacheOfNames() {\r
-               return dao.getUuidAndTitleCacheOfNames();\r
-       }\r
-\r
-       public Pager<TaxonNameBase> findByName(Class<? extends TaxonNameBase> clazz, String queryString, MatchMode matchmode, List<Criterion> criteria, Integer pageSize,Integer pageNumber, List<OrderHint> orderHints,List<String> propertyPaths) {\r
-               Integer numberOfResults = dao.countByName(clazz, queryString, matchmode, criteria);\r
-               \r
-                List<TaxonNameBase> results = new ArrayList<TaxonNameBase>();\r
-                if(numberOfResults > 0) { // no point checking again  //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)\r
-                               results = dao.findByName(clazz, queryString, matchmode, criteria, pageSize, pageNumber, orderHints, propertyPaths); \r
-                }\r
-                       \r
-                 return new DefaultPagerImpl<TaxonNameBase>(pageNumber, numberOfResults, pageSize, results);\r
-       }\r
-\r
-       public HomotypicalGroup findHomotypicalGroup(UUID uuid) {\r
-               return homotypicalGroupDao.findByUuid(uuid);\r
-       }\r
-\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#updateTitleCache(java.lang.Integer, eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy)\r
-        */\r
-       @Override\r
-       public void updateTitleCache(Class<? extends TaxonNameBase> clazz, Integer stepSize, IIdentifiableEntityCacheStrategy<TaxonNameBase> cacheStrategy, IProgressMonitor monitor) {\r
-               if (clazz == null){\r
-                       clazz = TaxonNameBase.class;\r
-               }\r
-               super.updateTitleCacheImpl(clazz, stepSize, cacheStrategy, monitor);\r
-       }\r
-\r
-       \r
-       @Override\r
-       protected void setOtherCachesNull(TaxonNameBase name) {\r
-               if (name.isInstanceOf(NonViralName.class)){\r
-                       NonViralName nvn = CdmBase.deproxy(name, NonViralName.class);\r
-                       if (! nvn.isProtectedNameCache()){\r
-                               nvn.setNameCache(null, false);\r
-                       }\r
-                       if (! nvn.isProtectedAuthorshipCache()){\r
-                               nvn.setAuthorshipCache(null, false);\r
-                       }\r
-                       if (! nvn.isProtectedFullTitleCache()){\r
-                               nvn.setFullTitleCache(null, false);\r
-                       }\r
-               }\r
-       }\r
-\r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.api.service.INameService#getTaggedName(eu.etaxonomy.cdm.model.name.TaxonNameBase)\r
-        */\r
-       @Override\r
-       public List<TaggedText> getTaggedName(UUID uuid) {\r
-               TaxonNameBase taxonNameBase = dao.load(uuid);\r
-               return TaggedTextGenerator.getTaggedName(taxonNameBase);\r
-       }\r
-       \r
-       \r
+\r
+        List<TaxonNameBase> results = new ArrayList<TaxonNameBase>();\r
+        if(numberOfResults > 0) { // no point checking again  //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)\r
+            results = dao.searchNames(uninomial, infraGenericEpithet, specificEpithet, infraspecificEpithet, rank, pageSize, pageNumber, orderHints, propertyPaths);\r
+        }\r
+\r
+        return new DefaultPagerImpl<TaxonNameBase>(pageNumber, numberOfResults, pageSize, results);\r
+    }\r
+\r
+    /* (non-Javadoc)\r
+     * @see eu.etaxonomy.cdm.api.service.INameService#getUuidAndTitleCacheOfNames()\r
+     */\r
+    public List<UuidAndTitleCache> getUuidAndTitleCacheOfNames() {\r
+        return dao.getUuidAndTitleCacheOfNames();\r
+    }\r
+\r
+    public Pager<TaxonNameBase> findByName(Class<? extends TaxonNameBase> clazz, String queryString, MatchMode matchmode, List<Criterion> criteria, Integer pageSize,Integer pageNumber, List<OrderHint> orderHints,List<String> propertyPaths) {\r
+        Integer numberOfResults = dao.countByName(clazz, queryString, matchmode, criteria);\r
+\r
+         List<TaxonNameBase> results = new ArrayList<TaxonNameBase>();\r
+         if(numberOfResults > 0) { // no point checking again  //TODO use AbstractPagerImpl.hasResultsInRange(numberOfResults, pageNumber, pageSize)\r
+                results = dao.findByName(clazz, queryString, matchmode, criteria, pageSize, pageNumber, orderHints, propertyPaths);\r
+         }\r
+\r
+          return new DefaultPagerImpl<TaxonNameBase>(pageNumber, numberOfResults, pageSize, results);\r
+    }\r
+\r
+    public HomotypicalGroup findHomotypicalGroup(UUID uuid) {\r
+        return homotypicalGroupDao.findByUuid(uuid);\r
+    }\r
+\r
+\r
+    /* (non-Javadoc)\r
+     * @see eu.etaxonomy.cdm.api.service.IIdentifiableEntityService#updateTitleCache(java.lang.Integer, eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy)\r
+     */\r
+    @Override\r
+    public void updateTitleCache(Class<? extends TaxonNameBase> clazz, Integer stepSize, IIdentifiableEntityCacheStrategy<TaxonNameBase> cacheStrategy, IProgressMonitor monitor) {\r
+        if (clazz == null){\r
+            clazz = TaxonNameBase.class;\r
+        }\r
+        super.updateTitleCacheImpl(clazz, stepSize, cacheStrategy, monitor);\r
+    }\r
+\r
+\r
+    @Override\r
+    protected void setOtherCachesNull(TaxonNameBase name) {\r
+        if (name.isInstanceOf(NonViralName.class)){\r
+            NonViralName nvn = CdmBase.deproxy(name, NonViralName.class);\r
+            if (! nvn.isProtectedNameCache()){\r
+                nvn.setNameCache(null, false);\r
+            }\r
+            if (! nvn.isProtectedAuthorshipCache()){\r
+                nvn.setAuthorshipCache(null, false);\r
+            }\r
+            if (! nvn.isProtectedFullTitleCache()){\r
+                nvn.setFullTitleCache(null, false);\r
+            }\r
+        }\r
+    }\r
+\r
+    /* (non-Javadoc)\r
+     * @see eu.etaxonomy.cdm.api.service.INameService#getTaggedName(eu.etaxonomy.cdm.model.name.TaxonNameBase)\r
+     */\r
+    @Override\r
+    public List<TaggedText> getTaggedName(UUID uuid) {\r
+        TaxonNameBase taxonNameBase = dao.load(uuid);\r
+        List taggedName = taxonNameBase.getTaggedName();\r
+        return taggedName;\r
+//             return TaggedTextGenerator.getTaggedName(taxonNameBase);\r
+    }\r
+\r
+\r
 }\r