Untitled

mail@pastecode.io avatar
unknown
java
3 years ago
4.1 kB
3
Indexable
/*
******************************
*   Undo implemented here    *
******************************
*/

import java.util.ArrayList;
import java.util.LinkedList;

public class Student implements Borrower {

    private String UID;
    private String firstName;
    private String lastName;
    private MyDate joinDate;
    private String department;
    public int sa3aCounter;
    
    public static ArrayList<Borrower> students = new ArrayList<Borrower>();
    LinkedList<Student> snapshots = new LinkedList<Student>();
    LinkedList<Student> snapshotsRedo = new LinkedList<Student>();

    public Student(String UID, String firstName, String lastName, MyDate joinDate, String department) {
        this.UID = UID;
        this.firstName = firstName;
        this.lastName = lastName;
        this.joinDate = joinDate;
        this.department = department;
        students.add(this);
    }

    public Student(String UID, String firstName, String lastName, MyDate joinDate, String department, String s) {
        this.UID = UID;
        this.firstName = firstName;
        this.lastName = lastName;
        this.joinDate = joinDate;
        this.department = department;
    }

    public void snapshot() {
        Student s = new Student(UID, firstName, lastName, joinDate, department, "snapshot");
        snapshots.add(s);
    }

    public void undo() {
        snapshotsRedo.add(snapshots.pollLast());
        sa3aCounter++;
        Student s = snapshots.peekLast();
        if (s != null) {
            this.UID = s.UID;
            this.department = s.department;
            this.firstName = s.firstName;
            this.lastName = s.lastName;
            this.joinDate = s.joinDate;
        } else {
            System.out.println("You cannot undo, there's no previous state...");
        }
    }

    public void redo() {
        snapshots.add(snapshotsRedo.get(sa3aCounter));
        Student s = snapshots.peekLast();
        if (s != null) {
            this.UID = s.UID;
            this.department = s.department;
            this.firstName = s.firstName;
            this.lastName = s.lastName;
            this.joinDate = s.joinDate;
        } else {
            System.out.println("You cannot redo, there's no previous state...");
        }
    }

    public Student() {
        
    }

    public Borrower setUID(String UID) {
        this.UID = UID;
        snapshot();
        return this;
    }
    public Borrower setFirstName(String firstName) {
        this.firstName = firstName;
        snapshot();
        return this;
    }
    public Borrower setLastName(String lastName) {
        this.lastName = lastName;
        snapshot();
        return this;
    }
    public Borrower setJoinDate(MyDate joinDate) {
        this.joinDate = joinDate;
        snapshot();
        return this;
    }

    public Borrower setDepartment(String department) {
        this.department = department;
        snapshot();
        return this;
    }

    public void add(Borrower s) {
        students.add(s);
    }

    public String getUID() {
        return this.UID;
    }

    public String getFirstName() {
        return this.firstName;
    }

    public String getLastName() {
        return this.lastName;
    }

    public MyDate getJoinDate() {
        return this.joinDate;
    }

    public String getDepartment() {
        return this.department;
    }

    public static void printArr() {
        for (Borrower student : students) {
            System.out.println(student);
        }
    }

    public static boolean checkRegistered(String UID) {
        for (Borrower student : students) {
            if (UID.equals(student.getUID())) {
                return true;
            }
        }
        return false;
    }

    @Override
    public String toString() {
        return "{" +
            " UID='" + getUID() + "'" +
            ", firstName='" + getFirstName() + "'" +
            ", lastName='" + getLastName() + "'" +
            ", joinDate='" + getJoinDate() + "'" +
            ", department='" + getDepartment() + "'" +
            "}";
    }
}