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

  1. //****************************************************************************
  2. // IPerson Class - C++ Source File (iperson.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 <iperson.hpp>
  19. #ifndef _IRESLIB_
  20. #include <ireslib.hpp>
  21. #endif
  22. #ifndef _RAP_
  23. #include "rap.h"
  24. #endif
  25.  
  26. INotificationId IPerson::addressId = "IPerson::address";
  27. INotificationId IPerson::aliasListId = "IPerson::aliasList";
  28. INotificationId IPerson::birthDateId = "IPerson::birthDate";
  29. INotificationId IPerson::eyeColorId = "IPerson::eyeColor";
  30. INotificationId IPerson::firstNameId = "IPerson::firstName";
  31. INotificationId IPerson::genderId = "IPerson::gender";
  32. INotificationId IPerson::hairColorId = "IPerson::hairColor";
  33. INotificationId IPerson::heightId = "IPerson::height";
  34. INotificationId IPerson::infoId = "IPerson::info";
  35. INotificationId IPerson::lastNameId = "IPerson::lastName";
  36. INotificationId IPerson::weightId = "IPerson::weight";
  37.  
  38. /*------------------------------------------------------------------------------
  39.  | IPerson::IPerson    
  40.  |                     
  41.  | Standard constructor.  
  42.  -----------------------------------------------------------------------------*/
  43. IPerson :: IPerson() : IStandardNotifier (),
  44.   iAddress (new IAddress()),
  45.   iAliasList (new IVSequence<IAlias *> ()),
  46.   iBirthDate (""),
  47.   iEyeColor (0),
  48.   iFirstName ("John"),
  49.   iGender (0),
  50.   iHairColor (0),
  51.   iHeight (70),
  52.   iInfo (""),
  53.   iLastName ("Smith"),
  54.   iWeight (150)
  55. {
  56.   enableNotification();
  57.   iAddress->enableNotification();
  58.   iAliasList->enableNotification();
  59. }
  60.  
  61. /*------------------------------------------------------------------------------
  62.  | IPerson::IPerson
  63.  |
  64.  | Standard copy constructor.
  65.  -----------------------------------------------------------------------------*/
  66. IPerson :: IPerson (const IPerson& partCopy)
  67.   : IStandardNotifier (partCopy),
  68.   iAddress (new IAddress (*partCopy.address())),
  69.   iAliasList (new IVSequence <IAlias *> (*partCopy.aliasList())),
  70.   iBirthDate (partCopy.birthDate()),
  71.   iEyeColor (partCopy.eyeColor()),
  72.   iFirstName (partCopy.firstName()),
  73.   iGender (partCopy.gender()),
  74.   iHairColor (partCopy.hairColor()),
  75.   iHeight (partCopy.height()),
  76.   iInfo (partCopy.info()),
  77.   iLastName (partCopy.lastName()),
  78.   iWeight (partCopy.weight())
  79. {
  80.   enableNotification();
  81.   iAddress->enableNotification();
  82.   iAliasList->enableNotification();
  83. }
  84.  
  85. /*------------------------------------------------------------------------------
  86.  | IPerson::~IPerson                                                         
  87.  |                                                                           
  88.  | Empty destructor here for page tuning.                                    
  89.  -----------------------------------------------------------------------------*/
  90. IPerson :: ~IPerson()
  91. {
  92.   if (iAddress)
  93.     delete iAddress;
  94.   if (iAliasList)
  95.     delete iAliasList;
  96. }
  97.  
  98. /*------------------------------------------------------------------------------
  99.  | IPerson::IPerson
  100.  |
  101.  | Standard operator=
  102.  -----------------------------------------------------------------------------*/
  103. IPerson & IPerson :: operator= (const IPerson & aPerson)
  104. {
  105.   if (this == &aPerson) 
  106.     return *this;
  107.  
  108.   IStandardNotifier::operator=(aPerson);
  109.   setAddress(new IAddress (*aPerson.address()));
  110.   setAliasList(new IVSequence <IAlias*> (*aPerson.aliasList()));
  111.   setBirthDate(aPerson.birthDate());
  112.   setEyeColor(aPerson.eyeColor());
  113.   setFirstName(aPerson.firstName());
  114.   setGender(aPerson.gender());
  115.   setHairColor(aPerson.hairColor());
  116.   setHeight(aPerson.height());
  117.   setInfo(aPerson.info());
  118.   setLastName(aPerson.lastName());
  119.   setWeight(aPerson.weight());
  120.  
  121.   return *this;
  122. }
  123.  
  124. /*------------------------------------------------------------------------------
  125.  | IPerson::asString                                                           |
  126.  |                                                                             |
  127.  | Perform asString.                                                           |
  128.  | NOTE: This also identifies what data should be displayed for an             |
  129.  |       ISuspect element of a list (that maps to the 'items' attribute        |
  130.  |       of a list box).                                                       |
  131.  -----------------------------------------------------------------------------*/
  132. IString IPerson :: asString () const
  133. {
  134.   return (lastName() + ", " + firstName());
  135. }
  136.  
  137. /*------------------------------------------------------------------------------
  138. | IPerson::asDebugInfo                                                         |
  139. |                                                                              |
  140. | Generate a string that identifies for debugging purposes what data           |
  141. | an ISuspect instance contains.                                               |
  142. |                                                                              |
  143. | NOTE: attributes not included:  iInfo.                                       |
  144. | NOTE: to see what some of the values map to, see the enumerations that       |
  145. |       are defined in IPerson.hpp.                                            |
  146. ------------------------------------------------------------------------------*/
  147. IString IPerson :: asDebugInfo () const
  148. {
  149.   IString debugInfo("lName=" + iLastName + ",");
  150.   debugInfo += "fName=" + iFirstName + ",";
  151. //debugInfo += iAddress->asDebugInfo();
  152.   debugInfo += "numAlias=" + IString(iAliasList->numberOfElements()) + ",";
  153.   debugInfo += "bdate=" + IString(iBirthDate) + ",";
  154.   debugInfo += "eyeColor=" + IString(iEyeColor) + ",";
  155.   debugInfo += "gender=" + IString(iGender) + ",";
  156.   debugInfo += "hairColor=" + IString(iHairColor) + ",";
  157.   debugInfo += "height=" + IString(iHeight) + ",";
  158.   debugInfo += "weight=" + IString(iWeight) + ",";
  159.  
  160.   return debugInfo;
  161. }
  162.  
  163.  
  164. /*------------------ Attribute Get/Set Member Functions ------------------------
  165.  -----------------------------------------------------------------------------*/
  166. /*------------------------------------------------------------------------------
  167.  | address
  168.  -----------------------------------------------------------------------------*/
  169. IAddress * IPerson::address() const
  170. {
  171.   return iAddress;
  172. }
  173.  
  174. IPerson & IPerson::setAddress(IAddress * aAddress)
  175. {
  176.   if (iAddress != aAddress)
  177.   {
  178.     if (iAddress)
  179.       delete iAddress;
  180.     iAddress = new IAddress(*aAddress);
  181.     notifyObservers(INotificationEvent(IPerson::addressId, *this));
  182.   } // endif
  183.   return *this;
  184. }
  185.  
  186. /*------------------------------------------------------------------------------
  187.  | aliasList
  188.  -----------------------------------------------------------------------------*/
  189. IVSequence<IAlias *> * IPerson::aliasList() const
  190. {
  191.   return iAliasList;
  192. }
  193.  
  194. IPerson & IPerson::setAliasList(IVSequence<IAlias *> * aAliasList)
  195. {
  196.   if (iAliasList != aAliasList)
  197.   {
  198.     iAliasList->removeAll();
  199.     iAliasList->addAllFrom(*aAliasList);
  200.     notifyObservers(INotificationEvent(IPerson::aliasListId, *this));
  201.   } // endif 
  202.   return *this;
  203. }
  204.  
  205. /*------------------------------------------------------------------------------
  206.  | birthDate
  207.  -----------------------------------------------------------------------------*/
  208. IString IPerson::birthDate() const
  209. {
  210.   return iBirthDate;
  211. }
  212.  
  213. IPerson & IPerson::setBirthDate(const IString & aBirthDate)
  214. {
  215.   if (iBirthDate != aBirthDate)
  216.   {
  217.     iBirthDate = aBirthDate;
  218.     notifyObservers(INotificationEvent(IPerson::birthDateId, *this));
  219.   } // endif
  220.   return *this;
  221. }
  222.  
  223. /*------------------------------------------------------------------------------
  224.  | eyeColorAsString, eyeColor
  225.  -----------------------------------------------------------------------------*/
  226. IString IPerson::eyeColorAsString() const
  227. {
  228.   IString eyeColor;
  229.   switch (iEyeColor) 
  230.   {
  231.      case blue_eyes:
  232.         eyeColor = IDynamicLinkLibrary("cppov23r").tryToLoadString(BLUE_EYES_STR);
  233.         break;
  234.      case brown_eyes:
  235.         eyeColor = IDynamicLinkLibrary("cppov23r").tryToLoadString(BROWN_EYES_STR);
  236.         break;
  237.      case green_eyes:
  238.         eyeColor = IDynamicLinkLibrary("cppov23r").tryToLoadString(GREEN_EYES_STR);
  239.         break;
  240.      case hazel_eyes:
  241.         eyeColor = IDynamicLinkLibrary("cppov23r").tryToLoadString(HAZEL_EYES_STR);
  242.         break;
  243.   }
  244.   return eyeColor;
  245. }
  246.  
  247. IPerson & IPerson::setEyeColorAsString(const IString & aEyeColor)
  248. {
  249.   if (aEyeColor == IDynamicLinkLibrary("cppov23r").tryToLoadString(BLUE_EYES_STR))
  250.      setEyeColor(blue_eyes);
  251.   else if (aEyeColor == IDynamicLinkLibrary("cppov23r").tryToLoadString(BROWN_EYES_STR))
  252.      setEyeColor(brown_eyes);
  253.   else if (aEyeColor == IDynamicLinkLibrary("cppov23r").tryToLoadString(GREEN_EYES_STR))
  254.      setEyeColor(green_eyes);
  255.   else if (aEyeColor == IDynamicLinkLibrary("cppov23r").tryToLoadString(HAZEL_EYES_STR))
  256.      setEyeColor(hazel_eyes);
  257.   return *this;
  258. }
  259.  
  260. unsigned short IPerson::eyeColor() const
  261. {
  262.   return iEyeColor;
  263. }
  264.  
  265. IPerson & IPerson::setEyeColor(const unsigned short aEyeColor)
  266. {
  267.   if (iEyeColor != aEyeColor)
  268.   {
  269.     iEyeColor = aEyeColor;
  270.     notifyObservers(INotificationEvent(IPerson::eyeColorId, *this));
  271.   } // endif
  272.   return *this;
  273. }
  274.  
  275. /*------------------------------------------------------------------------------
  276.  | firstName
  277.  -----------------------------------------------------------------------------*/
  278. IString IPerson::firstName() const
  279. {
  280.   return iFirstName;
  281. }
  282.  
  283. IPerson & IPerson::setFirstName(const IString & aFirstName)
  284. {
  285.   if (iFirstName != aFirstName)
  286.   {
  287.     iFirstName = aFirstName;
  288.     notifyObservers(INotificationEvent(IPerson::firstNameId, *this));
  289.   } // endif
  290.   return *this;
  291. }
  292.  
  293. /*------------------------------------------------------------------------------
  294.  | gender/isMale
  295.  -----------------------------------------------------------------------------*/
  296. unsigned short IPerson::gender() const
  297. {
  298.   return iGender;
  299. }
  300.  
  301. IPerson & IPerson::setGender(const unsigned short aGender)
  302. {
  303.   if (iGender != aGender)
  304.   {
  305.     iGender = aGender;
  306.     notifyObservers(INotificationEvent(IPerson::genderId, *this));
  307.   } // endif
  308.   return *this;
  309. }
  310.  
  311. Boolean IPerson::isMale() const
  312. {
  313.   Boolean gender;
  314.   if (iGender == male) 
  315.     gender = true;
  316.   else
  317.     gender = false;
  318.   return gender;
  319. }
  320.  
  321. IPerson & IPerson::enableIsMale(Boolean aGender)
  322. {
  323.   if (aGender)
  324.     setGender(male);
  325.   else
  326.     setGender(female);
  327.   return *this;
  328. }
  329.  
  330. /*------------------------------------------------------------------------------
  331.  | hairColorAsString, hairColor
  332.  -----------------------------------------------------------------------------*/
  333. IString IPerson::hairColorAsString() const
  334. {
  335.   IString hairColor;
  336.   switch (iHairColor)
  337.   {
  338.      case no_hair:
  339.         hairColor = IDynamicLinkLibrary("cppov23r").tryToLoadString(NO_HAIR_STR);
  340.         break;
  341.      case black_hair:
  342.         hairColor = IDynamicLinkLibrary("cppov23r").tryToLoadString(BLACK_HAIR_STR);
  343.         break;
  344.      case blonde_hair:
  345.         hairColor = IDynamicLinkLibrary("cppov23r").tryToLoadString(BLONDE_HAIR_STR);
  346.         break;
  347.      case brown_hair:
  348.         hairColor = IDynamicLinkLibrary("cppov23r").tryToLoadString(BROWN_HAIR_STR);
  349.         break;
  350.      case grey_hair:
  351.         hairColor = IDynamicLinkLibrary("cppov23r").tryToLoadString(GREY_HAIR_STR);
  352.         break;
  353.      case red_hair:
  354.         hairColor = IDynamicLinkLibrary("cppov23r").tryToLoadString(RED_HAIR_STR);
  355.         break;
  356.   }
  357.   return hairColor;
  358. }
  359.  
  360. IPerson & IPerson::setHairColorAsString(const IString & aHairColor)
  361. {
  362.   if (aHairColor == IDynamicLinkLibrary("cppov23r").tryToLoadString(NO_HAIR_STR))
  363.      setHairColor(no_hair);
  364.   else if (aHairColor == IDynamicLinkLibrary("cppov23r").tryToLoadString(BLACK_HAIR_STR))
  365.      setHairColor(black_hair);
  366.   else if (aHairColor == IDynamicLinkLibrary("cppov23r").tryToLoadString(BLONDE_HAIR_STR))
  367.      setHairColor(blonde_hair);
  368.   else if (aHairColor == IDynamicLinkLibrary("cppov23r").tryToLoadString(BROWN_HAIR_STR))
  369.      setHairColor(brown_hair);
  370.   else if (aHairColor == IDynamicLinkLibrary("cppov23r").tryToLoadString(GREY_HAIR_STR))
  371.      setHairColor(grey_hair);
  372.   else if (aHairColor == IDynamicLinkLibrary("cppov23r").tryToLoadString(RED_HAIR_STR))
  373.      setHairColor(red_hair);
  374.   return *this;
  375. }
  376.  
  377. unsigned short IPerson::hairColor() const
  378. {
  379.   return iHairColor;
  380. }
  381.  
  382. IPerson & IPerson::setHairColor(const unsigned short aHairColor)
  383. {
  384.   if (iHairColor != aHairColor)
  385.   {
  386.     iHairColor = aHairColor;
  387.     notifyObservers(INotificationEvent(IPerson::hairColorId, *this));
  388.   } // endif
  389.   return *this;
  390. }
  391.  
  392. /*------------------------------------------------------------------------------
  393.  | heightAsString, height
  394.  -----------------------------------------------------------------------------*/
  395. IString IPerson::heightAsString() const
  396. {
  397.   return IString(iHeight);
  398. }
  399.  
  400. IPerson & IPerson::setHeightAsString(const IString & aHeight)
  401. {
  402.   setHeight(aHeight.asUnsigned());
  403.   return *this;
  404. }
  405.  
  406. unsigned short IPerson::height() const
  407. {
  408.   return iHeight;
  409. }
  410.  
  411. IPerson & IPerson::setHeight(const unsigned short aHeight)
  412. {
  413.   if (iHeight != aHeight)
  414.   {
  415.     iHeight = aHeight;
  416.     notifyObservers(INotificationEvent(IPerson::heightId, *this));
  417.   } // endif
  418.   return *this;
  419. }
  420.  
  421. /*------------------------------------------------------------------------------
  422.  | info
  423.  -----------------------------------------------------------------------------*/
  424. IString IPerson::info() const
  425. {
  426.   return iInfo;
  427. }
  428.  
  429. IPerson & IPerson::setInfo(const IString & aInfo)
  430. {
  431.   if (iInfo != aInfo)
  432.   {
  433.     iInfo = aInfo;
  434.     notifyObservers(INotificationEvent(IPerson::infoId, *this));
  435.   } // endif
  436.   return *this;
  437. }
  438.  
  439. /*------------------------------------------------------------------------------
  440.  | lastName
  441.  -----------------------------------------------------------------------------*/
  442. IString IPerson::lastName() const
  443. {
  444.   return iLastName;
  445. }
  446.  
  447. IPerson & IPerson::setLastName(const IString & aLastName)
  448. {
  449.   if (iLastName != aLastName)
  450.   {
  451.     iLastName = aLastName;
  452.     notifyObservers(INotificationEvent(IPerson::lastNameId, *this));
  453.   } // endif
  454.   return *this;
  455. }
  456.  
  457. /*------------------------------------------------------------------------------
  458.  | weightAsString, weight
  459.  -----------------------------------------------------------------------------*/
  460. IString IPerson::weightAsString() const
  461. {
  462.   return IString(iWeight);
  463. }
  464.  
  465. IPerson & IPerson::setWeightAsString(const IString & aWeight)
  466. {
  467.   setHeight(aWeight.asUnsigned());
  468.   return *this;
  469. }
  470.  
  471. unsigned short IPerson::weight() const
  472. {
  473.   return iWeight;
  474. }
  475.  
  476. IPerson & IPerson::setWeight(const unsigned short aWeight)
  477. {
  478.   if (iWeight != aWeight)
  479.   {
  480.     iWeight = aWeight;
  481.     notifyObservers(INotificationEvent(IPerson::weightId, *this));
  482.   } // endif
  483.   return *this;
  484. }
  485.  
  486. /*------------------------------------------------------------------------------
  487.  | IPerson::operator == (const IPerson & value)
  488.  -----------------------------------------------------------------------------*/
  489. Boolean IPerson::operator == (const IPerson & value) const
  490. {
  491.   if (lastName() != value.lastName())
  492.     return false;
  493.   if (firstName() != value.firstName())
  494.     return false;
  495.   if (address() != value.address())
  496.     return false;
  497.   return true;
  498. }
  499.  
  500. /*------------------------------------------------------------------------------
  501.  | IPerson::operator != (const IPerson & value)        
  502.  -----------------------------------------------------------------------------*/
  503. Boolean IPerson::operator != (const IPerson & value) const
  504. {
  505.   if (lastName() != value.lastName())
  506.     return true;
  507.   if (firstName() != value.firstName())
  508.     return true;
  509.   if (address() != value.address())
  510.     return true;
  511.   return false;
  512. }
  513.  
  514. /*------------------------------------------------------------------------------
  515.  | IPerson::operator == (const IPerson * value)                              
  516.  -----------------------------------------------------------------------------*/
  517. Boolean IPerson::operator == (const IPerson * value) const
  518. {
  519.   if (lastName() != value->lastName())
  520.     return false;
  521.   if (firstName() != value->firstName())
  522.     return false;
  523.   if (address() != value->address())
  524.     return false;
  525.   return true;
  526. }
  527.  
  528. /*------------------------------------------------------------------------------
  529.  | IPerson::operator != (const IPerson * value)   
  530.  -----------------------------------------------------------------------------*/
  531. Boolean IPerson::operator != (const IPerson * value) const
  532. {
  533.   if (lastName() != value->lastName())
  534.     return true;
  535.   if (firstName() != value->firstName())
  536.     return true;
  537.   if (address() != value->address())
  538.     return true;
  539.   return false;
  540. }
  541.