FRQ 1 - Control Structures
Control Structures FRQ
- Implemented FRQ1 in Spring Project
- Complete/Enhance and Methods in APCalendar
- Enhance APIs and @RESTController - Work With all POJOs and Methods in APCalendar
- Creating Getters/Setters/ToString for all Methods
- Testing API Using Curl
- Testing API Using Browser
- Testing API Using Postman
- Using Debugger
Implemented FRQ1 in Spring Project
- Completed all methods
- used Random generated valued for methods where code was un-implemented
- Created API endpoints for each method
- Link to Spring Project
public class APCalendar {
public static boolean isLeapYear(int year) {
if ( (year % 4 == 0) && (year % 100 != 0)){
return true;
}
else if ( year % 400 == 0 ){
return true;
}
else {
return false;
}
}
public static int numberOfLeapYears(int year1, int year2) {
int numOfLeapYears = 0; // initialize final count variable
for(int i = year1; i <= year2; i++){ // for loop that starts at the year1 number and goes until year 2 including it
if(isLeapYear(i)){ // if the year is a leap year, add 1 to the count
numOfLeapYears += 1;
}
}
return numOfLeapYears; // return the count
}
public static int firstDayOfYear(int year) {
return year = (int) Math.floor( Math.random() * 7 );
}
public static int dayOfYear(int month, int day, int year) {
return (int) (Math.random() * (366 - 1)) + 1;
}
public static int dayOfWeek(int month, int day, int year) {
int startDay = firstDayOfYear(year);
int selectedDay = dayOfYear(month, day, year);
int returnDay = (startDay + selectedDay - 1) % 7;
return returnDay;
}
/** Tester method */
public static void main(String[] args) {
// Private access modifiers
System.out.println("\n \n firstDayOfYear: " + APCalendar.firstDayOfYear(2022));
System.out.println("\n dayOfYear: " + APCalendar.dayOfYear(1, 1, 2022));
// Public access modifiers
System.out.println("\n Testing isLeapYear:");
System.out.println("\n isLeapYear 2022: " + APCalendar.isLeapYear(2022));
System.out.println("\n isLeapYear 2000: " + APCalendar.isLeapYear(2000));
System.out.println("\n isLeapYear 3000: " + APCalendar.isLeapYear(3000));
System.out.println("\n numberOfLeapYears: " + APCalendar.numberOfLeapYears(2000, 2022));
System.out.println("\n dayOfWeek: " + APCalendar.dayOfWeek(1, 1, 2022));
}
}
APCalendar.main(null);
@RestController
@RequestMapping("/api/calendar")
public class CalendarApiController {
/** GET isLeapYear endpoint
* ObjectMapper throws exceptions on bad JSON
* @throws JsonProcessingException
* @throws JsonMappingException
*/
@GetMapping("/isLeapYear/{year}")
public ResponseEntity<JsonNode> getIsLeapYear(@PathVariable int year) throws JsonMappingException, JsonProcessingException {
// Backend Year Object
Year year_obj = new Year();
year_obj.setYear(year); // evaluates Leap Year
// Turn Year Object into JSON
ObjectMapper mapper = new ObjectMapper();
JsonNode json = mapper.readTree(year_obj.isLeapYearToString()); // this requires exception handling
return ResponseEntity.ok(json); // JSON response, see ExceptionHandlerAdvice for throws
}
@GetMapping("/firstDayOfYear/{year}")
public ResponseEntity<JsonNode> getFirstDayOfYear(@PathVariable int year) throws JsonMappingException, JsonProcessingException {
// Backend Year Object
Year year_obj2 = new Year();
year_obj2.setFirstDayOfYear(year);
// Turn Year Object into JSON
ObjectMapper mapper = new ObjectMapper();
JsonNode json = mapper.readTree(year_obj2.firstDayOfYearToString()); // this requires exception handling
return ResponseEntity.ok(json); // JSON response, see ExceptionHandlerAdvice for throws
}
@GetMapping("/numberOfLeapYears/{year1}/{year2}")
public ResponseEntity<JsonNode> getNumberOfLeapYears(@PathVariable("year1") int year1, @PathVariable("year2") int year2) throws JsonMappingException, JsonProcessingException {
// Backend Year Object
Year year_obj3 = new Year();
year_obj3.setNumberOfLeapYears(year1, year2);
// Turn Year Object into JSON
ObjectMapper mapper = new ObjectMapper();
JsonNode json = mapper.readTree(year_obj3.numberOfLeapYearsToString()); // this requires exception handling
return ResponseEntity.ok(json); // JSON response, see ExceptionHandlerAdvice for throws
}
@GetMapping("/dayOfYear/{month}/{day}/{year}")
public ResponseEntity<JsonNode> getDayOfYear(@PathVariable("month") int month, @PathVariable("day") int day, @PathVariable("year") int year) throws JsonMappingException, JsonProcessingException {
// Backend Year Object
Year year_obj4 = new Year();
year_obj4.setDayOfYear(month, day, year);
// Turn Year Object into JSON
ObjectMapper mapper = new ObjectMapper();
JsonNode json = mapper.readTree(year_obj4.dayOfYearToString()); // this requires exception handling
return ResponseEntity.ok(json); // JSON response, see ExceptionHandlerAdvice for throws
}
@GetMapping("/dayOfWeek/{month}/{day}/{year}")
public ResponseEntity<JsonNode> getDayOfWeek(@PathVariable("month") int month, @PathVariable("day") int day, @PathVariable("year") int year) throws JsonMappingException, JsonProcessingException {
// Backend Year Object
Year year_obj5 = new Year();
year_obj5.setDayOfWeek(month, day, year);
// Turn Year Object into JSON
ObjectMapper mapper = new ObjectMapper();
JsonNode json = mapper.readTree(year_obj5.dayOfWeekToString()); // this requires exception handling
return ResponseEntity.ok(json); // JSON response, see ExceptionHandlerAdvice for throws
}
}
/* firstDayOfYear getter/setters */
public int getFirstDayOfYear(int year) {
return APCalendar.firstDayOfYear(year);
}
public void setFirstDayOfYear(int year) { // this is private to avoid tampering
this.firstDayOfYear = APCalendar.firstDayOfYear(year);
}
public String firstDayOfYearToString(){
return ( "{ \"firstDayOfYear\": " + this.firstDayOfYear + " }" );
}
/* numberOfLeapYears getter/setters */
public int getNumberOfLeapYears(int year1, int year2) {
return APCalendar.numberOfLeapYears(year1, year2);
}
public void setNumberOfLeapYears(int year1, int year2) { // this is private to avoid tampering
this.numberOfLeapYears = APCalendar.numberOfLeapYears(year1, year2);
}
public String numberOfLeapYearsToString(){
return ( "{ \"numberOfLeapYears\": " + this.numberOfLeapYears + " }" );
}
/* dayOfYear getter/setters */
public int dayOfYear(int month, int day, int year) {
return APCalendar.dayOfYear(month, day, year);
}
public void setDayOfYear(int month, int day, int year) { // this is private to avoid tampering
this.dayOfYear = APCalendar.dayOfYear(month, day, year);
}
public String dayOfYearToString(){
return ( "{ \"dayOfYear\": " + this.dayOfYear + " }" );
}
/* dayOfWeek getter/setters */
public int dayOfWeek(int month, int day, int year) {
return APCalendar.dayOfWeek(month, day, year);
}
public void setDayOfWeek(int month, int day, int year) { // this is private to avoid tampering
this.dayOfWeek = APCalendar.dayOfWeek(month, day, year);
}
public String dayOfWeekToString(){
return ( "{ \"dayOfWeek\": " + this.dayOfWeek + " }" );
}