Classwork 5

This is a *bonus* classwork and is worth +4 points on a single Homework grade (for a complete, working, on-time submission)!

For example, if you got a 97/100 on HW1, you'll get 101/100 instead!

In order to get your solutions back in a timely fashion, this classwork has an abbreviated due-date -- check the course page for more info!

You are designing your own web browser, because why the hell not? Everyone else seems to be doing it these days, and you'll be damned if ForneyFox isn't off the ground before Chrome totally takes over!

So, you decided to start at the basics:

Design a web browser navigation suite that can be used to (1) visit sites, (2) return users to previously visited sites, and (3) move forward to previously visited sites that were returned from (just like how you (1) visit sites on a browser and can (2) hit the back button or (3) hit the forward button).


GitHub Classroom + Skeleton


Start with the solution skeleton in-hand! The following will also serve as your submission mechanism (see submission instructions below).

Classwork 5 - GitHub Classroom


Specifications


For now, during development, we'll just be developing the methods for a WebNavigator class.

Here are the viable commands:

  • visit(site): navigates to the specified URL and is flagged as the "currently viewing."

    This would be like typing in some URL into your browser's navigation bar and then hitting enter.

  • back(): navigates to most recent site on which the above visit command was invoked.

    This would be like hitting the back button on your browser.

  • forw(): navigates to the most recent site from which the above back command was used. The "forward" collection is wiped after visiting a new site through the visit command (see examples below).

    This would be like hitting the forward button on your browser.

These commands are then processed in the main method of your WebNavigator class.


Your task: complete the WebNavigator class outlined below to achieve the above specified behavior. An example useage is found below:

  // Example Interaction
  WebNavigatorSolution navi = new WebNavigatorSolution();
  
  navi.visit("www.google.com");
  System.out.println(navi.getCurrent());
  // www.google.com
  
  navi.visit("www.reddit.com");
  System.out.println(navi.getCurrent());
  // www.reddit.com
  
  navi.back();
  System.out.println(navi.getCurrent());
  // www.google.com
  
  navi.back();
  System.out.println(navi.getCurrent());
  // www.google.com
  
  navi.forw();
  System.out.println(navi.getCurrent());
  // www.reddit.com
  
  navi.forw();
  System.out.println(navi.getCurrent());
  // www.reddit.com
  
  navi.visit("www.facebook.com");
  System.out.println(navi.getCurrent());
  // www.facebook.com
  
  navi.back();
  System.out.println(navi.getCurrent());
  // www.reddit.com
  
  // Visiting another site after moving back wipes
  // the "forward" collection
  navi.visit("www.amazon.com");
  System.out.println(navi.getCurrent());
  // www.amazon.com
  
  // See? doesn't go back to reddit
  navi.forw();
  System.out.println(navi.getCurrent());
  // www.amazon.com

Your application should have the above behavior and you should verify its functionality with extra tests as well!

You may use *any* of the classes we've covered in the Java Collections framework for this assignment! Don't get used to the freedom, you can't use it on your homework yet.

Your options are:

  • ArrayLists

  • LinkedLists

  • Stacks

  • Queues


Here are some added details:

  • Before visiting a site, the current site can be considered null; users should not be able to use back commands to return to null.

  • Moving back at the first visited site or forward at the last visited site keeps the current site where it is.

  • If you're clever with your data structure choice, you only need to write ~13 - 15 lines of code to complete this assignment.

  • Big Hint: Don't feel limited to a single data structure, OR a single copy of a single data structure.

Need more hints on how your WebNavigator is meant to behave? Just head to your own web browser!



Submission

You will be submitting your assignments through GitHub Classroom!

What

Complete all classes that accomplishes the specification above, in the project structure given in the skeleton above.


How

To clone this assignment (if you need a refresher), consult the guide here:

GitHub Classroom Tutorial

To submit this assignment:

  • Simply push your final, submission copy to the GitHub Classroom repository associated with you or your group.

  • If you worked in a group (3 individuals maximum), ensure that your GitHub Classroom group includes all members, and place all group members' names at the top of *all* submitted files (in appropriate JavaDoc commenting fashion) AND in the accompanying readme file.



  PDF / Print