home *** CD-ROM | disk | FTP | other *** search
/ Chip 1998 November / Chip_1998-11_cd.bin / tema / Cafe / WDESAMPL.BIN / EmployeeFileAccessor.java < prev    next >
Text File  |  1997-08-23  |  3KB  |  143 lines

  1. import java.io.*;
  2. /**
  3.  * Provide file storage and retrieval of employee data objects.
  4.  */
  5.  
  6. public class EmployeeFileAccessor
  7. {
  8.     RandomAccessFile f;
  9.  
  10.     /**
  11.      * Open the employee file; create it if it does not exist.
  12.      */
  13.  
  14.     public EmployeeFileAccessor(String fname)
  15.     throws IOException
  16.     {
  17.         f = new RandomAccessFile(fname, "rw");
  18.     }
  19.  
  20.     /**
  21.      * Set the employee file to the beginning
  22.      */
  23.  
  24.     public void reset()
  25.     throws IOException
  26.     {
  27.         f.seek(0);
  28.     }
  29.  
  30.     // The size, in bytes, of an employee record. Records are fixed-size, to
  31.     // allow for easy modification.
  32.  
  33.     final static int recsize =
  34.         Name.MAX_LENGTH+1 + Section.MAX_LENGTH+1 + SSN.MAX_LENGTH+1 +1;
  35.  
  36.     /**
  37.      * Write a new employee to the end of the file
  38.      */
  39.  
  40.     public void addEmployee(Employee e)
  41.     throws IOException
  42.     {
  43.         // Transfer field values to buffer
  44.         byte[] b = new byte[recsize];
  45.         int pos = 0;
  46.  
  47.         int len = e.name.value().length();
  48.         e.name.value().getBytes(0, len, b, pos);
  49.         b[pos + len] = '\0';
  50.         pos += Name.MAX_LENGTH + 1;
  51.  
  52.         String a = String.valueOf(e.section.value());
  53.         len = a.length();
  54.         a.getBytes(0, len, b, pos);
  55.         b[pos + len] = '\0';
  56.         pos += Section.MAX_LENGTH + 1;
  57.  
  58.         len = e.ssn.value().length();
  59.         e.ssn.value().getBytes(0, len, b, pos);
  60.         b[pos + len] = '\0';
  61.  
  62.         b[recsize-1] = '\n';
  63.  
  64.         // Write buffer to file, as a fixed-size record
  65.         f.seek(f.length());
  66.         f.write(b);
  67.     }
  68.  
  69.     /**
  70.      * Fetch the first or next employee from the file.
  71.      */
  72.  
  73.     public Employee getNextEmployee()
  74.     throws IOException
  75.     {
  76.         byte[] b = new byte[recsize];
  77.         int nchars;
  78.         System.out.println("About to read");
  79.         if ((nchars = f.read(b)) <= 0) return null;
  80.         System.out.println("Read " + nchars + " chars");
  81.         int pos = 0;
  82.         String n = new String(b, 0, pos, Name.MAX_LENGTH);
  83.         n = n.trim();
  84.         System.out.println("Fetched name='" + n + "'");
  85.         pos += Name.MAX_LENGTH + 1;
  86.         String a = new String(b, 0, pos, Section.MAX_LENGTH);
  87.         a = a.trim();
  88.         System.out.println("Fetched section=" + a);
  89.         pos += Section.MAX_LENGTH + 1;
  90.         String s = new String(b, 0, pos, SSN.MAX_LENGTH);
  91.         s = s.trim();
  92.         System.out.println("Fetched ssn=" + s);
  93.  
  94.         Employee emp;
  95.         try
  96.         {
  97.             emp = new Employee(n, a, s);
  98.         }
  99.         catch (InvalidEmployeeException e)
  100.         {
  101.             System.out.println("Invalid employee read from file!");
  102.             return null;
  103.         }
  104.  
  105.         return emp;
  106.     }
  107.  
  108.     /**
  109.      * Read the employee file, and build a list of employee objects.
  110.      */
  111.  
  112.     EmployeeList buildEmployeeList()
  113.     {
  114.         EmployeeList elist = new EmployeeList();
  115.         Employee emp;
  116.         int noOfEmployees = 0;
  117.         try
  118.         {
  119.             reset();
  120.         }
  121.         catch (IOException ex)
  122.         {
  123.             return elist;
  124.         }
  125.         for (;;)
  126.         {
  127.             try
  128.             {
  129.                 emp = getNextEmployee();
  130.             }
  131.             catch (IOException ex)
  132.             {
  133.                 return elist;
  134.             }
  135.             if (emp == null) break;
  136.             noOfEmployees++;
  137.             elist.add(emp);
  138.         }
  139.         System.out.println("noOfEmployees=" + noOfEmployees);
  140.         return elist;
  141.     }
  142. }
  143.