package haipham.webnntp.ejb.folder;

import java.util.*;
import javax.ejb.*;
import java.util.*;
import haipham.webnntp.ejb.*;
import haipham.webnntp.ejb.user.*;
import haipham.webnntp.ejb.message.*;

/** The model of FolderEJB. This class provide implementation for interface
 *  Folder
 *  @see haipham.webnntp.ejb.folder.Folder
 *  @author Hai Pham, January 05 2000
 *  @version 1.0
 */ 
class FolderModel{
    public long     folderId;
    public String   folderName;
    public String   folderType;
    public Folder   parentFolder;       // null if is top level
    public User     owner;

    protected EntityContext   m_context;

    public Message addMessage(String id, String subj, String from, String body){
        try{
            return EJBUtils.getMessageHome().create(
                     id, (Folder) m_context.getEJBObject(), subj, from, body);
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }

    /** Make a copy of the given message, add it and return the ref.
     *  This method will changes the the folder field of the given msg. So in
     *  a away, it moves the mesage from whatever previous folder to this 
     *  folder. 
     */
    public Message addMessage(Message m){
        try{
            m.setFolder((Folder) m_context.getEJBObject());
            return m;
        }catch(Exception e){
            return null;
        }
    }

    // TODO: should use and ejbSelect
    public Collection getMessages(){
        try{
            return EJBUtils.getMessageHome().findByFolder(
                                (Folder) m_context.getEJBObject());
        }catch(Exception e){
            e.printStackTrace();
            return new Vector();
        }
    }

    /*
    public int getMessageCount(){
        try
    }
    */

    public Folder addFolder(String folderName, String folderType){
        try{
            FolderHome folderHome = (FolderHome) m_context.getEJBHome();
            return folderHome.create((Folder) m_context.getEJBObject(),
                    folderName, ((Folder) m_context.getEJBObject()).getOwner(),
                    folderType);
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }

    //TODO: move from finder method to a select query
    /** Return all sub folders (1st level only). Empty collection if no
     *  sub folder avail.
     */ 
    public Collection getChildren(){
        FolderHome folderHome = (FolderHome) m_context.getEJBHome();

        try{
            return folderHome.findByParentFolder(
                                (Folder) m_context.getEJBObject());
        }catch(Exception e){
            return new Vector();
        }
    }
    
    public long getFolderId(){return folderId;}
    public String getFolderName(){return folderName;}
    public String getFolderType(){return folderType;}
    public Folder getParentFolder(){return parentFolder;}
    public User getOwner(){return owner;}

    /** TODO: Need check for consistency here */
    public void setFolderName(String name){folderName = name;}
    public void setFolderType(String type){folderType = type;}
    public void setParentFolder(Folder folder){parentFolder = folder;}

    public void setOwner(User owner){this.owner = owner;}
}
