package se.idega.idegaweb.commune.block.importer.business; import java.util.StringTokenizer; import com.idega.block.importer.business.ImportBusinessBean; import com.idega.data.IDOStoreException; import com.idega.user.data.User; import com.idega.util.text.TextSoap; /** * @author gimmi */ public class NackaImportBusinessBean extends ImportBusinessBean implements NackaImportBusiness { /** * @param updateName * @param user */ public User handleNames(User user, String firstName, String middleName, String lastName, String preferredNameIndex, boolean store) { boolean updateName = false; if (firstName == null || firstName.trim().equals("")) { if (user.getFirstName() != null) { firstName = user.getFirstName(); } else { firstName = ""; } } /* * Setting middleName as "", required for the rest of the code */ if (middleName != null && !middleName.equals("")) { firstName = firstName + " " + middleName; middleName = ""; } else { middleName = ""; } if (lastName == null || lastName.trim().equals("")) { if (user.getLastName() != null) { lastName = user.getLastName(); } else { lastName = ""; } } if (preferredNameIndex == null) { preferredNameIndex = "10"; } StringBuffer fullname = new StringBuffer(); /* * Preferred name handling. */ if (preferredNameIndex != null) { fullname.append(firstName).append(" ").append(middleName).append(" ").append(lastName); int index = Integer.parseInt(preferredNameIndex); int refName1 = index / 10; int refName2 = index % 10; if (refName2 > 0) { String fullName = fullname.toString(); String preferredName1 = getValueAtIndexFromNameString(refName1, fullName); String preferredName2 = getValueAtIndexFromNameString(refName2, fullName); firstName = preferredName1 + " " + preferredName2; firstName = TextSoap.findAndReplace(firstName, " ", " "); /* * Remember MIDDLE NAME is always "" in the beginning. Removing * lastName since last name should only be changed when moving * name to firstName */ middleName = TextSoap.findAndCut(fullName, lastName); middleName = TextSoap.findAndCut(middleName, preferredName1); middleName = TextSoap.findAndCut(middleName, preferredName2); middleName = TextSoap.findAndReplace(middleName, " ", " "); lastName = TextSoap.findAndCut(lastName, preferredName2); lastName = TextSoap.findAndReplace(lastName, " ", " "); updateName = true; } else if (refName1 > 0) { String fullName = fullname.toString(); String preferredName = getValueAtIndexFromNameString(refName1, fullName); if (middleName.equals("")) { middleName = firstName; } else { if (middleName.startsWith(" ")) { middleName = firstName + middleName; } else { middleName = firstName + " " + middleName; } } firstName = preferredName; middleName = TextSoap.findAndCut(middleName, preferredName); middleName = TextSoap.findAndReplace(middleName, " ", " "); if (refName1 > 1 && !lastName.equals(preferredName)) { lastName = TextSoap.findAndCut(lastName, preferredName); lastName = TextSoap.findAndReplace(lastName, " ", " "); } updateName = true; } } if (lastName.startsWith("Van ") && !updateName) { StringBuffer half = new StringBuffer(); half.append(firstName).append(" ").append(middleName); String halfName = half.toString(); firstName = getValueAtIndexFromNameString(1, halfName); middleName = halfName.substring(Math.min(halfName.indexOf(" ") + 1, halfName.length()), halfName.length()); middleName = TextSoap.findAndReplace(middleName, " ", " "); updateName = true; } /* * Needed because createUser uses the method setFullName that splits the * name with it's own rules */ if (updateName) { if (firstName != null) { if (firstName.endsWith(" ")) firstName = firstName.substring(0, firstName.length() - 1); } if (middleName != null) { if (middleName.startsWith(" ")) middleName = middleName.substring(1, middleName.length()); if (middleName.endsWith(" ")) middleName = middleName.substring(0, middleName.length() - 1); } if (lastName != null) { if (lastName.startsWith(" ")) lastName = lastName.substring(1, lastName.length()); if (lastName.endsWith(" ")) lastName = lastName.substring(0, lastName.length() - 1); } user.setFirstName(firstName); user.setMiddleName(middleName); user.setLastName(lastName); } if (store) { try { user.store(); } catch (IDOStoreException e) { throw e; } } return user; } private String getValueAtIndexFromNameString(int index, String name) { int i = 1; StringTokenizer tokens = new StringTokenizer(name); String value = null; while (tokens.hasMoreTokens() && i <= index) { value = tokens.nextToken(); i++; } return value; } }