/** {@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); }