home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / VSCPPv8.zip / VACPP / IBMCPP / samples / VISBUILD / OASEARCH / SKILLB.CPV < prev    next >
Text File  |  1995-05-13  |  5KB  |  145 lines

  1. //****************************************************************************
  2. // OASkillBase Class - C++ Code File (skillb.cpv)                            *
  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. // Get skills from database and populate a skill list
  18.  
  19. OASkillBase & OASkillBase::getSkills(const IString & aSkillName, IVSequence<OASkill*>* aList)
  20. {
  21.  
  22.   IProfile *p = new IProfile("skill.ini");
  23.  
  24. // Check for this skill name in the database
  25.  
  26.   if (!p->containsApplication(aSkillName))
  27.   {
  28.   throw IException("A record was not found for this skill description.");
  29.   delete p;
  30.   return *this;
  31.   }
  32.  
  33. // Otherwise, empty the skill list
  34.  
  35.   if (!(aList->isEmpty()))
  36.     aList->removeAll();
  37.  
  38. // Instantiate new skills and set them
  39.  
  40.   unsigned long numRecs = p->numberOfKeys(aSkillName);
  41.   OASkill* tempSkill;
  42.   IString IDkey, yearkey;
  43.   int i;
  44.  
  45.   for (i=1; i <= (numRecs/2); i++)
  46.     {
  47.      tempSkill = new OASkill;
  48.      tempSkill->setSkillName(aSkillName);
  49.  
  50.      IDkey = "ID" + IString(i);
  51.      yearkey = "year" + IString(i);
  52.  
  53.      if (p->containsKeyName(yearkey, aSkillName))
  54.        tempSkill->setYearsExp(p->elementWithKey(yearkey, aSkillName));
  55.      if (p->containsKeyName(IDkey, aSkillName))
  56.        tempSkill->setContractorID(p->elementWithKey(IDkey, aSkillName));
  57.  
  58.      tempSkill->setKey(IString(i));
  59.  
  60. // Add skill to skill list
  61.  
  62.      aList->addAsLast(tempSkill);
  63.  
  64.     }
  65.  
  66.   delete p;
  67.   return *this;
  68.  
  69. }
  70.  
  71. // Add skill to database
  72.  
  73. OASkillBase & OASkillBase::putSkill(OASkill* aSkill)
  74. {
  75. // Check for contractor ID
  76.  
  77.   if (aSkill->contractorID().length()==0) {
  78.      throw IException("The contractor's identifier is missing.  Enter the contractor's name on the Contact page and select Save.");
  79.      return *this;
  80.   }
  81.  
  82. // Check for skill description
  83.  
  84.   if (aSkill->skillName().length()==0) {
  85.      throw IException("The skill description is missing.  Enter it and try again.");
  86.      return *this;
  87.   }
  88.  
  89. // Check for years of experience
  90.  
  91.   if (aSkill->yearsExp().length()==0) {
  92.      throw IException("The number of years of experience is missing.  Enter it and try again.");
  93.      return *this;
  94.   }
  95.  
  96.   IProfile *p = new IProfile("skill.ini");
  97.   IString IDkey, yearkey;
  98.  
  99. // If skill is not in the database at all, set the key index this way
  100.  
  101.   if (!p->containsApplication(aSkill->skillName()))
  102.      aSkill->setKey("1");
  103.  
  104.   else {
  105.  
  106. // Check to see if this record already exists for this contractor and set the key
  107.  
  108.      unsigned long numRecs = p->numberOfKeys(aSkill->skillName());
  109.      IString tempID;
  110.      int flag = 0;
  111.      int i;
  112.  
  113.      for (i=1; i <= (numRecs/2) ; i++) {
  114.  
  115.         IDkey = "ID" + IString(i);
  116.         tempID = p->elementWithKey(IDkey, aSkill->skillName());
  117.  
  118.         if (tempID == aSkill->contractorID()) {
  119.            aSkill->setKey(IString(i));
  120.  
  121.            flag = 1;              // Set flag to indicate record was found
  122.            i = (numRecs/2) + 1;   // Terminate loop immediately
  123.         }
  124.      }
  125.  
  126. // If this is a new entry for an existing skill, set the key index this way
  127.  
  128.      if (flag == 0)
  129.         aSkill->setKey(IString(1 + (numRecs/2)));
  130.   }
  131.  
  132. // Construct the database keys
  133.  
  134.   IDkey = "ID" + aSkill->key();
  135.   yearkey = "year" + aSkill->key();
  136.  
  137. // Add the skill (or replace existing skill records) in database
  138.  
  139.   p->addOrReplaceElementWithKey(IDkey, aSkill->contractorID(), aSkill->skillName());
  140.   p->addOrReplaceElementWithKey(yearkey, aSkill->yearsExp(), aSkill->skillName());
  141.  
  142.   delete p;
  143.   return *this;
  144. }
  145.