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.event.EventBus;
37 import info.magnolia.i18nsystem.SimpleTranslator;
38 import info.magnolia.ui.api.action.ActionExecutionException;
39 import info.magnolia.ui.api.context.UiContext;
40 import info.magnolia.ui.api.event.AdmincentralEventBus;
41 import info.magnolia.ui.api.event.ContentChangedEvent;
42 import info.magnolia.ui.api.overlay.ConfirmationCallback;
43 import info.magnolia.ui.vaadin.integration.jcr.JcrItemAdapter;
44 import info.magnolia.ui.vaadin.integration.jcr.JcrItemId;
45 import info.magnolia.ui.vaadin.integration.jcr.JcrItemUtil;
46 import info.magnolia.ui.vaadin.overlay.MessageStyleTypeEnum;
47
48 import java.util.Collections;
49 import java.util.List;
50
51 import javax.inject.Named;
52 import javax.jcr.Item;
53 import javax.jcr.PathNotFoundException;
54 import javax.jcr.Session;
55
56 import org.slf4j.Logger;
57 import org.slf4j.LoggerFactory;
58
59
60
61
62
63
64 public class DeleteItemAction extends AbstractMultiItemAction<DeleteItemActionDefinition> {
65
66 private final Logger log = LoggerFactory.getLogger(getClass());
67
68 private final UiContext uiContext;
69 private final EventBus eventBus;
70 private final SimpleTranslator i18n;
71
72 public DeleteItemAction(DeleteItemActionDefinition definition, JcrItemAdapter item, @Named(AdmincentralEventBus.NAME) EventBus eventBus, UiContext uiContext, SimpleTranslator i18n) {
73 super(definition, Collections.singletonList(item), uiContext);
74 this.uiContext = uiContext;
75 this.eventBus = eventBus;
76 this.i18n = i18n;
77 }
78
79 public DeleteItemAction(DeleteItemActionDefinition definition, List<JcrItemAdapter> items, @Named(AdmincentralEventBus.NAME) EventBus eventBus, UiContext uiContext, SimpleTranslator i18n) {
80 super(definition, items, uiContext);
81 this.uiContext = uiContext;
82 this.eventBus = eventBus;
83 this.i18n = i18n;
84 }
85
86 @Override
87 public void execute() throws ActionExecutionException {
88
89 uiContext.openConfirmation(
90 MessageStyleTypeEnum.WARNING, getConfirmationQuestion(),
91 i18n.translate("ui-framework.actions.deleteItem.warningText"),
92 i18n.translate("ui-framework.actions.deleteItem.confirmText"),
93 i18n.translate("ui-framework.actions.deleteItem.cancelText"),
94 true,
95 new ConfirmationCallback() {
96
97 @Override
98 public void onSuccess() {
99 DeleteItemAction.this.executeAfterConfirmation();
100 }
101
102 @Override
103 public void onCancel() {
104 }
105 });
106 }
107
108 private String getConfirmationQuestion() {
109 if (getItems().size() == 1) {
110 return i18n.translate("ui-framework.actions.deleteItem.confirmationQuestionOneItem");
111 }
112 return String.format(i18n.translate("ui-framework.actions.deleteItem.confirmationQuestionManyItems"), getItems().size());
113 }
114
115 protected void executeAfterConfirmation() {
116 try {
117 super.execute();
118 } catch (ActionExecutionException e) {
119 log.error("Problem occured during deleting items.", e);
120 }
121 }
122
123 @Override
124 protected void executeOnItem(JcrItemAdapter item) throws Exception {
125 try {
126 final Item jcrItem = item.getJcrItem();
127 if (jcrItem.getDepth() == 0) {
128
129 throw new IllegalArgumentException(i18n.translate("ui-framework.actions.deleteItem.cannotDeleteRootItem"));
130 }
131 JcrItemId itemIdOfChangedItem = JcrItemUtil.getItemId(jcrItem);
132 Session session = jcrItem.getSession();
133 jcrItem.remove();
134 session.save();
135
136 eventBus.fireEvent(new ContentChangedEvent(itemIdOfChangedItem));
137 } catch (PathNotFoundException e) {
138
139 }
140 }
141
142 @Override
143 protected String getSuccessMessage() {
144 if (getItems().size() == 1) {
145 return i18n.translate("ui-framework.actions.deleteItem.successOneItemDeleted");
146 } else {
147 return i18n.translate("ui-framework.actions.deleteItem.successManyItemsDeleted", getItems().size());
148 }
149 }
150
151 @Override
152 protected String getFailureMessage() {
153 return i18n.translate("ui-framework.actions.deleteItem.deletionfailure", getFailedItems().size(), getItems().size());
154 }
155 }