pic of fridge
cyberfridge

Design Documentation

Version 2.0


Spring Quarter 1997: 

  
Project Sponsor:  
Gregory Abowd  
  

Project Team: 

 
Jeffrey Corn (Manager) 
Travis Works (Architect) 
John Garrard (Programmer) 
Kesniel Acton (Technical Writer) 
Dinesh Krishna (Quality Assurance) 


High-level Architecture
Architecture Rationale: Design Specification
User Interface

High-level Architecture

The CyberFridge system consists of two primary sub-systems: the Client Terminal and the CyberFridge Server (also known as CARA).  The Client Terminal provides an interface between the User and the Server, accepting input from the User and displaying information returned by the Server.  The Client Terminal can be loaded onto any remote computer which has the Internet access necessary to communicate with the Server through the World Wide Web.  The CyberFridge Server is a single system which tracks food and recipe information, and performs queries on this information as directed by the User through a Client Terminal.  Figure 1 depicts these two primary sub-systems, the secondary sub-systems which comprise each of them, and the paths through which information is passed between each sub-system, as well as between the system and the User.

 

The Client Terminal sub-systems display information to the User and accept input from the User. The Client Terminal Main Program allows the user to log in to the CyberFridge Server, and handles all requests passing to and from the Client Terminal.  This sub-system also opens the other Client Terminal sub-systems whenever requested by the User.  The Food Inventory Frame is used to accept requests for information regarding the food items currently in inventory, including additions to and subtractions from the inventory.  The Recipe Lister Frame is used to accept requests for recipes matching criteria selected by the User.  The Recipe Editor is used to update the list of recipes, including adding recipes to the list, removing recipes, or changing an existing recipe.

When the User requests a query or database action from the Client Terminal via one of the sub-systems, this input is sent to the Client Terminal Main Program, which translates it into a request which is sent through the Internet connection to the CyberFridge Server.  Here, the request is accepted by the Request Servicer, which then routes the request to the appropriate secondary sub-system.

If the User has requested information concerning the food inventory (such as how much of a particular item is on hand, or what meats are available), the Request Servicer routes the request to the Inventory Lister.  The Inventory Lister then translates this request into a database query, which it sends to the Food Inventory Database.  The Food Inventory Database performs this query and returns a set of records to the Inventory Lister.  The Inventory Lister then separates out the parts of this result which are appropriate to the request, and formats this information into data readable by the Terminal Browser.  This data is then returned to the Request Servicer. A similar procedure is followed if the User requests data regarding recipes, in which case the Recipe Lister and Recipe Database take the place of the Inventory Lister and Food Inventory Database, respectively.

If the User has updated information concerning food items (such as adding or removing an item), the Request Servicer routes the request to the Inventory Editor.  The Inventory Editor then translates this request into a database update, which it sends to the Food Inventory Database.  The Food Inventory Database updates its records according to this request, and returns an acknowledgment to the Inventory Editor.  If the update was not successful, the Food Inventory Database will instead return an error message.  The Inventory Editor then translates this acknowledgment or error message into a message for the User, and formats this message into data readable by the Terminal Browser.  This data is then returned to the Request Servicer. A similar procedure is followed if the User sends updates regarding recipes, in which case the Recipe Editor and Recipe Database take the place of the Inventory Editor and Food Inventory Database, respectively.

If the User has requested information concerning both recipes and the food inventory (such as which recipes can be prepared using only items currently on hand), the Request Servicer routes the request to the Recipe Lister.  The Recipe Lister then separates the portion of the query regarding recipes and translates this request into a database query, which it sends to the Recipe Database.  The Recipe Database performs this query and returns a set of records to the Recipe Lister. The Recipe Lister then takes the remaining portion of the request, and sends this plus the recipe records to the Complex Query Processor. The Complex Query Processor separates out the portion of the query regarding food items and translates this request into a database query, which it sends to the Food Inventory Database.  The Food Inventory Database performs this query and returns a set of records to the Complex Query Processor.  The Complex Query Processor then combines the two sets of records according to the request and sends this result to the Recipe Lister.  The Recipe Lister separates out the parts of this result which are appropriate to the request, and formats this information into data readable by the Terminal Browser.  This data is then returned to the Request Servicer.

Once the result of the User's request has been returned to the Request Servicer, the Request Servicer returns the data through the Internet to the Client Terminal Main Program.  Then data is then sent to the appropriate Client Terminal sub-system.  If the original request was for information regarding food, the reply data is routed to the Food Inventory Frame, where the information is displayed for the User. If the original request was for information regarding recipes, the reply data is routed to the Recipe Lister Frame, where the response is displayed for the User. If the original request was a recipe update, the reply data is routed to the Recipe Editor, where confirmation of the update is given to the User.  The Client Terminal sub-systems then await the next set of inputs from the User.


