package se.idega.idegaweb.commune.block.importer.business; import is.idega.block.family.business.FamilyLogic; import java.io.IOException; import java.io.LineNumberReader; import java.io.StringReader; import java.rmi.RemoteException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Vector; import javax.ejb.CreateException; import javax.ejb.EJBException; import javax.ejb.FinderException; import javax.ejb.RemoveException; import se.idega.idegaweb.commune.block.importer.business.SKVEntryHolder.SKVRelativeEntryHolder; import se.idega.idegaweb.commune.block.importer.data.SKVUserCivilStatus; import se.idega.idegaweb.commune.block.importer.data.SKVUserCivilStatusHome; import se.idega.idegaweb.commune.block.importer.data.SKVUserExtraInfo; import se.idega.idegaweb.commune.block.importer.data.SKVUserExtraInfoHome; import se.idega.idegaweb.commune.business.CommuneUserBusiness; import com.idega.block.importer.business.ImportFileHandler; import com.idega.block.importer.data.ImportFile; import com.idega.business.IBOLookup; import com.idega.business.IBOLookupException; import com.idega.business.IBORuntimeException; import com.idega.business.IBOServiceBean; import com.idega.core.location.business.AddressBusiness; import com.idega.core.location.business.CommuneBusiness; import com.idega.core.location.data.Address; import com.idega.core.location.data.AddressCoordinate; import com.idega.core.location.data.AddressCoordinateHome; import com.idega.core.location.data.AddressHome; import com.idega.core.location.data.AddressType; import com.idega.core.location.data.AddressTypeHome; import com.idega.core.location.data.Commune; import com.idega.core.location.data.Country; import com.idega.core.location.data.CountryHome; import com.idega.core.location.data.PostalCode; import com.idega.data.IDOLookup; import com.idega.data.IDOLookupException; import com.idega.data.IDORemoveRelationshipException; import com.idega.presentation.IWContext; import com.idega.user.data.Gender; import com.idega.user.data.GenderHome; import com.idega.user.data.Group; import com.idega.user.data.User; import com.idega.util.IWTimestamp; import com.idega.util.Timer; /** * SKVImportFileHandlerBean * * Last modified: $Date: 2006/12/14 12:09:32 $ by $Author: palli $ * * @author <a href="mailto:palli@idega.com">palli</a> * @version $Revision: 1.1.2.10 $ */ public class SKVImportFileHandlerBean extends IBOServiceBean implements SKVImportFileHandler, ImportFileHandler { private static Gender MALE = null; private static Gender FEMALE = null; private ImportFile iFile = null; private User performer = null; private List failedRecords = null; private Collection TFlist = null; private Map coordinateMap = null; public SKVImportFileHandlerBean() { } public static void main(String args[]) { /* * File file = new File("/Users/bluebottle/kiw0182.stoffe6.txt"); * SKVImportFileHandlerBean bean = new SKVImportFileHandlerBean(); * ImportFile iFile = new SKVImportFile(file); String item; while * (!(item = (String) iFile.getNextRecord()).equals("")) { try { * bean.processRecord(item); } catch (IOException e) { * e.printStackTrace(); } } */ for (int i = 0; i < 10000; i++) { System.out.println((int) Math.floor(Math.random() * 90.0d + 10.0d)); } } public synchronized boolean handleRecords() { failedRecords = new ArrayList(); try { performer = IWContext.getInstance().getCurrentUser(); } catch (Exception ex) { performer = null; } Timer clock = new Timer(); clock.start(); try { // Initialize the default/home commune // homeCommune = getCommuneHome().findDefaultCommune(); // HOME_COMMUNE_CODE = homeCommune.getCommuneCode(); // initialize business beans and data homes TFlist = new Vector(); Collection row1 = new Vector(); row1.add("Personal ID changes and secret persons"); TFlist.add(row1); log("SKVImportFileHandler [STARTING] time: " + IWTimestamp.getTimestampRightNow().toString()); // iterate through the records and process them String item; int count = 0; while (!(item = (String) iFile.getNextRecord()).equals("")) { count++; if (!processRecord(item)) { failedRecords.add(item); } if ((count % 250) == 0) { log("SKVImportFileHandler processing RECORD [" + count + "] time: " + IWTimestamp.getTimestampRightNow().toString()); } item = null; } clock.stop(); log("Time to handleRecords: " + clock.getTime() + " ms OR " + ((int) (clock.getTime() / 1000)) + " s."); /* * if (TFlist.size() > 1) { // Header is line 1... if nothing * else... then nothing to report * getImportBusiness().addExcelReport(file.getFile(), "report", * TFlist, "\n"); } */ return true; } catch (Exception ex) { ex.printStackTrace(); return false; } } private boolean processRecord(String record) throws IOException { LineNumberReader lnr = new LineNumberReader(new StringReader(record)); String line = null; SKVEntryHolder entryHolder = new SKVEntryHolder(); SKVEntryHolder.SKVRelativeEntryHolder relativeEntryHolder = null; String relPin = null; String relAltPin = null; String relType = null; String relFirstName = null; String relMiddleName = null; String relLastName = null; String relDeactivationCode = null; String relDeactivationDate = null; while ((line = lnr.readLine()) != null) { if (line.length() > 4) { if (line.substring(0, 4).equals(SKVConstants.ENTRY_START)) { String actionString = line.substring(4, 9); if (actionString .equals(SKVConstants.COLUMN_RELATIONAL_SECTION_STARTS)) { relativeEntryHolder = entryHolder .getNewRelativeEntryHolder(); relPin = null; relAltPin = null; relType = null; relFirstName = null; relMiddleName = null; relLastName = null; relDeactivationDate = null; relDeactivationCode = null; } else if (actionString .equals(SKVConstants.COLUMN_RELATIONAL_SECTION_ENDS)) { relativeEntryHolder .setRelativeAlternativePin(relAltPin); relativeEntryHolder.setRelativeFirstName(relFirstName); relativeEntryHolder.setRelativeLastName(relLastName); relativeEntryHolder .setRelativeMiddleName(relMiddleName); relativeEntryHolder.setRelativePin(relPin); relativeEntryHolder.setRelativeType(relType); relativeEntryHolder .setRelativeDeactivationCode(relDeactivationCode); relativeEntryHolder .setRelativeDeactivationDate(relDeactivationDate); entryHolder.addRelative(relativeEntryHolder); } else if (actionString .equals(SKVConstants.COLUMN_RELATIVE_PIN) || actionString .equals(SKVConstants.COLUMN_RELATIVE_ALTERNATIVE_PIN) || actionString .equals(SKVConstants.COLUMN_RELATIVE_FIRST_NAME) || actionString .equals(SKVConstants.COLUMN_RELATIVE_LAST_NAME) || actionString .equals(SKVConstants.COLUMN_RELATIVE_MIDDLE_NAME) || actionString .equals(SKVConstants.COLUMN_RELATIVE_TYPE) || actionString .equals(SKVConstants.COLUMN_RELATIVE_DEACTIVATION_CODE) || actionString .equals(SKVConstants.COLUMN_RELATIVE_DEACTIVATION_DATE)) { String value = line.substring(10); if (actionString .equals(SKVConstants.COLUMN_RELATIVE_PIN)) { relPin = value; } else if (actionString .equals(SKVConstants.COLUMN_RELATIVE_ALTERNATIVE_PIN)) { relAltPin = value; } else if (actionString .equals(SKVConstants.COLUMN_RELATIVE_FIRST_NAME)) { relFirstName = value; } else if (actionString .equals(SKVConstants.COLUMN_RELATIVE_LAST_NAME)) { relLastName = value; } else if (actionString .equals(SKVConstants.COLUMN_RELATIVE_MIDDLE_NAME)) { relMiddleName = value; } else if (actionString .equals(SKVConstants.COLUMN_RELATIVE_TYPE)) { relType = value; } else if (actionString .equals(SKVConstants.COLUMN_RELATIVE_DEACTIVATION_CODE)) { relDeactivationCode = value; } else if (actionString .equals(SKVConstants.COLUMN_RELATIVE_DEACTIVATION_DATE)) { relDeactivationDate = value; } } else if (!actionString .equals(SKVConstants.COLUMN_CITIZEN_INFO_SECTION_STARTS) && !actionString .equals(SKVConstants.COLUMN_CITIZEN_INFO_SECTION_ENDS)) { if (line.length() > 9) { String value = line.substring(10); entryHolder.setAttribute(actionString, value); } } } } } if (!entryHolder.isEmpty()) { // System.out.println("entry = " + entryHolder.toString()); processEntry(entryHolder); } else { System.out.println("Entry is empty"); } return true; } private boolean processEntry(SKVEntryHolder entry) { boolean movingFromCommune = false; boolean movingFromCountry = false; boolean isDisabled = false; boolean deceased = false; boolean pinChanged = false; boolean newPerson = false; User user = null; String deactivationCode = entry.getDeactivationCode(); if (deactivationCode != null) { if (deactivationCode.equals(SKVConstants.DEACTIVATION_CODE_DEATH)) { deceased = true; } else if (deactivationCode .equals(SKVConstants.DEACTIVATION_CODE_OLD_PIN)) { pinChanged = true; } else if (deactivationCode .equals(SKVConstants.DEACTIVATION_CODE_EMIGRATED)) { movingFromCountry = true; movingFromCommune = true; } else if (deactivationCode .equals(SKVConstants.DEACTIVATION_CODE_OTHER) || deactivationCode .equals(SKVConstants.DEACTIVATION_CODE_OTHER2) || deactivationCode .equals(SKVConstants.DEACTIVATION_CODE_OTHER3) || deactivationCode .equals(SKVConstants.DEACTIVATION_CODE_OTHER4)) { movingFromCommune = true; isDisabled = true; } } if (!pinChanged) { if (entry.getReferencePin() != null && !entry.getReferencePin().equals("")) { pinChanged = true; } } try { if (pinChanged) { user = handlePinChanged(entry); } else { user = getCommuneUserBusiness().getUser(entry.getPin()); } } catch (RemoteException e) { e.printStackTrace(); return false; } catch (FinderException e) { newPerson = true; } String secrecyCode = entry.getSecrecy(); if (secrecyCode != null && "J".equals(secrecyCode)) { Collection coll = new Vector(); coll.add(entry.getPin() + "\t(secret person)"); TFlist.add(coll); if (newPerson) { return true; } handleCitizenGroup(user, movingFromCommune, entry); return handleSecretPerson(user, entry); } if (deceased) { if (newPerson) { return true; } return handleDeceased(user, entry.getDeactivationDate()); } if (isDisabled) { if (newPerson) { return true; } handleCitizenGroup(user, movingFromCommune, entry); return handleDisabled(user); } Gender gender = getGenderFromPin(entry.getPin()); IWTimestamp dateOfBirth = getBirthDateFromPin(entry.getPin()); try { user = getCommuneUserBusiness().createOrUpdateCitizenByPersonalID( entry.getFirstName(), entry.getFirstPartOfLastName(), entry.getLastName(), entry.getPin(), gender, dateOfBirth); user = getImportBusiness().handleNames(user, entry.getFirstName(), entry.getFirstPartOfLastName(), entry.getLastName(), entry.getPreferredFirstNameIndex(), true); if (entry.getDisplayName() != null && !"".equals(entry.getDisplayName().trim())) { user.setDisplayName(entry.getDisplayName()); } } catch (Exception e) { e.printStackTrace(); return false; } if (!movingFromCommune) { movingFromCommune = !isHomeCommune(entry); } handleCitizenGroup(user, movingFromCommune, entry); if (!handleAddress(user, entry, movingFromCountry)) { return false; } if (!handleRelations(user, entry)) { return false; } if (!handleExtraInfo(user, entry)) { return false; } return true; } private User handlePinChanged(SKVEntryHolder entry) throws RemoteException, FinderException { User emptyUser = getEmptyNewUser(entry.getPin()); boolean returnEmptyUser = false; if (emptyUser != null) { IWTimestamp creationDate = new IWTimestamp(emptyUser.getCreated()); creationDate.setAsDate(); IWTimestamp now = IWTimestamp.RightNow(); now.setAsDate(); if (now.equals(creationDate)) { try { getCommuneUserBusiness().getUser(entry.getReferencePin()); deleteEmptyUser(emptyUser); } catch (FinderException e) { returnEmptyUser = true; } } else { returnEmptyUser = true; try { User newUser = getCommuneUserBusiness().getUser(entry.getReferencePin()); deleteEmptyUser(newUser); } catch (FinderException e) { } } } User user = null; if (returnEmptyUser) { user = emptyUser; } else { user = getCommuneUserBusiness().getUser(entry.getReferencePin()); } user.setPersonalID(entry.getPin()); user.store(); return user; } private void deleteEmptyUser(User user) { try { getFamilyLogic().removeAllFamilyRelationsForUser(user); } catch (RemoteException e) { e.printStackTrace(); } user.setPersonalID(user.getPersonalID().substring(0, 8) + "REPL"); user.setDeleted(true); user.setDeletedBy(((Integer) performer.getPrimaryKey()).intValue()); user.setDeletedWhen(IWTimestamp.getTimestampRightNow()); user.store(); } private User getEmptyNewUser(String pin) { User user = null; try { user = getCommuneUserBusiness().getUser(pin); } catch (RemoteException e) { e.printStackTrace(); } catch (FinderException e) { } return user; } private void handleCitizenGroup(User user, boolean movingFromCommune, SKVEntryHolder entry) { try { if (movingFromCommune) { if (entry != null && entry.getDeactivationDate() != null) { getCommuneUserBusiness().moveCitizenFromCommune( user, getDateFromString(entry.getDeactivationDate()) .getTimestamp(), performer); } else { getCommuneUserBusiness().moveCitizenFromCommune(user, IWTimestamp.getTimestampRightNow(), performer); } } else { if (entry != null && entry.getDeactivationDate() != null) { getCommuneUserBusiness().moveCitizenToCommune( user, getDateFromString(entry.getDeactivationDate()) .getTimestamp(), performer); } else { getCommuneUserBusiness().moveCitizenToCommune(user, IWTimestamp.getTimestampRightNow(), performer); } } } catch (Exception e) { } } private boolean handleExtraInfo(User user, SKVEntryHolder entry) { try { SKVUserExtraInfoHome ueih = (SKVUserExtraInfoHome) IDOLookup .getHome(SKVUserExtraInfo.class); SKVUserExtraInfo info = null; try { info = ueih.findByUser(user); } catch (FinderException e) { try { info = ueih.create(); } catch (CreateException e1) { return false; } } if (entry.getBirthParish() != null) { info.setBirthParish(entry.getBirthParish()); } if (entry.getBirthCounty() != null) { info.setBirthCounty(Integer.parseInt(entry.getBirthCounty())); } if (entry.getCitizenshipCode() != null) { info.setCitizenshipCode(entry.getCitizenshipCode()); } if (entry.getCitizenshipDate() != null) { info.setCitizenshipDate(getDateFromString( entry.getCitizenshipDate()).getDate()); } if (entry.getCivilStatusDate() != null) { info.setCivilStatusDate(getDateFromString( entry.getCivilStatusDate()).getDate()); } if (entry.getCivilStatusCode() != null) { try { SKVUserCivilStatusHome ucsh = (SKVUserCivilStatusHome) IDOLookup .getHome(SKVUserCivilStatus.class); SKVUserCivilStatus status = ucsh.findByStatusCode(entry .getCivilStatusCode()); info.setUserCivilStatus(status); } catch (Exception e) { e.printStackTrace(); } } if (entry.getForeignBirthCity() != null) { info.setForeignBirthCity(entry.getForeignBirthCity()); } if (entry.getForeignBirthCountry() != null) { info.setForeignBirthCountry(entry.getForeignBirthCountry()); } if (entry.getImmigrationDate() != null) { info.setImigrationDate(getDateFromString( entry.getImmigrationDate()).getDate()); } info.setUser(user); info.store(); } catch (IDOLookupException e) { e.printStackTrace(); } return true; } private boolean handleRelations(User user, SKVEntryHolder entry) { try { getFamilyLogic().removeAllFamilyRelationsForUser(user); if (entry.getRelatives() != null && !entry.getRelatives().isEmpty()) { Iterator it = entry.getRelatives().iterator(); while (it.hasNext()) { SKVRelativeEntryHolder holder = (SKVRelativeEntryHolder) it .next(); User relative = null; String pin = holder.getRelativePin(); if (pin == null || "".equals(pin.trim())) { pin = holder.getRelativeAlternativePin(); } boolean isDeceased = false; if (holder.getRelativeDeactivationDate() != null) { if (holder.getRelativeDeactivationCode().equals( SKVConstants.DEACTIVATION_CODE_DEATH)) { isDeceased = true; } } if (pin != null && !"".equals(pin.trim())) { try { relative = getCommuneUserBusiness().getUser(pin); } catch (Exception e) { } if (!isDeceased) { if (holder.getRelativeType().equals( SKVConstants.RELATION_TYPE_CHILD)) { if (relative != null) { getFamilyLogic().setAsParentFor(user, relative); } } else if (holder.getRelativeType().equals( SKVConstants.RELATION_TYPE_SPOUSE)) { if (relative != null) { getFamilyLogic().setAsSpouseFor(user, relative); } } else if (holder.getRelativeType().equals( SKVConstants.RELATION_TYPE_FATHER)) { if (relative != null) { getFamilyLogic().setAsChildFor(user, relative); } } else if (holder.getRelativeType().equals( SKVConstants.RELATION_TYPE_MOTHER)) { if (relative != null) { getFamilyLogic().setAsChildFor(user, relative); } } else if (holder.getRelativeType().equals( SKVConstants.RELATION_TYPE_PARTNER)) { // getFamilyLogic().setAs, child); } else if (holder.getRelativeType().equals( SKVConstants.RELATION_TYPE_CUSTODIAN1)) { if (relative == null) { relative = getCommuneUserBusiness() .createCitizen( holder .getRelativeFirstName(), holder .getRelativeMiddleName(), holder .getRelativeLastName(), pin); handleCitizenGroup(relative, true, null); } getFamilyLogic().setAsCustodianFor(relative, user); } else if (holder.getRelativeType().equals( SKVConstants.RELATION_TYPE_CUSTODIAN2)) { if (relative == null) { relative = getCommuneUserBusiness() .createCitizen( holder .getRelativeFirstName(), holder .getRelativeMiddleName(), holder .getRelativeLastName(), pin); handleCitizenGroup(relative, true, null); } getFamilyLogic().setAsCustodianFor(user, relative); } } else { if (relative != null) { handleDeceased(relative, holder .getRelativeDeactivationDate()); } } } } } } catch (RemoteException e) { e.printStackTrace(); } catch (CreateException e) { e.printStackTrace(); } return true; } private boolean handleSecretPerson(User user, SKVEntryHolder entry) { try { user.removeAllAddresses(); user.removeAllEmails(); user.removeAllPhones(); SKVUserExtraInfoHome ueih = (SKVUserExtraInfoHome) IDOLookup .getHome(SKVUserExtraInfo.class); try { SKVUserExtraInfo info = ueih.findByUser(user); info.remove(); } catch (FinderException e1) { e1.printStackTrace(); } catch (EJBException e) { e.printStackTrace(); } catch (RemoveException e) { e.printStackTrace(); } // getFamilyLogic().removeAllFamilyRelationsForUser(user); List parents = user.getParentGroups(); Iterator it = parents.iterator(); while (it.hasNext()) { Group parent = (Group) it.next(); parent.removeGroup(((Integer) user.getPrimaryKey()).intValue(), performer, false); } getCommuneUserBusiness().moveCitizenToProtectedCitizenGroup(user, IWTimestamp.getTimestampRightNow(), performer); // boolean updated = false; handleRelations(user, entry); /* * while (!updated) { StringBuffer pinString = new * StringBuffer(user.getPersonalID() .substring(0, 8)); * pinString.append("SP"); pinString.append((int) Math * .floor(Math.random() * 90.0d + 10.0d)); try { User tmpUser = * getCommuneUserBusiness().getUser( pinString.toString()); if * (tmpUser == null) { user.setDescription("Secret"); * user.setPersonalID(pinString.toString()); user.store(); updated = * true; } } catch (FinderException e) { * user.setDescription("Secret"); * user.setPersonalID(pinString.toString()); user.store(); updated = * true; } catch (RemoteException e) { e.printStackTrace(); * * return false; } * } */ user.setDescription("Secret"); user.setFirstName("skyddad"); user.setMiddleName("skyddad"); user.setLastName("skyddad"); user.store(); } catch (IDORemoveRelationshipException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } return true; } private boolean handleDeceased(User user, String date) { try { /* * user.removeAllAddresses(); user.removeAllEmails(); * user.removeAllPhones(); * * getFamilyLogic().removeAllFamilyRelationsForUser(user); List * parents = user.getParentGroups(); Iterator it = * parents.iterator(); while (it.hasNext()) { Group parent = (Group) * it.next(); parent.removeGroup(user); } */ if (date != null) { getCommuneUserBusiness().setUserAsDeceased( (Integer) user.getPrimaryKey(), getDateFromString(date).getDate()); } else { getCommuneUserBusiness().setUserAsDeceased( (Integer) user.getPrimaryKey(), IWTimestamp.RightNow().getDate()); } } catch (RemoteException e) { e.printStackTrace(); } return true; } private boolean handleDisabled(User user) { try { user.removeAllAddresses(); user.removeAllEmails(); user.removeAllPhones(); getFamilyLogic().removeAllFamilyRelationsForUser(user); List parents = user.getParentGroups(); Iterator it = parents.iterator(); while (it.hasNext()) { Group parent = (Group) it.next(); parent.removeGroup(user); } } catch (RemoteException e) { e.printStackTrace(); } catch (IDORemoveRelationshipException e) { e.printStackTrace(); } return true; } private boolean isHomeCommune(SKVEntryHolder entry) { String communeCode = entry.getCountyCode() + entry.getCommuneCode(); Commune commune = null; try { commune = getCommuneBusiness().getCommuneByCode(communeCode); Commune defaultCommune = getCommuneBusiness().getDefaultCommune(); if (commune == null) { return false; } if (defaultCommune == null) { return false; } if (defaultCommune.getCommuneCode() == null || commune.getCommuneCode() == null) { return false; } if (defaultCommune.getCommuneCode() .equals(commune.getCommuneCode())) { return true; } } catch (RemoteException e1) { logDebug("Commune with code:" + communeCode + " (countyNumber+communeNumber) not found in database"); } return false; } /** * @param user * @param countyNumber * @param commune * @return */ private boolean handleAddress(User user, SKVEntryHolder entry, boolean movingFromCountry) { String communeCode = entry.getCountyCode() + entry.getCommuneCode(); Commune commune = null; try { commune = getCommuneBusiness().getCommuneByCode(communeCode); } catch (RemoteException e1) { logDebug("Commune with code:" + communeCode + " (countyNumber+communeNumber) not found in database"); } // country id 187 name Sweden isoabr: SE Country sweden = null; try { sweden = ((CountryHome) getIDOHome(Country.class)) .findByIsoAbbreviation("SE"); } catch (RemoteException e1) { e1.printStackTrace(); } catch (FinderException e1) { e1.printStackTrace(); } if (!movingFromCountry) { StringBuffer addressLine = new StringBuffer(); boolean addressLineHasPreviousEntry = false; if (entry.getCoAddress() != null && !"".equals(entry.getCoAddress())) { addressLine.append(entry.getCoAddress()); addressLineHasPreviousEntry = true; } if (entry.getAddress1() != null && !"".equals(entry.getAddress1())) { if (addressLineHasPreviousEntry) { addressLine.append(" "); } else { addressLineHasPreviousEntry = true; } addressLine.append(entry.getAddress1()); } if (entry.getAddress2() != null && !"".equals(entry.getAddress2())) { if (addressLineHasPreviousEntry) { addressLine.append(" "); } addressLine.append(entry.getAddress2()); } // main address if (addressLine.length() != 0) { try { String streetName = getAddressBusiness() .getStreetNameFromAddressString( addressLine.toString()); String streetNumber = getAddressBusiness() .getStreetNumberFromAddressString( addressLine.toString()); Address address = getCommuneUserBusiness() .getUsersMainAddress(user); log("finding address for user = " + user.getName()); if (address == null) { log("address is null"); } else { log("address is = " + address.getPrimaryKey().toString()); } if (address != null) { int count = address.getUserCountForAddress(); log("count = " + count); if (count > 1) { try { user.removeAllAddresses(); } catch (IDORemoveRelationshipException e1) { e1.printStackTrace(); } address = null; } /* * if count == 0 then something strange is happening. * Should never happen... */ } PostalCode code = null; if (entry.getPostalName() != null) { code = getAddressBusiness() .getPostalCodeAndCreateIfDoesNotExist( entry.getPostalCode(), entry.getPostalName(), sweden); } boolean addAddress = false; if (address == null) { AddressHome addressHome = getAddressBusiness() .getAddressHome(); address = addressHome.create(); AddressType mainAddressType = addressHome .getAddressType1(); address.setAddressType(mainAddressType); addAddress = true; } address.setCountry(sweden); if (code != null) { address.setPostalCode(code); } address.setProvince(entry.getCountyCode()); if (commune != null) { address.setCity(commune.getCommuneName()); address.setCommune(commune); } address.setStreetName(streetName); address.setStreetNumber(streetNumber); AddressCoordinate ac = getAddressCoordinate(entry .getAddressCoordinate(), commune); if (ac != null) { address.setCoordinate(ac); } address.setCoordinateDate(entry.getRegistrationDate()); address.store(); if (addAddress) { user.addAddress(address); } } catch (Exception e) { e.printStackTrace(); return false; } } StringBuffer extraAddressLine = new StringBuffer(); boolean extraAddressLineHasPreviousEntry = false; if (entry.getExtraCoAddress() != null && !"".equals(entry.getExtraCoAddress())) { extraAddressLine.append(entry.getExtraCoAddress()); extraAddressLineHasPreviousEntry = true; } if (entry.getExtraAddress1() != null && !"".equals(entry.getExtraAddress1())) { if (extraAddressLineHasPreviousEntry) { extraAddressLine.append(" "); } else { extraAddressLineHasPreviousEntry = true; } extraAddressLine.append(entry.getExtraAddress1()); } if (entry.getExtraAddress2() != null && !"".equals(entry.getExtraAddress2())) { if (extraAddressLineHasPreviousEntry) { extraAddressLine.append(" "); } extraAddressLine.append(entry.getExtraAddress2()); } if (extraAddressLine.length() != 0) { try { String streetName = getAddressBusiness() .getStreetNameFromAddressString( extraAddressLine.toString()); String streetNumber = getAddressBusiness() .getStreetNumberFromAddressString( extraAddressLine.toString()); AddressTypeHome ath = (AddressTypeHome) IDOLookup .getHome(AddressType.class); AddressType at = null; try { at = ath.findByUniqueName("ic_user_address_3"); } catch (FinderException e) { e.printStackTrace(); at = ath.create(); at.setDescription("Special"); at.setName("Special"); at.setUniqueName("ic_user_address_3"); at.store(); } Address address = getCommuneUserBusiness() .getUserAddressByAddressType( ((Integer) user.getPrimaryKey()).intValue(), at); PostalCode code = getAddressBusiness() .getPostalCodeAndCreateIfDoesNotExist( entry.getExtraPostalCode(), entry.getExtraPostalName(), sweden); boolean addAddress = false; if (address == null) { AddressHome addressHome = getAddressBusiness() .getAddressHome(); address = addressHome.create(); address.setAddressType(at); addAddress = true; } address.setCountry(sweden); address.setPostalCode(code); address.setProvince(entry.getCountyCode()); if (commune != null) { address.setCity(commune.getCommuneName()); address.setCommune(commune); } address.setStreetName(streetName); address.setStreetNumber(streetNumber); address.store(); if (addAddress) { user.addAddress(address); } } catch (Exception e) { e.printStackTrace(); return false; } } } else { try { user.removeAllAddresses(); } catch (IDORemoveRelationshipException e1) { e1.printStackTrace(); } StringBuffer foreignAddressLine = new StringBuffer(); boolean foreignAddressLineHasPreviousEntry = false; if (entry.getForeignAddress1() != null && !"".equals(entry.getForeignAddress1())) { foreignAddressLine.append(entry.getForeignAddress1()); foreignAddressLineHasPreviousEntry = true; } if (entry.getForeignAddress2() != null && !"".equals(entry.getForeignAddress2())) { if (foreignAddressLineHasPreviousEntry) { foreignAddressLine.append(" "); } else { foreignAddressLineHasPreviousEntry = true; } foreignAddressLine.append(entry.getForeignAddress2()); } if (entry.getForeignAddress3() != null && !"".equals(entry.getForeignAddress3())) { if (foreignAddressLineHasPreviousEntry) { foreignAddressLine.append(" "); } else { foreignAddressLineHasPreviousEntry = true; } foreignAddressLine.append(entry.getForeignAddress3()); } if (entry.getForeignAddressCountry() != null && !"".equals(entry.getForeignAddressCountry())) { if (foreignAddressLineHasPreviousEntry) { foreignAddressLine.append(" "); } foreignAddressLine.append(entry.getForeignAddressCountry()); } if (foreignAddressLine.length() != 0) { try { String streetName = foreignAddressLine.toString(); AddressTypeHome ath = (AddressTypeHome) IDOLookup .getHome(AddressType.class); AddressType at = null; try { at = ath.findByUniqueName("ic_user_address_4"); } catch (FinderException e) { at = ath.create(); at.setDescription("Foreign"); at.setName("Foreign"); at.setUniqueName("ic_user_address_4"); at.store(); } Address address = getCommuneUserBusiness() .getUserAddressByAddressType( ((Integer) user.getPrimaryKey()).intValue(), at); boolean addAddress = false; if (address == null) { AddressHome addressHome = getAddressBusiness() .getAddressHome(); address = addressHome.create(); address.setAddressType(at); addAddress = true; } address.setStreetName(streetName); address.setStreetNumber(""); address.setCommune(null); address.store(); if (addAddress) { user.addAddress(address); } } catch (Exception e) { e.printStackTrace(); return false; } } } return true; } private AddressCoordinate getAddressCoordinate(String addressKeyCode, Commune commune) throws IDOLookupException { if (coordinateMap == null) { coordinateMap = new HashMap(); } if (addressKeyCode != null) { if (coordinateMap.containsKey(addressKeyCode)) { // Can return null return (AddressCoordinate) coordinateMap.get(addressKeyCode); } else { AddressCoordinateHome ach = (AddressCoordinateHome) IDOLookup .getHome(AddressCoordinate.class); AddressCoordinate ac = null; try { ac = ach.findByCoordinate(addressKeyCode); } catch (FinderException f) { try { ac = ach.create(); ac.setCommune(commune); ac.setCoordinate(addressKeyCode); ac.store(); } catch (CreateException e) { return null; } } coordinateMap.put(addressKeyCode, ac); return ac; } } return null; } private Gender getGenderFromPin(String pin) { // pin format = 190010221208 second last number is the gender // even number = female // odd number = male try { GenderHome home = (GenderHome) this.getIDOHome(Gender.class); if (Integer.parseInt(pin.substring(10, 11)) % 2 == 0) { if (FEMALE == null) { FEMALE = home.getFemaleGender(); } return FEMALE; } else { if (MALE == null) { MALE = home.getMaleGender(); } return MALE; } } catch (Exception ex) { ex.printStackTrace(); return null; // if something happened } } private IWTimestamp getBirthDateFromPin(String pin) { int day = Integer.parseInt(pin.substring(6, 8)); int month = Integer.parseInt(pin.substring(4, 6)); int year = Integer.parseInt(pin.substring(0, 4)); IWTimestamp dateOfBirth = new IWTimestamp(day, month, year); return dateOfBirth; } public void setImportFile(ImportFile file) { iFile = file; } private SKVImportBusiness getImportBusiness() { try { return (SKVImportBusiness) IBOLookup.getServiceInstance(this .getIWApplicationContext(), SKVImportBusiness.class); } catch (IBOLookupException e) { throw new IBORuntimeException(e); } } private CommuneUserBusiness getCommuneUserBusiness() { try { return (CommuneUserBusiness) getServiceInstance(CommuneUserBusiness.class); } catch (IBOLookupException e) { throw new IBORuntimeException(e); } } private AddressBusiness getAddressBusiness() { try { return (AddressBusiness) getServiceInstance(AddressBusiness.class); } catch (IBOLookupException e) { throw new IBORuntimeException(e); } } private FamilyLogic getFamilyLogic() { try { return (FamilyLogic) getServiceInstance(FamilyLogic.class); } catch (IBOLookupException e) { throw new IBORuntimeException(e); } } private CommuneBusiness getCommuneBusiness() { try { return (CommuneBusiness) getServiceInstance(CommuneBusiness.class); } catch (IBOLookupException e) { throw new IBORuntimeException(e); } } public List getFailedRecords() throws RemoteException { return failedRecords; } public void setRootGroup(Group rootGroup) throws RemoteException { } private IWTimestamp getDateFromString(String dateOfRegistrationString) { int year = Integer.parseInt(dateOfRegistrationString.substring(0, 4)); int month = Integer.parseInt(dateOfRegistrationString.substring(4, 6)); int day = Integer.parseInt(dateOfRegistrationString.substring(6, 8)); IWTimestamp date = new IWTimestamp(day, month, year); return date; } }