/*
 * Created on Apr 2, 2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package com.dragonsoft.tryapp.ejb.session;

import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

import javax.ejb.CreateException;
import javax.ejb.EJBException;
import javax.ejb.FinderException;
import javax.ejb.RemoveException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;

import com.dragonsoft.tryapp.common.ActivityObj;
import com.dragonsoft.tryapp.common.AssignmentObj;
import com.dragonsoft.tryapp.ejb.entity.interfaces.Assignment;
import com.dragonsoft.tryapp.ejb.entity.interfaces.AssignmentHome;
import com.dragonsoft.tryapp.ejb.session.interfaces.ActivityFinder;
import com.dragonsoft.tryapp.ejb.session.interfaces.ActivityFinderHome;

/**
 * @ejb.bean name="AssignmentFinder"
 *           display-name="Name for AssignmentFinder"
 *           description="Description for AssignmentFinder"
 *           jndi-name="ejb/AssignmentFinder"
 *           type="Stateless"
 *           view-type="remote"
 */
public class AssignmentFinderBean implements SessionBean {

	private AssignmentHome assignHome;
	private ActivityFinderHome activityFinderHome;
	/**
	 * 
	 */
	public AssignmentFinderBean() {
		super();
		// TODO Auto-generated constructor stub
	}

	/* (non-Javadoc)
	 * @see javax.ejb.SessionBean#setSessionContext(javax.ejb.SessionContext)
	 */
	public void setSessionContext(SessionContext ctx)
		throws EJBException,
		RemoteException {
		// TODO Auto-generated method stub

	}

	/* (non-Javadoc)
	 * @see javax.ejb.SessionBean#ejbRemove()
	 */
	public void ejbRemove() throws EJBException, RemoteException {
		// TODO Auto-generated method stub

	}

	/* (non-Javadoc)
	 * @see javax.ejb.SessionBean#ejbActivate()
	 */
	public void ejbActivate() throws EJBException, RemoteException {
		init();

	}

	/* (non-Javadoc)
	 * @see javax.ejb.SessionBean#ejbPassivate()
	 */
	public void ejbPassivate() throws EJBException, RemoteException {
		// TODO Auto-generated method stub

	}

	/**
	 * Default create method
	 * 
	 * @throws CreateException
	 * @ejb.create-method
	 */
	public void ejbCreate() throws CreateException {
		init();
	}

	private void init() {
		try {
			InitialContext context = new InitialContext();
			Object obj = context.lookup(AssignmentHome.JNDI_NAME);
			assignHome = (AssignmentHome) PortableRemoteObject.narrow(
				obj,
				AssignmentHome.class);
			obj = context.lookup(ActivityFinderHome.JNDI_NAME);
			activityFinderHome = (ActivityFinderHome) PortableRemoteObject.narrow(obj,ActivityFinderHome.class);
		} catch (Exception e) {
			e.printStackTrace();
			System.err.println("ERROR: Instantiating CourseControllerBean");
		}
	}
	/**
	 * Look up assignemnts based off courseID.
	 * Business method
	 * @ejb.interface-method  view-type = "remote"
	 */
	public com.dragonsoft.tryapp.common.AssignmentObj[] getAssociatedAssignments(
		java.lang.String courseID) {
		Collection collection = null;
		Iterator iter = null;
		Assignment assign = null;
		
		ActivityObj[] activities = null;
		ArrayList rtList = new ArrayList();
		try {
			collection = assignHome.findByAllByCourseID(courseID);
			
			iter = collection.iterator();
			while(iter.hasNext()){
				assign = (Assignment)iter.next();
				AssignmentObj obj =assign.getAssignment();
			
				if(((List)obj.getActivities()).size()==0){
					try {
						ActivityFinder finder = activityFinderHome.create();
						activities = finder.assembleActivities(obj.getAssignmentID());
						finder.remove();
			
						for(int i = 0 ; i < activities.length;i++)
							obj.addActivity(activities[i]);
				
					} catch (CreateException e1) {
						System.out.println("ERROR CREATE"+e1.getMessage());
					} catch (RemoveException e) {
						System.out.println("ERROR REMOVE"+e.getMessage());
					}
					
				}
				rtList.add(obj);
				
			}
		} catch (RemoteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (FinderException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		AssignmentObj rtVal[] = new AssignmentObj[rtList.size()];
		rtList.toArray(rtVal);
		return rtVal;
	}
}
