// $Id: Quoter.idl 79354 2007-08-15 15:01:29Z sowayaa $

// ============================================================================
//
// = FILENAME
//    quoter.idl
//
// = DESCRIPTION
//    Quoter example that illustrate the use of the global POA and
//    the CosLifeCycle service.
//
// = AUTHOR
//    Darrell Brunsch (brunsch@cs.wustl.edu)
//    Michael Kircher (mk1@cs.wustl.edu)
//
// ============================================================================

#include "orbsvcs/CosLifeCycle.idl"

module Stock
{
  exception Invalid_Stock {};
  exception Invalid_Quoter {};

  interface Quoter : CosLifeCycle::LifeCycleObject
    {
      // = TITLE
      //   Access Stock information.

      // Returns the current stock value or throws an exception.
      long get_quote (in string stock_name)
        raises (Invalid_Stock, Invalid_Quoter);

      // LifeCycleObject copy(in FactoryFinder there,
      //                      in Criteria the_criteria)
      //    raises(NoFactory, NotCopyable, InvalidCriteria, CannotMeetCriteria);
      // copies this object to a location "there" using the "the_criteria"

      // void move(in FactoryFinder there,
      //     in Criteria the_criteria)
      //     raises(NoFactory, NotMovable, InvalidCriteria,  CannotMeetCriteria);
      // moves this object to a location "there" using the "the_criteria"

      // void remove()
      //     raises(NotRemovable);
      // removes/deletes this object

    };

  interface Quoter_Factory
    {
      // = TITLE
      //   Creation of Quoter objects

      Quoter create_quoter (in string name)
        raises (Invalid_Quoter);
      // Returns a new Quoter selected by name e.g., "Dow Jones,"
      // "Reuters,", etc
    };

  interface Quoter_Factory_Finder : CosLifeCycle::FactoryFinder
    {
      // = TITLE
      //   Wrapper for the CosLifeCycle FactoryFinder
      //
      // inherits:
      // Factories find_factories(in Key factory_key) raises(NoFactory);
    };

  interface Quoter_Generic_Factory : CosLifeCycle::GenericFactory
    {
      // = TITLE
      //   Wrapper for the CosLifeCycle GenericFactory
      //
      // inherits:
      // boolean supports(in Key k);
      // Object create_object(in Key k, in Criteria the_criteria)
      //      raises (NoFactory, InvalidCriteria, CannotMeetCriteria);
    };

  interface Quoter_Life_Cycle_Service : CosLifeCycle::GenericFactory
    {
      // = TITLE
      //   Wrapper for the CosLifeCycle GenericFactory
      //
      // inherits:
      // boolean supports(in Key k);
      // Object create_object(in Key k, in Criteria the_criteria)
      //      raises (NoFactory, InvalidCriteria, CannotMeetCriteria);

      void register_factory (in string name,
                             in string location,
                             in string description,
                             in Object _object);
      // provide an method for registering factories with their properties
    };

  interface Criteria_Evaluator
    {
      // = TITLE
      //   Criteria Evaluator
      //
      // = DESCRIPTION
      //   Interface description for an evaluator of CosLifeCycle
      //   Criterias. It is mainly a wrapper, which should make
      //   access easier
      //
      typedef sequence <CosLifeCycle::NameValuePair> SeqNamedValuePair;

      typedef CosLifeCycle::Criteria Criteria;

      exception NotAvailable { string reason; };
      // raised if the questioned configuration is not available

      SeqNamedValuePair getInitialization ();
      // get the initialization

      string getFilter ();
      // get a filter string

      SeqNamedValuePair getLogicalLocation ();
      // get the logical location

      string getPreferences ();
      // get the preferences, not implemented

      void setCriteria (in Criteria criteria_);
      // set the Criteria which is searched for keywords
    };
};

