package com.kritsit.casetracker.shared.domain.model;
import javafx.beans.property.Property;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.ObjectProperty;
import javafx.beans.property.StringProperty;
import java.io.Externalizable;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
public class Staff implements Externalizable {
private static final long serialVersionUID = 10L;
private StringProperty usernameProperty;
private StringProperty firstNameProperty;
private StringProperty lastNameProperty;
private StringProperty departmentProperty;
private StringProperty positionProperty;
private ObjectProperty<Permission> permissionProperty;
public Staff() {
usernameProperty = new SimpleStringProperty();
firstNameProperty = new SimpleStringProperty();
lastNameProperty = new SimpleStringProperty();
departmentProperty = new SimpleStringProperty();
positionProperty = new SimpleStringProperty();
permissionProperty = new SimpleObjectProperty<>();
}
public Staff(String username, String firstName, String lastName, String department, String position, Permission permission) {
usernameProperty = new SimpleStringProperty(username);
firstNameProperty = new SimpleStringProperty(firstName);
lastNameProperty = new SimpleStringProperty(lastName);
departmentProperty = new SimpleStringProperty(department);
positionProperty = new SimpleStringProperty(position);
permissionProperty = new SimpleObjectProperty<>(permission);
}
public String getUsername() {
return usernameProperty.get();
}
public String getFirstName() {
return firstNameProperty.get();
}
public String getLastName() {
return lastNameProperty.get();
}
public String getName() {
return getFirstName() + " " + getLastName();
}
public String getDepartment() {
return departmentProperty.get();
}
public String getPosition() {
return positionProperty.get();
}
public Permission getPermission() {
return permissionProperty.get();
}
public Property nameProperty() {
return new SimpleStringProperty(getName());
}
public void setUsername(String username) {
usernameProperty.set(username);
}
public void setFirstName(String firstName) {
firstNameProperty.set(firstName);
}
public void setLastName(String lastName) {
lastNameProperty.set(lastName);
}
public void setDepartment(String department) {
departmentProperty.set(department);
}
public void setPosition(String position) {
positionProperty.set(position);
}
public void setPermission(Permission permission) {
permissionProperty.set(permission);
}
@Override
public int hashCode() {
return ((getUsername() + getFirstName() + getLastName() + getDepartment() + getPosition()).hashCode() + getPermission().hashCode()) / 3;
}
@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
return obj.hashCode() == hashCode();
}
@Override
public String toString() {
return getName();
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject(getUsername());
out.writeObject(getFirstName());
out.writeObject(getLastName());
out.writeObject(getDepartment());
out.writeObject(getPosition());
out.writeObject(getPermission());
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
setUsername((String) in.readObject());
setFirstName((String) in.readObject());
setLastName((String) in.readObject());
setDepartment((String) in.readObject());
setPosition((String) in.readObject());
setPermission((Permission) in.readObject());
}
}