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