/*!
  @header FTAbstractTool
  @abstract A generic "framework" for tools
 
  @availability OS X, GNUstep
  @copyright 2004, 2005, 2006 Free Software Foundation, Inc.
  
  This library is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.

  This library is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.

  You should have received a copy of the GNU Lesser General Public
  License along with this library; if not, write to the Free Software
  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA


  <pre>
  -------------------------------------------------------------------------
  Modification history

  27.07.06 ola     initial version
  23.08.06 ola     license changed
  -------------------------------------------------------------------------
  </pre>
*/

#if !defined(__FTAbstractTool_H)
#define __FTAbstractTool_H

#include <Foundation/Foundation.h>
#include <FT/FT.h>
#include <FTAbstractTool/FTTool.h>


/*!
 * @class FTAbstractTool
 * @abstract A generic "framework" useful as base for command line 
     tools/programs written for FT. See also FTTool
 */
@interface FTAbstractTool  : FTObject <FTTool> {
  @private
    id <FTServer> server;
    id <FTSession> session;
}

/*!
 * @method startTool
 * @abstract This class method may be called directly after calling main.
 * @discussion This class method calls the instance methods defined by 
 *   FTAbstractTool in the order as it is meant to be done. Precisely, given
 *   an instance i it performs as follows:
 <pre>
  if( [i cmdLineArgumentsOK] ) {
    [i run];
  } else {
    [i cmdLineArgumentsOverview];
  }
 </pre>
 */
+ (void) startTool: (FTAbstractTool *) tool;


- init;
- (void) dealloc;


/*!
 * @method cmdLineArguments
 * @abstract returns an enumeration of all arguments
 * @result an enumeration of all arguments
 */
- (NSEnumerator *) cmdLineArguments;


/*!
 * @method cmdLineArgumentsOK
 * @result YES if the check for the command line arguments has successfully been
 *   passed
 */
- (BOOL) cmdLineArgumentsOK;


/*!
 * @method cmdLineArgumentsOverview
 * @abstract Prints information on the usage of command line arguments on the 
 *   standard output
 * @result self
 */
- cmdLineArgumentsOverview;


/*!
 * @method log
 * @result logging instance for FTExport
 */
- (ECLogger *) log;


/*!
 * @method run
 * @abstract runs the export
 * @result self
 */
- run;


/*!
 * @method server
 * @abstract Returns the server instance
 * @result server instance
 */
- (id <FTServer>) server;


/*!
 * @method session
 * @abstract returns the current session or nil, if not existing
 * @result current session or nil, if not existing
 */
- (id <FTSession>) session;


/*!
 * @method startServerUsingLogin
 * @abstract Well, what does it...?
 * @param login login to use
 * @param aPassword related password
 * @result self
 */
- startServerUsingLogin: (NSString *) login
  usingPassword: (NSString *) aPassword;


/*!
 * @method closeSessionAndStopServer
 * @result self
 * @abstract closes the session and shutdowns the server
 */
- closeSessionAndStopServer;
@end
#endif
