@Service\r
@Transactional(propagation = Propagation.SUPPORTS, readOnly = true)\r
public class TaxonServiceImpl extends IdentifiableServiceBase<TaxonBase,ITaxonDao> implements ITaxonService{\r
- private static final Logger logger = Logger.getLogger(TaxonServiceImpl.class);\r
+ private static final Logger logger = Logger.getLogger(TaxonServiceImpl.class);\r
\r
- public static final String POTENTIAL_COMBINATION_NAMESPACE = "Potential combination";\r
+ public static final String POTENTIAL_COMBINATION_NAMESPACE = "Potential combination";\r
\r
- public static final String INFERRED_EPITHET_NAMESPACE = "Inferred epithet";\r
+ public static final String INFERRED_EPITHET_NAMESPACE = "Inferred epithet";\r
\r
- public static final String INFERRED_GENUS_NAMESPACE = "Inferred genus";\r
+ public static final String INFERRED_GENUS_NAMESPACE = "Inferred genus";\r
\r
\r
@Autowired\r
@Autowired\r
private ISearchResultBuilder searchResultBuilder;\r
\r
- @Autowired\r
- private INameService nameService;\r
+ @Autowired\r
+ private INameService nameService;\r
\r
- @Autowired\r
- private ICdmGenericDao genericDao;\r
+ @Autowired\r
+ private ICdmGenericDao genericDao;\r
\r
- @Autowired\r
- private IDescriptionService descriptionService;\r
+ @Autowired\r
+ private IDescriptionService descriptionService;\r
\r
@Autowired\r
private IOrderedTermVocabularyDao orderedVocabularyDao;\r
- \r
- /**\r
- * Constructor\r
- */\r
- public TaxonServiceImpl(){\r
- if (logger.isDebugEnabled()) { logger.debug("Load TaxonService Bean"); }\r
- }\r
+\r
+ /**\r
+ * Constructor\r
+ */\r
+ public TaxonServiceImpl(){\r
+ if (logger.isDebugEnabled()) { logger.debug("Load TaxonService Bean"); }\r
+ }\r
\r
/**\r
* FIXME Candidate for harmonization\r
public List<TaxonBase> findTaxaByID(Set<Integer> listOfIDs) {\r
return this.dao.findById(listOfIDs);\r
}\r
- \r
+\r
/* (non-Javadoc)\r
* @see eu.etaxonomy.cdm.api.service.ITaxonService#findTaxonByUuid(UUID uuid, List<String> propertyPaths)\r
*/\r
public TaxonBase findTaxonByUuid(UUID uuid, List<String> propertyPaths){\r
- return this.dao.findByUuid(uuid, null ,propertyPaths); \r
+ return this.dao.findByUuid(uuid, null ,propertyPaths);\r
}\r
\r
/* (non-Javadoc)\r
return this.dao.countAllRelationships();\r
}\r
\r
- \r
\r
- \r
+\r
+\r
/* (non-Javadoc)\r
* @see eu.etaxonomy.cdm.api.service.ITaxonService#findIdenticalTaxonNames(java.util.List)\r
*/\r
return this.dao.findIdenticalTaxonNames(propertyPath);\r
}\r
\r
- \r
- /* (non-Javadoc)\r
+\r
+ /* (non-Javadoc)\r
* @see eu.etaxonomy.cdm.api.service.ITaxonService#deleteTaxon(eu.etaxonomy.cdm.model.taxon.Taxon, eu.etaxonomy.cdm.api.service.config.TaxonDeletionConfigurator)\r
*/\r
@Override\r
public void deleteTaxon(Taxon taxon, TaxonDeletionConfigurator config) throws ReferencedObjectUndeletableException {\r
- if (config == null){\r
- config = new TaxonDeletionConfigurator();\r
- }\r
- \r
- // TaxonNode\r
- if (! config.isDeleteTaxonNodes()){\r
- if (taxon.getTaxonNodes().size() > 0){\r
- String message = "Taxon can't be deleted as it is used in a classification node. Remove taxon from all classifications prior to deletion.";\r
- throw new ReferencedObjectUndeletableException(message);\r
- }\r
- }\r
- \r
- \r
- // SynonymRelationShip\r
- if (config.isDeleteSynonymRelations()){\r
- boolean removeSynonymNameFromHomotypicalGroup = false;\r
- for (SynonymRelationship synRel : taxon.getSynonymRelations()){\r
- Synonym synonym = synRel.getSynonym();\r
- taxon.removeSynonymRelation(synRel, removeSynonymNameFromHomotypicalGroup);\r
- if (config.isDeleteSynonymsIfPossible()){\r
- //TODO which value\r
- boolean newHomotypicGroupIfNeeded = true;\r
- deleteSynonym(synonym, taxon, config.isDeleteNameIfPossible(), newHomotypicGroupIfNeeded);\r
- }else{\r
- deleteSynonymRelationships(synonym, taxon);\r
- }\r
- }\r
- }\r
- \r
- // TaxonRelationship \r
- if (! config.isDeleteTaxonRelationships()){\r
- if (taxon.getTaxonRelations().size() > 0){\r
- String message = "Taxon can't be deleted as it is related to another taxon. Remove taxon from all relations to other taxa prior to deletion.";\r
- throw new ReferencedObjectUndeletableException(message);\r
- }\r
- }\r
- \r
- \r
- // TaxonDescription\r
- Set<TaxonDescription> descriptions = taxon.getDescriptions();\r
- \r
- for (TaxonDescription desc: descriptions){\r
- if (config.isDeleteDescriptions()){\r
- //TODO use description delete configurator ?\r
- //FIXME check if description is ALWAYS deletable\r
- descriptionService.delete(desc); \r
- }else{\r
- if (desc.getDescribedSpecimenOrObservations().size()>0){\r
- String message = "Taxon can't be deleted as it is used in a TaxonDescription" +\r
- " which also describes specimens or abservations";\r
- throw new ReferencedObjectUndeletableException(message);\r
- }\r
- }\r
- }\r
- \r
- \r
- //check references with only reverse mapping\r
- Set<CdmBase> referencingObjects = genericDao.getReferencingObjects(taxon);\r
- for (CdmBase referencingObject : referencingObjects){\r
- //IIdentificationKeys (Media, Polytomous, MultiAccess)\r
- if (HibernateProxyHelper.isInstanceOf(referencingObject, IIdentificationKey.class)){\r
- String message = "Taxon can't be deleted as it is used in an identification key. Remove from identification key prior to deleting this name";\r
- message = String.format(message, CdmBase.deproxy(referencingObject, DerivedUnitBase.class).getTitleCache());\r
- throw new ReferencedObjectUndeletableException(message);\r
- }\r
- \r
- \r
- //PolytomousKeyNode\r
- if (referencingObject.isInstanceOf(PolytomousKeyNode.class)){\r
- String message = "Taxon can't be deleted as it is used in polytomous key node";\r
- throw new ReferencedObjectUndeletableException(message);\r
- }\r
- \r
- //TaxonInteraction\r
- if (referencingObject.isInstanceOf(TaxonInteraction.class)){\r
- String message = "Taxon can't be deleted as it is used in taxonInteraction#taxon2";\r
- throw new ReferencedObjectUndeletableException(message);\r
- }\r
- }\r
- \r
- \r
- //TaxonNameBase\r
- if (config.isDeleteNameIfPossible()){\r
- try {\r
- nameService.delete(taxon.getName(), config.getNameDeletionConfig());\r
- } catch (ReferencedObjectUndeletableException e) {\r
- //do nothing\r
- if (logger.isDebugEnabled()){logger.debug("Name could not be deleted");}\r
- }\r
- }\r
+ if (config == null){\r
+ config = new TaxonDeletionConfigurator();\r
+ }\r
+\r
+ // TaxonNode\r
+ if (! config.isDeleteTaxonNodes()){\r
+ if (taxon.getTaxonNodes().size() > 0){\r
+ String message = "Taxon can't be deleted as it is used in a classification node. Remove taxon from all classifications prior to deletion.";\r
+ throw new ReferencedObjectUndeletableException(message);\r
+ }\r
+ }\r
+\r
+\r
+ // SynonymRelationShip\r
+ if (config.isDeleteSynonymRelations()){\r
+ boolean removeSynonymNameFromHomotypicalGroup = false;\r
+ for (SynonymRelationship synRel : taxon.getSynonymRelations()){\r
+ Synonym synonym = synRel.getSynonym();\r
+ taxon.removeSynonymRelation(synRel, removeSynonymNameFromHomotypicalGroup);\r
+ if (config.isDeleteSynonymsIfPossible()){\r
+ //TODO which value\r
+ boolean newHomotypicGroupIfNeeded = true;\r
+ deleteSynonym(synonym, taxon, config.isDeleteNameIfPossible(), newHomotypicGroupIfNeeded);\r
+ }else{\r
+ deleteSynonymRelationships(synonym, taxon);\r
+ }\r
+ }\r
+ }\r
+\r
+ // TaxonRelationship\r
+ if (! config.isDeleteTaxonRelationships()){\r
+ if (taxon.getTaxonRelations().size() > 0){\r
+ String message = "Taxon can't be deleted as it is related to another taxon. Remove taxon from all relations to other taxa prior to deletion.";\r
+ throw new ReferencedObjectUndeletableException(message);\r
+ }\r
+ }\r
+\r
+\r
+ // TaxonDescription\r
+ Set<TaxonDescription> descriptions = taxon.getDescriptions();\r
+\r
+ for (TaxonDescription desc: descriptions){\r
+ if (config.isDeleteDescriptions()){\r
+ //TODO use description delete configurator ?\r
+ //FIXME check if description is ALWAYS deletable\r
+ descriptionService.delete(desc);\r
+ }else{\r
+ if (desc.getDescribedSpecimenOrObservations().size()>0){\r
+ String message = "Taxon can't be deleted as it is used in a TaxonDescription" +\r
+ " which also describes specimens or abservations";\r
+ throw new ReferencedObjectUndeletableException(message);\r
+ }\r
+ }\r
+ }\r
+\r
+\r
+ //check references with only reverse mapping\r
+ Set<CdmBase> referencingObjects = genericDao.getReferencingObjects(taxon);\r
+ for (CdmBase referencingObject : referencingObjects){\r
+ //IIdentificationKeys (Media, Polytomous, MultiAccess)\r
+ if (HibernateProxyHelper.isInstanceOf(referencingObject, IIdentificationKey.class)){\r
+ String message = "Taxon can't be deleted as it is used in an identification key. Remove from identification key prior to deleting this name";\r
+ message = String.format(message, CdmBase.deproxy(referencingObject, DerivedUnitBase.class).getTitleCache());\r
+ throw new ReferencedObjectUndeletableException(message);\r
+ }\r
+\r
+\r
+ //PolytomousKeyNode\r
+ if (referencingObject.isInstanceOf(PolytomousKeyNode.class)){\r
+ String message = "Taxon can't be deleted as it is used in polytomous key node";\r
+ throw new ReferencedObjectUndeletableException(message);\r
+ }\r
+\r
+ //TaxonInteraction\r
+ if (referencingObject.isInstanceOf(TaxonInteraction.class)){\r
+ String message = "Taxon can't be deleted as it is used in taxonInteraction#taxon2";\r
+ throw new ReferencedObjectUndeletableException(message);\r
+ }\r
+ }\r
+\r
+\r
+ //TaxonNameBase\r
+ if (config.isDeleteNameIfPossible()){\r
+ try {\r
+ nameService.delete(taxon.getName(), config.getNameDeletionConfig());\r
+ } catch (ReferencedObjectUndeletableException e) {\r
+ //do nothing\r
+ if (logger.isDebugEnabled()){logger.debug("Name could not be deleted");}\r
+ }\r
+ }\r
\r
}\r
\r
return this.dao.getPhylumName(name);\r
}\r
\r
- /* (non-Javadoc)\r
- * @see eu.etaxonomy.cdm.api.service.ITaxonService#deleteSynonymRelationships(eu.etaxonomy.cdm.model.taxon.Synonym, eu.etaxonomy.cdm.model.taxon.Taxon)\r
- */\r
- public long deleteSynonymRelationships(Synonym syn, Taxon taxon) {\r
- return dao.deleteSynonymRelationships(syn, taxon);\r
- }\r
+ /* (non-Javadoc)\r
+ * @see eu.etaxonomy.cdm.api.service.ITaxonService#deleteSynonymRelationships(eu.etaxonomy.cdm.model.taxon.Synonym, eu.etaxonomy.cdm.model.taxon.Taxon)\r
+ */\r
+ public long deleteSynonymRelationships(Synonym syn, Taxon taxon) {\r
+ return dao.deleteSynonymRelationships(syn, taxon);\r
+ }\r
\r
/* (non-Javadoc)\r
* @see eu.etaxonomy.cdm.api.service.ITaxonService#deleteSynonymRelationships(eu.etaxonomy.cdm.model.taxon.Synonym)\r
\r
return bestCandidate;\r
}\r
- \r
+\r
private boolean isInClassification(Taxon taxon, MatchingTaxonConfigurator config) {\r
UUID configClassificationUuid = config.getClassificationUuid();\r
if (configClassificationUuid == null){\r
public Pager<SearchResult<TaxonBase>> findByDescriptionElementFullText(Class<? extends DescriptionElementBase> clazz, String queryString, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints,\r
List<String> propertyPaths) throws CorruptIndexException, IOException, ParseException {\r
\r
- String luceneQueryTemplate = "titleCache:%1$s OR multilanguageText.text:%1$s OR name:%1$s";\r
+ String luceneQueryTemplate = "titleCache:%1$s OR text.ALL:%1$s OR name:%1$s";\r
String luceneQuery = String.format(luceneQueryTemplate, queryString);\r
\r
LuceneSearch luceneSearch = new LuceneSearch(getSession(), clazz);\r
return new DefaultPagerImpl<SearchResult<TaxonBase>>(pageNumber, searchResults.size(), pageSize, searchResults);\r
\r
}\r
- \r
+\r
public List<Synonym> createInferredSynonyms(Taxon taxon, Classification classification, SynonymRelationshipType type, boolean doWithMisappliedNames){\r
List <Synonym> inferredSynonyms = new ArrayList<Synonym>();\r
List<Synonym> inferredSynonymsToBeRemoved = new ArrayList<Synonym>();\r
\r
HashMap <UUID, ZoologicalName> zooHashMap = new HashMap<UUID, ZoologicalName>();\r
- \r
- \r
+\r
+\r
UUID uuid= taxon.getName().getUuid();\r
ZoologicalName taxonName = getZoologicalName(uuid, zooHashMap);\r
String epithetOfTaxon = null;\r
String infragenericEpithetOfTaxon = null;\r
String infraspecificEpithetOfTaxon = null;\r
if (taxonName.isSpecies()){\r
- epithetOfTaxon= taxonName.getSpecificEpithet();\r
+ epithetOfTaxon= taxonName.getSpecificEpithet();\r
} else if (taxonName.isInfraGeneric()){\r
- infragenericEpithetOfTaxon = taxonName.getInfraGenericEpithet();\r
+ infragenericEpithetOfTaxon = taxonName.getInfraGenericEpithet();\r
} else if (taxonName.isInfraSpecific()){\r
- infraspecificEpithetOfTaxon = taxonName.getInfraSpecificEpithet();\r
+ infraspecificEpithetOfTaxon = taxonName.getInfraSpecificEpithet();\r
}\r
String genusOfTaxon = taxonName.getGenusOrUninomial();\r
Set<TaxonNode> nodes = taxon.getTaxonNodes();\r
\r
if (node.getClassification().equals(classification)){\r
if (!node.isTopmostNode()){\r
- TaxonNode parent = (TaxonNode)node.getParent();\r
- parent = (TaxonNode)HibernateProxyHelper.deproxy(parent);\r
- TaxonNameBase parentName = parent.getTaxon().getName();\r
- ZoologicalName zooParentName = HibernateProxyHelper.deproxy(parentName, ZoologicalName.class);\r
- Taxon parentTaxon = (Taxon)HibernateProxyHelper.deproxy(parent.getTaxon());\r
- Rank rankOfTaxon = taxonName.getRank();\r
- \r
- \r
- //create inferred synonyms for species, subspecies\r
- if ((parentName.isGenus() || parentName.isSpecies() || parentName.getRank().equals(Rank.SUBGENUS())) ){\r
- \r
- Synonym inferredEpithet = null;\r
- Synonym inferredGenus = null;\r
- Synonym potentialCombination = null;\r
- \r
- List<String> propertyPaths = new ArrayList<String>();\r
- propertyPaths.add("synonym");\r
- propertyPaths.add("synonym.name");\r
- List<OrderHint> orderHints = new ArrayList<OrderHint>();\r
- orderHints.add(new OrderHint("relatedFrom.titleCache", SortOrder.ASCENDING));\r
- \r
- List<SynonymRelationship> synonymRelationshipsOfParent = dao.getSynonyms(parentTaxon, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF(), null, null,orderHints,propertyPaths);\r
- List<SynonymRelationship> synonymRelationshipsOfTaxon= dao.getSynonyms(taxon, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF(), null, null,orderHints,propertyPaths);\r
- \r
- List<TaxonRelationship> taxonRelListParent = null;\r
- List<TaxonRelationship> taxonRelListTaxon = null;\r
- if (doWithMisappliedNames){\r
- taxonRelListParent = dao.getTaxonRelationships(parentTaxon, TaxonRelationshipType.MISAPPLIED_NAME_FOR(), null, null, orderHints, propertyPaths, Direction.relatedTo);\r
- taxonRelListTaxon = dao.getTaxonRelationships(taxon, TaxonRelationshipType.MISAPPLIED_NAME_FOR(), null, null, orderHints, propertyPaths, Direction.relatedTo);\r
- }\r
- \r
- \r
- if (type.equals(SynonymRelationshipType.INFERRED_EPITHET_OF())){\r
- Set<String> genusNames = new HashSet<String>();\r
- \r
- for (SynonymRelationship synonymRelationOfParent:synonymRelationshipsOfParent){\r
- Synonym syn = synonymRelationOfParent.getSynonym();\r
- \r
- inferredEpithet = createInferredEpithets(taxon, \r
- zooHashMap, taxonName, epithetOfTaxon,\r
- infragenericEpithetOfTaxon,\r
- infraspecificEpithetOfTaxon,\r
- taxonNames, parentName, \r
- syn);\r
- \r
- \r
- inferredSynonyms.add(inferredEpithet);\r
- zooHashMap.put(inferredEpithet.getName().getUuid(), (ZoologicalName)inferredEpithet.getName());\r
- taxonNames.add(((ZoologicalName)inferredEpithet.getName()).getNameCache());\r
- }\r
- \r
- if (doWithMisappliedNames){\r
- \r
- for (TaxonRelationship taxonRelationship: taxonRelListParent){\r
- Taxon misappliedName = taxonRelationship.getFromTaxon();\r
- \r
- inferredEpithet = createInferredEpithets(taxon,\r
- zooHashMap, taxonName, epithetOfTaxon,\r
- infragenericEpithetOfTaxon,\r
- infraspecificEpithetOfTaxon,\r
- taxonNames, parentName, \r
- misappliedName);\r
- \r
- inferredSynonyms.add(inferredEpithet);\r
- zooHashMap.put(inferredEpithet.getName().getUuid(), (ZoologicalName)inferredEpithet.getName());\r
- taxonNames.add(((ZoologicalName)inferredEpithet.getName()).getNameCache());\r
- }\r
- }\r
- \r
- if (!taxonNames.isEmpty()){\r
- List<String> synNotInCDM = dao.taxaByNameNotInDB(taxonNames);\r
- ZoologicalName name;\r
- if (!synNotInCDM.isEmpty()){\r
- inferredSynonymsToBeRemoved.clear();\r
- \r
- for (Synonym syn :inferredSynonyms){\r
- name = getZoologicalName(syn.getName().getUuid(), zooHashMap);\r
- if (!synNotInCDM.contains(name.getNameCache())){\r
- inferredSynonymsToBeRemoved.add(syn);\r
- }\r
- }\r
- \r
- // Remove identified Synonyms from inferredSynonyms\r
- for (Synonym synonym : inferredSynonymsToBeRemoved) {\r
- inferredSynonyms.remove(synonym);\r
- }\r
- }\r
+ TaxonNode parent = (TaxonNode)node.getParent();\r
+ parent = (TaxonNode)HibernateProxyHelper.deproxy(parent);\r
+ TaxonNameBase parentName = parent.getTaxon().getName();\r
+ ZoologicalName zooParentName = HibernateProxyHelper.deproxy(parentName, ZoologicalName.class);\r
+ Taxon parentTaxon = (Taxon)HibernateProxyHelper.deproxy(parent.getTaxon());\r
+ Rank rankOfTaxon = taxonName.getRank();\r
+\r
+\r
+ //create inferred synonyms for species, subspecies\r
+ if ((parentName.isGenus() || parentName.isSpecies() || parentName.getRank().equals(Rank.SUBGENUS())) ){\r
+\r
+ Synonym inferredEpithet = null;\r
+ Synonym inferredGenus = null;\r
+ Synonym potentialCombination = null;\r
+\r
+ List<String> propertyPaths = new ArrayList<String>();\r
+ propertyPaths.add("synonym");\r
+ propertyPaths.add("synonym.name");\r
+ List<OrderHint> orderHints = new ArrayList<OrderHint>();\r
+ orderHints.add(new OrderHint("relatedFrom.titleCache", SortOrder.ASCENDING));\r
+\r
+ List<SynonymRelationship> synonymRelationshipsOfParent = dao.getSynonyms(parentTaxon, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF(), null, null,orderHints,propertyPaths);\r
+ List<SynonymRelationship> synonymRelationshipsOfTaxon= dao.getSynonyms(taxon, SynonymRelationshipType.HETEROTYPIC_SYNONYM_OF(), null, null,orderHints,propertyPaths);\r
+\r
+ List<TaxonRelationship> taxonRelListParent = null;\r
+ List<TaxonRelationship> taxonRelListTaxon = null;\r
+ if (doWithMisappliedNames){\r
+ taxonRelListParent = dao.getTaxonRelationships(parentTaxon, TaxonRelationshipType.MISAPPLIED_NAME_FOR(), null, null, orderHints, propertyPaths, Direction.relatedTo);\r
+ taxonRelListTaxon = dao.getTaxonRelationships(taxon, TaxonRelationshipType.MISAPPLIED_NAME_FOR(), null, null, orderHints, propertyPaths, Direction.relatedTo);\r
+ }\r
+\r
+\r
+ if (type.equals(SynonymRelationshipType.INFERRED_EPITHET_OF())){\r
+ Set<String> genusNames = new HashSet<String>();\r
+\r
+ for (SynonymRelationship synonymRelationOfParent:synonymRelationshipsOfParent){\r
+ Synonym syn = synonymRelationOfParent.getSynonym();\r
+\r
+ inferredEpithet = createInferredEpithets(taxon,\r
+ zooHashMap, taxonName, epithetOfTaxon,\r
+ infragenericEpithetOfTaxon,\r
+ infraspecificEpithetOfTaxon,\r
+ taxonNames, parentName,\r
+ syn);\r
+\r
+\r
+ inferredSynonyms.add(inferredEpithet);\r
+ zooHashMap.put(inferredEpithet.getName().getUuid(), (ZoologicalName)inferredEpithet.getName());\r
+ taxonNames.add(((ZoologicalName)inferredEpithet.getName()).getNameCache());\r
+ }\r
+\r
+ if (doWithMisappliedNames){\r
+\r
+ for (TaxonRelationship taxonRelationship: taxonRelListParent){\r
+ Taxon misappliedName = taxonRelationship.getFromTaxon();\r
+\r
+ inferredEpithet = createInferredEpithets(taxon,\r
+ zooHashMap, taxonName, epithetOfTaxon,\r
+ infragenericEpithetOfTaxon,\r
+ infraspecificEpithetOfTaxon,\r
+ taxonNames, parentName,\r
+ misappliedName);\r
+\r
+ inferredSynonyms.add(inferredEpithet);\r
+ zooHashMap.put(inferredEpithet.getName().getUuid(), (ZoologicalName)inferredEpithet.getName());\r
+ taxonNames.add(((ZoologicalName)inferredEpithet.getName()).getNameCache());\r
+ }\r
+ }\r
+\r
+ if (!taxonNames.isEmpty()){\r
+ List<String> synNotInCDM = dao.taxaByNameNotInDB(taxonNames);\r
+ ZoologicalName name;\r
+ if (!synNotInCDM.isEmpty()){\r
+ inferredSynonymsToBeRemoved.clear();\r
+\r
+ for (Synonym syn :inferredSynonyms){\r
+ name = getZoologicalName(syn.getName().getUuid(), zooHashMap);\r
+ if (!synNotInCDM.contains(name.getNameCache())){\r
+ inferredSynonymsToBeRemoved.add(syn);\r
+ }\r
+ }\r
+\r
+ // Remove identified Synonyms from inferredSynonyms\r
+ for (Synonym synonym : inferredSynonymsToBeRemoved) {\r
+ inferredSynonyms.remove(synonym);\r
+ }\r
+ }\r
}\r
\r
}else if (type.equals(SynonymRelationshipType.INFERRED_GENUS_OF())){\r
\r
Synonym syn = synonymRelationOfTaxon.getSynonym();\r
inferredGenus = createInferredGenus(taxon,\r
- zooHashMap, taxonName, epithetOfTaxon,\r
- genusOfTaxon, taxonNames, zooParentName, syn);\r
- \r
+ zooHashMap, taxonName, epithetOfTaxon,\r
+ genusOfTaxon, taxonNames, zooParentName, syn);\r
+\r
inferredSynonyms.add(inferredGenus);\r
zooHashMap.put(inferredGenus.getName().getUuid(), (ZoologicalName)inferredGenus.getName());\r
- taxonNames.add(( (ZoologicalName)inferredGenus.getName()).getNameCache());\r
- \r
- \r
+ taxonNames.add(( (ZoologicalName)inferredGenus.getName()).getNameCache());\r
+\r
+\r
}\r
- \r
+\r
if (doWithMisappliedNames){\r
- \r
- for (TaxonRelationship taxonRelationship: taxonRelListTaxon){\r
- Taxon misappliedName = taxonRelationship.getFromTaxon();\r
- inferredGenus = createInferredGenus(taxon, zooHashMap, taxonName, infraspecificEpithetOfTaxon, genusOfTaxon, taxonNames, zooParentName, misappliedName);\r
- \r
- inferredSynonyms.add(inferredGenus);\r
- zooHashMap.put(inferredGenus.getName().getUuid(), (ZoologicalName)inferredGenus.getName());\r
- taxonNames.add(( (ZoologicalName)inferredGenus.getName()).getNameCache());\r
- }\r
+\r
+ for (TaxonRelationship taxonRelationship: taxonRelListTaxon){\r
+ Taxon misappliedName = taxonRelationship.getFromTaxon();\r
+ inferredGenus = createInferredGenus(taxon, zooHashMap, taxonName, infraspecificEpithetOfTaxon, genusOfTaxon, taxonNames, zooParentName, misappliedName);\r
+\r
+ inferredSynonyms.add(inferredGenus);\r
+ zooHashMap.put(inferredGenus.getName().getUuid(), (ZoologicalName)inferredGenus.getName());\r
+ taxonNames.add(( (ZoologicalName)inferredGenus.getName()).getNameCache());\r
+ }\r
}\r
- \r
+\r
\r
if (!taxonNames.isEmpty()){\r
List<String> synNotInCDM = dao.taxaByNameNotInDB(taxonNames);\r
String synParentGenus = parentSynZooName.getGenusOrUninomial();\r
String synParentInfragenericName = null;\r
String synParentSpecificEpithet = null;\r
- \r
+\r
if (parentSynZooName.isInfraGeneric()){\r
- synParentInfragenericName = parentSynZooName.getInfraGenericEpithet();\r
+ synParentInfragenericName = parentSynZooName.getInfraGenericEpithet();\r
}\r
if (parentSynZooName.isSpecies()){\r
- synParentSpecificEpithet = parentSynZooName.getSpecificEpithet();\r
+ synParentSpecificEpithet = parentSynZooName.getSpecificEpithet();\r
}\r
- \r
+\r
/* if (synGenusName != null && !synonymsGenus.containsKey(synGenusName)){\r
synonymsGenus.put(synGenusName, idInSource);\r
}*/\r
- \r
+\r
//for all synonyms of the taxon\r
- \r
+\r
for (SynonymRelationship synonymRelationOfTaxon:synonymRelationshipsOfTaxon){\r
- \r
+\r
Synonym syn = synonymRelationOfTaxon.getSynonym();\r
ZoologicalName zooSynName = getZoologicalName(syn.getName().getUuid(), zooHashMap);\r
potentialCombination = createPotentialCombination(idInSourceParent, parentSynZooName, zooSynName,\r
- synParentGenus,\r
- synParentInfragenericName,\r
- synParentSpecificEpithet, syn, zooHashMap);\r
- \r
+ synParentGenus,\r
+ synParentInfragenericName,\r
+ synParentSpecificEpithet, syn, zooHashMap);\r
+\r
taxon.addSynonym(potentialCombination, SynonymRelationshipType.POTENTIAL_COMBINATION_OF());\r
inferredSynonyms.add(potentialCombination);\r
zooHashMap.put(potentialCombination.getName().getUuid(), (ZoologicalName)potentialCombination.getName());\r
- taxonNames.add(( (ZoologicalName)potentialCombination.getName()).getNameCache());\r
- \r
+ taxonNames.add(( (ZoologicalName)potentialCombination.getName()).getNameCache());\r
+\r
}\r
- \r
- \r
+\r
+\r
}\r
- \r
+\r
if (doWithMisappliedNames){\r
- \r
- for (TaxonRelationship parentRelationship: taxonRelListParent){\r
- \r
- TaxonNameBase misappliedParentName;\r
- \r
+\r
+ for (TaxonRelationship parentRelationship: taxonRelListParent){\r
+\r
+ TaxonNameBase misappliedParentName;\r
+\r
Taxon misappliedParent = parentRelationship.getFromTaxon();\r
misappliedParentName = misappliedParent.getName();\r
\r
String synParentGenus = parentSynZooName.getGenusOrUninomial();\r
String synParentInfragenericName = null;\r
String synParentSpecificEpithet = null;\r
- \r
+\r
if (parentSynZooName.isInfraGeneric()){\r
- synParentInfragenericName = parentSynZooName.getInfraGenericEpithet();\r
+ synParentInfragenericName = parentSynZooName.getInfraGenericEpithet();\r
}\r
if (parentSynZooName.isSpecies()){\r
- synParentSpecificEpithet = parentSynZooName.getSpecificEpithet();\r
+ synParentSpecificEpithet = parentSynZooName.getSpecificEpithet();\r
}\r
- \r
- \r
- for (TaxonRelationship taxonRelationship: taxonRelListTaxon){\r
- Taxon misappliedName = taxonRelationship.getFromTaxon();\r
- ZoologicalName zooMisappliedName = getZoologicalName(misappliedName.getName().getUuid(), zooHashMap);\r
- potentialCombination = createPotentialCombination(\r
- idInSourceParent, parentSynZooName, zooMisappliedName,\r
- synParentGenus,\r
- synParentInfragenericName,\r
- synParentSpecificEpithet, misappliedName, zooHashMap);\r
- \r
- \r
- taxon.addSynonym(potentialCombination, SynonymRelationshipType.POTENTIAL_COMBINATION_OF());\r
- inferredSynonyms.add(potentialCombination);\r
- zooHashMap.put(potentialCombination.getName().getUuid(), (ZoologicalName)potentialCombination.getName());\r
- taxonNames.add(( (ZoologicalName)potentialCombination.getName()).getNameCache());\r
- }\r
- }\r
+\r
+\r
+ for (TaxonRelationship taxonRelationship: taxonRelListTaxon){\r
+ Taxon misappliedName = taxonRelationship.getFromTaxon();\r
+ ZoologicalName zooMisappliedName = getZoologicalName(misappliedName.getName().getUuid(), zooHashMap);\r
+ potentialCombination = createPotentialCombination(\r
+ idInSourceParent, parentSynZooName, zooMisappliedName,\r
+ synParentGenus,\r
+ synParentInfragenericName,\r
+ synParentSpecificEpithet, misappliedName, zooHashMap);\r
+\r
+\r
+ taxon.addSynonym(potentialCombination, SynonymRelationshipType.POTENTIAL_COMBINATION_OF());\r
+ inferredSynonyms.add(potentialCombination);\r
+ zooHashMap.put(potentialCombination.getName().getUuid(), (ZoologicalName)potentialCombination.getName());\r
+ taxonNames.add(( (ZoologicalName)potentialCombination.getName()).getNameCache());\r
+ }\r
+ }\r
}\r
- \r
+\r
if (!taxonNames.isEmpty()){\r
- List<String> synNotInCDM = dao.taxaByNameNotInDB(taxonNames);\r
+ List<String> synNotInCDM = dao.taxaByNameNotInDB(taxonNames);\r
ZoologicalName name;\r
if (!synNotInCDM.isEmpty()){\r
- inferredSynonymsToBeRemoved.clear();\r
- for (Synonym syn :inferredSynonyms){\r
- try{\r
- name = (ZoologicalName) syn.getName();\r
+ inferredSynonymsToBeRemoved.clear();\r
+ for (Synonym syn :inferredSynonyms){\r
+ try{\r
+ name = (ZoologicalName) syn.getName();\r
}catch (ClassCastException e){\r
- name = getZoologicalName(syn.getName().getUuid(), zooHashMap);\r
+ name = getZoologicalName(syn.getName().getUuid(), zooHashMap);\r
}\r
if (!synNotInCDM.contains(name.getNameCache())){\r
- inferredSynonymsToBeRemoved.add(syn);\r
+ inferredSynonymsToBeRemoved.add(syn);\r
}\r
}\r
- // Remove identified Synonyms from inferredSynonyms\r
+ // Remove identified Synonyms from inferredSynonyms\r
for (Synonym synonym : inferredSynonymsToBeRemoved) {\r
- inferredSynonyms.remove(synonym);\r
+ inferredSynonyms.remove(synonym);\r
}\r
}\r
}\r
}\r
}\r
}\r
- \r
+\r
}\r
\r
return inferredSynonyms;\r
}\r
\r
- private Synonym createPotentialCombination(String idInSourceParent,\r
- ZoologicalName parentSynZooName, ZoologicalName zooSynName, String synParentGenus,\r
- String synParentInfragenericName, String synParentSpecificEpithet,\r
- TaxonBase syn, HashMap<UUID, ZoologicalName> zooHashMap) {\r
- Synonym potentialCombination;\r
- Reference sourceReference;\r
- ZoologicalName inferredSynName;\r
- HibernateProxyHelper.deproxy(syn);\r
-\r
- // Set sourceReference\r
- sourceReference = syn.getSec();\r
-\r
- \r
- String synTaxonSpecificEpithet = zooSynName.getSpecificEpithet();\r
- \r
- String synTaxonInfraSpecificName= null;\r
- \r
- if (parentSynZooName.isSpecies()){\r
- synTaxonInfraSpecificName = zooSynName.getInfraSpecificEpithet();\r
- }\r
- \r
- /*if (epithetName != null && !synonymsEpithet.contains(epithetName)){\r
- synonymsEpithet.add(epithetName);\r
- }*/\r
- \r
- //create potential combinations...\r
- inferredSynName = ZoologicalName.NewInstance(syn.getName().getRank());\r
- \r
- inferredSynName.setGenusOrUninomial(synParentGenus);\r
- if (zooSynName.isSpecies()){\r
- inferredSynName.setSpecificEpithet(synTaxonSpecificEpithet);\r
- if (parentSynZooName.isInfraGeneric()){\r
- inferredSynName.setInfraGenericEpithet(synParentInfragenericName);\r
- }\r
- }\r
- if (zooSynName.isInfraSpecific()){\r
- inferredSynName.setSpecificEpithet(synParentSpecificEpithet);\r
- inferredSynName.setInfraSpecificEpithet(synTaxonInfraSpecificName);\r
- }\r
- if (parentSynZooName.isInfraGeneric()){\r
- inferredSynName.setInfraGenericEpithet(synParentInfragenericName);\r
- }\r
- \r
- \r
- potentialCombination = Synonym.NewInstance(inferredSynName, null);\r
-\r
- // Set the sourceReference\r
- potentialCombination.setSec(sourceReference);\r
-\r
- \r
- // Determine the idInSource\r
- String idInSourceSyn= getIdInSource(syn);\r
- \r
- if (idInSourceParent != null && idInSourceSyn != null) {\r
- IdentifiableSource originalSource = IdentifiableSource.NewInstance(idInSourceSyn + "; " + idInSourceParent, POTENTIAL_COMBINATION_NAMESPACE, sourceReference, null);\r
- inferredSynName.addSource(originalSource);\r
- originalSource = IdentifiableSource.NewInstance(idInSourceSyn + "; " + idInSourceParent, POTENTIAL_COMBINATION_NAMESPACE, sourceReference, null);\r
- potentialCombination.addSource(originalSource);\r
- }\r
- \r
- inferredSynName.generateTitle();\r
- \r
- return potentialCombination;\r
- }\r
-\r
- private Synonym createInferredGenus(Taxon taxon,\r
- HashMap<UUID, ZoologicalName> zooHashMap, ZoologicalName taxonName,\r
- String epithetOfTaxon, String genusOfTaxon,\r
- List<String> taxonNames, ZoologicalName zooParentName,\r
- TaxonBase syn) {\r
- \r
- Synonym inferredGenus;\r
- TaxonNameBase synName;\r
- ZoologicalName inferredSynName;\r
- synName =syn.getName();\r
- HibernateProxyHelper.deproxy(syn);\r
-\r
- // Determine the idInSource\r
- String idInSourceSyn = getIdInSource(syn);\r
- String idInSourceTaxon = getIdInSource(taxon);\r
- // Determine the sourceReference\r
- Reference sourceReference = syn.getSec();\r
-\r
- synName = syn.getName();\r
- ZoologicalName synZooName = getZoologicalName(synName.getUuid(), zooHashMap);\r
- String synSpeciesEpithetName = synZooName.getSpecificEpithet();\r
+ private Synonym createPotentialCombination(String idInSourceParent,\r
+ ZoologicalName parentSynZooName, ZoologicalName zooSynName, String synParentGenus,\r
+ String synParentInfragenericName, String synParentSpecificEpithet,\r
+ TaxonBase syn, HashMap<UUID, ZoologicalName> zooHashMap) {\r
+ Synonym potentialCombination;\r
+ Reference sourceReference;\r
+ ZoologicalName inferredSynName;\r
+ HibernateProxyHelper.deproxy(syn);\r
+\r
+ // Set sourceReference\r
+ sourceReference = syn.getSec();\r
+\r
+\r
+ String synTaxonSpecificEpithet = zooSynName.getSpecificEpithet();\r
+\r
+ String synTaxonInfraSpecificName= null;\r
+\r
+ if (parentSynZooName.isSpecies()){\r
+ synTaxonInfraSpecificName = zooSynName.getInfraSpecificEpithet();\r
+ }\r
+\r
+ /*if (epithetName != null && !synonymsEpithet.contains(epithetName)){\r
+ synonymsEpithet.add(epithetName);\r
+ }*/\r
+\r
+ //create potential combinations...\r
+ inferredSynName = ZoologicalName.NewInstance(syn.getName().getRank());\r
+\r
+ inferredSynName.setGenusOrUninomial(synParentGenus);\r
+ if (zooSynName.isSpecies()){\r
+ inferredSynName.setSpecificEpithet(synTaxonSpecificEpithet);\r
+ if (parentSynZooName.isInfraGeneric()){\r
+ inferredSynName.setInfraGenericEpithet(synParentInfragenericName);\r
+ }\r
+ }\r
+ if (zooSynName.isInfraSpecific()){\r
+ inferredSynName.setSpecificEpithet(synParentSpecificEpithet);\r
+ inferredSynName.setInfraSpecificEpithet(synTaxonInfraSpecificName);\r
+ }\r
+ if (parentSynZooName.isInfraGeneric()){\r
+ inferredSynName.setInfraGenericEpithet(synParentInfragenericName);\r
+ }\r
+\r
+\r
+ potentialCombination = Synonym.NewInstance(inferredSynName, null);\r
+\r
+ // Set the sourceReference\r
+ potentialCombination.setSec(sourceReference);\r
+\r
+\r
+ // Determine the idInSource\r
+ String idInSourceSyn= getIdInSource(syn);\r
+\r
+ if (idInSourceParent != null && idInSourceSyn != null) {\r
+ IdentifiableSource originalSource = IdentifiableSource.NewInstance(idInSourceSyn + "; " + idInSourceParent, POTENTIAL_COMBINATION_NAMESPACE, sourceReference, null);\r
+ inferredSynName.addSource(originalSource);\r
+ originalSource = IdentifiableSource.NewInstance(idInSourceSyn + "; " + idInSourceParent, POTENTIAL_COMBINATION_NAMESPACE, sourceReference, null);\r
+ potentialCombination.addSource(originalSource);\r
+ }\r
+\r
+ inferredSynName.generateTitle();\r
+\r
+ return potentialCombination;\r
+ }\r
+\r
+ private Synonym createInferredGenus(Taxon taxon,\r
+ HashMap<UUID, ZoologicalName> zooHashMap, ZoologicalName taxonName,\r
+ String epithetOfTaxon, String genusOfTaxon,\r
+ List<String> taxonNames, ZoologicalName zooParentName,\r
+ TaxonBase syn) {\r
+\r
+ Synonym inferredGenus;\r
+ TaxonNameBase synName;\r
+ ZoologicalName inferredSynName;\r
+ synName =syn.getName();\r
+ HibernateProxyHelper.deproxy(syn);\r
+\r
+ // Determine the idInSource\r
+ String idInSourceSyn = getIdInSource(syn);\r
+ String idInSourceTaxon = getIdInSource(taxon);\r
+ // Determine the sourceReference\r
+ Reference sourceReference = syn.getSec();\r
+\r
+ synName = syn.getName();\r
+ ZoologicalName synZooName = getZoologicalName(synName.getUuid(), zooHashMap);\r
+ String synSpeciesEpithetName = synZooName.getSpecificEpithet();\r
/* if (synonymsEpithet != null && !synonymsEpithet.contains(synSpeciesEpithetName)){\r
- synonymsEpithet.add(synSpeciesEpithetName);\r
- }*/\r
- \r
- inferredSynName = ZoologicalName.NewInstance(taxon.getName().getRank());\r
- //TODO:differ between parent is genus and taxon is species, parent is subgenus and taxon is species, parent is species and taxon is subspecies and parent is genus and taxon is subgenus...\r
-\r
-\r
- inferredSynName.setGenusOrUninomial(genusOfTaxon);\r
- if (zooParentName.isInfraGeneric()){\r
- inferredSynName.setInfraGenericEpithet(zooParentName.getInfraGenericEpithet());\r
- }\r
- \r
- if (taxonName.isSpecies()){\r
- inferredSynName.setSpecificEpithet(synSpeciesEpithetName);\r
- }\r
- if (taxonName.isInfraSpecific()){\r
- inferredSynName.setSpecificEpithet(epithetOfTaxon);\r
- inferredSynName.setInfraSpecificEpithet(synZooName.getInfraGenericEpithet());\r
- }\r
- \r
- \r
- inferredGenus = Synonym.NewInstance(inferredSynName, null);\r
-\r
- // Set the sourceReference\r
- inferredGenus.setSec(sourceReference);\r
-\r
- // Add the original source\r
- if (idInSourceSyn != null && idInSourceTaxon != null) {\r
- IdentifiableSource originalSource = IdentifiableSource.NewInstance(idInSourceSyn + "; " + idInSourceTaxon, INFERRED_GENUS_NAMESPACE, sourceReference, null);\r
- inferredGenus.addSource(originalSource);\r
- \r
- originalSource = IdentifiableSource.NewInstance(idInSourceSyn + "; " + idInSourceTaxon, INFERRED_GENUS_NAMESPACE, sourceReference, null);\r
- inferredSynName.addSource(originalSource);\r
- \r
- }\r
-\r
- taxon.addSynonym(inferredGenus, SynonymRelationshipType.INFERRED_GENUS_OF());\r
- \r
- inferredSynName.generateTitle();\r
- \r
- \r
- return inferredGenus;\r
- }\r
-\r
- private Synonym createInferredEpithets(Taxon taxon,\r
- HashMap<UUID, ZoologicalName> zooHashMap, ZoologicalName taxonName,\r
- String epithetOfTaxon, String infragenericEpithetOfTaxon,\r
- String infraspecificEpithetOfTaxon, List<String> taxonNames,\r
- TaxonNameBase parentName, TaxonBase syn) {\r
- \r
- Synonym inferredEpithet;\r
- TaxonNameBase synName;\r
- ZoologicalName inferredSynName;\r
- HibernateProxyHelper.deproxy(syn);\r
-\r
- // Determine the idInSource\r
- String idInSourceSyn = getIdInSource(syn);\r
- String idInSourceTaxon = getIdInSource(taxon);\r
- // Determine the sourceReference\r
- Reference sourceReference = syn.getSec();\r
-\r
- synName = syn.getName();\r
- ZoologicalName zooSynName = getZoologicalName(synName.getUuid(), zooHashMap);\r
- String synGenusName = zooSynName.getGenusOrUninomial();\r
- String synInfraGenericEpithet = null;\r
- String synSpecificEpithet = null;\r
- \r
- if (zooSynName.getInfraGenericEpithet() != null){\r
- synInfraGenericEpithet = zooSynName.getInfraGenericEpithet();\r
- } \r
- \r
- if (zooSynName.isInfraSpecific()){\r
- synSpecificEpithet = zooSynName.getSpecificEpithet();\r
- } \r
- \r
+ synonymsEpithet.add(synSpeciesEpithetName);\r
+ }*/\r
+\r
+ inferredSynName = ZoologicalName.NewInstance(taxon.getName().getRank());\r
+ //TODO:differ between parent is genus and taxon is species, parent is subgenus and taxon is species, parent is species and taxon is subspecies and parent is genus and taxon is subgenus...\r
+\r
+\r
+ inferredSynName.setGenusOrUninomial(genusOfTaxon);\r
+ if (zooParentName.isInfraGeneric()){\r
+ inferredSynName.setInfraGenericEpithet(zooParentName.getInfraGenericEpithet());\r
+ }\r
+\r
+ if (taxonName.isSpecies()){\r
+ inferredSynName.setSpecificEpithet(synSpeciesEpithetName);\r
+ }\r
+ if (taxonName.isInfraSpecific()){\r
+ inferredSynName.setSpecificEpithet(epithetOfTaxon);\r
+ inferredSynName.setInfraSpecificEpithet(synZooName.getInfraGenericEpithet());\r
+ }\r
+\r
+\r
+ inferredGenus = Synonym.NewInstance(inferredSynName, null);\r
+\r
+ // Set the sourceReference\r
+ inferredGenus.setSec(sourceReference);\r
+\r
+ // Add the original source\r
+ if (idInSourceSyn != null && idInSourceTaxon != null) {\r
+ IdentifiableSource originalSource = IdentifiableSource.NewInstance(idInSourceSyn + "; " + idInSourceTaxon, INFERRED_GENUS_NAMESPACE, sourceReference, null);\r
+ inferredGenus.addSource(originalSource);\r
+\r
+ originalSource = IdentifiableSource.NewInstance(idInSourceSyn + "; " + idInSourceTaxon, INFERRED_GENUS_NAMESPACE, sourceReference, null);\r
+ inferredSynName.addSource(originalSource);\r
+\r
+ }\r
+\r
+ taxon.addSynonym(inferredGenus, SynonymRelationshipType.INFERRED_GENUS_OF());\r
+\r
+ inferredSynName.generateTitle();\r
+\r
+\r
+ return inferredGenus;\r
+ }\r
+\r
+ private Synonym createInferredEpithets(Taxon taxon,\r
+ HashMap<UUID, ZoologicalName> zooHashMap, ZoologicalName taxonName,\r
+ String epithetOfTaxon, String infragenericEpithetOfTaxon,\r
+ String infraspecificEpithetOfTaxon, List<String> taxonNames,\r
+ TaxonNameBase parentName, TaxonBase syn) {\r
+\r
+ Synonym inferredEpithet;\r
+ TaxonNameBase synName;\r
+ ZoologicalName inferredSynName;\r
+ HibernateProxyHelper.deproxy(syn);\r
+\r
+ // Determine the idInSource\r
+ String idInSourceSyn = getIdInSource(syn);\r
+ String idInSourceTaxon = getIdInSource(taxon);\r
+ // Determine the sourceReference\r
+ Reference sourceReference = syn.getSec();\r
+\r
+ synName = syn.getName();\r
+ ZoologicalName zooSynName = getZoologicalName(synName.getUuid(), zooHashMap);\r
+ String synGenusName = zooSynName.getGenusOrUninomial();\r
+ String synInfraGenericEpithet = null;\r
+ String synSpecificEpithet = null;\r
+\r
+ if (zooSynName.getInfraGenericEpithet() != null){\r
+ synInfraGenericEpithet = zooSynName.getInfraGenericEpithet();\r
+ }\r
+\r
+ if (zooSynName.isInfraSpecific()){\r
+ synSpecificEpithet = zooSynName.getSpecificEpithet();\r
+ }\r
+\r
/* if (synGenusName != null && !synonymsGenus.containsKey(synGenusName)){\r
- synonymsGenus.put(synGenusName, idInSource);\r
- }*/\r
- \r
- inferredSynName = ZoologicalName.NewInstance(taxon.getName().getRank());\r
-\r
- // DEBUG TODO: for subgenus or subspecies the infrageneric or infraspecific epithet should be used!!!\r
- if (epithetOfTaxon == null && infragenericEpithetOfTaxon == null && infraspecificEpithetOfTaxon == null) {\r
- logger.error("This specificEpithet is NULL" + taxon.getTitleCache());\r
- }\r
- inferredSynName.setGenusOrUninomial(synGenusName);\r
- \r
- if (parentName.isInfraGeneric()){\r
- inferredSynName.setInfraGenericEpithet(synInfraGenericEpithet);\r
- }\r
- if (taxonName.isSpecies()){\r
- inferredSynName.setSpecificEpithet(epithetOfTaxon);\r
- }else if (taxonName.isInfraSpecific()){\r
- inferredSynName.setSpecificEpithet(synSpecificEpithet);\r
- inferredSynName.setInfraSpecificEpithet(infraspecificEpithetOfTaxon);\r
- }\r
- \r
- inferredEpithet = Synonym.NewInstance(inferredSynName, null);\r
- \r
- // Set the sourceReference\r
- inferredEpithet.setSec(sourceReference);\r
-\r
- /* Add the original source\r
- if (idInSource != null) {\r
- IdentifiableSource originalSource = IdentifiableSource.NewInstance(idInSource, "InferredEpithetOf", syn.getSec(), null);\r
-\r
- // Add the citation\r
- Reference citation = getCitation(syn);\r
- if (citation != null) {\r
- originalSource.setCitation(citation);\r
- inferredEpithet.addSource(originalSource);\r
- }\r
- }*/\r
- String taxonId = idInSourceTaxon+ "; " + idInSourceSyn;\r
- \r
- IdentifiableSource originalSource;\r
- originalSource = IdentifiableSource.NewInstance(taxonId, INFERRED_EPITHET_NAMESPACE, sourceReference, null);\r
- \r
- inferredEpithet.addSource(originalSource);\r
- \r
- originalSource = IdentifiableSource.NewInstance(taxonId, INFERRED_EPITHET_NAMESPACE, sourceReference, null);\r
- \r
- inferredSynName.addSource(originalSource);\r
- \r
- \r
- \r
- taxon.addSynonym(inferredEpithet, SynonymRelationshipType.INFERRED_EPITHET_OF());\r
- \r
- inferredSynName.generateTitle();\r
- return inferredEpithet;\r
- }\r
+ synonymsGenus.put(synGenusName, idInSource);\r
+ }*/\r
+\r
+ inferredSynName = ZoologicalName.NewInstance(taxon.getName().getRank());\r
+\r
+ // DEBUG TODO: for subgenus or subspecies the infrageneric or infraspecific epithet should be used!!!\r
+ if (epithetOfTaxon == null && infragenericEpithetOfTaxon == null && infraspecificEpithetOfTaxon == null) {\r
+ logger.error("This specificEpithet is NULL" + taxon.getTitleCache());\r
+ }\r
+ inferredSynName.setGenusOrUninomial(synGenusName);\r
+\r
+ if (parentName.isInfraGeneric()){\r
+ inferredSynName.setInfraGenericEpithet(synInfraGenericEpithet);\r
+ }\r
+ if (taxonName.isSpecies()){\r
+ inferredSynName.setSpecificEpithet(epithetOfTaxon);\r
+ }else if (taxonName.isInfraSpecific()){\r
+ inferredSynName.setSpecificEpithet(synSpecificEpithet);\r
+ inferredSynName.setInfraSpecificEpithet(infraspecificEpithetOfTaxon);\r
+ }\r
+\r
+ inferredEpithet = Synonym.NewInstance(inferredSynName, null);\r
+\r
+ // Set the sourceReference\r
+ inferredEpithet.setSec(sourceReference);\r
+\r
+ /* Add the original source\r
+ if (idInSource != null) {\r
+ IdentifiableSource originalSource = IdentifiableSource.NewInstance(idInSource, "InferredEpithetOf", syn.getSec(), null);\r
+\r
+ // Add the citation\r
+ Reference citation = getCitation(syn);\r
+ if (citation != null) {\r
+ originalSource.setCitation(citation);\r
+ inferredEpithet.addSource(originalSource);\r
+ }\r
+ }*/\r
+ String taxonId = idInSourceTaxon+ "; " + idInSourceSyn;\r
+\r
+ IdentifiableSource originalSource;\r
+ originalSource = IdentifiableSource.NewInstance(taxonId, INFERRED_EPITHET_NAMESPACE, sourceReference, null);\r
+\r
+ inferredEpithet.addSource(originalSource);\r
+\r
+ originalSource = IdentifiableSource.NewInstance(taxonId, INFERRED_EPITHET_NAMESPACE, sourceReference, null);\r
+\r
+ inferredSynName.addSource(originalSource);\r
+\r
+\r
+\r
+ taxon.addSynonym(inferredEpithet, SynonymRelationshipType.INFERRED_EPITHET_OF());\r
+\r
+ inferredSynName.generateTitle();\r
+ return inferredEpithet;\r
+ }\r
\r
/**\r
* Returns an existing ZoologicalName or extends an internal hashmap if it does not exist.\r
}\r
return taxonName;\r
}\r
- \r
+\r
/**\r
* Returns the idInSource for a given Synonym.\r
* @param syn\r
\r
return idInSource;\r
}\r
- \r
+\r
\r
/**\r
* Returns the citation for a given Synonym.\r
\r
return citation;\r
}\r
- \r
+\r
public List<Synonym> createAllInferredSynonyms(Taxon taxon, Classification tree, boolean doWithMisappliedNames){\r
List <Synonym> inferredSynonyms = new ArrayList<Synonym>();\r
\r
* @author a.mueller\r
*\r
*/\r
+\r
+\r
public class TaxonServiceImplTest extends CdmTransactionalIntegrationTest {\r
private static final Logger logger = Logger.getLogger(TaxonServiceImplTest.class);\r
\r
/****************** TESTS *****************************/\r
\r
\r
- /**\r
+ /**\r
* Test method for {@link eu.etaxonomy.cdm.api.service.TaxonServiceImpl#getTaxonByUuid(java.util.UUID)}.\r
*/\r
@Test\r
\r
heterotypicSynonym = (Synonym)service.load(uuidSyn5);\r
\r
- printDataSet(System.err, new String[]{"TaxonBase"});\r
+// printDataSet(System.err, new String[]{"TaxonBase"});\r
// System.exit(0);\r
\r
Assert.assertNotNull("Synonym should still exist", heterotypicSynonym);\r
Assert.assertEquals("There should be 0 taxon relationships left in the database", 0, nRelations);\r
nRelations = nameService.getAllRelationships(1000, 0).size();\r
Assert.assertEquals("There should be 1 name relationship left in the database", 1, nRelations);\r
- \r
- \r
+\r
+\r
//clean up database\r
name2 = (TaxonNameBase)nameService.load(uuidSynonymName2);\r
NameRelationship rel = CdmBase.deproxy(name2.getNameRelations().iterator().next(), NameRelationship.class);\r
this.setComplete();\r
this.endTransaction();\r
\r
- printDataSet(System.out, tableNames);\r
+// printDataSet(System.out, tableNames);\r
\r
//out of wrapping transaction\r
service.deleteSynonym(synonym1, null, true, true);\r
\r
@Test\r
@DataSet("TaxonServiceImplTest.testInferredSynonyms.xml")\r
- \r
+\r
public void testCreateInferredSynonymy(){\r
\r
- UUID classificationUuid = UUID.fromString("aeee7448-5298-4991-b724-8d5b75a0a7a9");\r
+ UUID classificationUuid = UUID.fromString("aeee7448-5298-4991-b724-8d5b75a0a7a9");\r
Classification tree = classificationService.find(classificationUuid);\r
UUID taxonUuid = UUID.fromString("bc09aca6-06fd-4905-b1e7-cbf7cc65d783");\r
TaxonBase taxonBase = service.find(taxonUuid);\r
//assertEquals("Number of synonyms should be 2",2,synonyms.size());\r
List<Synonym> inferredSynonyms = service.createInferredSynonyms(taxon, tree, SynonymRelationshipType.INFERRED_EPITHET_OF(), true);\r
assertNotNull("there should be a new synonym ", inferredSynonyms);\r
- System.err.println(inferredSynonyms.size());\r
+// System.err.println(inferredSynonyms.size());\r
assertEquals ("the name of inferred epithet should be SynGenus lachesis", inferredSynonyms.get(0).getTitleCache(), "SynGenus lachesis sec. ");\r
inferredSynonyms = service.createInferredSynonyms(taxon, tree, SynonymRelationshipType.INFERRED_GENUS_OF(), true);\r
assertNotNull("there should be a new synonym ", inferredSynonyms);\r
- System.err.println(inferredSynonyms.get(0).getTitleCache());\r
+// System.err.println(inferredSynonyms.get(0).getTitleCache());\r
assertEquals ("the name of inferred epithet should be SynGenus lachesis", inferredSynonyms.get(0).getTitleCache(), "Acherontia ciprosus sec. ");\r
inferredSynonyms = service.createInferredSynonyms(taxon, tree, SynonymRelationshipType.POTENTIAL_COMBINATION_OF(), true);\r
assertNotNull("there should be a new synonym ", inferredSynonyms);\r
//assertTrue("set of synonyms should contain an inferred Synonym ", synonyms.contains(arg0))\r
}\r
\r
- @Test\r
- @DataSet("TaxonServiceImplTest.testDeleteTaxonConfig.xml")\r
- @Ignore //not fully working yet\r
- public final void testDeleteTaxonConfig(){\r
- final String[]tableNames = {\r
- "Classification", "Classification_AUD",\r
- "TaxonBase","TaxonBase_AUD",\r
- "TaxonNode","TaxonNode_AUD",\r
- "TaxonNameBase","TaxonNameBase_AUD",\r
- "SynonymRelationship","SynonymRelationship_AUD",\r
- "TaxonRelationship", "TaxonRelationship_AUD",\r
- "TaxonDescription", "TaxonDescription_AUD",\r
- "HomotypicalGroup","HomotypicalGroup_AUD",\r
- "PolytomousKey","PolytomousKey_AUD",\r
- "PolytomousKeyNode","PolytomousKeyNode_AUD",\r
- "Media","Media_AUD",\r
- "WorkingSet","WorkingSet_AUD",\r
- "DescriptionElementBase","DescriptionElementBase_AUD"};\r
-\r
- UUID uuidParent=UUID.fromString("b5271d4f-e203-4577-941f-00d76fa9f4ca");\r
- UUID uuidChild1=UUID.fromString("326167f9-0b97-4e7d-b1bf-4ca47b82e21e");\r
- UUID uuidSameAs=UUID.fromString("c2bb0f01-f2dd-43fb-ba12-2a85727ccb8d");\r
-\r
- int nTaxa = service.count(Taxon.class);\r
- Assert.assertEquals("There should be 3 taxa in the database", 3, nTaxa);\r
- Taxon parent = (Taxon)service.find(uuidParent);\r
- Assert.assertNotNull("Parent taxon should exist", parent);\r
- Taxon child1 = (Taxon)service.find(uuidChild1);\r
- Assert.assertNotNull("Child taxon should exist", child1);\r
-\r
-\r
- try {\r
+ @Test\r
+ @DataSet("TaxonServiceImplTest.testDeleteTaxonConfig.xml")\r
+ @Ignore //not fully working yet\r
+ public final void testDeleteTaxonConfig(){\r
+ final String[]tableNames = {\r
+ "Classification", "Classification_AUD",\r
+ "TaxonBase","TaxonBase_AUD",\r
+ "TaxonNode","TaxonNode_AUD",\r
+ "TaxonNameBase","TaxonNameBase_AUD",\r
+ "SynonymRelationship","SynonymRelationship_AUD",\r
+ "TaxonRelationship", "TaxonRelationship_AUD",\r
+ "TaxonDescription", "TaxonDescription_AUD",\r
+ "HomotypicalGroup","HomotypicalGroup_AUD",\r
+ "PolytomousKey","PolytomousKey_AUD",\r
+ "PolytomousKeyNode","PolytomousKeyNode_AUD",\r
+ "Media","Media_AUD",\r
+ "WorkingSet","WorkingSet_AUD",\r
+ "DescriptionElementBase","DescriptionElementBase_AUD"};\r
+\r
+ UUID uuidParent=UUID.fromString("b5271d4f-e203-4577-941f-00d76fa9f4ca");\r
+ UUID uuidChild1=UUID.fromString("326167f9-0b97-4e7d-b1bf-4ca47b82e21e");\r
+ UUID uuidSameAs=UUID.fromString("c2bb0f01-f2dd-43fb-ba12-2a85727ccb8d");\r
+\r
+ int nTaxa = service.count(Taxon.class);\r
+ Assert.assertEquals("There should be 3 taxa in the database", 3, nTaxa);\r
+ Taxon parent = (Taxon)service.find(uuidParent);\r
+ Assert.assertNotNull("Parent taxon should exist", parent);\r
+ Taxon child1 = (Taxon)service.find(uuidChild1);\r
+ Assert.assertNotNull("Child taxon should exist", child1);\r
+\r
+\r
+ try {\r
// commitAndStartNewTransaction(tableNames);\r
- service.deleteTaxon(child1, new TaxonDeletionConfigurator());\r
- Assert.fail("Delete should throw an error as long as name is used in classification.");\r
- } catch (ReferencedObjectUndeletableException e) {\r
- if (e.getMessage().contains("Taxon can't be deleted as it is used in a classification node")){\r
- //ok\r
- commitAndStartNewTransaction(tableNames);\r
- }else{\r
- Assert.fail("Unexpected error occurred when trying to delete taxon: " + e.getMessage());\r
- }\r
- }\r
-\r
- nTaxa = service.count(Taxon.class);\r
- Assert.assertEquals("There should be 3 taxa in the database", 3, nTaxa);\r
- child1 = (Taxon)service.find(uuidChild1);\r
- Assert.assertNotNull("Child taxon should exist", child1);\r
- Assert.assertEquals("Child should belong to 1 node", 1, child1.getTaxonNodes().size());\r
-\r
- TaxonNode node = child1.getTaxonNodes().iterator().next();\r
- node.getParent().deleteChildNode(node);\r
- service.save(node.getTaxon());\r
- commitAndStartNewTransaction(tableNames);\r
-\r
- child1 = (Taxon)service.find(uuidChild1);\r
- try {\r
- service.deleteTaxon(child1, new TaxonDeletionConfigurator());\r
- } catch (ReferencedObjectUndeletableException e) {\r
- Assert.fail("Delete should not throw an exception anymore");\r
- }\r
+ service.deleteTaxon(child1, new TaxonDeletionConfigurator());\r
+ Assert.fail("Delete should throw an error as long as name is used in classification.");\r
+ } catch (ReferencedObjectUndeletableException e) {\r
+ if (e.getMessage().contains("Taxon can't be deleted as it is used in a classification node")){\r
+ //ok\r
+ commitAndStartNewTransaction(tableNames);\r
+ }else{\r
+ Assert.fail("Unexpected error occurred when trying to delete taxon: " + e.getMessage());\r
+ }\r
+ }\r
+\r
+ nTaxa = service.count(Taxon.class);\r
+ Assert.assertEquals("There should be 3 taxa in the database", 3, nTaxa);\r
+ child1 = (Taxon)service.find(uuidChild1);\r
+ Assert.assertNotNull("Child taxon should exist", child1);\r
+ Assert.assertEquals("Child should belong to 1 node", 1, child1.getTaxonNodes().size());\r
+\r
+ TaxonNode node = child1.getTaxonNodes().iterator().next();\r
+ node.getParent().deleteChildNode(node);\r
+ service.save(node.getTaxon());\r
+ commitAndStartNewTransaction(tableNames);\r
+\r
+ child1 = (Taxon)service.find(uuidChild1);\r
+ try {\r
+ service.deleteTaxon(child1, new TaxonDeletionConfigurator());\r
+ } catch (ReferencedObjectUndeletableException e) {\r
+ Assert.fail("Delete should not throw an exception anymore");\r
+ }\r
\r
\r
// nNames = nameService.count(TaxonNameBase.class);\r
// Assert.assertEquals("There should be 3 names left in the database", 3, nNames);\r
// int nRelations = service.countAllRelationships();\r
// Assert.assertEquals("There should be no relationship left in the database", 0, nRelations);\r
- }\r
+ }\r
\r
\r
// @Test\r