package programs; public class Passport { private StringBuffer stampsReceived; private char separator; private static int totalObjectCount = 0; private String firstName; private String middleName; private String lastName; // ++++++++++++CONSTRUCTORS public Passport(String firstname, String middlename, String lastname) { this.firstName = validateAndFormat(firstname); if (middlename.isBlank() == true) { this.middleName = ""; } else { this.middleName = validateAndFormat(middlename); } this.lastName = validateAndFormat(lastname); if (this.firstName == null || this.middleName == null || this.lastName == null) { return; } this.stampsReceived = new StringBuffer(); this.separator = ','; totalObjectCount += 1; } public Passport(String firstname, String lastname) { this(firstname, "", lastname); } public Passport() { this("SAMPLEFIRSTNAME", "SAMPLEMIDDLENAME", "SAMPLELASTNAME"); } public Passport(Passport passport) { this(passport.firstName, passport.middleName, passport.lastName); this.stampsReceived = new StringBuffer(passport.stampsReceived); this.separator = passport.separator; } // ++++++++++++METHODS public String toString() { String stringCreated = lastName + separator + firstName; if (middleName.isEmpty()) { return stringCreated; } else { stringCreated += separator + middleName; } return stringCreated; } public Passport addStamp(String stamp) { if (!(stamp == null || stamp.isBlank())) { stampsReceived.append(stamp); } return this; } public StringBuffer getStamps() { return new StringBuffer(this.stampsReceived); } public char getSeparator() { return separator; } public boolean setSeparator(char separator) { if (separator == '@' || Character.isSpaceChar(separator) || Character.isLetter(separator)) { return false; } else { this.separator = separator; return true; } } public boolean equals(Object obj) { if (obj == this) { return true; } if (obj == null || getClass() != obj.getClass()) { return false; } Passport passport = (Passport) obj; return (this.firstName.equals(passport.firstName) && this.lastName.equals(passport.lastName) && this.middleName.equals(passport.middleName)); } public int compareTo(Passport passport) { if (this.lastName.compareTo(passport.lastName) == 0 && this.firstName.compareTo(passport.firstName) == 0 && this.middleName.compareTo(passport.middleName) == 0) { return 0; } if (this.lastName.compareTo(passport.lastName) == 0 && this.firstName.compareTo(passport.firstName) == 0 && this.middleName.compareTo(passport.middleName) > 0) { return 1; } if (this.lastName.compareTo(passport.lastName) == 0 && this.firstName.compareTo(passport.firstName) == 0 && this.middleName.compareTo(passport.middleName) < 0) { return -1; } if (this.lastName.compareTo(passport.lastName) > 0) { return 1; } if (this.lastName.compareTo(passport.lastName) < 0) { return -1; } if (this.lastName.compareTo(passport.lastName) == 0 && this.firstName.compareTo(passport.firstName) > 0) { return 1; } if (this.lastName.compareTo(passport.lastName) == 0 && this.firstName.compareTo(passport.firstName) < 0) { return -1; } else return 0; } public static int getNumberOfPassportObjects() { return totalObjectCount; } public static void resetNumberOfPassportObjects() { totalObjectCount = 0; } public static Passport normalize(Passport passport, boolean uppercase) { if (passport == null) { return null; } if (passport != null) { if (uppercase == true) { Passport upperCasedPassport = new Passport(passport); upperCasedPassport.firstName = passport.firstName.toUpperCase(); upperCasedPassport.lastName = passport.lastName.toUpperCase(); upperCasedPassport.middleName = passport.middleName .toUpperCase(); return upperCasedPassport; } else if (uppercase == false) { Passport lowerCasedPassport = new Passport(passport); lowerCasedPassport.firstName = passport.firstName.toLowerCase(); lowerCasedPassport.lastName = passport.lastName.toLowerCase(); lowerCasedPassport.middleName = passport.middleName .toLowerCase(); return lowerCasedPassport; } } return null; } public boolean changeLastname(String lastname) { String validLastName = Passport.validateAndFormat(lastname); if (validLastName != null) { this.lastName = Passport.validateAndFormat(lastname); return true; } else { return false; } } private static String validateAndFormat(String name) { if (name == null || name.isBlank()) { return null; } name = name.trim(); name = name.toLowerCase(); name = Character.toUpperCase(name.charAt(0)) + name.substring(1); return name; } }