package com.constellio.app.modules.rm.ui.components.retentionRule; import static com.constellio.app.modules.rm.exports.RetentionRuleXMLExporter.forAllApprovedRulesInCollection; import static com.constellio.app.ui.i18n.i18n.$; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import org.apache.commons.io.FileUtils; import org.apache.commons.io.input.AutoCloseInputStream; import com.constellio.app.modules.rm.exports.RetentionRuleXMLExporter; import com.constellio.app.services.factories.ConstellioFactories; import com.constellio.app.ui.application.ConstellioUI; import com.constellio.app.ui.framework.buttons.DownloadLink; import com.constellio.model.services.factories.ModelLayerFactory; import com.vaadin.server.StreamResource; public class ExportRetentionRulesLink extends DownloadLink { public ExportRetentionRulesLink(String caption) { super(new RetentionRuleVOsResource(), caption); } public static class RetentionRuleVOsResource extends StreamResource { private static final String STREAM_NAME = "ExportRetentionRulesLink.RetentionRuleVOsResource-InputStream"; public RetentionRuleVOsResource() { super(new StreamSource() { @Override public InputStream getStream() { final File tempFile; try { tempFile = File.createTempFile(STREAM_NAME, "xml"); tempFile.deleteOnExit(); // TODO Use presenter String collection = ConstellioUI.getCurrentSessionContext().getCurrentCollection(); ConstellioFactories constellioFactories = ConstellioFactories.getInstance(); ModelLayerFactory modelLayerFactory = constellioFactories.getModelLayerFactory(); RetentionRuleXMLExporter exporter = forAllApprovedRulesInCollection(collection, tempFile, modelLayerFactory); try { exporter.run(); return new AutoCloseInputStream(new FileInputStream(tempFile)) { @Override public void close() throws IOException { try { super.close(); } finally { tempFile.delete(); } } }; } catch (Throwable t) { FileUtils.deleteQuietly(tempFile); if (t instanceof RuntimeException) { throw (RuntimeException) t; } else { throw new RuntimeException(t); } } } catch (IOException e) { throw new RuntimeException(e); } } }, $("ExportRetentionRulesLink.fileName")); } } }