Architecture Rationale

I. Food Inventory Database Requirements

 The Food Inventory Database shall store a record for each food item currently in the kitchen.  Each record shall include all necessary information regarding each item - how much is in inventory, the expiration date, the food category to which the item belongs, etc.

II. Recipe Database Requirements

 The Recipe Database shall store a record for each recipe which the User wishes to keep in the system.  Each record shall include all necessary information regarding the recipe:  the ingredients, preparation time, preparation instructions, food category, frequency of selection, etc.

III. Recipe Search Requirements

The Recipe Lister will send queries to the Recipe Database to find information concerning particular recipes and to provide lists of recipes according to user requests.  The Recipe Lister will work in conjunction with the Complex Query Processor to perform searches requiring information regarding both recipes and the current food inventory.

IV. Remote Access Requirements

The connection between the Terminal Browser and the Request Servicer via the Internet will allow the User to access the abilities of the CyberFridge system from any computer which has the appropriate Internet access capabilities.

V. Non-Functional Requirements


Design Specification

Each sub-system is specified by what it should accomplish.  This is specified for each component by the input types it should accept and the output types it should generate.  The functions used by each component to generate the given outputs from the given inputs are then listed in a natural-language format.

Server Side Specifications:

Client Side Specifications:

Server Side Specifications:

    The CyberFridge Server will be implemented in an industry-standard database environment, such as FoxPro, MicroSoft Access, or Oracle.

Recipe Database

    record-list DBAccess ('Recipe', action-type : type Data-Action, recipe-record : record Recipe, parameter-list : text)

Purpose:  to maintain a database containing a record for each recipe stored in the system.
Input:  recipe record actions (add, delete, update) from the Recipe Editor; requests from the Recipe Lister.
Output:  recipe records to Recipe Lister; acknowledgments (positive or negative) to Recipe Editor (optional).

Food Inventory Database

    record-list DBAccess ('Inventory', action-type : type Data-Action, food-record : record Food-Item, parameter-list : text)

Purpose:  to maintain a database containing a record for each food item in inventory.
Input:  record actions (add, delete, update) from the Inventory Editor; requests from the Inventory Lister; requests from the Complex Query Processor.
Output:  recipe records to Recipe Lister; acknowledgments (positive or negative) to Recipe Editor (optional).

Request Servicer

    text ReqServicer (request-type : type Request, parameter-file : type text-file)

Purpose:  to forward requests from Client Terminals to the appropriate CyberFridge Server sub-system; to forward data from CyberFridge Server sub-systems to Client Terminals.
Input:  requests from Client Terminals; data from CyberFridge Server sub-systems.
Output:  requests to CyberFridge Server sub-systems; data to Client Terminals.
Functions:  accept requests from Client Terminals; determine appropriate sub-system for each request; send request to appropriate sub-system; read data returned from sub-systems; send data to Client Terminals.

Recipe Editor

    text RecipeEdit (action-type : type Data-Action, recipe-record : record Recipe)

Purpose:  to update the Recipe Database
Input:  requests to add, delete, or update a record, including a copy of the record to be changed, received from the Request Servicer; acknowledgments (positive or negative) from the Recipe Database.
Output:  record actions to Recipe Database; data to Request Servicer (optional).
Functions:  read request from Request Servicer; send appropriate record action to Recipe Database; read acknowledgment from Recipe Database; format acknowledgment into data format for Request Servicer; send data to Request Servicer.

Inventory Editor

    text InvEdit (action-type : type Data-Action, food-record : record Food-Item)

Purpose:  to update the Food Inventory Database
Input:  requests to add, delete, or update a record, including a copy of the record to be changed, received from the Request Servicer; acknowledgments (positive or negative) from the Food Inventory Database.
Output:  record actions to Food Inventory Database; data to Request Servicer (optional).
Functions:  read request from Request Servicer; send appropriate record action to Food Inventory Database; read acknowledgment from Food Inventory Database; format acknowledgment into data format for Request Servicer; send data to Request Servicer.

Recipe Lister

    text RecipeList (request-type : type Request, parameter-file : type text-file)

Purpose:  to select records from the Recipe Database, according to requests from the user.
Input:  requests from the Request Servicer; data from the Recipe Database; data from the Complex Query Processor.
Output:  requests to the Recipe Database; data to the Complex Query Processor; data to the Request Servicer.
Functions:  accept request from Request Servicer; send request to Recipe Database; read data from Recipe Database; (for complex queries: send data to Complex Query Processor, with request; read data from Complex Query Processor); select records from data, according to request; send data to Request Servicer.

