master
 1/**
 2 * Assignment 2, COMP268 Class: TrainTimeTable.java
 3 *
 4 * @description Provides a class to manage a train schedule.
 5 * @author: mo khan Student ID: 3431709
 6 * @date August 5, 2019
 7 * @version 1.0
 8 */
 9package Q10;
10
11import java.text.*;
12import java.util.*;
13
14public class Station {
15  private Date arrival;
16  private Date departure;
17  private int day;
18  private String city;
19
20  public Station(String city, Date arrival, Date departure, int day) {
21    this.city = city;
22    this.arrival = arrival;
23    this.departure = departure;
24    this.day = day;
25  }
26
27  public Date getArrivalDate() {
28    return this.arrival;
29  }
30
31  public Date getDepartureDate() {
32    return this.departure;
33  }
34
35  public int getDay() {
36    return day;
37  }
38
39  public String getCity() {
40    return this.city;
41  }
42
43  public void setArrivalDate(Date arrival) {
44    this.arrival = arrival;
45  }
46
47  public void setCity(String city) {
48    this.city = city;
49  }
50
51  public void setDay(int day) {
52    this.day = day;
53  }
54
55  public void setDepartureDate(Date departure) {
56    this.departure = departure;
57  }
58
59  public String getArrival() {
60    return formatDate(this.arrival);
61  }
62
63  public String getDeparture() {
64    return formatDate(this.departure);
65  }
66
67  public void delayBy(int minutes) {
68    this.setArrivalDate(advanceDate(this.getArrivalDate(), minutes));
69    this.setDepartureDate(advanceDate(this.getDepartureDate(), minutes));
70
71    Calendar calendar = Calendar.getInstance();
72    calendar.setTime(
73        this.getDepartureDate() != null ? this.getDepartureDate() : this.getArrivalDate());
74    calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
75    this.setDay(calendar.get(Calendar.DAY_OF_MONTH));
76  }
77
78  private String formatDate(Date date) {
79    if (date == null) return "-";
80
81    DateFormat format = new SimpleDateFormat("HH:mm");
82    format.setTimeZone(TimeZone.getTimeZone("UTC"));
83    return format.format(date);
84  }
85
86  private Date advanceDate(Date original, int minutes) {
87    if (original == null) return null;
88
89    return new Date(original.getTime() + (minutes * 60000));
90  }
91}