/*
 *	The contents of this file are subject to the Netscape Public License 
 *	Version 1.0 (the "License"); you may not use this file except in compliance 
 *	with the License. You may obtain a copy of the License at 
 *	http://www.mozilla.org/NPL/. 
 *	
 *	Software distributed under the License is distributed on an "AS IS" basis, 
 *	WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 
 *	for the specific language governing rights and limitations under the License. 
 *	
 *	The Original Code is the Netscape Messaging Access SDK Version 3.5 code, 
 *	released on or about June 15, 1998. 
 *	
 *	The Initial Developer of the Original Code is Netscape Communications 
 *	Corporation. Portions created by Netscape are Copyright (C) 1998 Netscape 
 *	Communications Corporation. All Rights Reserved. 
 *	
 *	Contributor(s): ______________________________________. 
*/
  
/*
* Copyright (c) 1997 and 1998 Netscape Communications Corporation
* (http://home.netscape.com/misc/trademarks.html)
*/


package netscape.messaging.convenience;
import java.io.*;
import java.lang.*;
import java.util.*;


/**
 * IMStore
 * @author Prasad Yendluri
 * Internet Message Store
 */
public class IMStore 
{
	/**
         * Default constructor for IMStore
         */
	public IMStore ()
        {
            // Do any initialization
        }

	/**
         * Connects to the message store specified, at the default port based on protocol.
         * @param host name of the host to connect to.
         * @param protocol protocol to use to connect. Valid values are "POP3" and "IMAP4"
	 * @exception IOException If the socket connection can not be opened with the host.
	 * @see	IMStore#disconnect
         *
         */
	public void connect (String host, String protocol) throws IOException
        {
             return;
        }

	/**
         * Logs into message store as the specified user.
         * @param user username to login with
         * @param pass password to login with
	 * @exception IMException If not logged in earlier
	 * @see	IMStore#logout
         */
	public void login (String user, String pass) throws IMException
        {
             return;
        }

	/**
	 * Returns list of sub-folders one level below the specified folder.
         * @param rootFolder Name of the folder to list sub-folders.
	 * @return array of names of sub-folders. null if no sub-folders. 
	 * @exception IMException If rootFolder is not a valid name.
	 * @exception IOException If IO error.
         */
	public String[] listSubFolders (String rootFolder) throws IOException, IMException
        {
		String[] flist = new String[2];
                flist[0] = "junk1";
                flist[2] = "junk2";
                return (flist);
        }

	/**
	 * Returns the summary list for the messages in the specified folder.
         * @param folder Name of the folder. A NULL value assumes the folder INBOX.
	 * @return array of IMMessageSummary objects.
	 * @exception IMException If invalid folder.
	 * @exception IOException If IO error.
         */
	public IMMessageSummary[] listMessages (String folder) throws IOException, IMException
        {
		IMMessageSummary[] ims = new IMMessageSummary[2];
                ims[0] = new IMMessageSummary ();
                ims[1] = new IMMessageSummary ();
                return (ims);
        }

	/**
         * Deletes the specified message from the folder.
         * @param folder Name of the folder. A NULL value assumes the folder INBOX.
         * @param msgnum Message sequence number.
	 * @return false if the message can not be deleted, true otherwise.
         */
	public boolean delete (String folder, int msgnum) 
        {
                return (true);
        }

	/**
         * Moves the specified message from the source folder to destination folder.
         * @param source Name of the folder. A NULL value assumes the folder INBOX.
         * @param destination Name of the folder. A NULL value assumes the folder INBOX.
	 * @return false if the message can not be moved, true otherwise.
         */
	public boolean move (String source, String destination, int msgnum) 
        {
                return (true);
        }

	/**
         * Copies the specified message from the source folder to destination folder.
         * @param source Name of the folder. A NULL value assumes the folder INBOX.
         * @param destination Name of the folder. A NULL value assumes the folder INBOX.
	 * @return false if the message can not be copied, true otherwise.
         */
	public boolean copy (String source, String destination, int msgnum) 
        {
                return (true);
        }


	/**
	 * Retrieves the specified message from the message store.
         * @param folder Name of the folder. A NULL value assumes the folder INBOX.
         * @param msgnum Message sequence number.
	 * @exception IOException If an IO error occurs.
	 * @exception IMException If the message does not exist.
	 * @return Returns an inputstream with the Message in MIME format.
         */
	public InputStream retrieve (String folder, int msgnum) throws IOException, IMException
        {
		DataInputStream ins = new DataInputStream(System.in);
                return (ins);
        }

	/**
	 * Fetches the message as specified by the imapURL parameter. This kind of fetch is useful 
	 * for applications that obtain the URL from other sources (like from a webpage).
         * NOTE: For fetch, it is not necessary to connect / login to the message store first.
         * @param imapURL IMAP URL specifying the fully qualified URL for the message to be fetched.
         * The URL must conform to the format specified in RFC 2192 and must represent a 
	 * unique message. 
	 * An example URL is:
         * imap://foo.com/public.messages;UIDVALIDITY=123456/;UID=789
	 * @exception IOException If an IO error occurs.
	 * @exception IMException If the URL is malformed or does not represent a valid unique message.
	 * @return Returns an inputstream with the Message in MIME format.
         */
	public InputStream fetch (String imapURL) throws IOException, IMException
        {
		DataInputStream ins = new DataInputStream(System.in);
                return (ins);
        }

	/**
	 * Searches the folder for messages that match the search criteria.
         * @param folder Name of the folder. A NULL value assumes the folder INBOX.
         * @param criteria Search criteria as defined by the list of terms.
	 * @exception IOException If an IO error occurs.
	 * @exception IMException If no message matches the criteria.
	 * @return Returns a list of message sequence numbers of matched messages.
         */
	public int [] search (String folder, IMSearchTerm[] criteria) throws IOException, IMException
        {
		int [] msn = new int [2];
		msn [1] = 0;
		msn [2] = 1;
                return (msn);
        }

	/**
         * Logs out from the message store.
	 * @exception IMException If not logged in earlier
	 * @see	IMStore#login
         */
	public void logout () throws IMException
        {
             return;
        }

	/**
         * disconnects from the message store.
	 * @exception IMException If not connected earlier
	 * @see	IMStore#connect
         */
	public void disconnect () throws IMException
        {
             return;
        }
}
