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.ValueContext;
38 import info.magnolia.ui.mediaeditor.MediaEditorEventBus;
39 import info.magnolia.ui.mediaeditor.data.MediaState;
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,
61 ValueContext<MediaState> valueContext,
62 @Named(MediaEditorEventBus.NAME) EventBus eventBus) {
63 super(definition, valueContext, eventBus);
64 }
65
66 @Override
67 public void execute() {
68 MediaState mediaState = valueContext.getSingleOrThrow();
69 mediaState.performMediaModification(StringUtils.lowerCase(getDefinition().getLabel()));
70 InputStream result = new ByteArrayInputStream(mediaState.getState());
71 try {
72 result = performModification(result);
73 mediaState.setState(IOUtils.toByteArray(result));
74 eventBus.fireEvent(new MediaEditorInternalEvent(MediaEditorInternalEvent.EventType.APPLY));
75 } catch (IOException e) {
76 log.error("Failed to perform instant operation on media.", e);
77 IOUtils.closeQuietly(result);
78 }
79 }
80
81 protected abstract InputStream performModification(InputStream stream) throws IOException;
82 }