code: public final ObjectProperty<T> userObjectProperty() {
          if (userObject == null) {
              userObject = new SimpleObjectProperty<T>(this, "userObject") { //$NON-NLS-1$
                  @Override
                  public void set(T newObject) {
                      T oldUserObject = get();
  
                      // We do not use .equals() here to allow to reset the object even if is "looks" the same e.g. if it
                      // has some .equals() method implemented which just compares an id/business key.
                      if (oldUserObject != newObject) {
                          super.set(newObject);
  
                          Calendar calendar = getCalendar();
                          if (calendar != null) {
                              calendar.fireEvent(new CalendarEvent(CalendarEvent.ENTRY_USER_OBJECT_CHANGED, calendar, Entry.this, oldUserObject));
                          }
                      }
                  }
              };
          }
  
          return userObject;
      }
docs: A property used to store a reference to an optional user object. The user
  object is usually the reason why the entry was created.
  
  @return the user object property