package com.oreilly.jent.people.ejb;


import java.rmi.RemoteException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;

import com.oreilly.jent.people.InvalidSearchException;
import com.oreilly.jent.people.PersistenceException;
import com.oreilly.jent.people.Person;
import com.oreilly.jent.people.PersonDAO;
import com.oreilly.jent.people.SearchArg;


/**
 * Implementation of our PeopleFinder EJB.
 * 
 * @author jfarley
 */
public class PeopleFinderBean implements SessionBean {

    /**
     * 
     */
    public PeopleFinderBean() {
        super();
    }

    /* (non-Javadoc)
     * @see javax.ejb.SessionBean#ejbActivate()
     */
    public void ejbActivate() throws EJBException, RemoteException {
    }

    /* (non-Javadoc)
     * @see javax.ejb.SessionBean#ejbPassivate()
     */
    public void ejbPassivate() throws EJBException, RemoteException {
    }

    /* (non-Javadoc)
     * @see javax.ejb.SessionBean#ejbRemove()
     */
    public void ejbRemove() throws EJBException, RemoteException {
    }

    /* (non-Javadoc)
     * @see javax.ejb.SessionBean#setSessionContext(javax.ejb.SessionContext)
     */
    public void setSessionContext(SessionContext arg0) 
        throws EJBException, RemoteException {

    }
    
    public void ejbCreate() throws CreateException {
    }
    
    // Perform the actual search, using the PersonDAO.
    public Person[] findPeople(SearchArg[] args) 
        throws InvalidSearchException, PersistenceException {
        Map searchArgsMap = new HashMap();
        for (int i = 0; i < args.length; i++) {
            searchArgsMap.put(args[i].getName(), args[i].getValue());
        }
        Collection people = PersonDAO.getInstance().findPeople(searchArgsMap);
        Person[] peopleArray = new Person[people.size()];
        Iterator pIter = people.iterator();
        int i = 0;
        while (pIter.hasNext()) {
            peopleArray[i++] = (Person)pIter.next();
        }
        return peopleArray;
    }

}
