private void onDataObjectChange(@Observes DataObjectChangeEvent event) {
    if (event.isFromContext(context != null ? context.getContextId() : null)) {
      if (event.getChangeType() == ChangeType.CLASS_NAME_CHANGE
          || event.getChangeType() == ChangeType.PACKAGE_NAME_CHANGE
          || event.getChangeType() == ChangeType.OBJECT_NAME_CHANGE
          || MainDomainAnnotations.LABEL_ANNOTATION.equals(event.getAnnotationClassName())) {

        refreshObjectSelector(dataObject);

        // For self references: in case name or package changes redraw properties table
        skipNextFieldNotification = true;
        dataObjectPropertiesProvider.refresh();
        dataObjectPropertiesTable.redraw();

        Scheduler.get()
            .scheduleDeferred(
                new Scheduler.ScheduledCommand() {
                  @Override
                  public void execute() {
                    selectCurrentObject(false);
                  }
                });
      }
    }
  }
  private void onDataObjectPropertyChange(@Observes DataObjectFieldChangeEvent event) {
    if (event.isFromContext(context != null ? context.getContextId() : null)) {

      if (event.getChangeType() == ChangeType.FIELD_NAME_CHANGE
          || event.getChangeType() == ChangeType.FIELD_TYPE_CHANGE
          || event.getChangeType() == ChangeType.FIELD_ANNOTATION_VALUE_CHANGE
          || event.getChangeType() == ChangeType.FIELD_ANNOTATION_ADD_CHANGE
          || event.getChangeType() == ChangeType.FIELD_ANNOTATION_REMOVE_CHANGE) {
        // TODO add filtering for the Label annotation class name.

        // use the annotationClassName
        List<ObjectProperty> props = dataObjectPropertiesProvider.getList();
        for (int i = 0; i < props.size(); i++) {
          if (event.getCurrentField() == props.get(i)) {
            dataObjectPropertiesTable.redrawRow(i);
            break;
          }
        }
      }
    }
  }