Inventory Lister

    text InvList (request-type : type Request, parameter-file : type text-file)

Purpose:  to select records from the Food Inventory Database, according to requests from the user.
Input:  requests from the Request Servicer; data from the Food Inventory Database.
Output:  requests to the Food Inventory Database; data to the Request Servicer.
Functions:  accept request from Request Servicer; send request to Food Inventory Database; read data from Food Inventory Database; select records from data, according to request; send data to Request Servicer.

Complex Query Processor

    record-list Complex (request-type : type Request, parameter-file : type text-file, recipe-records : record-list)

Purpose:  to combine information from the Recipe Database and Food Inventory Database, to provide the user with the ability to perform queries requiring information from both databases.
Input:  data from Recipe Lister, including requests; data from Food Inventory Database.
Output:  requests to Food Inventory Database; data to Recipe Lister.
Functions:  read data from Recipe Lister; send request to Food Inventory Database; read data from Food Inventory Database; combine information from Food Inventory Database with records from Recipe Lister, according to request from Recipe Lister; send data to Recipe Lister.

Client-Side Design Specifications:

The Client Terminal will be implemented in an industry-standard Web environment, such as HTML (Netscape 3.0 and Internet Explorer 3.0 compatible) or Java.

Main Program

Purpose:  to provide an interface between the User and the CyberFridge Server.
Input:  requests from User; data from CyberFridge Server.
Output:  requests to CyberFridge Server; data to User.
Functions:  provide options to User; accept input from User; send request to CyberFridge Server; read data from CyberFridge Server; display data for User, open Food Inventory Frame, open Recipe Lister Frame.
Meta-Functions: log-in to CyberFridge Server; log-out from CyberFridge Server.

Food Inventory Frame

Purpose:  to accept user input regarding food actions, and to display to the User the results of food-related queries.
Input:   requests from the User, data from the Client Terminal Main Program.
Output:  data to the User, requests to the Client Terminal Main Program.
Functions:  provide options to the User, accept input from User, send request to Client Terminal Main Program, read data from Client Terminal Main Program, display data to User.

Recipe Lister Frame

Purpose:  to accept user input regarding recipe searches, and to display to the User the results of recipe searches.
Input:   requests from the User, data from the Client Terminal Main Program.
Output:  data to the User, requests to the Client Terminal Main Program, requests to the Recipe Editor.
Functions:  provide options to the User, accept input from User, send request to Client Terminal Main Program, read data from Client Terminal Main Program, display data to User, open Recipe Editor, send request to Recipe Editor.

Recipe Editor

Purpose:  to accept user input regarding recipe updates, and to display to the User details of individual recipes.
Input:   requests from the User, data from the Client Terminal Main Program, requests from the Recipe Lister Frame.
Output:  data to the User, requests to the Client Terminal Main Program.
Functions:  accept request from Recipe Lister Frame, provide options to the User, accept input from User, send request to Client Terminal Main Program, read data from Client Terminal Main Program, display data to User.


User Interface

This is log on screen for the user. He will enter his name and password to gain access to the system. This will be available off a web page.
After logging on, the main menu will appear. This menu will show the recipes in the database, allow access to the functions of CARA. Here the user will have access to search edit or access utilities from the system. The pull down menu will provide the functionality nessesary for the user to access elements of the system that are needed.
The user can perform several different types of searches. He can choose from searching by a recipe category, or checking what's available in his actual fridge. Dialog boxes will appear allowing input of the search criteria. The search will then take place after the user correctly fills out the dialog boxes and selects ok.
This menu allows the user to edit his recipe databases. He can add or delete categories or recipes. Specfic dialog boxes should appear allowing the user to perform these functions.
This menu is accessible off the utility menu, and allows the user to see exactly what's in his fridge.
That is basicly what the user sees of the system. The client side of design should be reflected by this user interface.

Revision History

Version 2.0

Date: 5/29/97
Names: Travis Works, Kesniel Acton
Description of Revisions:
    1. Rewrote the high level architecture to reflect updates in diagrams and general scheme.
    2. Added the client side to the design specification.
    3. Provided explantion of elements of design specificiation
    4. Clarifed several elements of the server side.
    5. Removed terminal browser and bar code scanner.
    6. Added more descriptions to the user interface section for clarity.

Version 1.0 Travis Works, Kesniel Acton.



Return to CyberFridge Project Notebook
Last Modified 5/15/97.