// properties and customizer
  public Node.PropertySet[] getPropertySets() {
    if (propertySets == null) {
      if (layoutDelegate == null) {
        return new Node.PropertySet[0]; // Issue 63916
      }
      propertySets = layoutDelegate.getPropertySets();

      for (Node.PropertySet propertySet : propertySets) {
        FormProperty<?>[] props = (FormProperty<?>[]) propertySet.getProperties();
        for (FormProperty<?> prop : props) {
          prop.addVetoableChangeListener(getLayoutListener());
          prop.addPropertyChangeListener(getLayoutListener());
        }
      }
    }
    return propertySets;
  }