Project #4 - Remote Code Repository

Version 1.0,
Due Date: 12:00 am, Sunday, Wk10

Purpose:

This project develops a Remote Code Repository that uses the analysis engine you developed in Project #2. It is charged with committing/pulling source code files to/from a remote server. It must do this for source code file sets that may reside on one or more directories in local or remote machines. This will require you to develop both server and client programs where the server may reside on a remote machine.
The Remote Code Repository can be accessed only with valid credentials and supports two user roles: developer and administrator. As a developer user can upload a new set of file to the remote server and his files are analyzed for quality and stored for later use. Developers can see only the files that they own and those for which they are granted permission by the owner. The user with the administrator role can see any directory that resides on the server.
In this project we will be creating a Remote Repository. Most of this effort will involve integrating the prototypes you built in Project #3 with the Local Code Analyzer you built in Project #2. From a remote client, users will be presented with a Graphical User Interface that should support Remote Repository operations in a relatively simple way.

Requirements:

Your Remote Code Repository Project:
  1. Shall be written in C#, using the .Net Framework.
  2. Shall use Visual Studio 2015, Community Edition available at no cost.
  3. Shall allow users to enter the system with a user name and password and only a user with administrator privileges shall be able to create new users.
  4. Shall provide the following user options:
    • Upload files to a newly created directory
    • Display directories owned by the user (or all directories if adminstrator)
    • Display any directories owned by another developer and shared with the current user
    • Download a file or complete directory
    • Provide comments for a particular file or directory, that will be displayed along with directory contents
    • Search for specified directories or files
  5. Shall display the files, class names or function names with an effective way to visualize their quality attributes (possibly color coded) and shall provide a way to expend the view hierarchically as user clicks items.
  6. Shall create an XML file that captures analyzed file properties.
  7. Shall create a new file if the file or directory with the same name exists and create an XML file that captures file properties for the new file as well.
  8. Shall display, in a Graphical User Interface, the content of the file hierarchically.
  9. Upon clicking a file name, shall provide all class names in that file by making LINQ queries into the XML created for an analyzed file, as required above, with a color code that reflects its maintainability.
  10. Upon clicking a class name, shall provide all function names and their quality properties.
  11. Shall provide an option to share a selected file or an entire directory with another user which can be selected from a list of users on GUI.
  12. Shall provide a way to enter comments regarding a selected directory or file.
  13. Shall provide code for both client and server processes. Only the client is expected to have a GUI.
  14. Shall use Windows Communication Framework (WCF) for message-passing communication, and Windows Presentation Foundation (WPF) to implement the Client GUI.
  15. Shall create an updated version of your Project #1 OCD, that accurately represents the concept as you have implemented it. Please comment, in an appendix, the differences between the two OCDs and what you learned, in these projects, about expressing a solid concept.

What you need to know:

In order to successfully meet these requirements you will need to know:
  1. How to integrate several relatively complex sets of packages into a solution holding projects for each process you need.