package haipham.webnntp.ejb.session;

import java.rmi.RemoteException;
import javax.ejb.*;
import java.util.*;
import haipham.webnntp.ejb.*;
import haipham.webnntp.ejb.user.*;
import haipham.webnntp.ejb.folder.*;
import haipham.webnntp.ejb.message.*;

/** Model for UserSession bean
 *  @see haipham.webnntp.ejb.session.UserSession  
 *  @author Hai Pham January 08, 2001
 *  @version 1.0
 */ 

class UserSessionModel{
    User    m_user;

    public void logout(){
    }

    public String getUserName() throws RemoteException{
        return m_user.getUserName();
    }

    public Collection getTopLevelFolders(){
        try{
            return EJBUtils.getFolderHome().findTopLevelFolders(m_user);
        }catch(Exception e){
            return new Vector();
        }
    }

    public Collection getMessages(Folder folder){
        try{
            return folder.getMessages();
        }catch(Exception e){
            e.printStackTrace();
            return new Vector();
        }
    }

    public Collection getSubFolders(Folder folder){
        try{
            return folder.getChildren();
        }catch(Exception e){
            e.printStackTrace();
            return new Vector();
        }
    }

    public Collection getSubFolders(long id){
        try{
            Folder folder = EJBUtils.getFolderHome().findByPrimaryKey(id);
            return folder.getChildren();
        }catch(Exception e){
            e.printStackTrace();
            return new Vector();
        }
    }

    public Folder getFolder(long id){
        try{
            return EJBUtils.getFolderHome().findByPrimaryKey(id);
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }

    public Folder createFolder(String name, String type){
        try{
            return EJBUtils.getFolderHome().create(null, name, m_user, type);
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }

    public Folder createFolder(Folder parent, String name, String type){
        try{
            return EJBUtils.getFolderHome().create(parent, name, type);
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }

    public void removeFolder(long folderId){
        try{
            Folder folder = EJBUtils.getFolderHome().findByPrimaryKey(folderId);
            folder.remove();
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    public Message getMessage(String messageId) throws RemoteException{
        try{
            return EJBUtils.getMessageHome().findByPrimaryKey(messageId);
        }catch(Exception e){
            return null;
        }
    }

    public Message addMessage(Folder folder, String id, 
            String subject, String from, String body) throws RemoteException{
        return folder.addMessage(id, subject, from, body);
    }

    public Message addMessage(Folder folder, String subject, String from,
            String body) throws RemoteException{
        return addMessage(folder, String.valueOf(getNextId()),
                    subject, from, body);
    }

    public void removeMessage(String messageId) throws RemoteException{
        try{
            Message m = EJBUtils.getMessageHome().findByPrimaryKey(messageId);
            m.remove();
        }catch(Exception e){
            e.printStackTrace();
        }
    }
    
    public Setting getSettings() throws RemoteException{
        return m_user.getSettings();
    }

    private long getNextId(){
        try{
            return com.evermind.ejb.CounterUtils.getNextID(
                        "java:comp/env/ejb/Counter", "ejb/Message");
        }catch(Exception e){
            e.printStackTrace();
            return -1;
        }
    }
}
