merge conflict
[cdmlib-apps.git] / cdm-pesi / src / main / java / eu / etaxonomy / cdm / io / pesi / faunaEuropaea / FaunaEuropaeaAuthorImport.java
index 7a7257294e7a5e17f7f43ae1b6a49db39b994b2d..849299f640025c72889d91aa5b074bdb7e7971aa 100644 (file)
@@ -13,6 +13,7 @@ import java.sql.SQLException;
 import java.util.Collection;\r
 import java.util.Map;\r
 \r
+import org.apache.commons.lang.StringUtils;\r
 import org.apache.log4j.Logger;\r
 import org.springframework.stereotype.Component;\r
 import org.springframework.transaction.TransactionStatus;\r
@@ -25,6 +26,7 @@ import eu.etaxonomy.cdm.model.agent.Person;
 import eu.etaxonomy.cdm.model.agent.Team;\r
 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;\r
 import eu.etaxonomy.cdm.model.common.CdmBase;\r
+import eu.etaxonomy.cdm.strategy.parser.NonViralNameParserImpl;\r
 \r
 \r
 /**\r
@@ -34,11 +36,24 @@ import eu.etaxonomy.cdm.model.common.CdmBase;
  */\r
 @Component\r
 public class FaunaEuropaeaAuthorImport extends FaunaEuropaeaImportBase {\r
-       private static final Logger logger = Logger.getLogger(FaunaEuropaeaAuthorImport.class);\r
+\r
+    /**\r
+     *\r
+     */\r
+    private static final long serialVersionUID = 1L;\r
+\r
+    private static final Logger logger = Logger.getLogger(FaunaEuropaeaAuthorImport.class);\r
 \r
        private static int modCount = 1000;\r
        private final static String authorSeparator = ", ";\r
        private final static String lastAuthorSeparator = " & ";\r
+       private static String capitalWord = "\\p{javaUpperCase}\\p{javaLowerCase}*";\r
+        protected static String fWs = "\\s*";\r
+        protected static String oWs = "\\s+";\r
+        protected static String finalTeamSplitter = "(" + fWs + "(&)" + fWs + "|" + oWs + "et" + oWs + ")";\r
+       protected static String notFinalTeamSplitter = "((?:" + fWs + "," + fWs + ")(?!([A-Z][\\.]))"+"|" + finalTeamSplitter + ")";\r
+       protected static String test = "(, \\s(?!([A-Z].|\\s|$))|,$)" ;\r
+       //protected static String test = "((,\\s("+capitalWord+")+)|(,($|,?!(\\s))))";\r
 \r
 \r
        /* (non-Javadoc)\r
@@ -113,17 +128,22 @@ public class FaunaEuropaeaAuthorImport extends FaunaEuropaeaImportBase {
                                TeamOrPersonBase<?> author = null;\r
 \r
                                try {\r
-                                   author = parseAuthorString(authorName);\r
-                                   ImportHelper.setOriginalSource(author, fauEuConfig.getSourceReference(), authorId, namespace);\r
-\r
-                                       if (!authorStore.containsId(authorId)) {\r
-                                               authorStore.put(authorId, author);\r
-                                               if (logger.isDebugEnabled()) { logger.debug("Stored author (" + authorId + ") " + authorName); }\r
-                                       } else {\r
-                                               logger.warn("Not imported author with duplicated aut_id (" + authorId + ") " + authorName);\r
-                                       }\r
+                                   NonViralNameParserImpl parser = NonViralNameParserImpl.NewInstance();\r
+\r
+                               if (StringUtils.isNotBlank(authorName)){\r
+                                   //author = parser.author(authorName);\r
+                                   author = this.parseNomAuthorString(authorName);\r
+                               ImportHelper.setOriginalSource(author, fauEuConfig.getSourceReference(), authorId, namespace);\r
+\r
+                                       if (!authorStore.containsId(authorId)) {\r
+                                               authorStore.put(authorId, author);\r
+                                               if (logger.isDebugEnabled()) { logger.debug("Stored author (" + authorId + ") " + authorName); }\r
+                                       } else {\r
+                                               logger.warn("Not imported author with duplicated aut_id (" + authorId + ") " + authorName);\r
+                                       }\r
+                               }\r
                                } catch (Exception e) {\r
-                                       logger.warn("An exception occurred when creating author with id " + authorId + ". Author could not be saved.");\r
+                                       logger.warn("An exception occurred when creating author with id " + authorId + ". Author could not be saved." + e.getMessage());\r
                                }\r
                        }\r
 \r
@@ -154,7 +174,7 @@ public class FaunaEuropaeaAuthorImport extends FaunaEuropaeaImportBase {
                return ! state.getConfig().isDoAuthors();\r
        }\r
 \r
-       public static TeamOrPersonBase<?> parseAuthorString(String authorName){\r
+       public static TeamOrPersonBase<?> parseAuthorStringOld(String authorName){\r
            TeamOrPersonBase<?> author = null;\r
            String[] teamMembers = authorName.split(authorSeparator);\r
         String lastMember;\r
@@ -199,4 +219,57 @@ public class FaunaEuropaeaAuthorImport extends FaunaEuropaeaImportBase {
         return author;\r
        }\r
 \r
+    /**\r
+     * @param refAuthor\r
+     * @return\r
+     */\r
+    public static TeamOrPersonBase<?> parseNomAuthorString(String refAuthor) {\r
+        TeamOrPersonBase<?> author = null;\r
+        //possible strings: Lastname, A., Lastname B. & Lastname C.\r
+        //Lastname A, Lastname B & Lastname\r
+        //Lastname A Lastname B & Lastname C\r
+        //Lastname, J & Lastname, L\r
+        String[] firstTeamMembers = refAuthor.split(finalTeamSplitter);\r
+        String[] teamMembers = null;\r
+        String lastMember = null;\r
+        lastMember = firstTeamMembers[firstTeamMembers.length-1];\r
+\r
+        if (firstTeamMembers.length == 2){\r
+            teamMembers = firstTeamMembers[0].split(test);\r
+        }\r
+        Person teamMember;\r
+        author = Team.NewInstance();\r
+        if (teamMembers != null){\r
+            for(String member:teamMembers){\r
+                if (!member.trim().equals("")){\r
+                    teamMember = Person.NewInstance();\r
+                    teamMember.setTitleCache(member, true);\r
+                   ((Team)author).addTeamMember(teamMember);\r
+                }\r
+            }\r
+            teamMember = Person.NewInstance();\r
+            teamMember.setTitleCache(lastMember, true);\r
+            ((Team)author).addTeamMember(teamMember);\r
+\r
+        }else{\r
+            teamMembers = lastMember.split(test);\r
+            if (teamMembers.length >1){\r
+                for(String member:teamMembers){\r
+                    if (!member.trim().equals("")){\r
+                        teamMember = Person.NewInstance();\r
+                        teamMember.setTitleCache(member, true);\r
+                       ((Team)author).addTeamMember(teamMember);\r
+                    }\r
+                }\r
+            }else{\r
+                author = Person.NewInstance();\r
+                author.setTitleCache(lastMember, true);\r
+            }\r
+\r
+\r
+        }\r
+        author.getTitleCache();\r
+        return author;\r
+    }\r
+\r
 }\r