Hello, thanks for the effort!
I noticed in your Observer pattern that the event is of the form:
However, your code example is passing:
new PropertyChangeEvent( source ==> this,
propertyName ==> property,
oldValue ==> firstName,
newvalue ==> this.firstName = firstName)
As such, you are passing the new setFirstName() value of the name in the "oldValue" parameter. Your object is updated correctly but your listeners are getting the wrong "oldValue" value (see event.getOldValue()).
It should be:
source ==> this
propertyName ==> property
oldValue ==> this.firstName
newvalue ==> this.firstName = firstName
This bug exists in both the first name snippit and last name snippit.
-mike