/** {@link IDataExporter} implementations to delegate export operations to. */
  @SuppressWarnings("unchecked")
  @Autowired(required = false)
  public void setDataExporters(Collection<IDataExporter<? extends Object>> dataExporters) {
    final Map<String, IDataExporter<Object>> dataExportersMap =
        new LinkedHashMap<String, IDataExporter<Object>>();

    final Set<IPortalDataType> portalDataTypes = new LinkedHashSet<IPortalDataType>();

    for (final IDataExporter<?> dataImporter : dataExporters) {
      final IPortalDataType portalDataType = dataImporter.getPortalDataType();
      final String typeId = portalDataType.getTypeId();

      this.logger.debug(
          "Registering IDataExporter for '{}' - {}", new Object[] {typeId, dataImporter});
      final IDataExporter<Object> existing =
          dataExportersMap.put(typeId, (IDataExporter<Object>) dataImporter);
      if (existing != null) {
        this.logger.warn(
            "Duplicate IDataExporter typeId for {} Replacing {} with {}",
            new Object[] {typeId, existing, dataImporter});
      }

      portalDataTypes.add(portalDataType);
    }

    this.portalDataExporters = Collections.unmodifiableMap(dataExportersMap);
    this.exportPortalDataTypes = Collections.unmodifiableSet(portalDataTypes);
  }
  @Override
  public String exportData(String typeId, String dataId, Result result) {
    final IDataExporter<Object> portalDataExporter = this.getPortalDataExporter(typeId);
    final Object data = portalDataExporter.exportData(dataId);
    if (data == null) {
      return null;
    }

    final Marshaller marshaller = portalDataExporter.getMarshaller();
    try {
      marshaller.marshal(data, result);
      return portalDataExporter.getFileName(data);
    } catch (XmlMappingException e) {
      throw new RuntimeException("Failed to map provided portal data to XML", e);
    } catch (IOException e) {
      throw new RuntimeException("Failed to write the provided XML data", e);
    }
  }
 @Override
 public Iterable<? extends IPortalData> getPortalData(String typeId) {
   final IDataExporter<Object> dataImporterExporter = getPortalDataExporter(typeId);
   return dataImporterExporter.getPortalData();
 }