code: public void addWidget(String className, List<String> aliases, String defaultConfiguration) {
  
          Class<?> widgetClazz;
          I_CmsWidget widget;
          if (aliases == null) {
              aliases = Collections.emptyList();
          }
          try {
              widgetClazz = Class.forName(className);
              widget = (I_CmsWidget)widgetClazz.newInstance();
          } catch (Exception e) {
              LOG.error(Messages.get().getBundle().key(Messages.LOG_XML_WIDGET_INITIALIZING_ERROR_1, className), e);
              return;
          }
  
          m_registeredWidgets.put(widgetClazz.getName(), widget);
  
          for (String alias : aliases) {
              String prev = m_widgetAliases.get(alias);
              if (prev != null) {
                  LOG.warn("Duplicate widget alias " + alias + " for " + prev + ", " + widgetClazz.getName());
              }
              m_widgetAliases.put(alias, widgetClazz.getName());
          }
  
          if (CmsStringUtil.isNotEmpty(defaultConfiguration)) {
              // put the default configuration to the lookup Map
              m_widgetDefaultConfigurations.put(className, defaultConfiguration);
          }
  
          if (CmsLog.INIT.isInfoEnabled()) {
              if (CmsStringUtil.isEmpty(defaultConfiguration)) {
                  CmsLog.INIT.info(Messages.get().getBundle().key(Messages.INIT_ADD_WIDGET_1, widgetClazz.getName()));
              } else {
                  CmsLog.INIT.info(
                      Messages.get().getBundle().key(
                          Messages.INIT_ADD_WIDGET_CONFIG_2,
                          widgetClazz.getName(),
                          defaultConfiguration));
              }
          }
      }
docs: Adds a XML content editor widget class, making this widget available for the XML content editor.<p>
  
  @param className the widget class to add
  @param aliases the (optional) alias names to use for the widget class
  @param defaultConfiguration the default configuration of the widget