package se.idega.idegaweb.commune.block.importer.business;
import java.util.ArrayList;
import java.util.List;
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.IBOServiceBean;
import com.idega.user.data.Group;
import com.idega.user.data.User;
import com.idega.util.IWTimestamp;
import com.idega.util.Timer;
/**
* <p>Description: Emergency fixer for Nacka. Takes a file with two columns USERID;PIN and fixes the personalid's and dates of birth in the database</p>
* <p>Copyright (c) 2003</p>
* <p>Company: Idega Software</p>
* @author <a href="mailto:eiki@idega.is"> Eirikur Sveinn Hrafnsson</a>
* @version 1.0
*/
public class UserFixImportFileHandlerBean extends IBOServiceBean implements UserFixImportFileHandler,ImportFileHandler{
private ImportFile file;
private ArrayList failedRecords;
private CommuneUserBusiness comUserBiz;
public UserFixImportFileHandlerBean(){}
public boolean handleRecords(){
Timer clock = new Timer();
clock.start();
try {
//initialize business beans and data homes
comUserBiz = (CommuneUserBusiness) this.getServiceInstance(CommuneUserBusiness.class);
failedRecords = new ArrayList();
System.out.println("Userfix [STARTING] time: "+IWTimestamp.getTimestampRightNow().toString());
String item;
int count = 0;
while ( !(item=(String)file.getNextRecord()).equals("") ) {
count++;
if( ! processRecord(item) ) failedRecords.add(item);
if( (count % 250) == 0 ){
System.out.println("Userfix processing RECORD ["+count+"] time: "+IWTimestamp.getTimestampRightNow().toString());
}
item = null;
}
clock.stop();
System.out.println("Time to handleRecords: "+clock.getTime()+" ms OR "+((int)(clock.getTime()/1000)));
return true;
}
catch (Exception ex) {
ex.printStackTrace();
return false;
}
}
private boolean processRecord(String record){
ArrayList list = file.getValuesFromRecordString(record);
return storeUserInfo(list);
}
protected boolean storeUserInfo(ArrayList list){
try {
User user = null;
if( !list.isEmpty()){
int userId = Integer.parseInt((String)list.get(0));
String PIN = "";
IWTimestamp dateOfBirth = null;
if(list.size()>=2){
PIN = (String) list.get(1);
dateOfBirth = getBirthDateFromPin(PIN);
}
//System.out.println("userid : "+userId+" personalId : "+PIN);
user = comUserBiz.getUser(userId);
user.setPersonalID(PIN);
if(dateOfBirth!=null){
user.setDateOfBirth(dateOfBirth.getDate());
}
else {
user.setDateOfBirth(null);
}
/**
* Save the user to the database
*/
user.store();
}
//finished with this user
user = null;
}
catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
public void setImportFile(ImportFile file){
this.file = file;
}
private IWTimestamp getBirthDateFromPin(String pin){
//pin format = 190010221208 yyyymmddxxxx
int dd = Integer.parseInt(pin.substring(6,8));
int mm = Integer.parseInt(pin.substring(4,6));
int yyyy = Integer.parseInt(pin.substring(0,4));
IWTimestamp dob = new IWTimestamp(dd,mm,yyyy);
return dob;
}
/**
* @see com.idega.block.importer.business.ImportFileHandler#setRootGroup(Group)
*/
public void setRootGroup(Group group){}
/**
* @see com.idega.block.importer.business.ImportFileHandler#getFailedRecords()
*/
public List getFailedRecords(){
return failedRecords;
}
}