1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.ui.framework.action;
35
36 import info.magnolia.commands.CommandsManager;
37 import info.magnolia.commands.ExportJcrNodeToYamlCommand;
38 import info.magnolia.i18nsystem.SimpleTranslator;
39 import info.magnolia.ui.api.action.ActionExecutionException;
40 import info.magnolia.ui.api.context.UiContext;
41 import info.magnolia.ui.framework.util.TempFileStreamResource;
42 import info.magnolia.ui.vaadin.integration.jcr.JcrItemAdapter;
43
44 import java.io.IOException;
45 import java.util.Map;
46
47 import javax.inject.Inject;
48 import javax.jcr.Item;
49
50 import com.vaadin.server.Page;
51
52
53
54
55
56
57
58 public class ExportYamlAction extends AbstractCommandAction<ExportYamlActionDefinition> {
59
60 private static final String YAML_EXTENSION = ".yaml";
61
62 private TempFileStreamResource tempFileStreamResource;
63
64 @Inject
65 public ExportYamlAction(ExportYamlActionDefinition definition, JcrItemAdapter item, CommandsManager commandsManager, UiContext uiContext, SimpleTranslator i18n) throws ActionExecutionException {
66 super(definition, item, commandsManager, uiContext, i18n);
67 }
68
69 @Override
70 protected void onPreExecute() throws Exception {
71 tempFileStreamResource = new TempFileStreamResource();
72 tempFileStreamResource.setTempFileExtension(YAML_EXTENSION);
73 tempFileStreamResource.setTempFileName(getCurrentItem().getItemId().getUuid());
74
75 super.onPreExecute();
76 }
77
78 @Override
79 protected void onPostExecute() throws Exception {
80 final ExportJcrNodeToYamlCommand exportYamlCommand = (ExportJcrNodeToYamlCommand) getCommand();
81 tempFileStreamResource.setFilename(exportYamlCommand.getFileName());
82 tempFileStreamResource.setMIMEType("application/yaml");
83
84 Page.getCurrent().open(tempFileStreamResource, "", true);
85 }
86
87 @Override
88 protected Map<String, Object> buildParams(Item jcrItem) {
89 Map<String, Object> params = super.buildParams(jcrItem);
90 try {
91 params.put(ExportJcrNodeToYamlCommand.EXPORT_OUTPUT_STREAM, tempFileStreamResource.getTempFileOutputStream());
92 } catch (IOException e) {
93 throw new IllegalStateException("Failed to bind command to temp file output stream: ", e);
94 }
95 return params;
96 }
97 }