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.mediaeditor.action;
35
36 import info.magnolia.event.EventBus;
37 import info.magnolia.ui.api.action.ActionExecutionException;
38 import info.magnolia.ui.mediaeditor.MediaEditorEventBus;
39 import info.magnolia.ui.mediaeditor.data.EditHistoryTrackingProperty;
40 import info.magnolia.ui.mediaeditor.event.MediaEditorInternalEvent;
41 import info.magnolia.ui.mediaeditor.provider.MediaEditorActionDefinition;
42
43 import java.io.ByteArrayInputStream;
44 import java.io.IOException;
45 import java.io.InputStream;
46
47 import javax.inject.Named;
48
49 import org.apache.commons.io.IOUtils;
50 import org.apache.commons.lang3.StringUtils;
51 import org.slf4j.Logger;
52 import org.slf4j.LoggerFactory;
53
54
55
56
57 public abstract class InstantMediaEditorAction extends MediaEditorAction {
58 private static final Logger log = LoggerFactory.getLogger(InstantMediaEditorAction.class);
59
60 public InstantMediaEditorAction(MediaEditorActionDefinition definition, EditHistoryTrackingProperty dataSource, @Named(MediaEditorEventBus.NAME) EventBus eventBus) {
61 super(definition, dataSource, eventBus);
62 }
63
64 @Override
65 public void execute() throws ActionExecutionException {
66 dataSource.startAction(StringUtils.lowerCase(getDefinition().getLabel()));
67 InputStream result = new ByteArrayInputStream(dataSource.getValue());
68 try {
69 result = performModification(result);
70 dataSource.setValue(IOUtils.toByteArray(result));
71 eventBus.fireEvent(new MediaEditorInternalEvent(MediaEditorInternalEvent.EventType.APPLY));
72 } catch (IOException e) {
73 log.error("Failed to perform instant operation on media.", e);
74 IOUtils.closeQuietly(result);
75 }
76 }
77
78 protected abstract InputStream performModification(InputStream stream) throws IOException;
79 }