public void validateNode() {
    boolean prevValid = valid;
    String prevMessages = getValidationMessagesString();

    validate();

    if (suppressEvents == false) {
      this.firePropertyChange(
          "validationMessagesString", prevMessages, getValidationMessagesString());
      this.firePropertyChange("valid", prevValid, valid);
    }

    if (valid) {
      setImage(getValidImage());
    } else {
      setImage(getInvalidImage());
    }

    if (prevValid != valid) {
      // changing of one element could cause others to become valid or invalid
      AbstractModelNode root = getRoot();
      if (root != null && root instanceof AbstractMetaDataModelNode) {
        AbstractMetaDataModelNode rootNode = (AbstractMetaDataModelNode) root;
        rootNode.validateTree();
      }
    }
  }