private void checkGadgets(
     final JiraConfig config, final CheckOptions options, final ConfigDashboard dashboard) {
   if (options.checkEnabled(CHECKID_GADGETS)) {
     dashboard.getGadgets().clear();
   } else if (options.checkEnabled(CHECKID_ABSOLUTE) || options.checkEnabled(CHECKID_EXTERNAL)) {
     final Set<String> externalUrls = getExternalGadgetUrls(config);
     boolean changed = false;
     for (final Iterator<ConfigGadget> remove = dashboard.getGadgets().iterator();
         remove.hasNext(); ) {
       final ConfigGadget gadget = remove.next();
       if (externalUrls.contains(toLowerCase(gadget.getGadgetXml()))) {
         if (options.checkEnabled(CHECKID_EXTERNAL)) {
           changed = true;
           remove.remove();
         }
       } else if (options.checkEnabled(CHECKID_ABSOLUTE) && isAbsoluteUrl(gadget)) {
         changed = true;
         remove.remove();
       }
     }
     if (changed) {
       dashboard.reorderGadgets();
     }
   }
 }
  public void fixConfiguration(final JiraConfig config, final CheckOptions options) {
    final List<ConfigDashboard> dashboards = config.getDashboards();
    for (Iterator<ConfigDashboard> dashboardIterator = dashboards.iterator();
        dashboardIterator.hasNext(); ) {
      ConfigDashboard dashboard = dashboardIterator.next();
      if (options.checkEnabled(CHECKID_DASHBOARDS) && !dashboard.isSystem()) {
        dashboardIterator.remove();
      } else if (!dashboard.getGadgets().isEmpty()) {
        checkGadgets(config, options, dashboard);
      }
    }

    if (options.checkEnabled(CHECKID_EXTERNAL)) {
      config.getExternalGadgets().clear();
    }
  }
  public Result checkConfiguration(final JiraConfig config, final CheckOptions options) {
    final CheckResultBuilder builder = new CheckResultBuilder();
    final List<ConfigDashboard> dashboards = config.getDashboards();
    final Set<String> externalUrls = getExternalGadgetUrls(config);
    for (final ConfigDashboard dashboard : dashboards) {
      if (options.checkEnabled(CHECKID_DASHBOARDS) && !dashboard.isSystem()) {
        // If there exists a dashboard and it is not the system dashboard then we may have an error.
        builder.error(
            String.format(
                "Non-system dashboard '%s' (%d) exists.", getName(dashboard), dashboard.getId()),
            CHECKID_DASHBOARDS);
      } else if (!dashboard.getGadgets().isEmpty()) {
        if (options.checkEnabled(CHECKID_GADGETS)) {
          builder.error(
              String.format(
                  "Gadget on dashboard '%s' (%d).", getName(dashboard), dashboard.getId()),
              CHECKID_GADGETS);
        } else if (options.checkEnabled(CHECKID_ABSOLUTE)) {
          for (ConfigGadget gadget : dashboard.getGadgets()) {
            if (!externalUrls.contains(toLowerCase(gadget.getGadgetXml()))
                && isAbsoluteUrl(gadget)) {
              builder.error(
                  String.format(
                      "Gadget URL '%s' is absolute on dashboard '%s' (%d).",
                      gadget.getGadgetXml(), getName(dashboard), dashboard.getId()),
                  CHECKID_ABSOLUTE);
            }
          }
        }
      }
    }

    if (options.checkEnabled(CHECKID_EXTERNAL)) {
      for (String externalUrl : externalUrls) {
        builder.error(
            String.format("External gadget '%s' configured.", externalUrl), CHECKID_EXTERNAL);
      }
    }

    return builder.buildResult();
  }