home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / VSCPPv8.zip / VACPP / IBMCPP / samples / VISBUILD / RAPSHEET / CPPOV23 / IALSRMGR.CPP < prev    next >
Text File  |  1995-05-22  |  11KB  |  306 lines

  1. //****************************************************************************
  2. // IAliasClientMgr Class - C++ Source File (ialsrmgr.cpp)                    *
  3. //                                                                           *
  4. // COPYRIGHT: Copyright (C) International Business Machines Corp., 1994,1995 *
  5. //                                                                           *
  6. // DISCLAIMER OF WARRANTIES:                                                 *
  7. //   The following [enclosed] code is sample code created by IBM             *
  8. //   Corporation.  This sample code is not part of any standard IBM product  *
  9. //   and is provided to you solely for the purpose of assisting you in the   *
  10. //   development of your applications.  The code is provided "AS IS",        *
  11. //   without warranty of any kind.  IBM shall not be liable for any damages  *
  12. //   arising out of your use of the sample code, even if they have been      *
  13. //   advised of the possibility of such damages.                             *
  14. //****************************************************************************
  15. //NOTE: WE RECOMMEND USING A FIXED-SPACE FONT TO LOOK AT THE SOURCE.
  16. //
  17.  
  18. #include "ialsrmgr.hpp"               //IAliasClientMgr header
  19. #ifndef _INOTIFEV_
  20.    #include "inotifev.hpp"
  21. #endif
  22. #ifndef _ITRACE_
  23.    #include <itrace.hpp>
  24. #endif
  25.  
  26.  
  27. #include "irsltrec.hpp"               //IResultRecord header
  28. #include "ialsrec.hpp"                //IAliasRecord header
  29.  
  30. #include "querydb.hpp"                //temp (for scaffold testing)
  31.  
  32.  
  33. /*******************************************************************
  34.  * Events
  35.  *******************************************************************/
  36. INotificationId IAliasClientMgr :: parsedResultId = "IAliasClientMgr::parsedResult";
  37. INotificationId IAliasClientMgr :: requestBufferId = "IAliasClientMgr::requestBuffer";
  38. INotificationId IAliasClientMgr :: resultBufferId = "IAliasClientMgr::resultBuffer";
  39. INotificationId IAliasClientMgr :: resultListId = "IAliasClientMgr::resultList";
  40. INotificationId IAliasClientMgr :: resultListWrapperId = "IAliasClientMgr::resultListWrapper";
  41. INotificationId IAliasClientMgr :: resultObjectId = "IAliasClientMgr::resultObject";
  42. INotificationId IAliasClientMgr :: resultWrapperId = "IAliasClientMgr::resultWrapper";
  43. INotificationId IAliasClientMgr :: sameRequestId = "IAliasClientMgr::sameRequest";
  44. INotificationId IAliasClientMgr :: noObjectsFoundId = "IAliasClientMgr::noObjectsFound";
  45. INotificationId IAliasClientMgr :: oneObjectFoundId = "IAliasClientMgr::oneObjectFound";
  46. INotificationId IAliasClientMgr :: manyObjectsFoundId = "IAliasClientMgr::manyObjectsFound";
  47.  
  48.  
  49. /*******************************************************************
  50.  * Constructors
  51.  *******************************************************************/
  52. IAliasClientMgr :: IAliasClientMgr() :
  53.         dRequestBuffer(""), 
  54.         dResultBuffer(""),
  55.         dResultWrapper(0),
  56.         dResultListWrapper(new IVSequence<IAlias *>)
  57. {
  58.    enableNotification();
  59.    dResultListWrapper->enableNotification();
  60. }
  61.  
  62.  
  63. /*******************************************************************
  64.  * Destructor
  65.  *******************************************************************/
  66. IAliasClientMgr :: ~IAliasClientMgr()
  67. {
  68.    if (dResultWrapper)       
  69.       delete dResultWrapper;
  70.    if (dResultListWrapper)       
  71.       delete dResultListWrapper;
  72. }
  73.  
  74.  
  75. /*******************************************************************
  76.  * Attribute Access Member Functions
  77.  *******************************************************************/
  78. /*------------------------------------------------------------------
  79.  * requestBuffer
  80.  *-----------------------------------------------------------------*/
  81. IString IAliasClientMgr :: requestBuffer () const
  82. {
  83.   return dRequestBuffer;
  84. }
  85.  
  86. IAliasClientMgr & IAliasClientMgr ::
  87.   setRequestBuffer (const IString & iRequestBuffer)
  88. {
  89.   if (dRequestBuffer != iRequestBuffer)
  90.   {
  91.     dRequestBuffer = iRequestBuffer;      
  92.     notifyObservers(INotificationEvent(requestBufferId, *this, true,
  93.                                        IEventData((char *)iRequestBuffer)));
  94.   } 
  95.   else
  96.     notifyObservers(INotificationEvent(sameRequestId, *this, false));
  97.   return *this;
  98. }
  99.  
  100. /*------------------------------------------------------------------
  101.  * resultBuffer
  102.  *-----------------------------------------------------------------*/
  103. IString IAliasClientMgr :: resultBuffer () const
  104. {
  105.   return dResultBuffer;
  106. }
  107.  
  108. IAliasClientMgr & IAliasClientMgr ::
  109.   setResultBuffer (const IString & iResultBuffer)
  110. {
  111.   if (dResultBuffer != iResultBuffer)
  112.   {
  113.     dResultBuffer = iResultBuffer;
  114.     notifyObservers(INotificationEvent(resultBufferId, *this, true,
  115.                                IEventData((char *)iResultBuffer)));
  116.   } /* endif */
  117.   return *this;
  118. }
  119.  
  120. /*------------------------------------------------------------------
  121.  * resultList (read-only) and resultListWrapper
  122.  *-----------------------------------------------------------------*/
  123. IVSequence <IAlias *> IAliasClientMgr ::
  124.   resultList () const
  125. {
  126.   return *dResultListWrapper;
  127. }
  128.  
  129. IVSequence <IAlias *> * IAliasClientMgr ::
  130.   resultListWrapper () const
  131. {
  132.   return dResultListWrapper;
  133. }
  134.  
  135. /*------------------------------------------------------------------
  136.  * resultObject and resultWrapper (read-only)
  137.  *-----------------------------------------------------------------*/
  138. IAlias * IAliasClientMgr :: resultWrapper () const
  139. {
  140.   return dResultWrapper;
  141. }
  142.  
  143. IAlias IAliasClientMgr :: resultObject () const
  144. {
  145.   return *dResultWrapper;
  146. }
  147.  
  148.  
  149. /*******************************************************************
  150.  * Actions
  151.  *******************************************************************/
  152. /*------------------------------------------------------------------
  153.  * allbyBookNumber
  154.  *-----------------------------------------------------------------*/
  155. IString IAliasClientMgr :: allByBookNumber (unsigned long aBookNumber)
  156. {
  157.   IFUNCTRACE_DEVELOP();
  158.  
  159.   IResultRecord rsltRec;
  160.   IString suspectKey = IString(aBookNumber);
  161.  
  162.   ITRACE_DEVELOP("suspectKey: " + suspectKey + ".");
  163.  
  164.   if (dRequestBuffer != suspectKey)
  165.   {
  166.      setRequestBuffer(suspectKey);
  167.      ITRACE_DEVELOP("Calling the DB server.");
  168.      rsltRec = getAllAliases(aBookNumber);
  169.      ITRACE_DEVELOP("Number aliases found: " + IString(rsltRec.numResults()));
  170.   }
  171.   else
  172.      setRequestBuffer(suspectKey);   
  173.  
  174.   return rsltRec.asString();
  175. }
  176.  
  177. /*------------------------------------------------------------------
  178.  * processResult()
  179.  *    The user controls when dResultBuffer should be processed.
  180.  *-----------------------------------------------------------------*/
  181. IAliasClientMgr & IAliasClientMgr :: processResult ()
  182. {
  183.    IAlias *           alias;
  184.    IAliasRecord       aliasRec;
  185.    unsigned short     recOffset, i;
  186.    IString            buffer;
  187.  
  188.   IFUNCTRACE_DEVELOP();
  189.  
  190.   if (!dResultBuffer.isWhiteSpace())
  191.   {
  192.      ITRACE_DEVELOP("resultBuffer received: " + dResultBuffer + ".");
  193.      IResultRecord resultRec(dResultBuffer);
  194.      ITRACE_DEVELOP(resultRec.asDebugInfo());
  195.  
  196.      //clear the result list if it's not empty (i.e., if it was set in a previous invocation)
  197.      if (dResultListWrapper->numberOfElements())
  198.      {
  199.         ITRACE_DEVELOP("had to empty the resultList");
  200.         dResultListWrapper->removeAll();
  201.      }
  202.  
  203.      recOffset = 1;
  204.      for (i=0 ; i < resultRec.numResults(); i++)
  205.      {
  206.         alias = new IAlias;
  207.   
  208.         buffer = resultRec.resultData().subString(recOffset,
  209.                                                   aliasRec.size());
  210.         aliasRec = buffer;
  211.   
  212.         alias->setAlias(aliasRec.name());
  213.   
  214.         addResult(alias);         //adds alias to
  215.                                   //the result list
  216.   
  217.         recOffset += aliasRec.size();  //get the next aliasRec
  218.      }
  219.   
  220.      notifyObservers(INotificationEvent(parsedResultId, *this, false));
  221.      if (resultRec.numResults() == 1)
  222.         notifyObservers(INotificationEvent(oneObjectFoundId, *this, false));
  223.      else if (resultRec.numResults() == 0)
  224.      {
  225.         notifyObservers(INotificationEvent(noObjectsFoundId, *this, false));
  226.         throw IException("No aliases exist for the specified suspect."); }
  227.      else
  228.         notifyObservers(INotificationEvent(manyObjectsFoundId, *this, false));
  229.   }
  230.  
  231.    return *this;
  232. }
  233.  
  234. /*******************************************************************
  235.  * Class Member Functions
  236.  *******************************************************************/
  237. /*------------------------------------------------------------------
  238.  * addResult()
  239.  *-----------------------------------------------------------------*/
  240. IAliasClientMgr & IAliasClientMgr ::
  241.   addResult (IAlias * iAliasWrapper)
  242. {
  243.    IFUNCTRACE_DEVELOP();
  244.    ITRACE_DEVELOP("addResult(*) of ialsrmgr.");
  245.  
  246.    if (dResultListWrapper->isEmpty())
  247.    {
  248.       setResultWrapper(iAliasWrapper);
  249.    }
  250.  
  251.    dResultListWrapper->add(iAliasWrapper);
  252.    ITRACE_DEVELOP("added an alias to the resultList");
  253.    return *this;
  254. }
  255.  
  256. /*------------------------------------------------------------------
  257.  * addResult()
  258.  *-----------------------------------------------------------------*/
  259. IAliasClientMgr & IAliasClientMgr ::
  260.   addResult (IAlias & iAlias)
  261. {
  262.    IFUNCTRACE_DEVELOP();
  263.    ITRACE_DEVELOP("addResult(&) of ialsrmgr.");
  264.  
  265.    if (dResultListWrapper->isEmpty())
  266.    {
  267.       setResultWrapper(&iAlias);
  268.    }
  269.  
  270.    dResultListWrapper->add(&iAlias);
  271.    ITRACE_DEVELOP("added an alias to the resultList");
  272.    return *this;
  273. }
  274.  
  275. /*------------------------------------------------------------------
  276.  * setResultWrapper()
  277.  *-----------------------------------------------------------------*/
  278. IAliasClientMgr & IAliasClientMgr ::
  279.   setResultWrapper (IAlias * iResultWrapper)
  280. {
  281.   if (dResultWrapper != iResultWrapper)
  282.   {
  283.      if (dResultWrapper)
  284.         delete dResultWrapper;
  285.      dResultWrapper = iResultWrapper;
  286.      notifyObservers(INotificationEvent(resultObjectId, *this, false));
  287.      notifyObservers(INotificationEvent(resultWrapperId, *this, false));
  288.   }
  289.   return *this;
  290. }
  291.  
  292. /*------------------------------------------------------------------
  293.  * setResultWrapper()
  294.  *-----------------------------------------------------------------*/
  295. IAliasClientMgr & IAliasClientMgr ::
  296.   setResultWrapper (const IAlias & iResult)
  297. {
  298.   /*****************************************************************
  299.    * Have to make a copy of the IAlias object passed in since it's
  300.    * identified as being a const.  That is, the compiler won't
  301.    * allow dResultWrapper = &iResultWrapper, since it would allow
  302.    * us, via dResultWrapper, to update the IAlias object.
  303.    *****************************************************************/
  304.   return setResultWrapper(new IAlias(iResult));
  305. }
  306.