merge-update from trunk
[cdmlib.git] / cdmlib-ext / src / main / java / eu / etaxonomy / cdm / ext / ipni / IpniService.java
index 72f64c73ccd7ac4b7e9c97dde06986e6ca8bea69..37d00782356ec19a0577892cb57f3293e25bf7ea 100644 (file)
@@ -52,7 +52,7 @@ import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
 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
@@ -166,6 +166,7 @@ public class IpniService  implements IIpniService{
                 AUTHOR,\r
                 NAME,\r
                 PUBLICATION,\r
+                ID\r
        }\r
        \r
        public enum IpniRank{\r
@@ -276,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
@@ -295,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
@@ -351,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
@@ -361,18 +399,18 @@ 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
@@ -406,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
@@ -440,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
@@ -450,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
@@ -460,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
@@ -489,7 +529,7 @@ public class IpniService  implements IIpniService{
                \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
@@ -678,7 +718,7 @@ public class IpniService  implements IIpniService{
                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
@@ -883,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