-/**\r
-* Copyright (C) 2007 EDIT\r
-* European Distributed Institute of Taxonomy\r
-* http://www.e-taxonomy.eu\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
-\r
-package eu.etaxonomy.cdm.io.tcsrdf;\r
-\r
-import java.io.IOException;\r
-import java.io.InputStream;\r
-import java.util.List;\r
-import java.util.Set;\r
-\r
-import org.apache.log4j.Logger;\r
-import org.jdom.Attribute;\r
-import org.jdom.Element;\r
-import org.jdom.Namespace;\r
-import org.springframework.stereotype.Component;\r
-\r
-import com.hp.hpl.jena.rdf.model.Model;\r
-import com.hp.hpl.jena.rdf.model.ModelFactory;\r
-import com.hp.hpl.jena.rdf.model.RDFNode;\r
-import com.hp.hpl.jena.rdf.model.ResIterator;\r
-import com.hp.hpl.jena.rdf.model.Resource;\r
-import com.hp.hpl.jena.rdf.model.Selector;\r
-import com.hp.hpl.jena.rdf.model.SimpleSelector;\r
-import com.hp.hpl.jena.rdf.model.Statement;\r
-import com.hp.hpl.jena.rdf.model.StmtIterator;\r
-import com.hp.hpl.jena.vocabulary.*;\r
-import com.hp.hpl.jena.rdf.model.Property;\r
-\r
-import org.apache.commons.io.IOUtils;\r
-import org.apache.jena.iri.IRIFactory;\r
-\r
-import eu.etaxonomy.cdm.common.XmlHelp;\r
-import eu.etaxonomy.cdm.io.common.ICdmIO;\r
-import eu.etaxonomy.cdm.io.common.ImportHelper;\r
-import eu.etaxonomy.cdm.io.common.MapWrapper;\r
-import eu.etaxonomy.cdm.model.agent.INomenclaturalAuthor;\r
-import eu.etaxonomy.cdm.model.agent.Team;\r
-import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;\r
-import eu.etaxonomy.cdm.model.common.Marker;\r
-import eu.etaxonomy.cdm.model.common.MarkerType;\r
-import eu.etaxonomy.cdm.model.common.TimePeriod;\r
-import eu.etaxonomy.cdm.model.name.NomenclaturalCode;\r
-import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;\r
-import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;\r
-import eu.etaxonomy.cdm.model.name.NonViralName;\r
-import eu.etaxonomy.cdm.model.name.Rank;\r
-import eu.etaxonomy.cdm.model.name.TaxonNameBase;\r
-import eu.etaxonomy.cdm.model.name.ViralName;\r
-import eu.etaxonomy.cdm.model.reference.IGeneric;\r
-import eu.etaxonomy.cdm.model.reference.Reference;\r
-import eu.etaxonomy.cdm.model.reference.ReferenceFactory;\r
-import eu.etaxonomy.cdm.strategy.exceptions.UnknownCdmTypeException;\r
-\r
-/**\r
- * @author a.mueller\r
- * @created 29.05.2008\r
- * @version 1.0\r
- */\r
-@Component\r
-public class TcsRdfTaxonNameImport extends TcsRdfImportBase implements ICdmIO<TcsRdfImportState> {\r
- private static final Logger logger = Logger.getLogger(TcsRdfTaxonNameImport.class);\r
-\r
- private static int modCount = 5000;\r
-\r
- public TcsRdfTaxonNameImport(){\r
- super();\r
- }\r
-\r
- @Override\r
- public boolean doCheck(TcsRdfImportState config){\r
- boolean result = true;\r
- logger.warn("BasionymRelations not yet implemented");\r
- logger.warn("Checking for TaxonNames not yet implemented");\r
- //result &= checkArticlesWithoutJournal(tcsConfig);\r
- //result &= checkPartOfJournal(tcsConfig);\r
-\r
- return result;\r
- }\r
-\r
- protected static CdmSingleAttributeRDFMapperBase[] standardMappers = new CdmSingleAttributeRDFMapperBase[]{\r
- new CdmTextElementMapper("genusPart", "genusOrUninomial")\r
- , new CdmTextElementMapper("uninomial", "genusOrUninomial") //TODO make it a more specific Mapper for both attributes\r
- , new CdmTextElementMapper("specificEpithet", "specificEpithet")\r
- , new CdmTextElementMapper("infraspecificEpithet", "infraSpecificEpithet")\r
- , new CdmTextElementMapper("infragenericEpithet", "infraGenericEpithet")\r
- , new CdmTextElementMapper("microReference", nsTcom, "nomenclaturalMicroReference")\r
-\r
- };\r
-\r
- protected static CdmSingleAttributeRDFMapperBase[] operationalMappers = new CdmSingleAttributeRDFMapperBase[]{\r
- new CdmUnclearMapper("basionymAuthorship")\r
- , new CdmUnclearMapper("combinationAuthorship")\r
- , new CdmUnclearMapper("hasAnnotation")\r
- , new CdmUnclearMapper("rank")\r
- , new CdmUnclearMapper("nomenclaturalCode")\r
- , new CdmUnclearMapper("publishedIn", nsTcom)\r
- , new CdmUnclearMapper("year")\r
- };\r
-\r
- protected static CdmSingleAttributeRDFMapperBase[] unclearMappers = new CdmSingleAttributeRDFMapperBase[]{\r
- new CdmUnclearMapper("authorship")\r
- , new CdmUnclearMapper("rankString")\r
- , new CdmUnclearMapper("nameComplete")\r
- , new CdmUnclearMapper("hasBasionym")\r
- , new CdmUnclearMapper("dateOfEntry", nsTpalm)\r
- };\r
-\r
- @Override\r
- protected void doInvoke(TcsRdfImportState state){\r
-\r
- MapWrapper<TaxonNameBase> taxonNameMap = (MapWrapper<TaxonNameBase>)state.getStore(ICdmIO.TAXONNAME_STORE);\r
- MapWrapper<Reference> referenceMap = (MapWrapper<Reference>)state.getStore(ICdmIO.REFERENCE_STORE);\r
- MapWrapper<TeamOrPersonBase> authorMap = (MapWrapper<TeamOrPersonBase>)state.getStore(ICdmIO.TEAM_STORE);\r
-\r
- String tcsElementName;\r
- Namespace tcsNamespace;\r
- String value;\r
-\r
- logger.info("start makeTaxonNames ...");\r
- TcsRdfImportConfigurator config = state.getConfig();\r
- Model root = config.getSourceRoot();\r
-\r
- String rdfNamespace = config.getRdfNamespaceURIString();\r
- String taxonNameNamespace = config.getTnNamespaceURIString();\r
-\r
- String idNamespace = "TaxonName";\r
-\r
- Resource elTaxonName = root.getResource(taxonNameNamespace);\r
-\r
- int i = 0;\r
- \r
- TaxonNameBase name;\r
- Property property = root.getProperty(taxonNameNamespace+"authorship");\r
- \r
- ResIterator iterator = root.listSubjectsWithProperty(property, (RDFNode) null);\r
- String id ;\r
- while (iterator.hasNext()){\r
- \r
- Resource resource = iterator.next();\r
- \r
- name = handleNameResource(resource, config);\r
- id = resource.getNameSpace();\r
- taxonNameMap.put(id, name);\r
- }\r
- \r
- logger.info(i + " names handled");\r
- getNameService().save(taxonNameMap.objects());\r
-// makeNameSpecificData(nameMap);\r
- logger.info("end makeTaxonNames ...");\r
- return;\r
-\r
- }\r
- /* (non-Javadoc)\r
- * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)\r
- */\r
- @Override\r
- protected boolean isIgnore(TcsRdfImportState state){\r
- return ! state.getConfig().isDoTaxonNames();\r
- }\r
- \r
- protected TaxonNameBase handleNameModel(Model model, TcsRdfImportConfigurator config, MapWrapper<TaxonNameBase> taxonNameMap, String uri){\r
- Resource nameAbout = model.getResource(uri);\r
- TaxonNameBase result = handleNameResource(nameAbout, config);\r
- taxonNameMap.put(uri, result);\r
- return result;\r
- \r
- }\r
- \r
- private TaxonNameBase handleNameResource(Resource nameAbout, TcsRdfImportConfigurator config){\r
- String idNamespace = "TaxonName";\r
- //Attribute about = elTaxonName.getAttribute("about", rdfNamespace);\r
- \r
- //create TaxonName element\r
- \r
- \r
- System.out.println("name about "+nameAbout.getLocalName());\r
- \r
- \r
- StmtIterator stmts = nameAbout.listProperties();\r
- while ( stmts.hasNext() ) {\r
- System.out.println( stmts.next() );\r
- }\r
- Property prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"nomenclaturalCode");\r
- Statement stateNomenclaturalCode = nameAbout.getProperty(prop);\r
- String strNomenclaturalCode = stateNomenclaturalCode.getObject().toString();\r
- //Rank\r
- prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"rankString");\r
- String strRank = nameAbout.getProperty(prop).getString();\r
- \r
- \r
- \r
- try {\r
- \r
- Rank rank = TcsRdfTransformer.rankString2Rank(strRank);\r
- NomenclaturalCode nomCode;\r
- if (strNomenclaturalCode != null){\r
- nomCode = TcsRdfTransformer.nomCodeString2NomCode(strNomenclaturalCode);\r
- }else{\r
- nomCode = NomenclaturalCode.ICNAFP;\r
- }\r
- \r
- TaxonNameBase<?,?> nameBase = nomCode.getNewTaxonNameInstance(rank);\r
-\r
- Set<String> omitAttributes = null;\r
- //makeStandardMapper(nameAbout, nameBase, omitAttributes, standardMappers);\r
- \r
- prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"nameComplete");\r
- String strNameComplete = nameAbout.getProperty(prop).getString();\r
- nameBase.setTitleCache(strNameComplete, true);\r
- \r
- prop = nameAbout.getModel().getProperty(config.getCommonNamespaceURIString()+"publishedIn");\r
- String strPublishedIn = nameAbout.getProperty(prop).getString();\r
- if (strPublishedIn != null && strPublishedIn != ""){\r
- IGeneric nomRef = ReferenceFactory.newGeneric(); //TODO\r
- nomRef.setTitleCache(strPublishedIn, true);\r
- nameBase.setNomenclaturalReference(nomRef);\r
- try{\r
- prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"year");\r
- String strYear = nameAbout.getProperty(prop).getString();\r
- Integer year = null;\r
- if (strYear != null){\r
- try {\r
- year = Integer.valueOf(strYear);\r
- TimePeriod timeP = TimePeriod.NewInstance(year);\r
- nomRef.setDatePublished(timeP);\r
- } catch (RuntimeException e) {\r
- logger.warn("year could not be parsed");\r
- }\r
- }\r
- }catch(NullPointerException e){\r
- }\r
- if (config.isPublishReferences()){\r
- ((Reference<?>)nomRef).addMarker(Marker.NewInstance(MarkerType.PUBLISH(), false));\r
- }\r
- }\r
- \r
- if (nameBase instanceof NonViralName){\r
- NonViralName<?> nonViralName = (NonViralName<?>)nameBase;\r
- prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"genusPart");\r
- String strGenusPart;\r
- try{\r
- strGenusPart = nameAbout.getProperty(prop).getString();\r
- }catch(NullPointerException e){\r
- prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"uninomial");\r
- strGenusPart = nameAbout.getProperty(prop).getString();\r
- }\r
- \r
- nonViralName.setGenusOrUninomial(strGenusPart);\r
- \r
- prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"infragenericEpithet");\r
- try{\r
- String strInfragenericEpithet = nameAbout.getProperty(prop).getString();\r
- nonViralName.setInfraGenericEpithet(strInfragenericEpithet);\r
- }catch(NullPointerException e){\r
- \r
- }\r
- try {\r
- prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"specificEpithet");\r
- String strSpecificEpithet = nameAbout.getProperty(prop).getString();\r
- nonViralName.setSpecificEpithet(strSpecificEpithet);\r
- }catch(NullPointerException e){\r
- \r
- }\r
- try{\r
- prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"infraspecificEpithet");\r
- String strInfraspecificEpithet = nameAbout.getProperty(prop).getString();\r
- nonViralName.setInfraSpecificEpithet(strInfraspecificEpithet);\r
- }catch(NullPointerException e){\r
- \r
- }\r
- //AuthorTeams\r
- //TODO\r
- prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"authorship");\r
- Statement stateAuthorship = nameAbout.getProperty(prop);\r
- prop = nameAbout.getModel().getProperty(config.getTeamNamespaceURIString()+"name");\r
- Team authorTeam = new Team();\r
- authorTeam.setTitleCache(stateAuthorship.getObject().toString(), true);\r
- prop = nameAbout.getModel().getProperty(config.getTeamNamespaceURIString()+"hasMember");\r
- //String strTeamMember = nameAbout.getProperty(prop).getString();\r
- nonViralName.setCombinationAuthorTeam(authorTeam);\r
- \r
- //Annotations:\r
- /*\r
- * <tn:hasAnnotation>\r
- <tn:NomenclaturalNote>\r
- <tn:noteType rdf:resource="http://rs.tdwg.org/ontology/voc/TaxonName#replacementNameFor"/>\r
- <tn:objectTaxonName rdf:resource="urn:lsid:ipni.org:names:151538-1"/>\r
- </tn:NomenclaturalNote>\r
- </tn:hasAnnotation> \r
- */\r
- /*\r
- String strInfraspecificEpithet = nameAbout.getProperty(prop).getString();\r
- tcsElementName = "basionymAuthorship";\r
- String basionymAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);\r
- if (basionymAuthorValue != null){\r
- TeamOrPersonBase<?> basionymAuthor = Team.NewInstance();\r
- basionymAuthor.setNomenclaturalTitle(basionymAuthorValue);\r
- nonViralName.setBasionymAuthorTeam(basionymAuthor);\r
- }\r
-\r
- //TODO\r
- tcsElementName = "combinationAuthorship";\r
- String combinationAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);\r
- if (combinationAuthorValue != null){\r
- TeamOrPersonBase<?> combinationAuthor = Team.NewInstance();\r
- combinationAuthor.setNomenclaturalTitle(combinationAuthorValue);\r
- nonViralName.setCombinationAuthorTeam(combinationAuthor);\r
- }\r
-\r
- //set the authorshipCache\r
- tcsElementName = "authorship";\r
- String authorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);\r
- String cache = nonViralName.getAuthorshipCache();\r
- if ( authorValue != null){\r
- //compare existing authorship cache with new one and check if it is necessary to\r
- //make cache protected //TODO refinement\r
- if (cache == null){\r
- nonViralName.setAuthorshipCache(authorValue);\r
- }else{\r
- cache = basionymAuthorValue == null ? cache : cache.replace(basionymAuthorValue, "");\r
- cache = combinationAuthorValue == null ? cache : cache.replace(combinationAuthorValue, "");\r
- cache = cache.replace("\\(|\\)", "");\r
- cache = cache.trim();\r
- if (! cache.equals("")){\r
- nonViralName.setAuthorshipCache(authorValue);\r
- }\r
- }\r
- }*/\r
- }\r
- //ImportHelper.setOriginalSource(nameBase, config.getSourceReference(), nameAbout, idNamespace);\r
-\r
- //checkAdditionalContents(elTaxonName, standardMappers, operationalMappers, unclearMappers);\r
- \r
- return nameBase;\r
- \r
- }catch(Exception e){\r
- e.printStackTrace();\r
- return null;\r
- }\r
- /*\r
- //name\r
- String strNameComplete = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "nameComplete", rdfNamespace);\r
- nameBase.setTitleCache(strNameComplete, true);\r
- \r
- //Reference\r
- //TODO\r
- String tcsElementName = "publishedIn";\r
- Namespace tcsNamespace = config.getCommonNamespaceURIString();\r
- String value = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, tcsNamespace);\r
- if (value != null && value != ""){\r
- IGeneric nomRef = ReferenceFactory.newGeneric(); //TODO\r
- nomRef.setTitleCache(value, true);\r
- nameBase.setNomenclaturalReference(nomRef);\r
-\r
- //TODO\r
- tcsElementName = "year";\r
- tcsNamespace = taxonNameNamespace;\r
- Integer year = null;\r
- value = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, tcsNamespace);\r
- if (value != null){\r
- try {\r
- year = Integer.valueOf(value);\r
- TimePeriod timeP = TimePeriod.NewInstance(year);\r
- nomRef.setDatePublished(timeP);\r
- } catch (RuntimeException e) {\r
- logger.warn("year could not be parsed");\r
- }\r
- }\r
- if (config.isPublishReferences()){\r
- ((Reference<?>)nomRef).addMarker(Marker.NewInstance(MarkerType.PUBLISH(), false));\r
- }\r
- }\r
-\r
- //Status\r
- tcsNamespace = taxonNameNamespace;\r
- Element elAnnotation = elTaxonName.getChild("hasAnnotation", tcsNamespace);\r
- if (elAnnotation != null){\r
- Element elNomenclaturalNote = elAnnotation.getChild("NomenclaturalNote", tcsNamespace);\r
- if (elNomenclaturalNote != null){\r
- String statusValue = (String)ImportHelper.getXmlInputValue(elNomenclaturalNote, "note", tcsNamespace);\r
- String type = XmlHelp.getChildAttributeValue(elNomenclaturalNote, "type", tcsNamespace, "resource", rdfNamespace);\r
- String tdwgType = "http://rs.tdwg.org/ontology/voc/TaxonName#PublicationStatus";\r
- if (tdwgType.equalsIgnoreCase(type)){\r
- try {\r
- NomenclaturalStatusType statusType = TcsRdfTransformer.nomStatusString2NomStatus(statusValue);\r
- //NomenclaturalStatusType statusType = NomenclaturalStatusType.getNomenclaturalStatusTypeByAbbreviation(statusValue);\r
- if (statusType != null){\r
- nameBase.addStatus(NomenclaturalStatus.NewInstance(statusType));\r
- }\r
- } catch (UnknownCdmTypeException e) {\r
- if (! statusValue.equals("valid")){\r
- logger.warn("Unknown NomenclaturalStatusType: " + statusValue);\r
- }\r
- }\r
- }\r
- }\r
- }\r
-\r
- if (nameBase instanceof NonViralName){\r
- NonViralName<?> nonViralName = (NonViralName<?>)nameBase;\r
- String strGenusPart = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "genusPart", rdfNamespace);\r
- \r
- //for names of rank genus the uninomial property should be used\r
- if (strGenusPart == null){\r
- strGenusPart = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "uninomial", rdfNamespace);\r
- }\r
- nonViralName.setGenusOrUninomial(strGenusPart);\r
- \r
- String strInfragenericEpithet = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "infragenericEpithet", rdfNamespace);\r
- nonViralName.setGenusOrUninomial(strInfragenericEpithet);\r
- \r
- \r
- \r
- String strSpecificEpithet = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "specificEpithet", rdfNamespace);\r
- nonViralName.setSpecificEpithet(strSpecificEpithet);\r
- \r
- String strInfraspecificEpithet = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "infraspecificEpithet", rdfNamespace);\r
- nonViralName.setInfraSpecificEpithet(strInfraspecificEpithet);\r
- //AuthorTeams\r
- //TODO\r
- tcsElementName = "basionymAuthorship";\r
- String basionymAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);\r
- if (basionymAuthorValue != null){\r
- TeamOrPersonBase<?> basionymAuthor = Team.NewInstance();\r
- basionymAuthor.setNomenclaturalTitle(basionymAuthorValue);\r
- nonViralName.setBasionymAuthorTeam(basionymAuthor);\r
- }\r
-\r
- //TODO\r
- tcsElementName = "combinationAuthorship";\r
- String combinationAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);\r
- if (combinationAuthorValue != null){\r
- TeamOrPersonBase<?> combinationAuthor = Team.NewInstance();\r
- combinationAuthor.setNomenclaturalTitle(combinationAuthorValue);\r
- nonViralName.setCombinationAuthorTeam(combinationAuthor);\r
- }\r
-\r
- //set the authorshipCache\r
- tcsElementName = "authorship";\r
- String authorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);\r
- String cache = nonViralName.getAuthorshipCache();\r
- if ( authorValue != null){\r
- //compare existing authorship cache with new one and check if it is necessary to\r
- //make cache protected //TODO refinement\r
- if (cache == null){\r
- nonViralName.setAuthorshipCache(authorValue);\r
- }else{\r
- cache = basionymAuthorValue == null ? cache : cache.replace(basionymAuthorValue, "");\r
- cache = combinationAuthorValue == null ? cache : cache.replace(combinationAuthorValue, "");\r
- cache = cache.replace("\\(|\\)", "");\r
- cache = cache.trim();\r
- if (! cache.equals("")){\r
- nonViralName.setAuthorshipCache(authorValue);\r
- }\r
- }\r
- }\r
- }\r
- ImportHelper.setOriginalSource(nameBase, config.getSourceReference(), nameAbout, idNamespace);\r
-\r
- checkAdditionalContents(elTaxonName, standardMappers, operationalMappers, unclearMappers);\r
-\r
- //nameId\r
- //TODO\r
- //ImportHelper.setOriginalSource(nameBase, tcsConfig.getSourceReference(), nameId);\r
- //taxonNameMap.put(nameAbout, nameBase);\r
- return nameBase;\r
- }catch(UnknownCdmTypeException e){\r
- e.printStackTrace();\r
- }\r
- return null;*/\r
- }\r
- \r
- protected TaxonNameBase handleNameElement(Element elTaxonName, Namespace rdfNamespace, Namespace taxonNameNamespace, TcsRdfImportConfigurator config, MapWrapper<TaxonNameBase> taxonNameMap){\r
- String idNamespace = "TaxonName";\r
- Attribute about = elTaxonName.getAttribute("about", rdfNamespace);\r
- \r
- //create TaxonName element\r
- \r
- \r
- String nameAbout = elTaxonName.getAttributeValue("about", rdfNamespace);\r
- if (nameAbout == null){\r
- nameAbout = XmlHelp.getChildAttributeValue(elTaxonName, "TaxonName", taxonNameNamespace, "about", rdfNamespace);\r
- }\r
- \r
- \r
- String strRank = XmlHelp.getChildAttributeValue(elTaxonName, "rankString", taxonNameNamespace, "rankString", rdfNamespace);\r
- if (strRank == null){\r
- strRank = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "rankString", rdfNamespace);\r
- \r
- }\r
- \r
- if (strRank == null){\r
- strRank = XmlHelp.getChildAttributeValue(elTaxonName, "rank", taxonNameNamespace, "resource", rdfNamespace);\r
- \r
- }\r
- \r
- String strNomenclaturalCode = XmlHelp.getChildContentAttributeValue(elTaxonName, "TaxonName", taxonNameNamespace, "nomenclaturalCode", rdfNamespace);\r
- if (strNomenclaturalCode == null){\r
- strNomenclaturalCode = XmlHelp.getChildAttributeValue(elTaxonName, "nomenclaturalCode", taxonNameNamespace, "resource", rdfNamespace);\r
- \r
- }\r
- try {\r
- \r
- Rank rank = TcsRdfTransformer.rankString2Rank(strRank);\r
- NomenclaturalCode nomCode;\r
- if (strNomenclaturalCode != null){\r
- nomCode = TcsRdfTransformer.nomCodeString2NomCode(strNomenclaturalCode);\r
- }else{\r
- nomCode = NomenclaturalCode.ICNAFP;\r
- }\r
- \r
- TaxonNameBase<?,?> nameBase = nomCode.getNewTaxonNameInstance(rank);\r
-\r
- Set<String> omitAttributes = null;\r
- //makeStandardMapper(elTaxonName, nameBase, omitAttributes, standardMappers);\r
- \r
- //name\r
- String strNameComplete = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "nameComplete", rdfNamespace);\r
- nameBase.setTitleCache(strNameComplete, true);\r
- \r
- //Reference\r
- //TODO\r
- String tcsElementName = "publishedIn";\r
- String tcsNamespace = config.getCommonNamespaceURIString();\r
- /*String value = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, tcsNamespace);\r
- if (value != null && value != ""){\r
- IGeneric nomRef = ReferenceFactory.newGeneric(); //TODO\r
- nomRef.setTitleCache(value, true);\r
- nameBase.setNomenclaturalReference(nomRef);\r
-\r
- //TODO\r
- tcsElementName = "year";\r
- tcsNamespace = taxonNameNamespace;\r
- Integer year = null;\r
- value = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, tcsNamespace);\r
- if (value != null){\r
- try {\r
- year = Integer.valueOf(value);\r
- TimePeriod timeP = TimePeriod.NewInstance(year);\r
- nomRef.setDatePublished(timeP);\r
- } catch (RuntimeException e) {\r
- logger.warn("year could not be parsed");\r
- }\r
- }\r
- if (config.isPublishReferences()){\r
- ((Reference<?>)nomRef).addMarker(Marker.NewInstance(MarkerType.PUBLISH(), false));\r
- }\r
- }\r
-\r
- //Status\r
- tcsNamespace = taxonNameNamespace;\r
- Element elAnnotation = elTaxonName.getChild("hasAnnotation", tcsNamespace);\r
- if (elAnnotation != null){\r
- Element elNomenclaturalNote = elAnnotation.getChild("NomenclaturalNote", tcsNamespace);\r
- if (elNomenclaturalNote != null){\r
- String statusValue = (String)ImportHelper.getXmlInputValue(elNomenclaturalNote, "note", tcsNamespace);\r
- String type = XmlHelp.getChildAttributeValue(elNomenclaturalNote, "type", tcsNamespace, "resource", rdfNamespace);\r
- String tdwgType = "http://rs.tdwg.org/ontology/voc/TaxonName#PublicationStatus";\r
- if (tdwgType.equalsIgnoreCase(type)){\r
- try {\r
- NomenclaturalStatusType statusType = TcsRdfTransformer.nomStatusString2NomStatus(statusValue);\r
- //NomenclaturalStatusType statusType = NomenclaturalStatusType.getNomenclaturalStatusTypeByAbbreviation(statusValue);\r
- if (statusType != null){\r
- nameBase.addStatus(NomenclaturalStatus.NewInstance(statusType));\r
- }\r
- } catch (UnknownCdmTypeException e) {\r
- if (! statusValue.equals("valid")){\r
- logger.warn("Unknown NomenclaturalStatusType: " + statusValue);\r
- }\r
- }\r
- }\r
- }\r
- }\r
-\r
- if (nameBase instanceof NonViralName){\r
- NonViralName<?> nonViralName = (NonViralName<?>)nameBase;\r
- String strGenusPart = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "genusPart", rdfNamespace);\r
- \r
- //for names of rank genus the uninomial property should be used\r
- if (strGenusPart == null){\r
- strGenusPart = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "uninomial", rdfNamespace);\r
- }\r
- nonViralName.setGenusOrUninomial(strGenusPart);\r
- \r
- String strInfragenericEpithet = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "infragenericEpithet", rdfNamespace);\r
- nonViralName.setGenusOrUninomial(strInfragenericEpithet);\r
- \r
- \r
- \r
- String strSpecificEpithet = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "specificEpithet", rdfNamespace);\r
- nonViralName.setSpecificEpithet(strSpecificEpithet);\r
- \r
- String strInfraspecificEpithet = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "infraspecificEpithet", rdfNamespace);\r
- nonViralName.setInfraSpecificEpithet(strInfraspecificEpithet);\r
- //AuthorTeams\r
- //TODO\r
- tcsElementName = "basionymAuthorship";\r
- String basionymAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);\r
- if (basionymAuthorValue != null){\r
- TeamOrPersonBase<?> basionymAuthor = Team.NewInstance();\r
- basionymAuthor.setNomenclaturalTitle(basionymAuthorValue);\r
- nonViralName.setBasionymAuthorTeam(basionymAuthor);\r
- }\r
-\r
- //TODO\r
- tcsElementName = "combinationAuthorship";\r
- String combinationAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);\r
- if (combinationAuthorValue != null){\r
- TeamOrPersonBase<?> combinationAuthor = Team.NewInstance();\r
- combinationAuthor.setNomenclaturalTitle(combinationAuthorValue);\r
- nonViralName.setCombinationAuthorTeam(combinationAuthor);\r
- }\r
-\r
- //set the authorshipCache\r
- tcsElementName = "authorship";\r
- String authorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);\r
- String cache = nonViralName.getAuthorshipCache();\r
- if ( authorValue != null){\r
- //compare existing authorship cache with new one and check if it is necessary to\r
- //make cache protected //TODO refinement\r
- if (cache == null){\r
- nonViralName.setAuthorshipCache(authorValue);\r
- }else{\r
- cache = basionymAuthorValue == null ? cache : cache.replace(basionymAuthorValue, "");\r
- cache = combinationAuthorValue == null ? cache : cache.replace(combinationAuthorValue, "");\r
- cache = cache.replace("\\(|\\)", "");\r
- cache = cache.trim();\r
- if (! cache.equals("")){\r
- nonViralName.setAuthorshipCache(authorValue);\r
- }\r
- }\r
- }\r
- }\r
- ImportHelper.setOriginalSource(nameBase, config.getSourceReference(), nameAbout, idNamespace);\r
-\r
- checkAdditionalContents(elTaxonName, standardMappers, operationalMappers, unclearMappers);\r
-\r
- //nameId\r
- //TODO\r
- //ImportHelper.setOriginalSource(nameBase, tcsConfig.getSourceReference(), nameId);\r
- //taxonNameMap.put(nameAbout, nameBase);\r
- return nameBase;\r
- */}catch(UnknownCdmTypeException e){\r
- e.printStackTrace();\r
- }\r
- return null;\r
- }\r
-\r
- public TaxonNameBase handleRdfElementFromStream(InputStream is, TcsRdfImportConfigurator config, MapWrapper<TaxonNameBase> taxonNameMap, String uri){\r
- Model model = ModelFactory.createDefaultModel();\r
- try{\r
- model.read(is, null);\r
- model.write(System.out);\r
- \r
- config.makeNamespaces(model);\r
- \r
- String rdfNamespace = config.getRdfNamespaceURIString();\r
- String taxonNameNamespace = config.getTnNamespaceURIString();\r
- return handleNameModel(model, config, taxonNameMap, uri);\r
- \r
- \r
- }catch(com.hp.hpl.jena.shared.JenaException e){\r
- logger.debug("The file was no valid rdf file");\r
- }\r
- \r
- \r
- \r
- return null;\r
- }\r
- \r
-}\r
+/**
+* Copyright (C) 2007 EDIT
+* European Distributed Institute of Taxonomy
+* http://www.e-taxonomy.eu
+*
+* The contents of this file are subject to the Mozilla Public License Version 1.1
+* See LICENSE.TXT at the top of this package for the full license terms.
+*/
+
+package eu.etaxonomy.cdm.io.tcsrdf;
+
+import java.io.InputStream;
+import java.util.Set;
+
+import org.apache.log4j.Logger;
+import org.jdom.Attribute;
+import org.jdom.Element;
+import org.jdom.Namespace;
+import org.springframework.stereotype.Component;
+
+import com.hp.hpl.jena.rdf.model.Model;
+import com.hp.hpl.jena.rdf.model.ModelFactory;
+import com.hp.hpl.jena.rdf.model.Property;
+import com.hp.hpl.jena.rdf.model.RDFNode;
+import com.hp.hpl.jena.rdf.model.ResIterator;
+import com.hp.hpl.jena.rdf.model.Resource;
+import com.hp.hpl.jena.rdf.model.Statement;
+import com.hp.hpl.jena.rdf.model.StmtIterator;
+
+import eu.etaxonomy.cdm.common.XmlHelp;
+import eu.etaxonomy.cdm.io.common.ICdmIO;
+import eu.etaxonomy.cdm.io.common.MapWrapper;
+import eu.etaxonomy.cdm.model.agent.Person;
+import eu.etaxonomy.cdm.model.agent.Team;
+import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;
+import eu.etaxonomy.cdm.model.common.Marker;
+import eu.etaxonomy.cdm.model.common.MarkerType;
+import eu.etaxonomy.cdm.model.common.TimePeriod;
+import eu.etaxonomy.cdm.model.name.INonViralName;
+import eu.etaxonomy.cdm.model.name.NomenclaturalCode;
+import eu.etaxonomy.cdm.model.name.Rank;
+import eu.etaxonomy.cdm.model.name.TaxonName;
+import eu.etaxonomy.cdm.model.reference.IGeneric;
+import eu.etaxonomy.cdm.model.reference.Reference;
+import eu.etaxonomy.cdm.model.reference.ReferenceFactory;
+import eu.etaxonomy.cdm.strategy.exceptions.UnknownCdmTypeException;
+
+/**
+ * @author a.mueller
+ * @created 29.05.2008
+ */
+@Component
+public class TcsRdfTaxonNameImport extends TcsRdfImportBase implements ICdmIO<TcsRdfImportState> {
+ private static final long serialVersionUID = -2547422867292051979L;
+
+ private static final Logger logger = Logger.getLogger(TcsRdfTaxonNameImport.class);
+
+ private static int modCount = 5000;
+
+ public TcsRdfTaxonNameImport(){
+ super();
+ }
+
+ @Override
+ public boolean doCheck(TcsRdfImportState config){
+ boolean result = true;
+ logger.warn("BasionymRelations not yet implemented");
+ logger.warn("Checking for TaxonNames not yet implemented");
+ //result &= checkArticlesWithoutJournal(tcsConfig);
+ //result &= checkPartOfJournal(tcsConfig);
+
+ return result;
+ }
+
+ protected static CdmSingleAttributeRDFMapperBase[] standardMappers = new CdmSingleAttributeRDFMapperBase[]{
+ new CdmTextElementMapper("genusPart", "genusOrUninomial")
+ , new CdmTextElementMapper("uninomial", "genusOrUninomial") //TODO make it a more specific Mapper for both attributes
+ , new CdmTextElementMapper("specificEpithet", "specificEpithet")
+ , new CdmTextElementMapper("infraspecificEpithet", "infraSpecificEpithet")
+ , new CdmTextElementMapper("infragenericEpithet", "infraGenericEpithet")
+ , new CdmTextElementMapper("microReference", nsTcom, "nomenclaturalMicroReference")
+
+ };
+
+ protected static CdmSingleAttributeRDFMapperBase[] operationalMappers = new CdmSingleAttributeRDFMapperBase[]{
+ new CdmUnclearMapper("basionymAuthorship")
+ , new CdmUnclearMapper("combinationAuthorship")
+ , new CdmUnclearMapper("hasAnnotation")
+ , new CdmUnclearMapper("rank")
+ , new CdmUnclearMapper("nomenclaturalCode")
+ , new CdmUnclearMapper("publishedIn", nsTcom)
+ , new CdmUnclearMapper("year")
+ };
+
+ protected static CdmSingleAttributeRDFMapperBase[] unclearMappers = new CdmSingleAttributeRDFMapperBase[]{
+ new CdmUnclearMapper("authorship")
+ , new CdmUnclearMapper("rankString")
+ , new CdmUnclearMapper("nameComplete")
+ , new CdmUnclearMapper("hasBasionym")
+ , new CdmUnclearMapper("dateOfEntry", nsTpalm)
+ };
+
+ @Override
+ protected void doInvoke(TcsRdfImportState state){
+
+ MapWrapper<TaxonName> taxonNameMap = (MapWrapper<TaxonName>)state.getStore(ICdmIO.TAXONNAME_STORE);
+ MapWrapper<Reference> referenceMap = (MapWrapper<Reference>)state.getStore(ICdmIO.REFERENCE_STORE);
+ MapWrapper<TeamOrPersonBase> authorMap = (MapWrapper<TeamOrPersonBase>)state.getStore(ICdmIO.TEAM_STORE);
+
+ String tcsElementName;
+ Namespace tcsNamespace;
+ String value;
+
+ logger.info("start makeTaxonNames ...");
+ TcsRdfImportConfigurator config = state.getConfig();
+ Model root = config.getSourceRoot();
+
+ String rdfNamespace = config.getRdfNamespaceURIString();
+ String taxonNameNamespace = config.getTnNamespaceURIString();
+
+ String idNamespace = "TaxonName";
+
+ Resource elTaxonName = root.getResource(taxonNameNamespace);
+
+ int i = 0;
+
+ TaxonName name;
+ Property property = root.getProperty(taxonNameNamespace+"authorship");
+
+ ResIterator iterator = root.listSubjectsWithProperty(property, (RDFNode) null);
+ String id ;
+ while (iterator.hasNext()){
+
+ Resource resource = iterator.next();
+
+ name = handleNameResource(resource, config);
+ id = resource.getNameSpace();
+ taxonNameMap.put(id, name);
+ }
+
+ logger.info(i + " names handled");
+ getNameService().save(taxonNameMap.objects());
+// makeNameSpecificData(nameMap);
+ logger.info("end makeTaxonNames ...");
+ return;
+
+ }
+ /* (non-Javadoc)
+ * @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator)
+ */
+ @Override
+ protected boolean isIgnore(TcsRdfImportState state){
+ return ! state.getConfig().isDoTaxonNames();
+ }
+
+ protected TaxonName handleNameModel(Model model, TcsRdfImportConfigurator config, MapWrapper<TaxonName> taxonNameMap, String uri){
+ Resource nameAbout = model.getResource(uri);
+ TaxonName result = handleNameResource(nameAbout, config);
+ taxonNameMap.put(uri, result);
+ return result;
+
+ }
+
+ private TaxonName handleNameResource(Resource nameAbout, TcsRdfImportConfigurator config){
+ String idNamespace = "TaxonName";
+
+// StmtIterator stmts = nameAbout.listProperties();
+// while(stmts.hasNext()){
+// System.out.println(stmts.next().getPredicate().toString());
+// }
+
+ Property prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"nomenclaturalCode");
+ Statement stateNomenclaturalCode = nameAbout.getProperty(prop);
+ String strNomenclaturalCode = stateNomenclaturalCode.getObject().toString();
+ //Rank
+ prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"rankString");
+ String strRank = nameAbout.getProperty(prop).getString();
+
+
+
+ try {
+
+ Rank rank = TcsRdfTransformer.rankString2Rank(strRank);
+ NomenclaturalCode nomCode;
+ if (strNomenclaturalCode != null){
+ nomCode = TcsRdfTransformer.nomCodeString2NomCode(strNomenclaturalCode);
+ }else{
+ nomCode = NomenclaturalCode.ICNAFP;
+ }
+
+ TaxonName nameBase = nomCode.getNewTaxonNameInstance(rank);
+
+ Set<String> omitAttributes = null;
+ //makeStandardMapper(nameAbout, nameBase, omitAttributes, standardMappers);
+
+ prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"nameComplete");
+ String strNameComplete = nameAbout.getProperty(prop).getString();
+ nameBase.setTitleCache(strNameComplete, true);
+
+ prop = nameAbout.getModel().getProperty(config.getCommonNamespaceURIString()+"publishedIn");
+ String strPublishedIn = nameAbout.getProperty(prop).getString();
+ if (strPublishedIn != null && strPublishedIn != ""){
+ IGeneric nomRef = ReferenceFactory.newGeneric(); //TODO
+ nomRef.setTitleCache(strPublishedIn, true);
+ nameBase.setNomenclaturalReference(nomRef);
+ try{
+ prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"year");
+ String strYear = nameAbout.getProperty(prop).getString();
+ Integer year = null;
+ if (strYear != null){
+ try {
+ year = Integer.valueOf(strYear);
+ TimePeriod timeP = TimePeriod.NewInstance(year);
+ nomRef.setDatePublished(timeP);
+ } catch (RuntimeException e) {
+ logger.warn("year could not be parsed");
+ }
+ }
+ }catch(NullPointerException e){
+ }
+ if (config.isPublishReferences()){
+ ((Reference)nomRef).addMarker(Marker.NewInstance(MarkerType.PUBLISH(), false));
+ }
+ }
+
+ if (nameBase.isNonViral()){
+ INonViralName nonViralName = nameBase;
+ prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"genusPart");
+ String strGenusPart;
+ try{
+ strGenusPart = nameAbout.getProperty(prop).getString();
+ }catch(NullPointerException e){
+ prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"uninomial");
+ strGenusPart = nameAbout.getProperty(prop).getString();
+ }
+
+ nonViralName.setGenusOrUninomial(strGenusPart);
+
+ prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"infragenericEpithet");
+ try{
+ String strInfragenericEpithet = nameAbout.getProperty(prop).getString();
+ nonViralName.setInfraGenericEpithet(strInfragenericEpithet);
+ }catch(NullPointerException e){
+
+ }
+ try {
+ prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"specificEpithet");
+ String strSpecificEpithet = nameAbout.getProperty(prop).getString();
+ nonViralName.setSpecificEpithet(strSpecificEpithet);
+ }catch(NullPointerException e){
+
+ }
+ try{
+ prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"infraspecificEpithet");
+ String strInfraspecificEpithet = nameAbout.getProperty(prop).getString();
+ nonViralName.setInfraSpecificEpithet(strInfraspecificEpithet);
+ }catch(NullPointerException e){
+
+ }
+ //Authorships
+ //TODO
+ /*
+ * <tn:authorteam>
+ <tm:Team>
+ <tm:name>(Raf.) Fernald</tm:name>
+ <tm:hasMember rdf:resource="urn:lsid:ipni.org:authors:2691-1"
+ tm:index="1"
+ tm:role="Combination Author"/>
+ <tm:hasMember rdf:resource="urn:lsid:ipni.org:authors:8096-1"
+ tm:index="1"
+ tm:role="Basionym Author"/>
+ </tm:Team>
+ </tn:authorteam>
+ */
+ prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"authorship");
+ Statement stateAuthorship = nameAbout.getProperty(prop);
+ prop = nameAbout.getModel().getProperty(config.getTnNamespaceURIString()+"authorteam");
+ Statement stateAuthorTeam = nameAbout.getProperty(prop);
+ Team authorTeam = new Team();
+ authorTeam.setTitleCache(stateAuthorship.getObject().toString(), true);
+ Statement stateAutorTeamTeam = null;
+ Statement stateAutorTeamName = null;
+ StmtIterator stateTeamMember = null;
+ if (stateAuthorTeam != null){
+ prop = stateAuthorTeam.getModel().getProperty(config.getTeamNamespaceURIString()+"Team");
+ try{
+ stateAutorTeamTeam = stateAuthorTeam.getProperty(prop);
+ }catch(Exception e){
+
+ }
+ try{
+ prop = stateAuthorTeam.getModel().getProperty(config.getTeamNamespaceURIString()+"name");
+ stateAutorTeamName = stateAuthorTeam.getProperty(prop);
+ }catch(Exception e){
+
+ }
+ try{
+ prop = nameAbout.getModel().getProperty(config.getTeamNamespaceURIString()+"hasMember");
+ stateTeamMember = ((Resource)stateAuthorTeam.getObject()).listProperties(prop);
+ String memberString = null;
+ Person person;
+ for (Statement statement :stateTeamMember.toList()){
+ memberString =statement.getObject().toString();
+ if (memberString != null){
+ person = Person.NewTitledInstance(memberString);
+ authorTeam.addTeamMember(person);
+ }
+ }
+ }catch(Exception e){
+ System.err.println(e.getMessage());
+ }
+ }
+
+
+
+ nonViralName.setCombinationAuthorship(authorTeam);
+
+ //Annotations:
+ /*
+ * <tn:hasAnnotation>
+ <tn:NomenclaturalNote>
+ <tn:noteType rdf:resource="http://rs.tdwg.org/ontology/voc/TaxonName#replacementNameFor"/>
+ <tn:objectTaxonName rdf:resource="urn:lsid:ipni.org:names:151538-1"/>
+ </tn:NomenclaturalNote>
+ </tn:hasAnnotation>
+ */
+ /*
+ String strInfraspecificEpithet = nameAbout.getProperty(prop).getString();
+ tcsElementName = "basionymAuthorship";
+ String basionymAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);
+ if (basionymAuthorValue != null){
+ TeamOrPersonBase<?> basionymAuthor = Team.NewInstance();
+ basionymAuthor.setNomenclaturalTitle(basionymAuthorValue);
+ nonViralName.setBasionymAuthorship(basionymAuthor);
+ }
+
+ //TODO
+ tcsElementName = "combinationAuthorship";
+ String combinationAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);
+ if (combinationAuthorValue != null){
+ TeamOrPersonBase<?> combinationAuthor = Team.NewInstance();
+ combinationAuthor.setNomenclaturalTitle(combinationAuthorValue);
+ nonViralName.setCombinationAuthorship(combinationAuthor);
+ }
+
+ //set the authorshipCache
+ tcsElementName = "authorship";
+ String authorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);
+ String cache = nonViralName.getAuthorshipCache();
+ if ( authorValue != null){
+ //compare existing authorship cache with new one and check if it is necessary to
+ //make cache protected //TODO refinement
+ if (cache == null){
+ nonViralName.setAuthorshipCache(authorValue);
+ }else{
+ cache = basionymAuthorValue == null ? cache : cache.replace(basionymAuthorValue, "");
+ cache = combinationAuthorValue == null ? cache : cache.replace(combinationAuthorValue, "");
+ cache = cache.replace("\\(|\\)", "");
+ cache = cache.trim();
+ if (! cache.equals("")){
+ nonViralName.setAuthorshipCache(authorValue);
+ }
+ }
+ }*/
+ }
+ //ImportHelper.setOriginalSource(nameBase, config.getSourceReference(), nameAbout, idNamespace);
+
+ //checkAdditionalContents(elTaxonName, standardMappers, operationalMappers, unclearMappers);
+
+ return nameBase;
+
+ }catch(Exception e){
+ e.printStackTrace();
+ return null;
+ }
+ /*
+ //name
+ String strNameComplete = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "nameComplete", rdfNamespace);
+ nameBase.setTitleCache(strNameComplete, true);
+
+ //Reference
+ //TODO
+ String tcsElementName = "publishedIn";
+ Namespace tcsNamespace = config.getCommonNamespaceURIString();
+ String value = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, tcsNamespace);
+ if (value != null && value != ""){
+ IGeneric nomRef = ReferenceFactory.newGeneric(); //TODO
+ nomRef.setTitleCache(value, true);
+ nameBase.setNomenclaturalReference(nomRef);
+
+ //TODO
+ tcsElementName = "year";
+ tcsNamespace = taxonNameNamespace;
+ Integer year = null;
+ value = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, tcsNamespace);
+ if (value != null){
+ try {
+ year = Integer.valueOf(value);
+ TimePeriod timeP = TimePeriod.NewInstance(year);
+ nomRef.setDatePublished(timeP);
+ } catch (RuntimeException e) {
+ logger.warn("year could not be parsed");
+ }
+ }
+ if (config.isPublishReferences()){
+ ((Reference)nomRef).addMarker(Marker.NewInstance(MarkerType.PUBLISH(), false));
+ }
+ }
+
+ //Status
+ tcsNamespace = taxonNameNamespace;
+ Element elAnnotation = elTaxonName.getChild("hasAnnotation", tcsNamespace);
+ if (elAnnotation != null){
+ Element elNomenclaturalNote = elAnnotation.getChild("NomenclaturalNote", tcsNamespace);
+ if (elNomenclaturalNote != null){
+ String statusValue = (String)ImportHelper.getXmlInputValue(elNomenclaturalNote, "note", tcsNamespace);
+ String type = XmlHelp.getChildAttributeValue(elNomenclaturalNote, "type", tcsNamespace, "resource", rdfNamespace);
+ String tdwgType = "http://rs.tdwg.org/ontology/voc/TaxonName#PublicationStatus";
+ if (tdwgType.equalsIgnoreCase(type)){
+ try {
+ NomenclaturalStatusType statusType = TcsRdfTransformer.nomStatusString2NomStatus(statusValue);
+ //NomenclaturalStatusType statusType = NomenclaturalStatusType.getNomenclaturalStatusTypeByAbbreviation(statusValue);
+ if (statusType != null){
+ nameBase.addStatus(NomenclaturalStatus.NewInstance(statusType));
+ }
+ } catch (UnknownCdmTypeException e) {
+ if (! statusValue.equals("valid")){
+ logger.warn("Unknown NomenclaturalStatusType: " + statusValue);
+ }
+ }
+ }
+ }
+ }
+
+ if (nameBase instanceof NonViralName){
+ INonViralName nonViralName = nameBase;
+ String strGenusPart = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "genusPart", rdfNamespace);
+
+ //for names of rank genus the uninomial property should be used
+ if (strGenusPart == null){
+ strGenusPart = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "uninomial", rdfNamespace);
+ }
+ nonViralName.setGenusOrUninomial(strGenusPart);
+
+ String strInfragenericEpithet = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "infragenericEpithet", rdfNamespace);
+ nonViralName.setGenusOrUninomial(strInfragenericEpithet);
+
+
+
+ String strSpecificEpithet = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "specificEpithet", rdfNamespace);
+ nonViralName.setSpecificEpithet(strSpecificEpithet);
+
+ String strInfraspecificEpithet = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "infraspecificEpithet", rdfNamespace);
+ nonViralName.setInfraSpecificEpithet(strInfraspecificEpithet);
+ //AuthorTeams
+ //TODO
+ tcsElementName = "basionymAuthorship";
+ String basionymAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);
+ if (basionymAuthorValue != null){
+ TeamOrPersonBase<?> basionymAuthor = Team.NewInstance();
+ basionymAuthor.setNomenclaturalTitle(basionymAuthorValue);
+ nonViralName.setBasionymAuthorship(basionymAuthor);
+ }
+
+ //TODO
+ tcsElementName = "combinationAuthorship";
+ String combinationAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);
+ if (combinationAuthorValue != null){
+ TeamOrPersonBase<?> combinationAuthor = Team.NewInstance();
+ combinationAuthor.setNomenclaturalTitle(combinationAuthorValue);
+ nonViralName.setCombinationAuthorship(combinationAuthor);
+ }
+
+ //set the authorshipCache
+ tcsElementName = "authorship";
+ String authorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);
+ String cache = nonViralName.getAuthorshipCache();
+ if ( authorValue != null){
+ //compare existing authorship cache with new one and check if it is necessary to
+ //make cache protected //TODO refinement
+ if (cache == null){
+ nonViralName.setAuthorshipCache(authorValue);
+ }else{
+ cache = basionymAuthorValue == null ? cache : cache.replace(basionymAuthorValue, "");
+ cache = combinationAuthorValue == null ? cache : cache.replace(combinationAuthorValue, "");
+ cache = cache.replace("\\(|\\)", "");
+ cache = cache.trim();
+ if (! cache.equals("")){
+ nonViralName.setAuthorshipCache(authorValue);
+ }
+ }
+ }
+ }
+ ImportHelper.setOriginalSource(nameBase, config.getSourceReference(), nameAbout, idNamespace);
+
+ checkAdditionalContents(elTaxonName, standardMappers, operationalMappers, unclearMappers);
+
+ //nameId
+ //TODO
+ //ImportHelper.setOriginalSource(nameBase, tcsConfig.getSourceReference(), nameId);
+ //taxonNameMap.put(nameAbout, nameBase);
+ return nameBase;
+ }catch(UnknownCdmTypeException e){
+ e.printStackTrace();
+ }
+ return null;*/
+ }
+
+ protected TaxonName handleNameElement(Element elTaxonName, Namespace rdfNamespace, Namespace taxonNameNamespace, TcsRdfImportConfigurator config, MapWrapper<TaxonName> taxonNameMap){
+ String idNamespace = "TaxonName";
+ Attribute about = elTaxonName.getAttribute("about", rdfNamespace);
+
+ //create TaxonName element
+
+
+ String nameAbout = elTaxonName.getAttributeValue("about", rdfNamespace);
+ if (nameAbout == null){
+ nameAbout = XmlHelp.getChildAttributeValue(elTaxonName, "TaxonName", taxonNameNamespace, "about", rdfNamespace);
+ }
+
+
+ String strRank = XmlHelp.getChildAttributeValue(elTaxonName, "rankString", taxonNameNamespace, "rankString", rdfNamespace);
+ if (strRank == null){
+ strRank = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "rankString", rdfNamespace);
+
+ }
+
+ if (strRank == null){
+ strRank = XmlHelp.getChildAttributeValue(elTaxonName, "rank", taxonNameNamespace, "resource", rdfNamespace);
+
+ }
+
+ String strNomenclaturalCode = XmlHelp.getChildContentAttributeValue(elTaxonName, "TaxonName", taxonNameNamespace, "nomenclaturalCode", rdfNamespace);
+ if (strNomenclaturalCode == null){
+ strNomenclaturalCode = XmlHelp.getChildAttributeValue(elTaxonName, "nomenclaturalCode", taxonNameNamespace, "resource", rdfNamespace);
+
+ }
+ try {
+
+ Rank rank = TcsRdfTransformer.rankString2Rank(strRank);
+ NomenclaturalCode nomCode;
+ if (strNomenclaturalCode != null){
+ nomCode = TcsRdfTransformer.nomCodeString2NomCode(strNomenclaturalCode);
+ }else{
+ nomCode = NomenclaturalCode.ICNAFP;
+ }
+
+ TaxonName nameBase = nomCode.getNewTaxonNameInstance(rank);
+
+ Set<String> omitAttributes = null;
+ //makeStandardMapper(elTaxonName, nameBase, omitAttributes, standardMappers);
+
+ //name
+ String strNameComplete = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "nameComplete", rdfNamespace);
+ nameBase.setTitleCache(strNameComplete, true);
+
+ //Reference
+ //TODO
+ String tcsElementName = "publishedIn";
+ String tcsNamespace = config.getCommonNamespaceURIString();
+ /*String value = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, tcsNamespace);
+ if (value != null && value != ""){
+ IGeneric nomRef = ReferenceFactory.newGeneric(); //TODO
+ nomRef.setTitleCache(value, true);
+ nameBase.setNomenclaturalReference(nomRef);
+
+ //TODO
+ tcsElementName = "year";
+ tcsNamespace = taxonNameNamespace;
+ Integer year = null;
+ value = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, tcsNamespace);
+ if (value != null){
+ try {
+ year = Integer.valueOf(value);
+ TimePeriod timeP = TimePeriod.NewInstance(year);
+ nomRef.setDatePublished(timeP);
+ } catch (RuntimeException e) {
+ logger.warn("year could not be parsed");
+ }
+ }
+ if (config.isPublishReferences()){
+ ((Reference)nomRef).addMarker(Marker.NewInstance(MarkerType.PUBLISH(), false));
+ }
+ }
+
+ //Status
+ tcsNamespace = taxonNameNamespace;
+ Element elAnnotation = elTaxonName.getChild("hasAnnotation", tcsNamespace);
+ if (elAnnotation != null){
+ Element elNomenclaturalNote = elAnnotation.getChild("NomenclaturalNote", tcsNamespace);
+ if (elNomenclaturalNote != null){
+ String statusValue = (String)ImportHelper.getXmlInputValue(elNomenclaturalNote, "note", tcsNamespace);
+ String type = XmlHelp.getChildAttributeValue(elNomenclaturalNote, "type", tcsNamespace, "resource", rdfNamespace);
+ String tdwgType = "http://rs.tdwg.org/ontology/voc/TaxonName#PublicationStatus";
+ if (tdwgType.equalsIgnoreCase(type)){
+ try {
+ NomenclaturalStatusType statusType = TcsRdfTransformer.nomStatusString2NomStatus(statusValue);
+ //NomenclaturalStatusType statusType = NomenclaturalStatusType.getNomenclaturalStatusTypeByAbbreviation(statusValue);
+ if (statusType != null){
+ nameBase.addStatus(NomenclaturalStatus.NewInstance(statusType));
+ }
+ } catch (UnknownCdmTypeException e) {
+ if (! statusValue.equals("valid")){
+ logger.warn("Unknown NomenclaturalStatusType: " + statusValue);
+ }
+ }
+ }
+ }
+ }
+
+ if (nameBase instanceof NonViralName){
+ INonViralName nonViralName = nameBase;
+ String strGenusPart = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "genusPart", rdfNamespace);
+
+ //for names of rank genus the uninomial property should be used
+ if (strGenusPart == null){
+ strGenusPart = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "uninomial", rdfNamespace);
+ }
+ nonViralName.setGenusOrUninomial(strGenusPart);
+
+ String strInfragenericEpithet = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "infragenericEpithet", rdfNamespace);
+ nonViralName.setGenusOrUninomial(strInfragenericEpithet);
+
+
+
+ String strSpecificEpithet = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "specificEpithet", rdfNamespace);
+ nonViralName.setSpecificEpithet(strSpecificEpithet);
+
+ String strInfraspecificEpithet = XmlHelp.getChildContent(elTaxonName, "TaxonName", taxonNameNamespace, "infraspecificEpithet", rdfNamespace);
+ nonViralName.setInfraSpecificEpithet(strInfraspecificEpithet);
+ //AuthorTeams
+ //TODO
+ tcsElementName = "basionymAuthorship";
+ String basionymAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);
+ if (basionymAuthorValue != null){
+ TeamOrPersonBase<?> basionymAuthor = Team.NewInstance();
+ basionymAuthor.setNomenclaturalTitle(basionymAuthorValue);
+ nonViralName.setBasionymAuthorship(basionymAuthor);
+ }
+
+ //TODO
+ tcsElementName = "combinationAuthorship";
+ String combinationAuthorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);
+ if (combinationAuthorValue != null){
+ TeamOrPersonBase<?> combinationAuthor = Team.NewInstance();
+ combinationAuthor.setNomenclaturalTitle(combinationAuthorValue);
+ nonViralName.setCombinationAuthorship(combinationAuthor);
+ }
+
+ //set the authorshipCache
+ tcsElementName = "authorship";
+ String authorValue = (String)ImportHelper.getXmlInputValue(elTaxonName, tcsElementName, taxonNameNamespace);
+ String cache = nonViralName.getAuthorshipCache();
+ if ( authorValue != null){
+ //compare existing authorship cache with new one and check if it is necessary to
+ //make cache protected //TODO refinement
+ if (cache == null){
+ nonViralName.setAuthorshipCache(authorValue);
+ }else{
+ cache = basionymAuthorValue == null ? cache : cache.replace(basionymAuthorValue, "");
+ cache = combinationAuthorValue == null ? cache : cache.replace(combinationAuthorValue, "");
+ cache = cache.replace("\\(|\\)", "");
+ cache = cache.trim();
+ if (! cache.equals("")){
+ nonViralName.setAuthorshipCache(authorValue);
+ }
+ }
+ }
+ }
+ ImportHelper.setOriginalSource(nameBase, config.getSourceReference(), nameAbout, idNamespace);
+
+ checkAdditionalContents(elTaxonName, standardMappers, operationalMappers, unclearMappers);
+
+ //nameId
+ //TODO
+ //ImportHelper.setOriginalSource(nameBase, tcsConfig.getSourceReference(), nameId);
+ //taxonNameMap.put(nameAbout, nameBase);
+ return nameBase;
+ */}catch(UnknownCdmTypeException e){
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ public TaxonName handleRdfElementFromStream(InputStream is, TcsRdfImportConfigurator config, MapWrapper<TaxonName> taxonNameMap, String uri){
+ Model model = ModelFactory.createDefaultModel();
+ try{
+ model.read(is, null);
+
+ config.makeNamespaces(model);
+
+ String rdfNamespace = config.getRdfNamespaceURIString();
+ String taxonNameNamespace = config.getTnNamespaceURIString();
+ return handleNameModel(model, config, taxonNameMap, uri);
+
+
+ }catch(Exception e){
+ logger.debug("The file was no valid rdf file");
+ }
+
+
+
+ return null;
+ }
+
+}