passport-class / PASSPORT CLASS / src / programs / Passport.java
Passport.java
Raw
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;
	}

}