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