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
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
*/\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
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
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
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