home *** CD-ROM | disk | FTP | other *** search
/ Power GUI Programming with VisualAge C++ / powergui.iso / trialva / ibmcppw / samples / database / car / daxsamp / car.hpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-02-22  |  18.1 KB  |  599 lines

  1. #ifndef _Car_HPP_
  2.   #define _Car_HPP_
  3.  
  4. //***************************************************************************
  5. // This code is generated by IBM VisualAge C++ Data Access Builder.
  6. // WARNING: User modifications will be lost on next code generation.
  7. //***************************************************************************
  8.  
  9.  
  10. //***************************************************************************
  11. // FILE NAME: Car.HPP
  12. //
  13. // DESCRIPTION:
  14. //   Declaration of the classes:
  15. //    CarId - persistent object class data identifier
  16. //    Car - persistent object class
  17. //    CarManagerBase - persistent object list abstract base manager class
  18. //    CarManagerTemplate - persistent object list manager class template
  19. //    CarManager - persistent object list manager class
  20. //    CarDatastore - to access Car objects
  21. //
  22. //***************************************************************************
  23.  
  24. #ifndef Car_IMPORTEXPORT
  25.   #define Car_IMPORTEXPORT _Import
  26. #endif
  27.  
  28. #ifndef _ISTRING_
  29.   #include <istring.hpp>
  30. #endif
  31.  
  32. #ifndef _IPERSIST_
  33.   #include <ipersist.hpp>
  34. #endif
  35.  
  36. #ifndef _IPOATTR_
  37.   #include <ipoattr.hpp>
  38. #endif
  39.  
  40. #ifndef _ISTDNTFY_
  41.   #include <istdntfy.hpp>
  42. #endif
  43.  
  44. #ifndef _IOBSERVR_
  45.   #include <iobservr.hpp>
  46. #endif
  47.  
  48. #ifndef _IVSEQ_H_
  49.   #include <ivseq.h>
  50. #endif
  51.  
  52. #ifndef _ISTRGEN_
  53.   #include <istrgen.hpp>
  54. #endif
  55.  
  56. #ifndef _IDSEXC_HPP_
  57.   #include <idsexc.hpp>
  58. #endif
  59.  
  60. #ifndef _IDSMCOD_HPP_
  61.   #include <idsmcod.hpp>
  62. #endif
  63.  
  64.  
  65. #ifndef __NO_DEFAULT_LIBS__
  66.   #pragma library("Car.LIB")
  67. #endif
  68.  
  69. #pragma pack(4)
  70.  
  71. //***************************************************************************
  72. //
  73. //    CarId - persistent object class data identifier
  74. //
  75. //***************************************************************************
  76.  
  77. class Car_IMPORTEXPORT CarDataId : public IStandardNotifier
  78. {
  79.  
  80.   friend class Car;
  81.   friend class CarManagerBase;
  82.   friend class CarUpdateStatement;
  83.   friend class CarUpdateDataIdStatement;
  84.   friend class CarDeleteStatement;
  85.   friend class CarAddStatement;
  86.   friend class CarRetrieveStatement;
  87.   friend class CarSelectStatement;
  88.  
  89. public:
  90.  
  91.   //***************************************************************************
  92.   // Constructors
  93.   //***************************************************************************
  94.   CarDataId();
  95.   CarDataId(
  96.                 const IString& aLicense);
  97.   CarDataId(const CarDataId& partCopy);
  98.   virtual ~CarDataId();
  99.  
  100.   //***************************************************************************
  101.   // Operators
  102.   //***************************************************************************
  103.   CarDataId& operator= (const CarDataId& aCar);
  104.   Boolean
  105.     operator == (const CarDataId& value) const,
  106.     operator != (const CarDataId& value) const,
  107.     operator <  (const CarDataId& value) const,
  108.     operator == (const CarDataId* value) const,
  109.     operator != (const CarDataId* value) const,
  110.     operator <  (const CarDataId* value) const;
  111.  
  112. public:
  113.  
  114.   //***************************************************************************
  115.   // Access and control
  116.   //***************************************************************************
  117.  
  118.   virtual IString forDisplay( const char* separator = " " ) const;
  119.   IString asString( const char* separator ) const;
  120.   IString asString() const { return asString("."); }
  121.  
  122.   //***************************************************************************
  123.   // Visual Builder support
  124.   //***************************************************************************
  125.   virtual CarDataId& initializePart();
  126.   static const INotificationId readyId;
  127.  
  128. protected:
  129.   Boolean makeConnections();
  130.  
  131.   //***************************************************************************
  132.   // Attribute Declarations
  133.   //***************************************************************************
  134.  
  135.   //***************************************************************************
  136.   // Declaration of license 
  137.   //***************************************************************************
  138. private:
  139.   IPOStringAttribute iLicense;
  140.  
  141.   void getLicenseFromBuffer( class IPOBufferBase* aBuffer );
  142.  
  143. public:
  144.   static const INotificationId licenseId;
  145.   static const INotificationId licenseNullId;
  146.   const IString& license() const { return iLicense.get(); }
  147.   Boolean isLicenseNull() const { return iLicense.isNull(); }
  148.   Boolean isLicenseNullable() const { return true; }
  149.   IString licenseAsString() const { return iLicense.asString(); }
  150.  
  151.   CarDataId& setLicenseToNull(Boolean nullState=true);
  152.   CarDataId& setLicense(const IString& aString );
  153.  
  154.  
  155. };
  156.  
  157. //***************************************************************************
  158. //
  159. //    Car - persistent object class
  160. //
  161. //***************************************************************************
  162.  
  163. class Car_IMPORTEXPORT Car : public IPersistentObject
  164.                           , public IStandardNotifier
  165. {
  166.  
  167. private:
  168.   CarDataId theDataId;
  169.   class internalsObserver : public IObserver
  170.   {
  171.     private:
  172.       IStandardNotifier* theNotifier;
  173.     public:
  174.       internalsObserver( IStandardNotifier* aNotifier ) : theNotifier(aNotifier) {}
  175.       internalsObserver& dispatchNotificationEvent( const INotificationEvent& anEvent );
  176.   } theInternalsObserver;
  177.  
  178. public:
  179.   friend class CarManagerBase;
  180.  
  181.   typedef CarDataId DataId;
  182.  
  183.   //***************************************************************************
  184.   // Constructors
  185.   //***************************************************************************
  186.   Car();
  187.   Car( IDatastoreODBC* aCarDatastore );
  188.   Car( const CarDataId& theDataId,
  189.                IDatastoreODBC* aCarDatastore = 0 );
  190.   Car(const Car& partCopy);
  191.   virtual ~Car();
  192.  
  193.   //***************************************************************************
  194.   // Operators
  195.   //***************************************************************************
  196.   Car& operator= (const Car& aCar);
  197.   Boolean
  198.     operator == (const Car& value) const,
  199.     operator != (const Car& value) const,
  200.     operator <  (const Car& value) const,
  201.     operator == (const Car* value) const,
  202.     operator != (const Car* value) const,
  203.     operator <  (const Car* value) const;
  204.  
  205.   //***************************************************************************
  206.   // Access and control
  207.   //***************************************************************************
  208.  
  209.  
  210.   const CarDataId& dataId() const { return theDataId; }
  211.   Car& setDataId( const CarDataId& aDataId );
  212.   Car& setDataId( const CarDataId* aDataId ) { return setDataId(*aDataId); }
  213.  
  214.   virtual IString forDisplay( const char* separator = " " ) const;
  215.   virtual IString asString( const char* separator ) const;
  216.   virtual IString asString() const { return asString("."); }
  217.   IString asDebugInfo() const { return IPersistentObject::asDebugInfo(); }
  218.  
  219.   virtual Car& add();
  220.   virtual Car& del();
  221.   virtual Car& update();
  222.   virtual Car& update( const CarDataId& aNewDataId );
  223.   Car& update( const CarDataId* aNewDataId ) { return update(*aNewDataId); }
  224.   virtual Car& retrieve ();
  225.  
  226.   Car& setReadOnly(Boolean flag = true);
  227.   Car& setRetrievable(Boolean flag = true);
  228.  
  229.   static IDatastoreODBC* defaultDatastore();
  230.   static void setDefaultDatastore( IDatastoreODBC* aDatastore = 0 );
  231.   IDatastoreODBC* objectsDatastore() const;
  232.   void setObjectsDatastore( IDatastoreODBC* aDatastore = 0 );
  233.   IDatastoreODBC* currentDatastore() const;
  234.  
  235.   //***************************************************************************
  236.   // Visual Builder support
  237.   //***************************************************************************
  238.   static const INotificationId retrievableId;
  239.   static const INotificationId readOnlyId;
  240.   static const INotificationId dataIdId;
  241.   static const INotificationId readyId;
  242.   static const INotificationId objectsDatastoreId;
  243.   virtual Car& initializePart();
  244.  
  245. protected:
  246.   Boolean makeConnections();
  247.  
  248.  
  249.   //***************************************************************************
  250.   // Internal declarations
  251.   //***************************************************************************
  252.  
  253. private:
  254.   static IDatastoreODBC* iCarDatastore;
  255.   IDatastoreODBC* iObjectsDatastore;
  256.  
  257.   friend class CarUpdateStatement;
  258.   friend class CarUpdateDataIdStatement;
  259.   friend class CarDeleteStatement;
  260.   friend class CarAddStatement;
  261.   friend class CarRetrieveStatement;
  262.   friend class CarSelectStatement;
  263.  
  264.  
  265.   //***************************************************************************
  266.   // Attribute Declarations
  267.   //***************************************************************************
  268.  
  269.   //***************************************************************************
  270.   // Declaration of license 
  271.   //***************************************************************************
  272. public:
  273.   static const INotificationId licenseId;
  274.   static const INotificationId licenseNullId;
  275.   const IString& license() const { return theDataId.license(); }
  276.   Boolean isLicenseNull() const { return theDataId.isLicenseNull(); }
  277.   Boolean isLicenseNullable() const { return theDataId.isLicenseNullable(); }
  278.   IString licenseAsString() const { return theDataId.licenseAsString(); }
  279.   Car& setLicenseToNull(Boolean nullState=true)
  280.       { theDataId.setLicenseToNull(nullState); return *this; }
  281.   Car& setLicense(const IString& aString )
  282.       { theDataId.setLicense(aString); return *this; }
  283.  
  284.  
  285.   //***************************************************************************
  286.   // Declaration of make 
  287.   //***************************************************************************
  288. private:
  289.   IPOStringAttribute iMake;
  290.  
  291.   void getMakeFromBuffer( class IPOBufferBase* aBuffer );
  292.  
  293. public:
  294.   static const INotificationId makeId;
  295.   static const INotificationId makeNullId;
  296.   const IString& make() const { return iMake.get(); }
  297.   Boolean isMakeNull() const { return iMake.isNull(); }
  298.   Boolean isMakeNullable() const { return true; }
  299.   IString makeAsString() const { return iMake.asString(); }
  300.  
  301. public:
  302.   Car& setMake(const IString& aMake);
  303.   Car& setMakeToNull(Boolean nullState=true);
  304.  
  305.  
  306.   //***************************************************************************
  307.   // Declaration of model 
  308.   //***************************************************************************
  309. private:
  310.   IPOStringAttribute iModel;
  311.  
  312.   void getModelFromBuffer( class IPOBufferBase* aBuffer );
  313.  
  314. public:
  315.   static const INotificationId modelId;
  316.   static const INotificationId modelNullId;
  317.   const IString& model() const { return iModel.get(); }
  318.   Boolean isModelNull() const { return iModel.isNull(); }
  319.   Boolean isModelNullable() const { return true; }
  320.   IString modelAsString() const { return iModel.asString(); }
  321.  
  322. public:
  323.   Car& setModel(const IString& aModel);
  324.   Car& setModelToNull(Boolean nullState=true);
  325.  
  326.  
  327.   //***************************************************************************
  328.   // Declaration of category 
  329.   //***************************************************************************
  330. private:
  331.   IPOStringAttribute iCategory;
  332.  
  333.   void getCategoryFromBuffer( class IPOBufferBase* aBuffer );
  334.  
  335. public:
  336.   static const INotificationId categoryId;
  337.   static const INotificationId categoryNullId;
  338.   const IString& category() const { return iCategory.get(); }
  339.   Boolean isCategoryNull() const { return iCategory.isNull(); }
  340.   Boolean isCategoryNullable() const { return true; }
  341.   IString categoryAsString() const { return iCategory.asString(); }
  342.  
  343. public:
  344.   Car& setCategory(const IString& aCategory);
  345.   Car& setCategoryToNull(Boolean nullState=true);
  346.  
  347.  
  348.   //***************************************************************************
  349.   // Declaration of colour 
  350.   //***************************************************************************
  351. private:
  352.   IPOStringAttribute iColour;
  353.  
  354.   void getColourFromBuffer( class IPOBufferBase* aBuffer );
  355.  
  356. public:
  357.   static const INotificationId colourId;
  358.   static const INotificationId colourNullId;
  359.   const IString& colour() const { return iColour.get(); }
  360.   Boolean isColourNull() const { return iColour.isNull(); }
  361.   Boolean isColourNullable() const { return true; }
  362.   IString colourAsString() const { return iColour.asString(); }
  363.  
  364. public:
  365.   Car& setColour(const IString& aColour);
  366.   Car& setColourToNull(Boolean nullState=true);
  367.  
  368.  
  369. };
  370.  
  371. //***************************************************************************
  372. //
  373. //    CarManagerBase - persistent object list abstract base manager class
  374. //
  375. //***************************************************************************
  376.  
  377. class Car_IMPORTEXPORT CarManagerBase : public IPOManager
  378.                                      , public IStandardNotifier
  379. {
  380. private:
  381.   IDatastoreODBC* iObjectsDatastore;
  382.  
  383. public:
  384.   virtual ~CarManagerBase();
  385.  
  386.   virtual CarManagerBase& refresh();
  387.   virtual CarManagerBase& select( const char* clause );
  388.   IDatastoreODBC* objectsDatastore() const;
  389.   void setObjectsDatastore( IDatastoreODBC* aDatastore = 0 );
  390.   IDatastoreODBC* currentDatastore() const;
  391.   virtual CarManagerBase& initializePart();
  392.  
  393.   static const INotificationId readyId;
  394.   static const INotificationId itemsId;
  395.   static const INotificationId objectsDatastoreId;
  396.  
  397. protected:
  398.   CarManagerBase();
  399.   CarManagerBase( const CarManagerBase& aCarManager );
  400.   Boolean makeConnections();
  401.   virtual Car* newCar() = 0;
  402.   virtual void addCar(Car*) = 0;
  403.   CarManagerBase&
  404.             operator= (const CarManagerBase& aCarManager);
  405.   void fetchUsing( CarSelectStatement& aStatement );
  406.  
  407. };
  408.  
  409. //***************************************************************************
  410. //
  411. //  CarManagerTemplate - persistent object list manager class template
  412. //     manager class support for classes derived from Car
  413. //
  414. //***************************************************************************
  415.  
  416. template < class CarType >
  417. class CarManagerTemplate : public CarManagerBase
  418. {
  419. public:
  420.   typedef CarType* elementType;
  421.   typedef IVSequence <elementType> sequenceType;
  422.   // use where string generator is required, via:
  423.   //    CarManager::stringGenerator( "separator string" );
  424.   class stringGenerator : public IStringGenerator<elementType>
  425.   {
  426.     private:
  427.        class stringGeneratorFunction
  428.                : public IStringGeneratorFn<elementType>
  429.        {
  430.           private:
  431.             const char* iSeparator;
  432.           public:
  433.             stringGeneratorFunction(const char* separator)
  434.                     : iSeparator(separator) {}
  435.             IString stringFor(elementType const& aCar )
  436.             {
  437.               return aCar->forDisplay(iSeparator);
  438.             }
  439.        };
  440.     public:
  441.        stringGenerator( const char* separator = " " )
  442.          : IStringGenerator<elementType>( IReference< IStringGeneratorFn<elementType> >
  443.                   ( new stringGeneratorFunction(separator) ) )
  444.        {}
  445.   };
  446.  
  447.  
  448. private:
  449.   sequenceType theSequence;
  450.   sequenceType proxySequence;
  451. protected:
  452.   void emptyTheSequence()
  453.   {
  454.     proxySequence = theSequence;
  455.     theSequence.removeAll();
  456.     while ( ! proxySequence.isEmpty() )
  457.        {
  458.           CarType* anElement = proxySequence.firstElement();
  459.           proxySequence.removeFirst();
  460.           delete anElement;
  461.        }
  462.   }
  463.   void fillTheSequence()
  464.   {
  465.     theSequence = proxySequence;
  466.     proxySequence.removeAll();
  467.   }
  468. private:
  469.   void addCar( Car* aCar )
  470.   {
  471.      proxySequence.addAsLast((CarType*)aCar);
  472.      postAddProcess((CarType*)aCar);
  473.   }
  474.   CarType* newCar()
  475.   {
  476.     CarType* aCar = new CarType;
  477.     aCar->initializePart();
  478.     return aCar;
  479.   }
  480.  
  481. protected:
  482.   // define pre-fetch behaviour on default constructor
  483.   // override this method to add post-fetch behaviour
  484.   virtual void postAddProcess( CarType* aCar ) {}
  485.  
  486. public:
  487.  
  488.   CarManagerTemplate(const INumber i=100)
  489.         : CarManagerBase()
  490.         , theSequence(i)
  491.   {
  492.     theSequence.enableNotification();
  493.   }
  494.  
  495.   CarManagerTemplate(const CarManagerTemplate < CarType >& aCarManager
  496.         , const INumber i=100 )
  497.         : CarManagerBase(aCarManager)
  498.         , theSequence(i)
  499.   {
  500.     sequenceType::Cursor cursor(aCarManager.theSequence);
  501.     forCursor(cursor)
  502.          theSequence.addAsLast(new CarType(*cursor.element()));
  503.     theSequence.enableNotification();
  504.   }
  505.  
  506.   virtual ~CarManagerTemplate()
  507.   {
  508.     emptyTheSequence();
  509.   }
  510.  
  511.   sequenceType* items() { return &theSequence; }
  512.  
  513.   CarManagerTemplate< CarType >&
  514.             operator= (const CarManagerTemplate< CarType >& aCarManager)
  515.   {
  516.     CarManagerBase::operator=(aCarManager);
  517.     emptyTheSequence();
  518.     sequenceType::Cursor cursor(aCarManager.theSequence);
  519.     forCursor(cursor)
  520.          proxySequence.addAsLast(new CarType(*cursor.element()));
  521.     fillTheSequence();
  522.     return *this;
  523.   }
  524.  
  525.   virtual CarManagerTemplate < CarType >& refresh()
  526.   {
  527.     emptyTheSequence();
  528.     try
  529.        {
  530.           CarManagerBase::refresh();
  531.        }
  532.     catch (...)
  533.        {
  534.           fillTheSequence();
  535.           throw;
  536.        }
  537.     fillTheSequence();
  538.     return *this;
  539.   }
  540.  
  541.   virtual CarManagerTemplate < CarType >& select(const char* clause)
  542.   {
  543.     emptyTheSequence();
  544.     try
  545.        {
  546.           CarManagerBase::select(clause);
  547.        }
  548.     catch (...)
  549.        {
  550.           fillTheSequence();
  551.           throw;
  552.        }
  553.     fillTheSequence();
  554.     return *this;
  555.   }
  556.  
  557. };
  558.  
  559. //***************************************************************************
  560. //
  561. //    CarManager - persistent object list manager class
  562. //
  563. //***************************************************************************
  564.  
  565. class CarManager : public CarManagerTemplate< Car >
  566. {
  567. };
  568.  
  569. //***************************************************************************
  570. //
  571. //    CarDatastore - to access Car objects
  572. //
  573. //***************************************************************************
  574.  
  575. class CarDatastore: public IDatastoreODBC
  576. {
  577. public:
  578.   CarDatastore() : IDatastoreODBC("daxsamp")
  579.   {
  580.     if ( Car::defaultDatastore() == 0 )
  581.        Car::setDefaultDatastore(this);
  582.   }
  583.   ~CarDatastore()
  584.   {
  585.     if ( Car::defaultDatastore() == this )
  586.        Car::setDefaultDatastore();
  587.   }
  588.   CarDatastore& setAsDefaultDatastore()
  589.   {
  590.     Car::setDefaultDatastore(this);
  591.     return *this;
  592.   }
  593. };
  594.  
  595. #pragma pack()
  596.  
  597. #endif
  598.  
  599.