Group: teamgoodwithanything
Authors: Zaidoon Abd Al Hadi, Aaron Bungay, Jaspreet Sanghra, Shawn Morreau
Version: 3.0
Lab Section: L1
Remember not to compromise the code trying to follow styling, self-documentation, and code quality comes first!
- Method names, and non-final fields should be in camelCase.
- Final fields should be static, and UPPERCASE.
- When making comments for methods, fill out the javadoc generated ones.
- Class Member ordering is: Fields, Constructors, Methods. Put the meat of the methods at the top, helpers at the bottom.
- Try to avoid returns in the middle of methods.
We will be implementing serialization (save/restore functionality) using XML with XStream library, and the ability to step back (like undo).
- [Zaidoon], changes: 1. Add save functionality (implement using XStream library, make 'Save' menu item on GUI working) 2. Test cases 3. Update user manual
- [Aaron], changes: 1. Add restore functionality (implement using XStream library, make 'Restore' menu item on GUI working) 2. Test cases 3. Update readme
- [Shawn], changes: 1. Collaborate for Step back functionality (backend on model (store network topology for each step on a stack?) and on GUI add a new menu item under 'Simulation' for 'Undo') 2. Test cases 3. Update uml class diagram
- [Jaspreet], changes: 1. Collaborate for Step back functionality (backend on model (store network topology for each step on a stack?) and on GUI add a new menu item under 'Simulation' for 'Undo') 2. Collaborate for save and restore functionality 2. Test cases 3. Update javadocs
We will be implementing all remaining routing algorithms along with all metrics.
- [Zaidoon], changes: 1. Implement the FloodingRoutingAlgorithm 2. Test cases for the flooding algorithm 3. Update readme/javadocs: document changes made since last iteration and reasons for those changes, refer to Notes below
- [Aaron], changes:
1. Implement both metrics properly. Rename 'Steps' on GUI to 'Hops.
- Total number of packets transmitted (every copy of a message forwarded from one router to its neighbor counts as one packet)
- Average number of hops each message goes through before reaching its destination 2. Allow selection of routing algorithm through GUI -> 'Simulation' menu -> 'Routing algorithm' (opens popup with dropdown list) 3. Resolve github issues from previous milestones
- [Shawn], changes: 1. Implement DepthFirstSearchRoutingAlgorithm 2. Test cases for the depth first search algorithm 3. Update user manual, generate runnable jar
- [Jaspreet], changes: 1. Implement BreadthFirstSearchRoutingAlgorithm 2. Test cases for the breadth first search algorithm 3. Update UML class diagram from previous milestone
We will be implemention a GUI using MVC and we will have a new test class with test cases. Please refer to the mock-gui image. This will require the following tasks to be completed:
- [Zaidoon], changes:
1. Create Model from existing console based system
- implement removeRouter/removeConnection methods
- ensure addRouter/addConnection are in methods 2. Create Controller
- view should use lambdas to call controller methods directly 3. Some test cases
- [Aaron], changes:
1. Topology displaying in main view with circles as routers and lines as connections
- show messages on each router for each step 2. Allow selection of a router/connection 3. Allow dragging of a router in the view (extra, nice to have) 4. Help others once done 5. Some test cases
- [Shawn], changes:
1. Implement Router "Add" button on GUI
- after clicking add button, user can click on main topology view to add a new router and its gui circle will be displayed and stay on the topology
- only after adding - give a name: basic option: display a dialog box asking user for router name after they add a router, most elegant option: display a textarea on the router (circle on gui topology) that the user can type the name onto, when they hit enter it saves the name 2. Implement Router "Remove button on GUI (deletes the routers and associated connections)
- basic option: display a dialog with dropdown list of router names so user can select a router to delete
- most elegant option: allow user to select 1 (or multiple, extra elegant) router(s) at a time, clicking the remove button will remove selected router(s) 3. Implement 'File' (Import & Export unclickable) and 'Help' menu bar items 4. Some test cases
- [Jaspreet], changes:
1. Implement Connection "Add" button on GUI
- click on a router and drag mouse to another router after clicking add button 2. Implement Connection "Remove" button on GUI
- basic option: show dialog box with dropdown boxes of routers for to and from of the connection
- elegant: click line connection (or extra elegant, multiple) clicking remove button will remove selected connection(s) 3. Implement 'Simulation' menu bar items 4. Some test cases
-
[Shawn], changes: 1. Implement console prompts
- Ask user for routers (names not number of routers) (nodes)
- Create routers with the names provided and add them to topology
- Ask user for neighbouring routers (nodes) that belong to each router.
- Update topology with neighbouring routers
- Ask user for message generation rate (number of simulation steps to generate message)
- Inform the user each time that they have three options:
- The user can step through the simulator by pressing the "Space" key
- The user can exit the program by pressing the "Q" key
- The user can display the topology by pressing the "D" key
-
[Aaron], changes: 1. Implement random routing algorithm
-
[Zaidoon], changes: 1. Implement the simulation step process
- Generate a new message using a random source and a destination and inject it in the network. This will not happen during every step, but only according to a user-settable rate
- The message value will be "message: n" where n is the message number.
- forward all messages in the network to the next router(s) toward their destination
- Call the metric method
-
[Jaspreet], changes: 1. Implement the total number of packets transmitted metric
-
Count the total number of packets transmitted (every copy of a message forwarded from one router to its neighbor counts as one packet)
-
Implement a method that prints the metrics that can be called by the simulation step
-
Implement a method in the topology class to print the topology as a string using the following format:
a -> b, c
b -> c
where a is connected to both b and c, and b is connected to c.
-
-
We must include a README. The README must include: 1. Name and description of deliverables 2. Authors 3. Changes made to each deliverable since previous Milestone 4. known issues 5. Roadmap (future plans) 6. Provided source code file names, and diagram file names
-
We must include update to date UML diagrams (Class and Sequence)
-
We must include a complete user manual detailing setup instructions and usage
-
We must include a detailed description of design decisions
-
We must include a JAVADOC documentation
-
We must include all unchanged deliverables from previous milestones with each milestone submission
-
Each contribution (source code, documentation, etc.) must contain the name of its author
-
We should report time consuming issues or improvements using github's built in Issue Tracker
-
We must submit source code and deliverables to cuLearn
-
x-stream - a simple library for XML serialization & deserialization
-
clouds background image - public domain image, modified to increase brightness/reduce opacity
-
network image for window icon - public domain image, cropped and resized
-
typebase - minimal css stylesheet to make text look prettier for user manual/about webpages