// Get the delegated-to editor kit. Specified by classname, not
 // prototype; specifying by prototype would be possible but a little
 // harder, and would make it difficult to make a good property
 // editor for.
 private void updateDelegate() {
   try {
     delegate =
         (EditorKit)
             Beans.instantiate(TopManager.getDefault().systemClassLoader(), Settings.kitClass);
     if (Settings.debug) System.err.println("The delegate kit: " + delegate);
   } catch (Exception e) {
     TopManager.getDefault().notifyException(e);
   }
 }
  private void addSetProperty(Object bean, Class<?>[] type, String name, Object... property)
      throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
    if (name == null) {
      name = type[0].getSimpleName();
    }

    int dot;
    if ((dot = name.indexOf('.')) > -1) {
      _logger.fine("looking at a composite property " + name);
      do {
        bean = Beans.invoke(bean, "get" + name.substring(0, dot));
        name =
            Strings.capitalize(
                name.substring(dot + 1)); // lower case letters may be found after '.'
      } while ((dot = name.indexOf('.')) > -1);
    }

    // attempt property injection using setXXX(), addXXX(), set(), or add(), in that order
    try {
      _logger.fine(
          S.fine(_logger)
              ? "trying set"
                  + name
                  + "() on "
                  + bean.getClass()
                  + ": "
                  + property.length
                  + args(property)
              : null);
      Beans.invoke(bean, "set" + name, property);
      _logger.fine("... successful");
    } catch (NoSuchMethodException x) {
      try {
        _logger.fine(
            S.fine(_logger)
                ? "trying add"
                    + name
                    + "() on "
                    + bean.getClass()
                    + ": "
                    + property.length
                    + args(property)
                : null);
        Beans.invoke(bean, "add" + name, property);
        _logger.fine("... successful");
      } catch (NoSuchMethodException x1) {
        try {
          _logger.fine(
              S.fine(_logger)
                  ? "trying set() on " + bean.getClass() + ": " + property.length + args(property)
                  : null);
          Beans.invoke(bean, "set", property);
          _logger.fine("... successful");
        } catch (NoSuchMethodException x2) {
          _logger.fine(
              S.fine(_logger)
                  ? "trying add() on " + bean.getClass() + ": " + property.length + args(property)
                  : null);
          Beans.invoke(bean, "add", property);
          _logger.fine("... successful");
        }
      }
    }
  }