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

  1. //****************************************************************************
  2. // ILastSeenClientMgr Class - C++ Source File (ilsrmgr.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 "ilsrmgr.hpp"               //ILastSeenClientMgr 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 "ilsrec.hpp"                 //ILastSeenRecord header
  28. #include "ilstseen.hpp"               //ILastSeen header
  29. #include <iadd.hpp>                   //IAddress header
  30.  
  31. #include "querydb.hpp"                //temp (for scaffold testing)
  32.  
  33. /*******************************************************************
  34.  * Events
  35.  *******************************************************************/
  36. INotificationId ILastSeenClientMgr :: parsedResultId = "ILastSeenClientMgr::parsedResult";
  37. INotificationId ILastSeenClientMgr :: requestBufferId = "ILastSeenClientMgr::requestBuffer";
  38. INotificationId ILastSeenClientMgr :: resultBufferId = "ILastSeenClientMgr::resultBuffer";
  39. INotificationId ILastSeenClientMgr :: resultListId = "ILastSeenClientMgr::resultList";
  40. INotificationId ILastSeenClientMgr :: resultListWrapperId = "ILastSeenClientMgr::resultListWrapper";
  41. INotificationId ILastSeenClientMgr :: resultObjectId = "ILastSeenClientMgr::resultObject";
  42. INotificationId ILastSeenClientMgr :: resultWrapperId = "ILastSeenClientMgr::resultWrapper";
  43. INotificationId ILastSeenClientMgr :: sameRequestId = "ILastSeenClientMgr::sameRequest";
  44. INotificationId ILastSeenClientMgr :: noObjectsFoundId = "ILastSeenClientMgr::noObjectsFound";
  45. INotificationId ILastSeenClientMgr :: oneObjectFoundId = "ILastSeenClientMgr::oneObjectFound";
  46. INotificationId ILastSeenClientMgr :: manyObjectsFoundId = "ILastSeenClientMgr::manyObjectsFound";
  47.  
  48. /*******************************************************************
  49.  * Constructors
  50.  *******************************************************************/
  51. ILastSeenClientMgr :: ILastSeenClientMgr() :
  52.         dRequestBuffer(""), 
  53.         dResultBuffer(""),
  54.         dResultWrapper(0),
  55.         dResultListWrapper(new IVSequence<ILastSeen *>)
  56. {
  57.    enableNotification();
  58.    dResultListWrapper->enableNotification();
  59. }
  60.  
  61. /*******************************************************************
  62.  * Destructor
  63.  *******************************************************************/
  64. ILastSeenClientMgr :: ~ILastSeenClientMgr()
  65. {
  66.    if (dResultWrapper)  
  67.       delete dResultWrapper;
  68.    if (dResultListWrapper)  
  69.       delete dResultListWrapper;
  70. }
  71.  
  72.  
  73. /*******************************************************************
  74.  * Attribute Access Member Functions
  75.  *******************************************************************/
  76. /*------------------------------------------------------------------
  77.  * requestBuffer
  78.  *-----------------------------------------------------------------*/
  79. IString ILastSeenClientMgr :: requestBuffer () const
  80. {
  81.   return dRequestBuffer;
  82. }
  83.  
  84. ILastSeenClientMgr & ILastSeenClientMgr :: 
  85.   setRequestBuffer (const IString & iRequestBuffer)
  86. {
  87.   if (dRequestBuffer != iRequestBuffer)
  88.   {
  89.     dRequestBuffer = iRequestBuffer;      
  90.     notifyObservers(INotificationEvent(requestBufferId, *this, true,
  91.                                        IEventData((char *)iRequestBuffer)));
  92.   } 
  93.   else
  94.     notifyObservers(INotificationEvent(sameRequestId, *this, false));
  95.   return *this;
  96. }
  97.  
  98. /*------------------------------------------------------------------
  99.  * resultBuffer
  100.  *-----------------------------------------------------------------*/
  101. IString ILastSeenClientMgr :: resultBuffer () const
  102. {
  103.   return dResultBuffer;
  104. }
  105.  
  106. ILastSeenClientMgr & ILastSeenClientMgr ::
  107.   setResultBuffer (const IString & iResultBuffer)
  108. {
  109.   if (dResultBuffer != iResultBuffer)
  110.   {
  111.     dResultBuffer = iResultBuffer;
  112.     notifyObservers(INotificationEvent(resultBufferId, *this, true,
  113.                                IEventData((char *)iResultBuffer)));
  114.   } /* endif */
  115.   return *this;
  116. }
  117.  
  118. /*------------------------------------------------------------------
  119.  * resultList (read-only) and resultListWrapper
  120.  *-----------------------------------------------------------------*/
  121. IVSequence <ILastSeen *> ILastSeenClientMgr ::
  122.   resultList () const
  123. {
  124.   return *dResultListWrapper;
  125. }
  126.  
  127. IVSequence <ILastSeen *> * ILastSeenClientMgr ::
  128.   resultListWrapper () const
  129. {
  130.   return dResultListWrapper;
  131. }
  132.  
  133. /*------------------------------------------------------------------
  134.  * resultObject and resultWrapper (read-only)
  135.  *-----------------------------------------------------------------*/
  136. ILastSeen * ILastSeenClientMgr :: resultWrapper () const
  137. {
  138.   return dResultWrapper;
  139. }
  140.  
  141. ILastSeen ILastSeenClientMgr :: resultObject () const
  142. {
  143.   return *dResultWrapper;
  144. }
  145.  
  146.  
  147. /*******************************************************************
  148.  * Actions
  149.  *******************************************************************/
  150. /*------------------------------------------------------------------
  151.  * allbyBookNumber
  152.  *-----------------------------------------------------------------*/
  153. IString ILastSeenClientMgr :: allByBookNumber (unsigned long aBookNumber)
  154. {
  155.   IResultRecord rsltRec;
  156.   IString suspectKey = IString(aBookNumber);
  157.  
  158.   IFUNCTRACE_DEVELOP();
  159.   ITRACE_DEVELOP("suspectKey: " + suspectKey + ".");
  160.  
  161.   if (dRequestBuffer != suspectKey)
  162.   {
  163.      setRequestBuffer(suspectKey);
  164.      ITRACE_DEVELOP("Calling the DB server.");
  165.      rsltRec = getAllLastSeen(aBookNumber);
  166.      ITRACE_DEVELOP("Number last seen locations found: " + IString(rsltRec.numResults()));
  167.   }
  168.   else
  169.      setRequestBuffer(suspectKey);   
  170.  
  171.   return rsltRec.asString();
  172. }
  173.  
  174. /*------------------------------------------------------------------
  175.  * processResult()
  176.  *    The user controls when dResultBuffer should be processed.
  177.  *-----------------------------------------------------------------*/
  178. ILastSeenClientMgr & ILastSeenClientMgr :: processResult ()
  179. {
  180.    ILastSeen          *lastSeen;
  181.    ILastSeenRecord    lastSeenRec;
  182.    IAddress           address;
  183.    unsigned short     recOffset, i;
  184.    IString            buffer;
  185.  
  186.   IFUNCTRACE_DEVELOP();
  187.  
  188.   if (!dResultBuffer.isWhiteSpace())
  189.   {
  190.    IResultRecord resultRec(dResultBuffer);
  191.  
  192.    //clear the result list if it's not empty (i.e., if it was set in a previous invocation)
  193.    if (dResultListWrapper->numberOfElements())
  194.       dResultListWrapper->removeAll();
  195.  
  196.    recOffset = 1;
  197.    for (i=0 ; i < resultRec.numResults(); i++)
  198.    {
  199.       lastSeen = new ILastSeen;
  200.  
  201.       buffer = resultRec.resultData().subString(
  202.                recOffset,lastSeenRec.size());
  203.       lastSeenRec = buffer;
  204.  
  205.       lastSeen->setLocation(lastSeenRec.location());
  206.       lastSeen->setWitness(lastSeenRec.witness());
  207.       lastSeen->setDateLastSeen(lastSeenRec.lastSeenDate());
  208.       lastSeen->setComment(lastSeenRec.comment());
  209.  
  210.       address.setStreet(lastSeenRec.street());
  211.       address.setCity(lastSeenRec.city());
  212.       address.setState(lastSeenRec.state());
  213.       address.setZip("");
  214.       lastSeen->setAddress(new IAddress ( address ));
  215.  
  216.       addResult(lastSeen);  //adds lastSeen to
  217.                                   //the result list
  218.  
  219.       recOffset += lastSeenRec.size();  //get the next lastSeenRec
  220.    }
  221.  
  222.    notifyObservers(INotificationEvent(parsedResultId, *this, false));
  223.    if (resultRec.numResults() == 1)
  224.       notifyObservers(INotificationEvent(oneObjectFoundId, *this, false));
  225.    else if (resultRec.numResults() == 0)
  226.    {
  227.       notifyObservers(INotificationEvent(noObjectsFoundId, *this, false));
  228.       throw IException("No information exists for the specified suspect.");
  229.    }
  230.    else
  231.       notifyObservers(INotificationEvent(manyObjectsFoundId, *this, false));
  232.   }
  233.    return *this;
  234. }
  235.  
  236. /*******************************************************************
  237.  * Class Member Functions
  238.  *******************************************************************/
  239. /*------------------------------------------------------------------
  240.  * addResult()
  241.  *-----------------------------------------------------------------*/
  242. ILastSeenClientMgr & ILastSeenClientMgr ::
  243.   addResult (ILastSeen * iLastSeenWrapper)
  244. {
  245.    IFUNCTRACE_DEVELOP();
  246.    ITRACE_DEVELOP("addResult(*) of ilsrmgr.");
  247.  
  248.    if (dResultListWrapper->isEmpty())
  249.    {
  250.       setResultWrapper(iLastSeenWrapper);
  251.    }
  252.  
  253.    dResultListWrapper->add(iLastSeenWrapper);
  254.    return *this;
  255. }
  256.  
  257. /*------------------------------------------------------------------
  258.  * addResult()
  259.  *-----------------------------------------------------------------*/
  260. ILastSeenClientMgr & ILastSeenClientMgr ::
  261.   addResult (ILastSeen & iLastSeen)
  262. {
  263.    IFUNCTRACE_DEVELOP();
  264.    ITRACE_DEVELOP("addResult(&) of ilsrmgr.");
  265.  
  266.    if (dResultListWrapper->isEmpty())
  267.    {
  268.       setResultWrapper(&iLastSeen);
  269.    }
  270.  
  271.    dResultListWrapper->add(&iLastSeen);
  272.    return *this;
  273. }
  274.  
  275. /*------------------------------------------------------------------
  276.  * setResultWrapper()
  277.  *-----------------------------------------------------------------*/
  278. ILastSeenClientMgr & ILastSeenClientMgr ::
  279.   setResultWrapper (ILastSeen * 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. ILastSeenClientMgr & ILastSeenClientMgr ::
  296.   setResultWrapper (const ILastSeen & iResult)
  297. {
  298.   /*****************************************************************
  299.    * Have to make a copy of the ILastSeen 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 ILastSeen object.
  303.    *****************************************************************/
  304.   return setResultWrapper(new ILastSeen(iResult));
  305. }
  306.