merge-update from trunk
[cdmlib.git] / cdmlib-ext / src / main / java / eu / etaxonomy / cdm / ext / ipni / IpniService.java
index 56e7b65857e2127a430e7cd52670582151eb8b82..37d00782356ec19a0577892cb57f3293e25bf7ea 100644 (file)
@@ -31,7 +31,6 @@ import org.springframework.stereotype.Component;
 \r
 import eu.etaxonomy.cdm.api.application.ICdmApplicationConfiguration;\r
 import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade;\r
-import eu.etaxonomy.cdm.api.facade.DerivedUnitFacade.DerivedUnitType;\r
 import eu.etaxonomy.cdm.common.CdmUtils;\r
 import eu.etaxonomy.cdm.common.UriUtils;\r
 import eu.etaxonomy.cdm.model.agent.Person;\r
@@ -42,16 +41,18 @@ import eu.etaxonomy.cdm.model.common.Extension;
 import eu.etaxonomy.cdm.model.common.ExtensionType;\r
 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;\r
 import eu.etaxonomy.cdm.model.common.Language;\r
+import eu.etaxonomy.cdm.model.common.OriginalSourceType;\r
 import eu.etaxonomy.cdm.model.common.TimePeriod;\r
 import eu.etaxonomy.cdm.model.name.BotanicalName;\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.Rank;\r
