java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/adminconsole/MediaPanel.java
... ...
@@ -32,9 +32,12 @@ import com.google.gwt.user.cellview.client.Header;
32 32
import com.google.gwt.user.client.Command;
33 33
import com.google.gwt.user.client.Window;
34 34
import com.google.gwt.user.client.rpc.AsyncCallback;
35
+import com.google.gwt.user.client.ui.Button;
35 36
import com.google.gwt.user.client.ui.FlowPanel;
36 37
import com.google.gwt.user.client.ui.Label;
37 38
import com.google.gwt.view.client.ListDataProvider;
39
+import com.google.gwt.view.client.SelectionChangeEvent;
40
+import com.google.gwt.view.client.SelectionChangeEvent.Handler;
38 41
import com.sap.sailing.domain.common.RegattaAndRaceIdentifier;
39 42
import com.sap.sailing.domain.common.media.MediaTrack;
40 43
import com.sap.sailing.domain.common.media.MediaTrackWithSecurityDTO;
... ...
@@ -174,12 +177,12 @@ public class MediaPanel extends FlowPanel implements FilterablePanelProvider<Med
174 177
}).center();
175 178
}
176 179
});
177
- buttonAndFilterPanel.addUpdateAction(stringMessages.multiUrlChangeMediaTrack(),
180
+ final Button multiUrlChange = buttonAndFilterPanel.addUpdateAction(stringMessages.multiUrlChangeMediaTrack(),
178 181
refreshableSelectionModel,
179 182
new Command() {
180 183
@Override
181 184
public void execute() {
182
- Set<MediaTrackWithSecurityDTO> selected = refreshableSelectionModel.getSelectedSet();
185
+ final Set<MediaTrackWithSecurityDTO> selected = refreshableSelectionModel.getSelectedSet();
183 186
if (selected.isEmpty()) {
184 187
Notification.notify(stringMessages.noSelection(), NotificationType.ERROR);
185 188
} else {
... ...
@@ -192,7 +195,7 @@ public class MediaPanel extends FlowPanel implements FilterablePanelProvider<Med
192 195
}
193 196
}
194 197
});
195
- buttonAndFilterPanel.addRemoveAction(stringMessages.remove(), refreshableSelectionModel,
198
+ final Button remove = buttonAndFilterPanel.addRemoveAction(stringMessages.remove(), refreshableSelectionModel,
196 199
/* with confirmation */ true, new Command() {
197 200
@Override
198 201
public void execute() {
... ...
@@ -201,6 +204,24 @@ public class MediaPanel extends FlowPanel implements FilterablePanelProvider<Med
201 204
}
202 205
}
203 206
});
207
+ refreshableSelectionModel.addSelectionChangeHandler(new Handler() {
208
+ @Override
209
+ public void onSelectionChange(final SelectionChangeEvent event) {
210
+ final Set<MediaTrackWithSecurityDTO> selected = refreshableSelectionModel.getSelectedSet();
211
+ boolean canDeleteAllSelected = true;
212
+ boolean canUpdateAllSelected = true;
213
+ for (final MediaTrackWithSecurityDTO track : selected) {
214
+ if (!userService.hasPermission(track, DefaultActions.DELETE)) {
215
+ canDeleteAllSelected = false;
216
+ }
217
+ if (!userService.hasPermission(track, DefaultActions.UPDATE)) {
218
+ canUpdateAllSelected = false;
219
+ }
220
+ }
221
+ remove.setEnabled(!selected.isEmpty() && canDeleteAllSelected);
222
+ multiUrlChange.setEnabled(!selected.isEmpty() && canUpdateAllSelected);
223
+ }
224
+ });
204 225
buttonAndFilterPanel.addUnsecuredWidget(lblFilterRaces);
205 226
createMediaTracksTable(userService);
206 227
filterableMediaTracks.getTextBox().ensureDebugId("MediaTracksFilterTextBox");