=======================================================================================================
 Design Notes - Sample Project #4, Jim Fawcett, CSE681-OnLine, Summer 2017
=======================================================================================================

1. Main Parts:
   ====================================================================================================
   - Client > PluggableRepository and GUI
     - PluggableRepository does all its work using pluggin components:
         Checkin, Checkout, Storage, Version, Ownership, Browser
       and using parts:
         MetaData, FileNameEditor, FileSynchronizer, Relationships, TestUtilities
    - GUI does all its work using:
      - MainWindow for client control
      - Window1 popup for viewing code and metadata
      - PluggableRepository to manage all storage
      - PluggableCommService for sending and receiving messages and sending files
      - TestUtilities
   ----------------------------------------------------------------------------------------------------
   - Server > RepoServer is a container for shared Repository packages
     - RepoServer does all remote file management, but no other repository activities (done in Client) using:
       - RepoServer and Comm.Dispatcher
       - PluggableCommService
   ----------------------------------------------------------------------------------------------------
   - PluggableCommService > sends messages and files from sender to receiver
     - Uses WCF to build message-passing and file transfer services
     - Each end, client and server, have a Comm class that holds a sender and receiver
     - Uses dispatchers at each receiver to decode messages and invoke their commands
   ====================================================================================================

2. Processing Flow:
   ====================================================================================================
   - Initialization > load and activate pluggin components and initialize each view
   ----------------------------------------------------------------------------------------------------
   - Navigation     > Views source code and metadata partitioned into category folders
   ----------------------------------------------------------------------------------------------------
   - Checkout       > extracts dependency tree from root name and moves to StagingStorage
   ----------------------------------------------------------------------------------------------------
   - Checkin        > creates versioned metadata from client supplied info in StagingStorage
                    > copies checkin file to versioned file in StagingStorage
                    > moves both to Storage/category folder (category picked from available at checkin)
   ----------------------------------------------------------------------------------------------------
   - Message View   > starts comm listener, connects to remote server
                    > monitors message flow
   ----------------------------------------------------------------------------------------------------
   - Admin          > adds and removes category directories
                    > refreshes dependencyh relationship cache by traversing metadata files
   ----------------------------------------------------------------------------------------------------
   - Remote View    > views files in local storage and in remote server
                    > synchronizes local and remote files with Comm file transfers
   ====================================================================================================
