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.cms.beans.config.MIMEMapping;
37 import info.magnolia.commands.CommandsManager;
38 import info.magnolia.i18nsystem.SimpleTranslator;
39 import info.magnolia.importexport.DataTransporter;
40 import info.magnolia.importexport.command.JcrExportCommand;
41 import info.magnolia.ui.api.action.ActionExecutionException;
42 import info.magnolia.ui.api.context.UiContext;
43 import info.magnolia.ui.form.EditorCallback;
44 import info.magnolia.ui.framework.util.TempFileStreamResource;
45 import info.magnolia.ui.vaadin.integration.jcr.JcrItemAdapter;
46 import info.magnolia.ui.vaadin.overlay.MessageStyleTypeEnum;
47
48 import java.util.Map;
49
50 import javax.jcr.Item;
51
52 import org.apache.commons.io.FilenameUtils;
53
54 import com.vaadin.server.Page;
55
56
57
58
59
60
61
62 public class ExportAction extends AbstractCommandAction<ExportActionDefinition> {
63
64 private TempFileStreamResource tempFileStreamResource;
65 private final EditorCallback callback;
66
67
68 public ExportAction(ExportActionDefinition definition, JcrItemAdapter item, CommandsManager commandsManager, UiContext uiContext, SimpleTranslator i18n, EditorCallback callback) throws ActionExecutionException {
69 super(definition, item, commandsManager, uiContext, i18n);
70 this.callback = callback;
71 }
72
73 public ExportAction(ExportActionDefinition definition, JcrItemAdapter item, CommandsManager commandsManager, UiContext uiContext, SimpleTranslator i18n) throws ActionExecutionException {
74 this(definition, item, commandsManager, uiContext, i18n, null);
75 }
76
77 @Override
78 protected void onPreExecute() throws Exception {
79 tempFileStreamResource = new TempFileStreamResource();
80 tempFileStreamResource.setTempFileName(getCurrentItem().getItemId().getUuid());
81 super.onPreExecute();
82 getCommand().setOutputStream(tempFileStreamResource.getTempFileOutputStream());
83 }
84
85 @Override
86 protected Map<String, Object> buildParams(Item jcrItem) {
87 final Map<String, Object> params = super.buildParams(jcrItem);
88 getCurrentItem().getItemPropertyIds().forEach(id -> params.put(id.toString(), getCurrentItem().getItemProperty(id).getValue()));
89 return params;
90 }
91
92
93
94
95
96
97
98
99 @Override
100 protected void onPostExecute() throws Exception {
101 if (callback != null) {
102 callback.onSuccess(getDefinition().getName());
103 }
104
105 tempFileStreamResource.setFilename(DataTransporter.decodePath(getCommand().getFileName(), DataTransporter.UTF8));
106 tempFileStreamResource.setMIMEType(MIMEMapping.getMIMEType(FilenameUtils.getExtension(tempFileStreamResource.getFilename())));
107
108 Page.getCurrent().open(tempFileStreamResource, "", true);
109 }
110
111 @Override
112 protected void onError(Exception e) {
113 final String title = getI18n().translate("ui-framework.abstractcommand.executionfailure");
114 final String body = e.getClass().getName() + ": " + getI18n().translate(e.getMessage());
115 getUiContext().openAlert(MessageStyleTypeEnum.ERROR, title, body, "cancel", () -> {
116 if (callback != null) {
117 callback.onCancel();
118 }
119 });
120 }
121
122 protected JcrExportCommand getCommand() {
123 return (JcrExportCommand) super.getCommand();
124 }
125
126 }