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

  1. //****************************************************************************
  2. // IArrestClientMgr Class - C++ Source File (iarsrmgr.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 "iarsrmgr.hpp"               //IArrestClientMgr header
  19. #ifndef _INOTIFEV_
  20.    #include "inotifev.hpp"
  21. #endif
  22. #ifndef _ITRACE_
  23.    #include <itrace.hpp>
  24. #endif
  25.  
  26. #include "irsltrec.hpp"               //IResultRecord header
  27. #include "iarstrec.hpp"               //IArrestRecord header
  28.  
  29. #include "querydb.hpp"                //temp (for scaffold testing)
  30.  
  31. /*******************************************************************
  32.  * Events
  33.  *******************************************************************/
  34. INotificationId IArrestClientMgr :: parsedResultId = "IArrestClientMgr::parsedResult";
  35. INotificationId IArrestClientMgr :: requestBufferId = "IArrestClientMgr::requestBuffer";
  36. INotificationId IArrestClientMgr :: resultBufferId = "IArrestClientMgr::resultBuffer";
  37. INotificationId IArrestClientMgr :: resultListId = "IArrestClientMgr::resultList";
  38. INotificationId IArrestClientMgr :: resultListWrapperId = "IArrestClientMgr::resultListWrapper";
  39. INotificationId IArrestClientMgr :: resultObjectId = "IArrestClientMgr::resultObject";
  40. INotificationId IArrestClientMgr :: resultWrapperId = "IArrestClientMgr::resultWrapper";
  41. INotificationId IArrestClientMgr :: sameRequestId = "IArrestClientMgr::sameRequest";
  42. INotificationId IArrestClientMgr :: noObjectsFoundId = "IArrestClientMgr::noObjectsFound";
  43. INotificationId IArrestClientMgr :: oneObjectFoundId = "IArrestClientMgr::oneObjectFound";
  44. INotificationId IArrestClientMgr :: manyObjectsFoundId = "IArrestClientMgr::manyObjectsFound";
  45.  
  46. /*******************************************************************
  47.  * Constructors
  48.  *******************************************************************/
  49. IArrestClientMgr :: IArrestClientMgr() :
  50.         dRequestBuffer(""), 
  51.         dResultBuffer(""),
  52.         dResultWrapper(0),
  53.         dResultListWrapper(new IVSequence<IArrest *>)
  54. {
  55.    enableNotification();
  56.    dResultListWrapper->enableNotification();
  57. }
  58.  
  59. /*******************************************************************
  60.  * Destructor
  61.  *******************************************************************/
  62. IArrestClientMgr :: ~IArrestClientMgr()
  63. {
  64.    if (dResultWrapper)   
  65.       delete dResultWrapper;
  66.    if (dResultListWrapper)   
  67.       delete dResultListWrapper;
  68. }
  69.  
  70.  
  71. /*******************************************************************
  72.  * Attribute Access Member Functions
  73.  *******************************************************************/
  74. /*------------------------------------------------------------------
  75.  * requestBuffer
  76.  *-----------------------------------------------------------------*/
  77. IString IArrestClientMgr :: requestBuffer () const
  78. {
  79.   return dRequestBuffer;
  80. }
  81.  
  82. IArrestClientMgr & IArrestClientMgr ::
  83.   setRequestBuffer (const IString & iRequestBuffer)
  84. {
  85.   if (dRequestBuffer != iRequestBuffer)
  86.   {
  87.     dRequestBuffer = iRequestBuffer;      
  88.     notifyObservers(INotificationEvent(requestBufferId, *this, true,
  89.                                        IEventData((char *)iRequestBuffer)));
  90.   } 
  91.   else
  92.     notifyObservers(INotificationEvent(sameRequestId, *this, false));
  93.   return *this;
  94. }
  95.  
  96. /*------------------------------------------------------------------
  97.  * resultBuffer
  98.  *-----------------------------------------------------------------*/
  99. IString IArrestClientMgr :: resultBuffer () const
  100. {
  101.   return dResultBuffer;
  102. }
  103.  
  104. IArrestClientMgr & IArrestClientMgr ::
  105.   setResultBuffer (const IString & iResultBuffer)
  106. {
  107.   if (dResultBuffer != iResultBuffer)
  108.   {
  109.     dResultBuffer = iResultBuffer;
  110.     notifyObservers(INotificationEvent(resultBufferId, *this, true,
  111.                                IEventData((char *)iResultBuffer)));
  112.   } /* endif */
  113.   return *this;
  114. }
  115.  
  116. /*------------------------------------------------------------------
  117.  * resultList (read-only) and resultListWrapper
  118.  *-----------------------------------------------------------------*/
  119. IVSequence <IArrest *> IArrestClientMgr ::
  120.   resultList () const
  121. {
  122.   return *dResultListWrapper;
  123. }
  124.  
  125. IVSequence <IArrest *> * IArrestClientMgr ::
  126.   resultListWrapper () const
  127. {
  128.   return dResultListWrapper;
  129. }
  130.  
  131. /*------------------------------------------------------------------
  132.  * resultObject and resultWrapper (read-only)
  133.  *-----------------------------------------------------------------*/
  134. IArrest * IArrestClientMgr :: resultWrapper () const
  135. {
  136.   return dResultWrapper;
  137. }
  138.  
  139. IArrest IArrestClientMgr :: resultObject () const
  140. {
  141.   return *dResultWrapper;
  142. }
  143.  
  144.  
  145. /*******************************************************************
  146.  * Actions
  147.  *******************************************************************/
  148. /*------------------------------------------------------------------
  149.  * allbyBookNumber
  150.  *-----------------------------------------------------------------*/
  151. IString IArrestClientMgr :: allByBookNumber (unsigned long aBookNumber)
  152. {
  153.   IResultRecord rsltRec;
  154.   IString suspectKey = IString(aBookNumber);
  155.  
  156.   IFUNCTRACE_DEVELOP();
  157.   ITRACE_DEVELOP("suspectKey: " + suspectKey + ".");
  158.  
  159.   if (dRequestBuffer != suspectKey)
  160.   {
  161.      setRequestBuffer(suspectKey);
  162.      ITRACE_DEVELOP("Calling the DB server.");
  163.      rsltRec = getAllArrests(aBookNumber);
  164.      ITRACE_DEVELOP("Number arrest records found: " + IString(rsltRec.numResults()));
  165.   }
  166.   else
  167.      setRequestBuffer(suspectKey);   
  168.  
  169.   return rsltRec.asString();
  170. }
  171.  
  172. /*------------------------------------------------------------------
  173.  * processResult()
  174.  *    The user controls when dResultBuffer should be processed.
  175.  *-----------------------------------------------------------------*/
  176. IArrestClientMgr & IArrestClientMgr :: processResult ()
  177. {
  178.    IArrest *          arrestWrapper;
  179.    IArrestRecord      arrestRec;
  180.    unsigned short     recOffset, i;
  181.    IString            buffer;
  182.  
  183.   IFUNCTRACE_DEVELOP();
  184.  
  185.   if (!dResultBuffer.isWhiteSpace())
  186.   {
  187.    IResultRecord resultRec(dResultBuffer);
  188.  
  189.    //clear the result list if it's not empty (i.e., if it was set in a previous invocation)
  190.    if (dResultListWrapper->numberOfElements())
  191.       dResultListWrapper->removeAll();
  192.  
  193.    recOffset = 1;
  194.    for (i=0 ; i < resultRec.numResults(); i++)
  195.    {
  196.       arrestWrapper = new IArrest;
  197.  
  198.       buffer = resultRec.resultData().subString(
  199.                recOffset,arrestRec.size());
  200.       arrestRec = buffer;
  201.  
  202.       arrestWrapper->setCharge(arrestRec.charge());
  203.       arrestWrapper->setStatus(arrestRec.status());
  204.       arrestWrapper->setStatusDate(arrestRec.statusDate());
  205.  
  206.       addResult(arrestWrapper);  //adds arrestWrapper to
  207.                                  //the result list
  208.  
  209.       recOffset += arrestRec.size();  //get the next arrestRec
  210.    }
  211.  
  212.    notifyObservers(INotificationEvent(parsedResultId, *this, false));
  213.    if (resultRec.numResults() == 1)
  214.       notifyObservers(INotificationEvent(oneObjectFoundId, *this, false));
  215.    else if (resultRec.numResults() == 0)
  216.    {
  217.       notifyObservers(INotificationEvent(noObjectsFoundId, *this, false));
  218.       throw IException("No aliases exist for the specified suspect."); }
  219.    else
  220.       notifyObservers(INotificationEvent(manyObjectsFoundId, *this, false));
  221.   }
  222.  
  223.    return *this;
  224. }
  225.  
  226. /*******************************************************************
  227.  * Class Member Functions
  228.  *******************************************************************/
  229. /*------------------------------------------------------------------
  230.  * addResult()
  231.  *-----------------------------------------------------------------*/
  232. IArrestClientMgr & IArrestClientMgr ::
  233.   addResult (IArrest * iArrestWrapper)
  234. {
  235.    IFUNCTRACE_DEVELOP();
  236.    ITRACE_DEVELOP("addResult(*) of iarsrmgr.");
  237.  
  238.    if (dResultListWrapper->isEmpty())
  239.    {
  240.       setResultWrapper(iArrestWrapper);
  241.    }
  242.  
  243.    dResultListWrapper->add(iArrestWrapper);
  244.    return *this;
  245. }
  246.  
  247. /*------------------------------------------------------------------
  248.  * addResult()
  249.  *-----------------------------------------------------------------*/
  250. IArrestClientMgr & IArrestClientMgr ::
  251.   addResult (IArrest & iArrest)
  252. {
  253.    IFUNCTRACE_DEVELOP();
  254.    ITRACE_DEVELOP("addResult(&) of iarsrmgr.");
  255.  
  256.    if (dResultListWrapper->isEmpty())
  257.    {
  258.       setResultWrapper(&iArrest);
  259.    }
  260.  
  261.    dResultListWrapper->add(&iArrest);
  262.    return *this;
  263. }
  264.  
  265. /*------------------------------------------------------------------
  266.  * setResultWrapper()
  267.  *-----------------------------------------------------------------*/
  268. IArrestClientMgr & IArrestClientMgr ::
  269.   setResultWrapper (IArrest * iResultWrapper)
  270. {
  271.   if (dResultWrapper != iResultWrapper)
  272.   {
  273.      if (dResultWrapper)
  274.         delete dResultWrapper;
  275.      dResultWrapper = iResultWrapper;
  276.      notifyObservers(INotificationEvent(resultObjectId, *this, false));
  277.      notifyObservers(INotificationEvent(resultWrapperId, *this, false));
  278.   }
  279.   return *this;
  280. }
  281.  
  282. /*------------------------------------------------------------------
  283.  * setResultWrapper()
  284.  *-----------------------------------------------------------------*/
  285. IArrestClientMgr & IArrestClientMgr ::
  286.   setResultWrapper (const IArrest & iResult)
  287. {
  288.   /*****************************************************************
  289.    * Have to make a copy of the IArrest object passed in since it's
  290.    * identified as being a const.  That is, the compiler won't
  291.    * allow dResultWrapper = &iResultWrapper, since it would allow
  292.    * us, via dResultWrapper, to update the IArrest object.
  293.    *****************************************************************/
  294.   return setResultWrapper(new IArrest(iResult));
  295. }
  296.