//
//   COMPONENT_NAME: somx
//
//   ORIGINS: 27
//
//
//   25H7912  (C)  COPYRIGHT International Business Machines Corp. 1992,1996  
//   All Rights Reserved
//   Licensed Materials - Property of IBM
//   US Government Users Restricted Rights - Use, duplication or
//   disclosure restricted by GSA ADP Schedule Contract with IBM Corp.
//
//   @(#) 2.11.1.1 src/somples.os2/somd/c/animal/danimal.idl, somples.somd, som3.0 12/2/96 16:59:31 [12/4/96 15:09:01]

/*
 *
 * DISCLAIMER OF WARRANTIES.
 * The following [enclosed] code is sample code created by IBM
 * Corporation. This sample code is not part of any standard or IBM
 * product and is provided to you solely for the purpose of assisting
 * you in the development of your applications.  The code is provided
 * "AS IS". IBM MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT
 * NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 * FOR A PARTICULAR PURPOSE, REGARDING THE FUNCTION OR PERFORMANCE OF
 * THIS CODE.  IBM shall not be liable for any damages arising out of
 * your use of the sample code, even if they have been advised of the
 * possibility of such damages.
 *
 * DISTRIBUTION.
 * This sample code can be freely distributed, copied, altered, and
 * incorporated into other software, provided that it bears the above
 * Copyright notice and DISCLAIMER intact.
 */


#ifndef danimal_idl
#define danimal_idl

#include <somobj.idl>

interface dLocation;
interface AnimalFactory;

interface dAnimal : SOMObject
{
        attribute string name;
        // Name of animal.

        attribute string type;
        // Type of animal.

        attribute string food;
        // Food animal likes to eat.

        attribute dLocation loc;
        // Object with city and state where animal lives. 

        attribute string buff;
        // Work area for display method.

        string display();
        // Returns description of animal.

        #ifdef __SOMIDL__
        implementation {
           releaseorder: _get_name, _set_name, 
                         _get_type, _set_type, 
                         _get_food, _set_food, 
                         _get_loc, _set_loc, 
                         _get_buff, _set_buff,
                         display;

           //# Class Modifiers
           callstyle = idl;
           dllname = "danimal.dll";
	   factory = AnimalFactory;

           //# Attribute Modifiers
           name: noset;
           type: noset;
           food: noset;
           buff: noset;

           //# Method Modifiers
           somDefaultInit: override;
           somDestruct: override;
           //# parameter memory management is per CORBA except as indicated otherwise
           memory_management = corba;
           //# client should not free the result of the following methods:
           display: object_owns_result;
           _get_name: object_owns_result;
           _get_type: object_owns_result;
           _get_food: object_owns_result;
           _get_buff: object_owns_result;
        };
        #endif /* __SOMIDL__ */

};

interface AnimalFactory : SOMObject
{
	exception InvalidClassName {};

	dAnimal create_animal(in string className) raises (InvalidClassName);
	// Creates and returns an instance of the input class name.
	// The input class name must be a subclass of dAnimal or an exception
	// will be raised.

        #ifdef __SOMIDL__
        implementation {
            releaseorder: create_animal;
            callstyle = idl;
            dllname = "danimal.dll";
        };
        #endif /* __SOMIDL__ */
};

#endif  /* danimal_idl */
