docs: public void validate() throws IllegalArgumentException, IllegalAccessException {
          for (Field field : getClass().getDeclaredFields()) {
              if (CatalogType.class.isAssignableFrom(field.getType())) {
                  CatalogType ct = (CatalogType) field.get(this);
                  assert(ct.getCatalog() == getCatalog()) : ct.getCatalogPath() + " has wrong catalog";
              }
              if (CatalogReference.class.isAssignableFrom(field.getType())) {
                  @SuppressWarnings("unchecked")
                  CatalogReference<? extends CatalogType> cr = (CatalogReference<? extends CatalogType>) field.get(this);
                  if (cr.m_value != null) {
                      assert(cr.m_value.getCatalog() == getCatalog()) : cr.m_value.getCatalogPath() + " has wrong catalog";
                  }
              }
              if (CatalogMap.class.isAssignableFrom(field.getClass())) {
                  @SuppressWarnings("unchecked")
                  CatalogMap<? extends CatalogType> cm = (CatalogMap<? extends CatalogType>) field.get(this);
                  for (CatalogType ct : cm) {
                      assert(ct.getCatalog() == getCatalog()) : ct.getCatalogPath() + " has wrong catalog";
                      ct.validate();
                  }
              }
          }
      }