/** {@link IDataUpgrader} implementations to delegate upgrade operations to. */
  @Autowired(required = false)
  public void setDataUpgraders(Collection<IDataUpgrader> dataUpgraders) {
    final Map<PortalDataKey, IDataUpgrader> dataUpgraderMap =
        new LinkedHashMap<PortalDataKey, IDataUpgrader>();

    for (final IDataUpgrader dataUpgrader : dataUpgraders) {

      try {

        final Set<PortalDataKey> upgradeDataKeys = dataUpgrader.getSourceDataTypes();
        for (final PortalDataKey upgradeDataKey : upgradeDataKeys) {
          this.logger.debug(
              "Registering IDataUpgrader for '{}' - {}", upgradeDataKey, dataUpgrader);
          final IDataUpgrader existing = dataUpgraderMap.put(upgradeDataKey, dataUpgrader);
          if (existing != null) {
            this.logger.warn(
                "Duplicate IDataUpgrader PortalDataKey for {} Replacing {} with {}",
                new Object[] {upgradeDataKey, existing, dataUpgrader});
          }
        }

      } catch (Exception exception) {
        logger.error("Failed to register data upgrader {}.", dataUpgrader, exception);
      }
    }

    this.portalDataUpgraders = Collections.unmodifiableMap(dataUpgraderMap);
  }