package eu.etaxonomy.cdm.strategy.cache.agent;\r
\r
import java.util.UUID;\r
+import java.util.regex.Matcher;\r
+import java.util.regex.Pattern;\r
\r
import org.apache.commons.lang.StringUtils;\r
import org.apache.log4j.Logger;\r
}else if (StringUtils.isBlank(firstname)){\r
return "";\r
}\r
+ //remove brackets\r
+ final String regex = "\\([^)]*\\)";\r
+ final Pattern pattern = Pattern.compile(regex);\r
+ final Matcher matcher = pattern.matcher(firstname);\r
+ firstname = matcher.replaceAll("").replaceAll("\\s\\s", " ");\r
+\r
String result = "";\r
String[] splits = firstname.split("((?<=\\.)|\\s+|(?=([\\-\u2013])))+"); // [\\-\u2013]? // (?!=\\s) wasn't successful to trim\r
for (String split : splits){\r
split = split.trim();\r
- if (StringUtils.isBlank(split)){\r
+ if (StringUtils.isBlank(split) || split.matches("\\(.*\\)")){ //again checking brackets not really necessary\r
continue;\r
}\r
if (split.matches("^[\\-\u2013].*")){\r
firstname = "Pe. Y.";\r
Assert.assertEquals("Pe.Y.", formatter.getInitialsFromFirstname(firstname, force));\r
\r
+ //brackets\r
+ force = true;\r
+ firstname = "Constantin (Konstantin) Georg Alexander";\r
+ Assert.assertEquals("C.G.A.", formatter.getInitialsFromFirstname(firstname, force));\r
+ firstname = "Franz (Joseph Andreas Nicolaus)";\r
+ Assert.assertEquals("F.", formatter.getInitialsFromFirstname(firstname, force));\r
+ firstname = "Viktor V. (W.W.)";\r
+ Assert.assertEquals("V.V.", formatter.getInitialsFromFirstname(firstname, force));\r
+ firstname = "(Georg Ferdinand) Otto";\r
+ Assert.assertEquals("O.", formatter.getInitialsFromFirstname(firstname, force));\r
+ firstname = "(Sébastien-) René";\r
+ Assert.assertEquals("R.", formatter.getInitialsFromFirstname(firstname, force));\r
+ firstname = "Joyce (M.) Chismore Lewin";\r
+ Assert.assertEquals("J.C.L.", formatter.getInitialsFromFirstname(firstname, force));\r
+ firstname = "Joyce (M.) Chismore Lewin";\r
+ Assert.assertEquals("J.C.L.", formatter.getInitialsFromFirstname(firstname, force));\r
+\r
+// "Robert. K." wurde auf "Robert. K." gemapped\r
\r
//must not throw exception (exact result may change in future)\r
firstname = "W.-H.-";\r
import java.sql.ResultSet;
import java.sql.SQLException;
+import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import eu.etaxonomy.cdm.common.CdmUtils;
PersonDefaultCacheStrategy formatter = PersonDefaultCacheStrategy.NewInstance();
String sqlCopyFirstname = "UPDATE AgentBase SET initials = firstname WHERE DTYPE='Person'"
- + " AND firstname IS NOT NULL ";
+ + " AND firstname IS NOT NULL AND initials IS NULL ";
- String sqlRemoveFirstname = "UPDATE AgentBase SET firstname = %s, initials = '%s' WHERE id = %d";
+ String sqlRemoveFirstname = "UPDATE AgentBase SET firstname = %s, initials = %s WHERE id = %d";
String sqlSelectInitials = "SELECT id, firstname FROM AgentBase WHERE DTYPE='Person'"
- + " AND firstname IS NOT NULL ";
+ + " AND firstname IS NOT NULL AND initials = firstname ";
- datasource.executeUpdate(sqlCopyFirstname);
+ int n = datasource.executeUpdate(sqlCopyFirstname);
ResultSet rs = datasource.executeQuery(sqlSelectInitials);
while (rs.next()){
firstnameSql = " null ";
initialsSql = initialsForced;
}else if (CdmUtils.equalsIgnoreWS(firstname, initialsAllow)){
- //firstname has only abbreviations, but not all of them being 1-letter, keep everything
+ //first name has only abbreviations, but not all of them being 1-letter, keep everything
firstnameSql = " firstname ";
initialsSql = initialsAllow;
}else {
- //firstname has non abbreviated parts, keep it as it is and use initials forced as initials
+ //first name has non abbreviated parts, keep it as it is and use initials forced as initials
firstnameSql = " firstname ";
initialsSql = initialsForced;
}
if (initialsSql!= null){
initialsSql = initialsSql.replace("'", "\\'");
}
+ //handle blank
+ if (StringUtils.isBlank(firstname)){
+ firstnameSql = " null ";
+ initialsSql = " null ";
+ }else {
+ initialsSql = "'" + initialsSql + "'";
+ }
String sql = String.format(sqlRemoveFirstname, firstnameSql, initialsSql, id);
//remove old relationship