+import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;\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
+import eu.etaxonomy.cdm.strategy.parser.TimePeriodParser;\r
 \r
 /**\r
 * @author a.mueller\r
@@ -165,6 +166,7 @@ public class IpniService  implements IIpniService{
                 AUTHOR,\r
                 NAME,\r
                 PUBLICATION,\r
+                ID\r
        }\r
        \r
        public enum IpniRank{\r
@@ -275,7 +277,7 @@ public class IpniService  implements IIpniService{
                result = buildAuthorList(content, services, config);\r
             }else if (serviceType.equals(ServiceType.NAME)){\r
                result = buildNameList(content, services, config);\r
-            }else{\r
+            }else {\r
                result = buildPublicationList(content, services, config);\r
             }\r
             if(responseCode == HttpURLConnection.HTTP_OK){\r
@@ -294,6 +296,43 @@ public class IpniService  implements IIpniService{
         // error\r
         return null;\r
     }\r
+       \r
+       public InputStream queryServiceForID (String request, URL serviceUrl){\r
+               \r
+               try {\r
+                       \r
+            // create the request url\r
+            URL newUrl = new URL(serviceUrl.getProtocol(),\r
+                                                     serviceUrl.getHost(),\r
+                                                     serviceUrl.getPort(),\r
+                                                     serviceUrl.getPath() \r
+                                                     + "?" + request);\r
+            \r
+            \r
+            URI newUri = newUrl.toURI();\r
+                       \r
+            logger.info("Firing request for URI: " + newUri);\r
+                \r
+            HttpResponse response = UriUtils.getResponse(newUri, null);\r
+            \r
+            int responseCode = response.getStatusLine().getStatusCode();\r
+            \r
+            // get the content at the resource\r
+            InputStream content = response.getEntity().getContent();\r
+            return content;\r
+           \r
+                  } catch (IOException e) {\r
+                   logger.error("No content for request: " + request);\r
+               } catch (URISyntaxException e) {\r
+                               logger.error("Given URL could not be transformed into URI", e);\r
+                       }\r
+         \r
+               return null;\r
+       \r
+       }\r
+\r
+       \r
+\r
 \r
        private List<Reference> buildPublicationList( InputStream content, ICdmApplicationConfiguration services, IIpniServiceConfigurator iConfig) throws IOException {\r
                IpniServicePublicationConfigurator config = (IpniServicePublicationConfigurator)iConfig;\r
@@ -350,7 +389,7 @@ public class IpniService  implements IIpniService{
                String author = valueMap.get(PUBLICATION_AUTHOR_TEAM);\r
                if (StringUtils.isNotBlank(author)){\r
                        Team team = Team.NewTitledInstance(author, author);\r
-                       ref.setAuthorTeam(team);\r
+                       ref.setAuthorship(team);\r
                }\r
                \r
                //remarks\r
@@ -360,24 +399,24 @@ public class IpniService  implements IIpniService{
 \r
 \r
                String tl2AuthorString = valueMap.get(TL2_AUTHOR);\r
-               if (ref.getAuthorTeam() == null){\r
+               if (ref.getAuthorship() == null){\r
                        Team tl2Author = Team.NewTitledInstance(tl2AuthorString, null);\r
-                       ref.setAuthorTeam(tl2Author);\r
+                       ref.setAuthorship(tl2Author);\r
                }else{\r
                        //TODO parse name, \r
-                       ref.getAuthorTeam().setTitleCache(tl2AuthorString, true);\r
+                       ref.getAuthorship().setTitleCache(tl2AuthorString, true);\r
                        ref.addAnnotation(Annotation.NewInstance(tl2AuthorString, AnnotationType.EDITORIAL(), Language.ENGLISH()));\r
                }\r
 \r
                \r
                //dates\r
-               TimePeriod date = TimePeriod.parseString(valueMap.get(DATE));\r
+               TimePeriod date = TimePeriodParser.parseString(valueMap.get(DATE));\r
                ref.setDatePublished(date);\r
 \r
 \r
                //source\r
                Reference citation = getIpniCitation(appConfig);\r
-               ref.addSource(valueMap.get(ID), "Publication", citation, valueMap.get(VERSION));\r
+               ref.addSource(OriginalSourceType.Lineage, valueMap.get(ID), "Publication", citation, valueMap.get(VERSION));\r
 \r
                \r
                \r
@@ -405,9 +444,11 @@ public class IpniService  implements IIpniService{
                \r
                String line = reader.readLine();\r
                while (StringUtils.isNotBlank(line)){\r
+                       \r
                        BotanicalName name = getNameFromLine(line,parameterMap, appConfig);\r
                        result.add(name);\r
                        line = reader.readLine();\r
+                       \r
                }\r
 \r
                \r
@@ -439,7 +480,7 @@ public class IpniService  implements IIpniService{
                //rank\r
                try {\r
                        String rankStr = nomalizeRank(valueMap.get(RANK));\r
-                       name.setRank(Rank.getRankByNameOrAbbreviation(rankStr, NomenclaturalCode.ICNAFP, true));\r
+                       name.setRank(Rank.getRankByNameOrIdInVoc(rankStr, NomenclaturalCode.ICNAFP, true));\r
                } catch (UnknownCdmTypeException e) {\r
                        logger.warn("Rank was unknown");\r
                }\r
@@ -449,9 +490,9 @@ public class IpniService  implements IIpniService{
                name.setCombinationAuthorTeam(Team.NewTitledInstance(valueMap.get(PUBLISHING_AUTHOR), valueMap.get(PUBLISHING_AUTHOR)));\r
                \r
                //publication\r
-               Reference ref = ReferenceFactory.newGeneric();\r
-               ref.setTitleCache(valueMap.get(PUBLICATION));\r
-               TimePeriod datePublished = TimePeriod.parseString(valueMap.get(PUBLICATION_YEAR_FULL));\r
+               Reference<?> ref = ReferenceFactory.newGeneric();\r
+               ref.setTitleCache(valueMap.get(PUBLICATION), true);\r
+               TimePeriod datePublished = TimePeriodParser.parseString(valueMap.get(PUBLICATION_YEAR_FULL));\r
                name.setNomenclaturalReference(ref);\r
                \r
                //name status\r
@@ -459,7 +500,7 @@ public class IpniService  implements IIpniService{
                String statusString = valueMap.get(NAME_STATUS);\r
                if (StringUtils.isNotBlank(statusString)){\r
                        try {\r
-                               statusType = NomenclaturalStatusType.getNomenclaturalStatusTypeByAbbreviation(statusString);\r
+                               statusType = NomenclaturalStatusType.getNomenclaturalStatusTypeByAbbreviation(statusString, name);\r
                                NomenclaturalStatus nomStatus = NomenclaturalStatus.NewInstance(statusType);\r
                                name.addStatus(nomStatus);\r
                        } catch (UnknownCdmTypeException e) {\r
@@ -483,12 +524,12 @@ public class IpniService  implements IIpniService{
                name.addReplacedSynonym(replacedSynoynm, null, null, null);\r
 \r
                //type information\r
-               DerivedUnitFacade specimen = DerivedUnitFacade.NewInstance(DerivedUnitType.Specimen);\r
+               DerivedUnitFacade specimen = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.PreservedSpecimen);\r
                \r
                \r
                //gathering period\r
                String collectionDateAsText = valueMap.get(COLLECTION_DATE_AS_TEXT);\r
-               TimePeriod gatheringPeriod = TimePeriod.parseString(collectionDateAsText);\r
+               TimePeriod gatheringPeriod = TimePeriodParser.parseString(collectionDateAsText);\r
                \r
                try {\r
                        gatheringPeriod.setStartDay(getIntegerDateValueOrNull(valueMap, COLLECTION_DAY1));\r
@@ -549,7 +590,7 @@ public class IpniService  implements IIpniService{
                \r
                //source\r
                Reference citation = getIpniCitation(appConfig);\r
-               name.addSource(valueMap.get(ID), "Name", citation, valueMap.get(VERSION));\r
+               name.addSource(OriginalSourceType.Lineage, valueMap.get(ID), "Name", citation, valueMap.get(VERSION));\r
                \r
                \r
 //             //TODO\r
@@ -671,13 +712,13 @@ public class IpniService  implements IIpniService{
                person.setFirstname(valueMap.get(DEFAULT_AUTHOR_FORENAME));\r
                person.setLastname(valueMap.get(DEFAULT_AUTHOR_SURNAME));\r
                \r
-               Reference citation = getIpniCitation(appConfig);\r
+               Reference<?> citation = getIpniCitation(appConfig);\r
                \r
                //id, version\r
-               person.addSource(valueMap.get(ID), "Author", citation, valueMap.get(VERSION));\r
+               person.addSource(OriginalSourceType.Lineage, valueMap.get(ID), "Author", citation, valueMap.get(VERSION));\r
                \r
                //dates\r
-               TimePeriod lifespan = TimePeriod.parseString(valueMap.get(DATES));\r
+               TimePeriod lifespan = TimePeriodParser.parseString(valueMap.get(DATES));\r
                person.setLifespan(lifespan);\r
                \r
                //alternative_names\r
@@ -699,7 +740,7 @@ public class IpniService  implements IIpniService{
 \r
        \r
        private Reference getIpniCitation(ICdmApplicationConfiguration appConfig) {\r
-               Reference ipniReference;\r
+               Reference<?> ipniReference;\r
                if (appConfig != null){\r
                        ipniReference = appConfig.getReferenceService().find(uuidIpni);\r
                        if (ipniReference == null){\r
@@ -717,7 +758,7 @@ public class IpniService  implements IIpniService{
         * @return\r
         */\r
        private Reference getNewIpniReference() {\r
-               Reference ipniReference;\r
+               Reference<?> ipniReference;\r
                ipniReference = ReferenceFactory.newDatabase();\r
                ipniReference.setTitleCache("The International Plant Names Index (IPNI)");\r
                return ipniReference;\r
@@ -882,6 +923,25 @@ public class IpniService  implements IIpniService{
                return serviceUrl;\r
        }\r
 \r
+\r
+       @Override\r
+       public InputStream getNamesById(String id) {\r
+               \r
+       \r
+               String request = "id="+id + "&output_format=lsid-metadata";\r
+               return queryServiceForID(request, getServiceUrl(IIpniService.ID_NAMESEARCH_SERVICE_URL));\r
+               \r
+       }\r
+       \r
+       @Override\r
+       public InputStream getPublicationsById(String id) {\r
+               \r
+       \r
+               String request = "id="+id ;\r
+               return queryServiceForID(request, getServiceUrl(IIpniService.ID_PUBLICATION_SERVICE_URL));\r
+               \r
+       }\r
+\r
                \r
        \r
 }\r