EmailExcelImport.java

package sk.iway.iwcm.dmail;

import java.io.InputStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import jxl.Cell;
import jxl.Sheet;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.i18n.Prop;
import sk.iway.iwcm.users.UserDetails;
import sk.iway.iwcm.users.UsersDB;
import sk.iway.iwcm.xls.ExcelImportJXL;

/**
 *  EmailExcelImport.java - import pouzivatelov pre priame odoslanie mailu
 *
 *@Title        webjet4
 *@Company      Interway s.r.o. (www.interway.sk)
 *@Copyright    Interway s.r.o. (c) 2001-2008
 *@author       $Author: murbanec $
 *@version      $Revision: 1.3 $
 *@created      Date: 11.2.2008 14:25:24
 *@modified     $Date: 2009/08/31 11:56:27 $
 */
public class EmailExcelImport extends ExcelImportJXL
{
	List<UserDetails> users;
	Map<String, Integer> emailsTable;
	Map<String, Integer> odhlaseneEmailsTable;

	@SuppressWarnings("unchecked")
	public EmailExcelImport(InputStream in, HttpServletRequest request, PrintWriter out)
	{
		super(in, request, out);

		users = (List<UserDetails>)request.getSession().getAttribute("dmailUsers");
		if (users == null) users = new ArrayList<UserDetails>();

		emailsTable = new Hashtable<String, Integer>();
		for (UserDetails user : users)
		{
			emailsTable.put(user.getEmail().toLowerCase(), 1);
		}

		odhlaseneEmailsTable = EmailDB.getHashtableFromUnsubscribedEmails();
	}

	@Override
	protected void saveRow(Connection db_conn, Cell[] row, Sheet sheet, Prop prop) throws Exception
	{
		if (row.length<1)
		{
			return;
		}

		String email = getValue(row, "email");
		if (Tools.isNotEmpty(email) && email.indexOf('@')>1)
		{
			email = email.toLowerCase();

			Integer rowValue = emailsTable.get(email.toLowerCase());
			if (rowValue!=null)
			{
				//ochrana pred duplicitnými email adresami
				printlnError(prop.getText("components.dmail.xlsImport.emailAllreadyExists", email));
				return;
			}

			if (odhlaseneEmailsTable.get(email)!=null)
			{
				//ochrana pred odhlasenymi email adresami
				printlnError(prop.getText("components.dmail.xlsImport.emailIsUnsubscribed", email));
				return;
			}

			String firstName = getValue(row, "firstName");
			String lastName = getValue(row, "lastName");
			if (firstName==null) firstName = "";
			if (lastName==null) lastName = "";

			UserDetails usr = UsersDB.getUserByEmail(email);
			if (usr == null)
			{
				usr = new UserDetails();
			}
			//prepiseme data podla excelu aby sme mohli mat custom meno a priezvisko (ine ako mame v databaze)
			usr.setFirstName(firstName);
			usr.setLastName(lastName);
			usr.setEmail(email);

			users.add(usr);
			emailsTable.put(email.toLowerCase(), rowCounter);

			println(prop.getText("components.dmail.xlsImport.importingEmail")+" " + usr.getEmail());
			if (rowCounter%50==0)
			{
				scrollWindow(1000);
			}
		}
	}
	@Override
	protected void afterImportJob(Prop prop)
	{
		println("<br/><br/>"+prop.getText("file.import_done")+". <a href='/components/dmail/admin_email_usersframe.jsp'>"+prop.getText("sk.iway.iwcm.dmail.emailExcelImport.zobrazit_zoznam_prijemcov")+"</a>.");
		scrollWindow(1000);
		request.getSession().setAttribute("dmailUsers", users);
	}


}