/* * Created on 30.6.2004 * * Copyright (C) 2004 Idega hf. All Rights Reserved. * * This software is the proprietary information of Idega hf. * Use is subject to license terms. */ package se.idega.idegaweb.commune.block.importer.business; import java.io.IOException; import java.io.LineNumberReader; import java.io.StringReader; import java.rmi.RemoteException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.ejb.FinderException; 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.data.IDOStoreException; import com.idega.user.data.Group; import com.idega.user.data.User; import com.idega.user.data.UserHome; import com.idega.util.database.ConnectionBroker; import com.idega.util.text.TextSoap; /** * @author aron * * MissingNamesImportFileHandlerBean TODO Describe this type */ public class MissingNamesImportFileHandlerBean extends IBOServiceBean implements MissingNamesImportFileHandler{ private ImportFile file; /* (non-Javadoc) * @see com.idega.block.importer.business.ImportFileHandler#getFailedRecords() */ public List getFailedRecords() throws RemoteException { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see com.idega.block.importer.business.ImportFileHandler#handleRecords() */ public boolean handleRecords() throws RemoteException { UserHome citizenHome = (UserHome)getIDOHome(User.class); Map userMap = getMissingNameUsersByPersonalID(); if(userMap==null || userMap.isEmpty()){ log("No nameless users to handle"); return false; } String item; int count = 0,fixcount = 0; Map fieldMap; while (!(item = (String) file.getNextRecord()).equals("")) { item = TextSoap.findAndCut(item, "#UP "); fieldMap = stripOutFields(item); if(fieldMap.containsKey(ImportFileFieldConstants.PIN_COLUMN)){ String pid = (String) fieldMap.get(ImportFileFieldConstants.PIN_COLUMN); String firstName = fieldMap.containsKey(ImportFileFieldConstants.FIRST_NAME_COLUMN)?(String)fieldMap.get(ImportFileFieldConstants.FIRST_NAME_COLUMN):null; String middleName = null; String lastName = fieldMap.containsKey(ImportFileFieldConstants.LAST_NAME_COLUMN)?(String)fieldMap.get(ImportFileFieldConstants.LAST_NAME_COLUMN):null; String lastNameFirstPart = fieldMap.containsKey(ImportFileFieldConstants.FIRST_PART_OF_LAST_NAME_COLUMN)?(String)fieldMap.get(ImportFileFieldConstants.FIRST_PART_OF_LAST_NAME_COLUMN):null; String preferredNameIndex = fieldMap.containsKey(ImportFileFieldConstants.PREFERRED_FIRST_NAME_INDEX_COLUMN)?(String)fieldMap.get(ImportFileFieldConstants.PREFERRED_FIRST_NAME_INDEX_COLUMN):null; if (lastNameFirstPart != null ) { lastName = lastNameFirstPart + " " + lastName; } if(firstName!=null || lastName!=null){ if(userMap.containsKey(pid)){ Integer userID = (Integer) userMap.get(pid); log("update user "+userID+" with names "+firstName+" and "+lastName); try { User user = citizenHome.findByPrimaryKey(userID); getImportBusiness().handleNames(user, firstName, middleName, lastName, preferredNameIndex, true); // user.setFullName(firstName+" "+lastName); // user.store(); fixcount++; } catch (IDOStoreException e) { e.printStackTrace(); } catch (FinderException e) { e.printStackTrace(); } } } } count++; } log("Recovered "+fixcount+" citizen names out of "+count); return true; } private Map stripOutFields(String record){ Map map = new HashMap(); String line = null,property = null,value = null; String seperator = " "; int index = -1; try { LineNumberReader reader = new LineNumberReader(new StringReader(record)); while ((line = reader.readLine()) != null) { if ((index = line.indexOf(seperator)) != -1) { property = line.substring(0, index); value = line.substring(index + 1, line.length()); map.put(property, value); //log("Param:"+property+" Value:"+value); } } reader.close(); reader = null; } catch (IOException e) { e.printStackTrace(); } return map; } private Map getMissingNameUsersByPersonalID(){ Map map = new HashMap(); Connection conn = null; Statement stmt = null; try { String sql = "select personal_id,ic_user_id from ic_user where first_name is null and last_name is null and personal_id is not null"; conn = ConnectionBroker.getConnection(); stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql.toString()); while(rs.next()){ String personalID = rs.getString(1); Integer userID = new Integer(rs.getInt(2)); map.put(personalID,userID); } rs.close(); } catch (SQLException e) { e.printStackTrace(); } finally{ if (stmt != null) { try { stmt.close(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } if (conn != null) { ConnectionBroker.freeConnection(conn); } } return map; } public void log(String msg){ super.log("[Missing Names Import Handler] "+msg); } /* (non-Javadoc) * @see com.idega.block.importer.business.ImportFileHandler#setImportFile(com.idega.block.importer.data.ImportFile) */ public void setImportFile(ImportFile file) throws RemoteException { this.file = file; } /* (non-Javadoc) * @see com.idega.block.importer.business.ImportFileHandler#setRootGroup(com.idega.user.data.Group) */ public void setRootGroup(Group rootGroup) throws RemoteException { } public NackaImportBusiness getImportBusiness() { try { return (NackaImportBusiness) IBOLookup.getServiceInstance(this.getIWApplicationContext(), NackaImportBusiness.class); } catch (IBOLookupException e) { throw new IBORuntimeException(e); } } }