/*
* Created on Jan 9, 2006
*/
package com.openedit.modules.admin.users;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import com.openedit.OpenEditException;
import com.openedit.users.User;
import com.openedit.users.UserManager;
import com.openedit.util.FileUtils;
public class UserImport
{
protected UserManager fieldUserManager;
//we are passed in a text file name and return
public List listUsers(File inFile) throws OpenEditException
{
try
{
//check to see if its XML
BufferedReader reader = null;
String text;
try
{
reader = new BufferedReader(new FileReader( inFile ) );
text = reader.readLine();
}
finally
{
FileUtils.safeClose(reader);
}
if( text == null)
{
throw new OpenEditException("Empty input file");
}
if ( text.startsWith("<?xml"))
{
//parse with XML and return
return parseXml( inFile );
}
else
{
return parseTabs( inFile );
}
}
catch ( IOException ex)
{
throw new OpenEditException( ex);
}
}
protected String cleanId( String inId)
{
//remove spaces
//replace &
if ( inId != null)
{
inId = inId.replaceAll(" ","");
inId = inId.replaceAll("&","");
inId = inId.replaceAll("/","");
inId = inId.replaceAll("\\\\","");
}
return inId;
}
protected List parseTabs(File inText) throws OpenEditException
{
List accounts = new ArrayList();
//take off the headers
Header header = new Header();
try
{
header.loadColumns(inText);
Row row = header.getNextRow();
while( row != null )
{
String id = row.getData("id");
if ( id == null)
{
id = cleanId( row.getData("email") );
}
User user = null;
//this uses ID if it finds it otherwise it uses email address
if ( id != null)
{
user = getUserManager().getUser(id);
if( user == null)
{
String password = row.getData("password");
user = getUserManager().createUser(id,password);
}
}
user.setEmail( row.getData("email") );
user.setFirstName(row.getData("firstname") );
user.setLastName(row.getData("lastname") );
for (int i = 0; i < header.getSize(); i++)
{
String prop = (String) header.getColumn(i);
if ( prop.startsWith("property."))
{
String name = prop.substring("property.".length());
user.put(name,row.getData(i));
}
}
accounts.add( user );
getUserManager().saveUser(user);
row = header.getNextRow();
}
}
catch ( Exception ex)
{
throw new OpenEditException(ex);
}
return accounts;
}
protected List parseXml(File inText) throws OpenEditException
{
List accounts = new ArrayList();
try
{
Document doc = new SAXReader().read(new FileReader( inText ) );
for (Iterator iter = doc.getRootElement().elementIterator("account"); iter.hasNext();)
{
Element element = (Element) iter.next();
String id = element.attributeValue("id");
String password = element.attributeValue("password");
User user = null;
//this uses ID if it finds it otherwise it uses email address
if ( id != null)
{
user = getUserManager().getUser(id);
if( user == null)
{
user = getUserManager().createUser(id,password);
}
}
user.setEmail( element.attributeValue("email") );
user.setFirstName(element.attributeValue("firstname") );
user.setLastName(element.attributeValue("lastname") );
for (Iterator iterator = element.elementIterator("property"); iterator.hasNext();)
{
Element prop = (Element) iterator.next();
user.put(prop.attributeValue("id"),prop.getTextTrim());
}
getUserManager().saveUser(user);
accounts.add( user );
}
}
catch ( Exception ex)
{
throw new OpenEditException(ex);
}
return accounts;
}
public UserManager getUserManager()
{
return fieldUserManager;
}
public void setUserManager(UserManager inUserManager)
{
fieldUserManager = inUserManager;
}
}