Class CLIENT

class CLIENT

   inherit 
      DISPLAYABLE

   feature
      
      actual_customer: CUSTOMER 
      actual_good:     GOOD
      actual_order:    ORDER

      customers: ARRAY [CUSTOMER];
      goods:     ARRAY [GOOD];
      orders:    ARRAY [ORDER];

      save_customer (c: CUSTOMER) is
         do
            server.save_customer (c);
         end;

      save_good (c: GOOD) is
         do
            server.save_good (c)
         end;

      save_order (c: ORDER) is
         do 
            server.save_order (c)
         end

      ---- create new items ------------

      empty_order is
         do
            !!actual_order.make
         end

      empty_customer is
         do
            !!actual_customer.make
         end

      empty_good is
         do
            !!actual_good.make
         end

      server: SERVER
 
      open is
         -- load and initialize the server
         -- and the attached data base
         local
            f: FILE
            fs: FILE_SYSTEM
         do
            !!fs.make
            if fs.file_exists ("store") then
               !!f.make_open_read_write ("store");
               !!server.make (f);
               server ?= server.retrieved (f);
               if server /= void then
                  print ("Object retrieved ");
               else
                  print ("Could not load the object")
               end
            else
               !!f.make_create_read_write ("store");
               !!server.make (f);
               server.init_store;
               server.flush;
            end -- if exists

            orders := server.orders;
            customers := server.customers;
            goods := server.goods;
         end

   end -- class CLIENT

Class SERVER

class SERVER
   inherit
      STORABLE

   creation
      make

   feature

      make (f: FILE) is
         do
            my_file := f
         end

      save_customer (c: CUSTOMER) is
         do
            search (customers, c.number);  
            -- if not found, assign next free number 
            if not found then
               c.set_number (customers.upper+1)
            end
            customers.force (c, c.number) 
            print ("customer was saved with number");
            io.put_integer (c.number);
         end

      save_good (c: GOOD) is
         do
            search (goods, c.number);  
            -- if not found, assign next free number 
            if not found then
               c.set_number (goods.upper+1)
            end
            goods.force (c, c.number) 
            print ("good was saved with number");
            io.put_integer (c.number);
         end

      save_order (c: ORDER) is
         do
            search (orders, c.number);  
            -- if not found, assign next free number 
            if not found then
               c.set_number (orders.upper+1)
            end
            orders.force (c, c.number) 
            print ("order was saved with number");
            io.put_integer (c.number);
         end

      search (a: ARRAY [DB_ITEM]; c: INTEGER) is
         do
            from
               index := a.lower
               found := false
            until
               found or else index > a.upper
            loop
               if a.item(index).number = c then
                  found := true
               else
                  index := index + 1
               end -- if
            end -- loop
         end -- do

      init_store is
         do
            !!customers.make (1, 0);
            !!goods.make (1, 0);
            !!orders.make (1, 0);
         end

      customers : ARRAY [CUSTOMER]
      goods : ARRAY [GOOD] 
      orders : ARRAY [ORDER] 

      flush, close is
            -- store the databases
         require
            my_file /= void
         do
            basic_store (my_file)
         end


   feature {NONE} -- only for implementation purposes

      index: INTEGER
      found: BOOLEAN
      my_file: FILE
    
   end -- class SERVER

Copyright © Object Tools -- info@object-tools.com
Last updated: $Date: 2005/02/02 11:51:14 $