mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-12 07:10:55 +00:00
Bug 3638 - Render "Leaderboard groups" entries as links
Change-Id: I44a06ccdb42e4b432c4e9dbbce6d6e3352441d12
This commit is contained in:
1 parent
d8680cec15
commit
0d6d43222b
11 files changed
+314
-22
No files matched your search
+13
-1
@@ -3,6 +3,7 @@ package com.sap.sailing.gwt.ui.adminconsole;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import com.google.gwt.core.client.GWT;
|
import com.google.gwt.core.client.GWT;
|
||||||
@@ -91,7 +92,7 @@ public class AdminConsoleEntryPoint extends AbstractSailingEntryPoint implements
|
|||||||
leaderboardsDisplayers = new HashSet<>();
|
leaderboardsDisplayers = new HashSet<>();
|
||||||
leaderboardGroupsDisplayers = new HashSet<>();
|
leaderboardGroupsDisplayers = new HashSet<>();
|
||||||
|
|
||||||
final EventManagementPanel eventManagementPanel = new EventManagementPanel(sailingService, this, this, getStringMessages());
|
final EventManagementPanel eventManagementPanel = new EventManagementPanel(sailingService, this, this, getStringMessages(), panel);
|
||||||
eventManagementPanel.ensureDebugId("EventManagement");
|
eventManagementPanel.ensureDebugId("EventManagement");
|
||||||
panel.addToVerticalTabPanel(new DefaultRefreshableAdminConsolePanel<EventManagementPanel>(eventManagementPanel) {
|
panel.addToVerticalTabPanel(new DefaultRefreshableAdminConsolePanel<EventManagementPanel>(eventManagementPanel) {
|
||||||
@Override
|
@Override
|
||||||
@@ -137,6 +138,12 @@ public class AdminConsoleEntryPoint extends AbstractSailingEntryPoint implements
|
|||||||
fillLeaderboards();
|
fillLeaderboards();
|
||||||
fillLeaderboardGroups();
|
fillLeaderboardGroups();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setupWidgetByParams(Map<String, String> params) {
|
||||||
|
refreshAfterBecomingVisible(); //Refresh to sure that actual data is provided
|
||||||
|
setupLeaderboardGroups(leaderboardGroupConfigPanel, params);
|
||||||
|
}
|
||||||
}, getStringMessages().leaderboardGroups(), Permission.MANAGE_LEADERBOARD_GROUPS);
|
}, getStringMessages().leaderboardGroups(), Permission.MANAGE_LEADERBOARD_GROUPS);
|
||||||
regattasDisplayers.add(leaderboardGroupConfigPanel);
|
regattasDisplayers.add(leaderboardGroupConfigPanel);
|
||||||
leaderboardGroupsDisplayers.add(leaderboardGroupConfigPanel);
|
leaderboardGroupsDisplayers.add(leaderboardGroupConfigPanel);
|
||||||
@@ -349,4 +356,9 @@ public class AdminConsoleEntryPoint extends AbstractSailingEntryPoint implements
|
|||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setupLeaderboardGroups(LeaderboardGroupsDisplayer displayer, Map<String, String> params) {
|
||||||
|
displayer.setupLeaderboardGroups(params);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+31
-16
@@ -7,11 +7,13 @@ import java.util.Comparator;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import com.google.gwt.cell.client.AbstractCell;
|
import com.google.gwt.cell.client.AbstractCell;
|
||||||
import com.google.gwt.cell.client.FieldUpdater;
|
import com.google.gwt.cell.client.FieldUpdater;
|
||||||
import com.google.gwt.cell.client.SafeHtmlCell;
|
import com.google.gwt.cell.client.SafeHtmlCell;
|
||||||
|
import com.google.gwt.cell.client.ValueUpdater;
|
||||||
import com.google.gwt.core.client.GWT;
|
import com.google.gwt.core.client.GWT;
|
||||||
import com.google.gwt.event.dom.client.ClickEvent;
|
import com.google.gwt.event.dom.client.ClickEvent;
|
||||||
import com.google.gwt.event.dom.client.ClickHandler;
|
import com.google.gwt.event.dom.client.ClickHandler;
|
||||||
@@ -40,6 +42,7 @@ import com.sap.sailing.gwt.ui.client.RegattaRefresher;
|
|||||||
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
||||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||||
import com.sap.sailing.gwt.ui.client.shared.controls.FlushableCellTable;
|
import com.sap.sailing.gwt.ui.client.shared.controls.FlushableCellTable;
|
||||||
|
import com.sap.sailing.gwt.ui.client.shared.controls.MultipleLinkCell;
|
||||||
import com.sap.sailing.gwt.ui.client.shared.controls.SelectionCheckboxColumn;
|
import com.sap.sailing.gwt.ui.client.shared.controls.SelectionCheckboxColumn;
|
||||||
import com.sap.sailing.gwt.ui.common.client.DateAndTimeFormatterUtil;
|
import com.sap.sailing.gwt.ui.common.client.DateAndTimeFormatterUtil;
|
||||||
import com.sap.sailing.gwt.ui.shared.CourseAreaDTO;
|
import com.sap.sailing.gwt.ui.shared.CourseAreaDTO;
|
||||||
@@ -50,6 +53,7 @@ import com.sap.sailing.gwt.ui.shared.RegattaDTO;
|
|||||||
import com.sap.sse.common.Util;
|
import com.sap.sse.common.Util;
|
||||||
import com.sap.sse.common.Util.Pair;
|
import com.sap.sse.common.Util.Pair;
|
||||||
import com.sap.sse.common.util.NaturalComparator;
|
import com.sap.sse.common.util.NaturalComparator;
|
||||||
|
import com.sap.sse.gwt.adminconsole.HandleTabSelectable;
|
||||||
import com.sap.sse.gwt.client.ErrorReporter;
|
import com.sap.sse.gwt.client.ErrorReporter;
|
||||||
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
|
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
|
||||||
import com.sap.sse.gwt.client.celltable.EntityIdentityComparator;
|
import com.sap.sse.gwt.client.celltable.EntityIdentityComparator;
|
||||||
@@ -98,15 +102,17 @@ public class EventListComposite extends Composite implements EventsRefresher, Le
|
|||||||
private final AdminConsoleTableResources tableRes = GWT.create(AdminConsoleTableResources.class);
|
private final AdminConsoleTableResources tableRes = GWT.create(AdminConsoleTableResources.class);
|
||||||
private final RegattaRefresher regattaRefresher;
|
private final RegattaRefresher regattaRefresher;
|
||||||
private final EventsRefresher eventsRefresher;
|
private final EventsRefresher eventsRefresher;
|
||||||
|
private final HandleTabSelectable handleTabSelectable;
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public EventListComposite(final SailingServiceAsync sailingService, final ErrorReporter errorReporter,
|
public EventListComposite(final SailingServiceAsync sailingService, final ErrorReporter errorReporter,
|
||||||
RegattaRefresher regattaRefresher, EventsRefresher eventsRefresher, final StringMessages stringMessages) {
|
RegattaRefresher regattaRefresher, EventsRefresher eventsRefresher, final HandleTabSelectable handleTabSelectable, final StringMessages stringMessages) {
|
||||||
this.sailingService = sailingService;
|
this.sailingService = sailingService;
|
||||||
this.stringMessages = stringMessages;
|
this.stringMessages = stringMessages;
|
||||||
this.errorReporter = errorReporter;
|
this.errorReporter = errorReporter;
|
||||||
this.regattaRefresher = regattaRefresher;
|
this.regattaRefresher = regattaRefresher;
|
||||||
this.eventsRefresher = eventsRefresher;
|
this.eventsRefresher = eventsRefresher;
|
||||||
|
this.handleTabSelectable = handleTabSelectable;
|
||||||
availableLeaderboardGroups = Collections.emptyList();
|
availableLeaderboardGroups = Collections.emptyList();
|
||||||
allEvents = new ArrayList<EventDTO>();
|
allEvents = new ArrayList<EventDTO>();
|
||||||
|
|
||||||
@@ -268,25 +274,30 @@ public class EventListComposite extends Composite implements EventsRefresher, Le
|
|||||||
return builder.toSafeHtml();
|
return builder.toSafeHtml();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
SafeHtmlCell leaderboardGroupsCell = new SafeHtmlCell();
|
MultipleLinkCell leaderboardGroupsCell = new MultipleLinkCell(true);
|
||||||
Column<EventDTO, SafeHtml> leaderboardGroupsColumn = new Column<EventDTO, SafeHtml>(leaderboardGroupsCell) {
|
Column<EventDTO, List<MultipleLinkCell.CellLink>> leaderboardGroupsColumn = new Column<EventDTO, List<MultipleLinkCell.CellLink>>(
|
||||||
|
leaderboardGroupsCell) {
|
||||||
@Override
|
@Override
|
||||||
public SafeHtml getValue(EventDTO event) {
|
public List<MultipleLinkCell.CellLink> getValue(EventDTO event) {
|
||||||
SafeHtmlBuilder builder = new SafeHtmlBuilder();
|
List<MultipleLinkCell.CellLink> links = new ArrayList<>();
|
||||||
boolean first = true;
|
|
||||||
for (LeaderboardGroupDTO lg : event.getLeaderboardGroups()) {
|
for (LeaderboardGroupDTO lg : event.getLeaderboardGroups()) {
|
||||||
if (first) {
|
links.add(new MultipleLinkCell.CellLink(lg.getName()));
|
||||||
first = false;
|
|
||||||
} else {
|
|
||||||
builder.appendHtmlConstant("<br>");
|
|
||||||
}
|
|
||||||
builder.appendEscaped(lg.getName());
|
|
||||||
}
|
}
|
||||||
return builder.toSafeHtml();
|
return links;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
leaderboardGroupsCell.setOnLinkClickHandler(new ValueUpdater<String>() {
|
||||||
|
@Override
|
||||||
|
public void update(String value) {
|
||||||
|
Map<String, String> params = new HashMap<>();
|
||||||
|
params.put("LeaderBoardGroupName", value);
|
||||||
|
handleTabSelectable.selectTabByNames(stringMessages.leaderboards(), stringMessages.leaderboardGroups(),
|
||||||
|
params);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
TextColumn<EventDTO> imagesColumn = new TextColumn<EventDTO>() {
|
TextColumn<EventDTO> imagesColumn = new TextColumn<EventDTO>() {
|
||||||
@Override
|
@Override
|
||||||
public String getValue(EventDTO event) {
|
public String getValue(EventDTO event) {
|
||||||
@@ -738,4 +749,8 @@ public class EventListComposite extends Composite implements EventsRefresher, Le
|
|||||||
public RefreshableMultiSelectionModel<EventDTO> getRefreshableMultiSelectionModel() {
|
public RefreshableMultiSelectionModel<EventDTO> getRefreshableMultiSelectionModel() {
|
||||||
return refreshableEventSelectionModel;
|
return refreshableEventSelectionModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setupLeaderboardGroups(Map<String, String> params) {
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+10
-3
@@ -1,5 +1,6 @@
|
|||||||
package com.sap.sailing.gwt.ui.adminconsole;
|
package com.sap.sailing.gwt.ui.adminconsole;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import com.google.gwt.user.client.ui.CaptionPanel;
|
import com.google.gwt.user.client.ui.CaptionPanel;
|
||||||
@@ -14,6 +15,7 @@ import com.sap.sailing.gwt.ui.client.SailingServiceAsync;
|
|||||||
import com.sap.sailing.gwt.ui.client.StringMessages;
|
import com.sap.sailing.gwt.ui.client.StringMessages;
|
||||||
import com.sap.sailing.gwt.ui.shared.EventDTO;
|
import com.sap.sailing.gwt.ui.shared.EventDTO;
|
||||||
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
|
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
|
||||||
|
import com.sap.sse.gwt.adminconsole.HandleTabSelectable;
|
||||||
import com.sap.sse.gwt.client.ErrorReporter;
|
import com.sap.sse.gwt.client.ErrorReporter;
|
||||||
import com.sap.sse.gwt.client.celltable.RefreshableMultiSelectionModel;
|
import com.sap.sse.gwt.client.celltable.RefreshableMultiSelectionModel;
|
||||||
|
|
||||||
@@ -30,7 +32,7 @@ public class EventManagementPanel extends SimplePanel implements EventsRefresher
|
|||||||
private final RefreshableMultiSelectionModel<EventDTO> refreshableEventSelectionModel;
|
private final RefreshableMultiSelectionModel<EventDTO> refreshableEventSelectionModel;
|
||||||
|
|
||||||
public EventManagementPanel(final SailingServiceAsync sailingService, final ErrorReporter errorReporter,
|
public EventManagementPanel(final SailingServiceAsync sailingService, final ErrorReporter errorReporter,
|
||||||
RegattaRefresher regattaRefresher, final StringMessages stringMessages) {
|
RegattaRefresher regattaRefresher, final StringMessages stringMessages, final HandleTabSelectable handleTabSelectable) {
|
||||||
VerticalPanel mainPanel = new VerticalPanel();
|
VerticalPanel mainPanel = new VerticalPanel();
|
||||||
setWidget(mainPanel);
|
setWidget(mainPanel);
|
||||||
mainPanel.setWidth("100%");
|
mainPanel.setWidth("100%");
|
||||||
@@ -39,8 +41,8 @@ public class EventManagementPanel extends SimplePanel implements EventsRefresher
|
|||||||
mainPanel.add(eventsPanel);
|
mainPanel.add(eventsPanel);
|
||||||
VerticalPanel eventsContentPanel = new VerticalPanel();
|
VerticalPanel eventsContentPanel = new VerticalPanel();
|
||||||
eventsPanel.setContentWidget(eventsContentPanel);
|
eventsPanel.setContentWidget(eventsContentPanel);
|
||||||
|
|
||||||
eventListComposite = new EventListComposite(sailingService, errorReporter, regattaRefresher, this, stringMessages);
|
eventListComposite = new EventListComposite(sailingService, errorReporter, regattaRefresher, this, handleTabSelectable, stringMessages);
|
||||||
eventListComposite.ensureDebugId("EventListComposite");
|
eventListComposite.ensureDebugId("EventListComposite");
|
||||||
eventsContentPanel.add(eventListComposite);
|
eventsContentPanel.add(eventListComposite);
|
||||||
|
|
||||||
@@ -80,4 +82,9 @@ public class EventManagementPanel extends SimplePanel implements EventsRefresher
|
|||||||
public void fillLeaderboardGroups(Iterable<LeaderboardGroupDTO> leaderboardGroups) {
|
public void fillLeaderboardGroups(Iterable<LeaderboardGroupDTO> leaderboardGroups) {
|
||||||
eventListComposite.fillLeaderboardGroups(leaderboardGroups);
|
eventListComposite.fillLeaderboardGroups(leaderboardGroups);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setupLeaderboardGroups(Map<String, String> params) {
|
||||||
|
eventListComposite.setupLeaderboardGroups(params);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+20
@@ -6,6 +6,7 @@ import java.util.Collections;
|
|||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import com.google.gwt.cell.client.FieldUpdater;
|
import com.google.gwt.cell.client.FieldUpdater;
|
||||||
@@ -958,4 +959,23 @@ public class LeaderboardGroupConfigPanel extends AbstractRegattaPanel implements
|
|||||||
private LeaderboardGroupDTO getSelectedGroup() {
|
private LeaderboardGroupDTO getSelectedGroup() {
|
||||||
return refreshableGroupsSelectionModel.getSelectedSet().isEmpty() ? null : refreshableGroupsSelectionModel.getSelectedSet().iterator().next();
|
return refreshableGroupsSelectionModel.getSelectedSet().isEmpty() ? null : refreshableGroupsSelectionModel.getSelectedSet().iterator().next();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setupLeaderboardGroups(Map<String, String> params) {
|
||||||
|
String nameLeaderBoardGroup = params.get("LeaderBoardGroupName");
|
||||||
|
if (nameLeaderBoardGroup == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//setup filter value to name from params
|
||||||
|
groupsFilterablePanel.getTextBox().setValue(nameLeaderBoardGroup);
|
||||||
|
|
||||||
|
//deselect all leaderboard groups except one which name is from params
|
||||||
|
for (LeaderboardGroupDTO leaderboardGroupDTO : availableLeaderboardGroups) {
|
||||||
|
if (nameLeaderBoardGroup.equals(leaderboardGroupDTO.getName())) {
|
||||||
|
groupsTable.getSelectionModel().setSelected(leaderboardGroupDTO, true);
|
||||||
|
} else if(groupsTable.getSelectionModel().isSelected(leaderboardGroupDTO)){
|
||||||
|
groupsTable.getSelectionModel().setSelected(leaderboardGroupDTO, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+4
@@ -1,7 +1,11 @@
|
|||||||
package com.sap.sailing.gwt.ui.client;
|
package com.sap.sailing.gwt.ui.client;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
|
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
|
||||||
|
|
||||||
public interface LeaderboardGroupsDisplayer {
|
public interface LeaderboardGroupsDisplayer {
|
||||||
void fillLeaderboardGroups(Iterable<LeaderboardGroupDTO> leaderboardGroups);
|
void fillLeaderboardGroups(Iterable<LeaderboardGroupDTO> leaderboardGroups);
|
||||||
|
|
||||||
|
void setupLeaderboardGroups(Map<String, String> params);
|
||||||
}
|
}
|
||||||
+11
@@ -1,5 +1,7 @@
|
|||||||
package com.sap.sailing.gwt.ui.client;
|
package com.sap.sailing.gwt.ui.client;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
|
import com.sap.sailing.gwt.ui.shared.LeaderboardGroupDTO;
|
||||||
|
|
||||||
public interface LeaderboardGroupsRefresher {
|
public interface LeaderboardGroupsRefresher {
|
||||||
@@ -21,4 +23,13 @@ public interface LeaderboardGroupsRefresher {
|
|||||||
* the update originated in <code>origin</code> and hence no notification is required.
|
* the update originated in <code>origin</code> and hence no notification is required.
|
||||||
*/
|
*/
|
||||||
void updateLeaderboardGroups(Iterable<LeaderboardGroupDTO> updatedLeaderboardGroups, LeaderboardGroupsDisplayer origin);
|
void updateLeaderboardGroups(Iterable<LeaderboardGroupDTO> updatedLeaderboardGroups, LeaderboardGroupsDisplayer origin);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Setup the state {@link LeaderboardGroupsDisplayer} using parameters
|
||||||
|
*
|
||||||
|
* @param params
|
||||||
|
* {@link Map} {@link String} parameters to setup the displayer
|
||||||
|
*/
|
||||||
|
public void setupLeaderboardGroups(LeaderboardGroupsDisplayer displayer, Map<String, String> params);
|
||||||
|
|
||||||
}
|
}
|
||||||
+145
@@ -0,0 +1,145 @@
|
|||||||
|
package com.sap.sailing.gwt.ui.client.shared.controls;
|
||||||
|
|
||||||
|
import static com.google.gwt.dom.client.BrowserEvents.CLICK;
|
||||||
|
import static com.google.gwt.dom.client.BrowserEvents.MOUSEDOWN;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import com.google.gwt.core.client.GWT;
|
||||||
|
import com.google.gwt.dom.client.NativeEvent;
|
||||||
|
import com.google.gwt.safehtml.client.SafeHtmlTemplates;
|
||||||
|
import com.google.gwt.safehtml.shared.SafeHtml;
|
||||||
|
import com.google.gwt.cell.client.AbstractCell;
|
||||||
|
import com.google.gwt.cell.client.ValueUpdater;
|
||||||
|
import com.google.gwt.dom.client.Element;
|
||||||
|
import com.google.gwt.dom.client.EventTarget;
|
||||||
|
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represent cell with multiple links. Link is represented as static nested class {@link CellLink}.
|
||||||
|
* <p>
|
||||||
|
* There are two behaviors depending on field isBlockLinkEvent:
|
||||||
|
* <ul>
|
||||||
|
* <li>If isBlockLinkEvent is true then click on link would work depending on onLinkClickHandler.</li>
|
||||||
|
* <li>If isBlockLinkEvent is false then link was work as real link.</li>
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* @author Alexander Tatarinovich (C5237435)
|
||||||
|
*/
|
||||||
|
public class MultipleLinkCell extends AbstractCell<List<MultipleLinkCell.CellLink>> {
|
||||||
|
|
||||||
|
private ValueUpdater<String> onLinkClickHandler;
|
||||||
|
|
||||||
|
private boolean isBlockLinkEvent = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represent Link for cell.
|
||||||
|
* <p>
|
||||||
|
* There are three fields which use in template {@link LinkTemplates} for link.
|
||||||
|
*/
|
||||||
|
public static class CellLink {
|
||||||
|
private final String target;
|
||||||
|
private final String href;
|
||||||
|
private final String text;
|
||||||
|
|
||||||
|
public String getTarget() {
|
||||||
|
return target;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHref() {
|
||||||
|
return href;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getText() {
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CellLink(String text) {
|
||||||
|
super();
|
||||||
|
this.text = text;
|
||||||
|
this.href = "";
|
||||||
|
this.target = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public CellLink(String target, String href, String text) {
|
||||||
|
super();
|
||||||
|
this.target = target;
|
||||||
|
this.href = href;
|
||||||
|
this.text = text;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Template for link.
|
||||||
|
* <p>
|
||||||
|
* <a target=\"{Target}\" href=\"{Href}\">{Text}</a>.
|
||||||
|
*/
|
||||||
|
interface LinkTemplates extends SafeHtmlTemplates {
|
||||||
|
@SafeHtmlTemplates.Template("<a target=\"{0}\" href=\"{1}\">{2}</a>")
|
||||||
|
SafeHtml cell(String target, String href, String text);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static LinkTemplates linkTemplates = GWT.create(LinkTemplates.class);
|
||||||
|
|
||||||
|
public MultipleLinkCell() {
|
||||||
|
super(CLICK, MOUSEDOWN);
|
||||||
|
}
|
||||||
|
|
||||||
|
public MultipleLinkCell(boolean isBlockLinkEvent) {
|
||||||
|
super(CLICK, MOUSEDOWN);
|
||||||
|
this.isBlockLinkEvent = isBlockLinkEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ValueUpdater<String> getOnLinkClickHandler() {
|
||||||
|
return onLinkClickHandler;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOnLinkClickHandler(ValueUpdater<String> handler) {
|
||||||
|
this.onLinkClickHandler = handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isBlockLinkEvent() {
|
||||||
|
return isBlockLinkEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBlockLinkEvent(boolean isBlockLinkEvent) {
|
||||||
|
this.isBlockLinkEvent = isBlockLinkEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBrowserEvent(Context context, Element parent, List<MultipleLinkCell.CellLink> value,
|
||||||
|
NativeEvent event, ValueUpdater<List<MultipleLinkCell.CellLink>> valueUpdater) {
|
||||||
|
super.onBrowserEvent(context, parent, value, event, valueUpdater);
|
||||||
|
|
||||||
|
if (isBlockLinkEvent) {
|
||||||
|
event.preventDefault();
|
||||||
|
EventTarget eventTarget = event.getEventTarget();
|
||||||
|
if (parent.isOrHasChild(Element.as(eventTarget))) {
|
||||||
|
Element el = Element.as(eventTarget);
|
||||||
|
if (el.getNodeName().equalsIgnoreCase("a")) {
|
||||||
|
onLinkClickHandler.update(el.getInnerText());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void render(com.google.gwt.cell.client.Cell.Context context, List<MultipleLinkCell.CellLink> links,
|
||||||
|
SafeHtmlBuilder sb) {
|
||||||
|
if (links.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
SafeHtml rendered;
|
||||||
|
boolean isFirst = true;
|
||||||
|
for (CellLink link : links) {
|
||||||
|
if (isFirst) {
|
||||||
|
isFirst = false;
|
||||||
|
} else {
|
||||||
|
sb.appendHtmlConstant("<br>");
|
||||||
|
}
|
||||||
|
rendered = linkTemplates.cell(link.getTarget(), link.getHref(), link.getText());
|
||||||
|
sb.append(rendered);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
+54
-2
@@ -66,7 +66,7 @@ import com.sap.sse.security.ui.shared.UserDTO;
|
|||||||
* @author Axel Uhl (D043530)
|
* @author Axel Uhl (D043530)
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class AdminConsolePanel extends DockLayoutPanel {
|
public class AdminConsolePanel extends DockLayoutPanel implements HandleTabSelectable{
|
||||||
private final UserService userService;
|
private final UserService userService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -137,7 +137,7 @@ public class AdminConsolePanel extends DockLayoutPanel {
|
|||||||
* If the <code>widgetMaybeWrappedByScrollPanel</code> is a scroll panel, returns the content widget,
|
* If the <code>widgetMaybeWrappedByScrollPanel</code> is a scroll panel, returns the content widget,
|
||||||
* otherwise <code>widgetMaybeWrappedByScrollPanel</code> is returned.
|
* otherwise <code>widgetMaybeWrappedByScrollPanel</code> is returned.
|
||||||
*/
|
*/
|
||||||
private Widget unwrapScrollPanel(Widget widgetMaybeWrappedByScrollPanel) {
|
public Widget unwrapScrollPanel(Widget widgetMaybeWrappedByScrollPanel) {
|
||||||
final Widget target;
|
final Widget target;
|
||||||
if (widgetMaybeWrappedByScrollPanel instanceof ScrollPanel) {
|
if (widgetMaybeWrappedByScrollPanel instanceof ScrollPanel) {
|
||||||
target = ((ScrollPanel) widgetMaybeWrappedByScrollPanel).getWidget();
|
target = ((ScrollPanel) widgetMaybeWrappedByScrollPanel).getWidget();
|
||||||
@@ -189,6 +189,17 @@ public class AdminConsolePanel extends DockLayoutPanel {
|
|||||||
public Widget getPanel() {
|
public Widget getPanel() {
|
||||||
return topLevelTabPanel;
|
return topLevelTabPanel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void selectTab(int index) {
|
||||||
|
topLevelTabPanel.selectTab(index);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getWidgetIndex(Widget child) {
|
||||||
|
return topLevelTabPanel.getWidgetIndex(child);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
final DockPanel informationPanel = new DockPanel();
|
final DockPanel informationPanel = new DockPanel();
|
||||||
informationPanel.setSize("100%", "95%");
|
informationPanel.setSize("100%", "95%");
|
||||||
@@ -232,6 +243,10 @@ public class AdminConsolePanel extends DockLayoutPanel {
|
|||||||
void remove(Widget child);
|
void remove(Widget child);
|
||||||
|
|
||||||
Widget getPanel();
|
Widget getPanel();
|
||||||
|
|
||||||
|
void selectTab(int index);
|
||||||
|
|
||||||
|
int getWidgetIndex(Widget child);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -282,6 +297,17 @@ public class AdminConsolePanel extends DockLayoutPanel {
|
|||||||
public Widget getPanel() {
|
public Widget getPanel() {
|
||||||
return tabPanel;
|
return tabPanel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void selectTab(int index) {
|
||||||
|
tabPanel.selectTab(index);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getWidgetIndex(Widget child) {
|
||||||
|
return tabPanel.getWidgetIndex(child);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
addToTabPanel(wrapper, panelToAdd, tabTitle, requiresAnyOfThesePermissions);
|
addToTabPanel(wrapper, panelToAdd, tabTitle, requiresAnyOfThesePermissions);
|
||||||
}
|
}
|
||||||
@@ -336,6 +362,32 @@ public class AdminConsolePanel extends DockLayoutPanel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void selectTabByNames(String verticalTabName, String horizontalTabName, Map<String, String> params) {
|
||||||
|
if (verticalTabName == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Widget widgetForSetup = null; //Remember widget for set up
|
||||||
|
for (Triple<VerticalOrHorizontalTabLayoutPanel, Widget, String> e : roleSpecificTabs) {
|
||||||
|
VerticalOrHorizontalTabLayoutPanel panel = e.getA();
|
||||||
|
Widget currentWidget = e.getB();
|
||||||
|
if (panel == topLevelTabPanelWrapper && verticalTabName.equals(e.getC())) { // for vertical panel
|
||||||
|
int index = panel.getWidgetIndex(currentWidget);
|
||||||
|
panel.selectTab(index);
|
||||||
|
if (horizontalTabName == null) {//If we don't have horizontal tab will setup vertical tab.
|
||||||
|
widgetForSetup = currentWidget;
|
||||||
|
}
|
||||||
|
} else if (horizontalTabName != null && horizontalTabName.equals(e.getC())) { // for horizontal panel
|
||||||
|
int index = panel.getWidgetIndex(currentWidget);
|
||||||
|
panel.selectTab(index);
|
||||||
|
widgetForSetup = currentWidget;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
panelsByWidget.get((new TabSelectionHandler()).unwrapScrollPanel(widgetForSetup)).setupWidgetByParams(params);;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A user is defined to have permission to see a widget if the widget's required permissions imply any of the permissions the
|
* A user is defined to have permission to see a widget if the widget's required permissions imply any of the permissions the
|
||||||
* user has. This may at first seem the wrong way around. However, the problem is that a widget cannot express a general permission
|
* user has. This may at first seem the wrong way around. However, the problem is that a widget cannot express a general permission
|
||||||
|
|||||||
+6
@@ -1,5 +1,7 @@
|
|||||||
package com.sap.sse.gwt.adminconsole;
|
package com.sap.sse.gwt.adminconsole;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import com.google.gwt.user.client.ui.Widget;
|
import com.google.gwt.user.client.ui.Widget;
|
||||||
|
|
||||||
public class DefaultRefreshableAdminConsolePanel<W extends Widget> implements RefreshableAdminConsolePanel {
|
public class DefaultRefreshableAdminConsolePanel<W extends Widget> implements RefreshableAdminConsolePanel {
|
||||||
@@ -13,6 +15,10 @@ public class DefaultRefreshableAdminConsolePanel<W extends Widget> implements Re
|
|||||||
this.widget = widget;
|
this.widget = widget;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setupWidgetByParams(Map<String, String> params){
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public W getWidget() {
|
public W getWidget() {
|
||||||
return widget;
|
return widget;
|
||||||
|
|||||||
+13
@@ -0,0 +1,13 @@
|
|||||||
|
package com.sap.sse.gwt.adminconsole;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public interface HandleTabSelectable {
|
||||||
|
/**
|
||||||
|
* Select tab by names
|
||||||
|
* @param verticalTabName - vertical name tab menu
|
||||||
|
* @param horizontalTabName - subtab name of vertical tab menu
|
||||||
|
* @param params - map of strings parameters
|
||||||
|
*/
|
||||||
|
void selectTabByNames(String verticalTabName, String horizontalTabName, Map<String, String> params);
|
||||||
|
}
|
||||||
+7
@@ -1,5 +1,7 @@
|
|||||||
package com.sap.sse.gwt.adminconsole;
|
package com.sap.sse.gwt.adminconsole;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import com.google.gwt.user.client.ui.Widget;
|
import com.google.gwt.user.client.ui.Widget;
|
||||||
|
|
||||||
public interface RefreshableAdminConsolePanel {
|
public interface RefreshableAdminConsolePanel {
|
||||||
@@ -13,4 +15,9 @@ public interface RefreshableAdminConsolePanel {
|
|||||||
* The widget representing the panel to place in the administration console
|
* The widget representing the panel to place in the administration console
|
||||||
*/
|
*/
|
||||||
Widget getWidget();
|
Widget getWidget();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invoked when the we handle selected tab by name {@link HandleTabSelectable} to set up a tab with parameters.
|
||||||
|
*/
|
||||||
|
void setupWidgetByParams(Map<String, String> params);
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user