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.cache.browser.app.action;
35
36 import info.magnolia.cache.browser.app.CacheKeyItem;
37 import info.magnolia.cache.browser.rest.client.CacheService;
38 import info.magnolia.cache.browser.rest.endpoint.CacheEndpoint;
39 import info.magnolia.event.EventBus;
40 import info.magnolia.i18nsystem.SimpleTranslator;
41 import info.magnolia.ui.api.action.ActionExecutionException;
42 import info.magnolia.ui.api.context.UiContext;
43 import info.magnolia.ui.api.event.AdmincentralEventBus;
44 import info.magnolia.ui.api.event.ContentChangedEvent;
45
46 import java.util.List;
47 import java.util.Map;
48
49 import javax.inject.Named;
50 import javax.ws.rs.ClientErrorException;
51
52 import com.fasterxml.jackson.databind.JsonNode;
53
54 import com.cedarsoftware.util.io.JsonWriter;
55 import com.vaadin.v7.data.Item;
56
57
58
59
60 public class DeleteCacheEntryAction extends AbstractMultiItemAction<DeleteCacheEntryActionDefinition> {
61
62 private final EventBus admincentralEventBus;
63
64 public DeleteCacheEntryAction(DeleteCacheEntryActionDefinition definition, Item relatedItem, UiContext uiContext, SimpleTranslator i18n, @Named(AdmincentralEventBus.NAME) EventBus admincentralEventBus) {
65 super(definition, relatedItem, uiContext, i18n);
66 this.admincentralEventBus = admincentralEventBus;
67 }
68
69 public DeleteCacheEntryAction(DeleteCacheEntryActionDefinition definition, List<Item> relatedItems, UiContext uiContext, SimpleTranslator i18n, @Named(AdmincentralEventBus.NAME) EventBus admincentralEventBus) {
70 super(definition, relatedItems, uiContext, i18n);
71 this.admincentralEventBus = admincentralEventBus;
72 }
73
74 @Override
75 protected void executeOnItem(Item item) throws Exception {
76 if (item instanceof CacheKeyItem) {
77 CacheKeyItem cacheKeyItem = (CacheKeyItem) item;
78 for (Map.Entry<String, CacheService> entry : cacheKeyItem.getCacheServices().entrySet()) {
79 CacheService cacheService = entry.getValue();
80 try {
81 cacheService.delete(cacheKeyItem.getCacheName(), JsonWriter.objectToJson(cacheKeyItem.getItemId()));
82 admincentralEventBus.fireEvent(new ContentChangedEvent(cacheKeyItem.getItemId()));
83 } catch (ClientErrorException e) {
84 String errorMessage;
85 if (e.getResponse().getEntity() != null && e.getResponse().getEntity() instanceof JsonNode) {
86 JsonNode errorNode = (JsonNode) e.getResponse().getEntity();
87 errorMessage = entry.getKey() + ": " + errorNode.get(CacheEndpoint.PROPERTY_ERROR_MESSAGE).textValue();
88 } else {
89 errorMessage = entry.getKey() + ":" + e.getMessage();
90 }
91 e.getResponse().close();
92 throw new ActionExecutionException(errorMessage);
93 }
94 }
95 }
96 }
97
98 @Override
99 protected String getSuccessMessageKey() {
100 return "cache-browser-app.actions.delete.success";
101 }
102
103 @Override
104 protected String getFailureMessageKey() {
105 return "cache-browser-app.actions.delete.error";
106 }
107
108 @Override
109 protected String itemToString(Item item) {
110 if (item instanceof CacheKeyItem) {
111 return ((CacheKeyItem) item).getItemId().toString();
112 }
113 return null;
114 }
115 }