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.security.app.action;
35
36 import info.magnolia.cms.security.Group;
37 import info.magnolia.cms.security.Security;
38 import info.magnolia.cms.security.SecuritySupport;
39 import info.magnolia.cms.security.User;
40 import info.magnolia.commands.CommandsManager;
41 import info.magnolia.event.EventBus;
42 import info.magnolia.i18nsystem.SimpleTranslator;
43 import info.magnolia.objectfactory.Components;
44 import info.magnolia.ui.api.action.ActionExecutionException;
45 import info.magnolia.ui.api.context.UiContext;
46 import info.magnolia.ui.api.event.AdmincentralEventBus;
47 import info.magnolia.ui.framework.action.DeleteAction;
48 import info.magnolia.ui.framework.action.DeleteActionDefinition;
49 import info.magnolia.ui.vaadin.integration.jcr.JcrItemAdapter;
50
51 import java.util.ArrayList;
52 import java.util.Collection;
53 import java.util.List;
54
55 import javax.inject.Inject;
56 import javax.inject.Named;
57 import javax.jcr.RepositoryException;
58
59 import org.slf4j.Logger;
60 import org.slf4j.LoggerFactory;
61
62
63
64
65
66
67 public abstract class AbstractDeleteGroupOrRoleAction<D extends DeleteActionDefinition> extends DeleteAction {
68
69 private static final Logger log = LoggerFactory.getLogger(AbstractDeleteGroupOrRoleAction.class);
70
71 private final JcrItemAdapter item;
72 private final SecuritySupport securitySupport;
73
74 @Inject
75 public AbstractDeleteGroupOrRoleAction(D definition, JcrItemAdapter item, CommandsManager commandsManager, @Named(AdmincentralEventBus.NAME) EventBus eventBus, UiContext uiContext, SimpleTranslator i18n, SecuritySupport securitySupport) {
76 super(definition, item, commandsManager, eventBus, uiContext, i18n);
77 this.item = item;
78 this.securitySupport = securitySupport;
79 }
80
81
82
83
84 @Deprecated
85 public AbstractDeleteGroupOrRoleAction(D definition, JcrItemAdapter item, CommandsManager commandsManager, @Named(AdmincentralEventBus.NAME) EventBus eventBus, UiContext uiContext, SimpleTranslator i18n) {
86 this(definition, item, commandsManager, eventBus, uiContext, i18n, Security.getSecuritySupport());
87 }
88
89
90
91
92 @Deprecated
93 public AbstractDeleteGroupOrRoleAction(D definition, JcrItemAdapter item, @Named(AdmincentralEventBus.NAME) EventBus eventBus, UiContext uiContext, SimpleTranslator i18n) {
94 this(definition, item, Components.getComponent(CommandsManager.class), eventBus, uiContext, i18n, Security.getSecuritySupport());
95 }
96
97
98
99
100 @Deprecated
101 public JcrItemAdapter getItem() {
102 return this.item;
103 }
104
105
106
107
108 protected abstract String getBaseErrorMessage();
109
110
111
112
113 protected abstract String getVerificationErrorMessage();
114
115
116
117
118 protected abstract Collection<String> getGroupsOrRoles(User user);
119
120
121
122
123 protected abstract Collection<String> getGroupsOrRoles(Group group);
124
125
126
127
128 protected abstract Collection<String> getUsersWithGroupOrRoleToDelete(String groupOrRoleName);
129
130
131
132
133 protected abstract Collection<String> getGroupsWithGroupOrRoleToDelete(String groupOrRoleName);
134
135
136
137
138 @Deprecated
139 protected void executeAfterConfirmation() {
140 log.warn("This method was deprecated. Use #onPreExecute() method instead.");
141 }
142
143 @Override
144 protected void onPreExecute() throws Exception {
145 super.onPreExecute();
146
147 List<String> assignedTo;
148 try {
149 assignedTo = getUsersAndGroupsThisItemIsAssignedTo();
150 } catch (RepositoryException e) {
151 log.error("Cannot get the users/groups the group or role is assigned to.", e);
152 throw new ActionExecutionException(getVerificationErrorMessage() + e.getMessage());
153 }
154 if (assignedTo != null && !assignedTo.isEmpty()) {
155 throw new ActionExecutionException(getBaseErrorMessage() + getUserAndGroupListForErrorMessage(assignedTo));
156 }
157 }
158
159
160
161
162 private List<String> getUsersAndGroupsThisItemIsAssignedTo() throws RepositoryException {
163 List<String> assignedTo = new ArrayList<String>();
164
165 final String groupOrRoleName = getCurrentItem().getJcrItem().getName();
166 final String translatedUserString = getI18n().translate("security.delete.userIdentifier");
167
168 for (String user : getUsersWithGroupOrRoleToDelete(groupOrRoleName)) {
169 assignedTo.add(translatedUserString + ":" + user);
170 }
171
172 final String translatedGroupString = getI18n().translate("security.delete.groupIdentifier");
173 for (String group : getGroupsWithGroupOrRoleToDelete(groupOrRoleName)) {
174 assignedTo.add(translatedGroupString + ":" + group);
175 }
176
177 return assignedTo;
178 }
179
180 private static String getUserAndGroupListForErrorMessage(Collection<String> usersAndGroups) {
181 StringBuilder message = new StringBuilder("<ul>");
182 for (String name : usersAndGroups) {
183 message.append("<li>").append(name).append("</li>");
184 }
185 message.append("</ul>");
186 return message.toString();
187 }
188
189 protected SecuritySupport getSecuritySupport() {
190 return securitySupport;
191 }
192 }