mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-08 13:20:57 +00:00
improved error handling by indroducing an error view and a shared ErrorMessage composite
This commit is contained in:
1 parent
5ed7c8123e
commit
19b879f49b
20 files changed
+250
-9
No files matched your search
+6
@@ -5,6 +5,7 @@ import java.util.List;
|
||||
import com.google.gwt.event.shared.SimpleEventBus;
|
||||
import com.google.gwt.place.shared.PlaceController;
|
||||
import com.google.web.bindery.event.shared.EventBus;
|
||||
import com.sap.sailing.gwt.home.client.place.error.TabletAndDesktopErrorView;
|
||||
import com.sap.sailing.gwt.home.client.place.event.EventView;
|
||||
import com.sap.sailing.gwt.home.client.place.event.EventWithoutRegattasView;
|
||||
import com.sap.sailing.gwt.home.client.place.event.TabletAndDesktopEventView;
|
||||
@@ -55,6 +56,11 @@ public class SmartphoneApplicationClientFactory extends AbstractApplicationClien
|
||||
return new TabletAndDesktopEventsView(getPlaceNavigator());
|
||||
}
|
||||
|
||||
@Override
|
||||
public TabletAndDesktopErrorView createErrorView(String errorMessage, Throwable errorReason) {
|
||||
return new TabletAndDesktopErrorView(errorMessage, errorReason);
|
||||
}
|
||||
|
||||
@Override
|
||||
public StartView createStartView() {
|
||||
return new TabletAndDesktopStartView(getPlaceNavigator());
|
||||
|
||||
+6
@@ -5,6 +5,7 @@ import java.util.List;
|
||||
import com.google.gwt.event.shared.SimpleEventBus;
|
||||
import com.google.gwt.place.shared.PlaceController;
|
||||
import com.google.web.bindery.event.shared.EventBus;
|
||||
import com.sap.sailing.gwt.home.client.place.error.TabletAndDesktopErrorView;
|
||||
import com.sap.sailing.gwt.home.client.place.event.EventView;
|
||||
import com.sap.sailing.gwt.home.client.place.event.EventWithoutRegattasView;
|
||||
import com.sap.sailing.gwt.home.client.place.event.TabletAndDesktopEventView;
|
||||
@@ -45,6 +46,11 @@ public class TabletAndDesktopApplicationClientFactory extends AbstractApplicatio
|
||||
return new TabletAndDesktopEventView(getSailingService(), event, raceGroups, leaderboardName, timerForClientServerOffset);
|
||||
}
|
||||
|
||||
@Override
|
||||
public TabletAndDesktopErrorView createErrorView(String errorMessage, Throwable errorReason) {
|
||||
return new TabletAndDesktopErrorView(errorMessage, errorReason);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EventWithoutRegattasView createEventWithoutRegattasView(EventDTO event) {
|
||||
return new TabletAndDesktopEventWithoutRegattasView(getSailingService(), event);
|
||||
|
||||
+3
@@ -23,6 +23,9 @@ public interface TextMessages extends Messages {
|
||||
String viewAnalysis();
|
||||
String overallLeaderboard();
|
||||
String pleaseEnterASearchTerm();
|
||||
String pleaseTryAgain();
|
||||
String reloadPage();
|
||||
String errorMessageLoadingData();
|
||||
|
||||
String countdownDays();
|
||||
String countdownHours();
|
||||
|
||||
+4
-1
@@ -14,7 +14,10 @@ races=Races
|
||||
moreInfo=More info
|
||||
viewAnalysis=View analysis
|
||||
overallLeaderboard=Overall leaderboard
|
||||
pleaseEnterASearchTerm=Bitte gebe einen Suchbegriff ein.
|
||||
pleaseEnterASearchTerm=Please enter a search term.
|
||||
pleaseTryAgain=Please try again...
|
||||
reloadPage=Reload page
|
||||
errorMessageLoadingData=An error occured while loading the data for this page.
|
||||
|
||||
countdownDays=Days
|
||||
countdownHours=Hrs
|
||||
|
||||
+4
-1
@@ -14,7 +14,10 @@ races=Rennen
|
||||
moreInfo=Weitere Informationen
|
||||
viewAnalysis=Analyzen ansehen
|
||||
overallLeaderboard=Gesamtergebnis
|
||||
pleaseEnterASearchTerm=Please enter a search term.
|
||||
pleaseEnterASearchTerm=Bitte gebe einen Suchbegriff ein.
|
||||
pleaseTryAgain=Bitte versuchen sie es erneut...
|
||||
reloadPage=Seite neu laden
|
||||
errorMessageLoadingData=Beim Laden der Daten für diese Seite ist ein Fehler aufgetreten.
|
||||
|
||||
countdownDays=Tage
|
||||
countdownHours=Std.
|
||||
|
||||
+18
@@ -0,0 +1,18 @@
|
||||
package com.sap.sailing.gwt.home.client.place.error;
|
||||
|
||||
import com.google.gwt.activity.shared.AbstractActivity;
|
||||
import com.google.gwt.event.shared.EventBus;
|
||||
import com.google.gwt.user.client.ui.AcceptsOneWidget;
|
||||
|
||||
public class ErrorActivity extends AbstractActivity {
|
||||
|
||||
public ErrorActivity(ErrorPlace place, ErrorClientFactory clientFactory) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start(AcceptsOneWidget panel, EventBus eventBus) {
|
||||
// TODO: the error place should get the error message from the place
|
||||
panel.setWidget(new TabletAndDesktopErrorView(null, null));
|
||||
}
|
||||
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
package com.sap.sailing.gwt.home.client.place.error;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.sap.sse.gwt.client.mvp.AbstractActivityProxy;
|
||||
|
||||
public class ErrorActivityProxy extends AbstractActivityProxy {
|
||||
|
||||
private final ErrorClientFactory clientFactory;
|
||||
private final ErrorPlace place;
|
||||
|
||||
public ErrorActivityProxy(ErrorPlace place, ErrorClientFactory clientFactory) {
|
||||
this.place = place;
|
||||
this.clientFactory = clientFactory;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void startAsync() {
|
||||
GWT.runAsync(new AbstractRunAsyncCallback() {
|
||||
@Override
|
||||
public void onSuccess() {
|
||||
super.onSuccess(new ErrorActivity(place, clientFactory));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package com.sap.sailing.gwt.home.client.place.error;
|
||||
|
||||
import com.sap.sailing.gwt.ui.client.SailingClientFactory;
|
||||
|
||||
public interface ErrorClientFactory extends SailingClientFactory {
|
||||
|
||||
}
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
package com.sap.sailing.gwt.home.client.place.error;
|
||||
|
||||
import com.google.gwt.place.shared.PlaceTokenizer;
|
||||
import com.sap.sailing.gwt.home.client.AbstractBasePlace;
|
||||
|
||||
public class ErrorPlace extends AbstractBasePlace {
|
||||
|
||||
public static class Tokenizer implements PlaceTokenizer<ErrorPlace> {
|
||||
@Override
|
||||
public String getToken(ErrorPlace place) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ErrorPlace getPlace(String token) {
|
||||
return new ErrorPlace();
|
||||
}
|
||||
}
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
package com.sap.sailing.gwt.home.client.place.error;
|
||||
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
|
||||
public interface ErrorView {
|
||||
Widget asWidget();
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
package com.sap.sailing.gwt.home.client.place.error;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.uibinder.client.UiBinder;
|
||||
import com.google.gwt.uibinder.client.UiField;
|
||||
import com.google.gwt.user.client.ui.Composite;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.gwt.home.client.shared.error.ErrorMessage;
|
||||
|
||||
public class TabletAndDesktopErrorView extends Composite implements ErrorView {
|
||||
private static ErrorViewUiBinder uiBinder = GWT.create(ErrorViewUiBinder.class);
|
||||
|
||||
interface ErrorViewUiBinder extends UiBinder<Widget, TabletAndDesktopErrorView> {
|
||||
}
|
||||
|
||||
@UiField(provided=true) ErrorMessage errorMessage;
|
||||
|
||||
public TabletAndDesktopErrorView(String errorMessageText, Throwable errorReason) {
|
||||
errorMessage = new ErrorMessage(errorMessageText, errorReason);
|
||||
|
||||
initWidget(uiBinder.createAndBindUi(this));
|
||||
}
|
||||
}
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
|
||||
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
|
||||
xmlns:s="urn:import:com.sap.sailing.gwt.home.client.shared"
|
||||
xmlns:g="urn:import:com.google.gwt.user.client.ui">
|
||||
<ui:with field="res" type="com.sap.sailing.gwt.home.client.HomeResources" />
|
||||
<g:HTMLPanel>
|
||||
<s:error.ErrorMessage ui:field='errorMessage'/>
|
||||
</g:HTMLPanel>
|
||||
</ui:UiBinder>
|
||||
+9
-3
@@ -9,6 +9,7 @@ import com.google.gwt.event.shared.EventBus;
|
||||
import com.google.gwt.user.client.Window;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.AcceptsOneWidget;
|
||||
import com.sap.sailing.gwt.home.client.place.error.ErrorView;
|
||||
import com.sap.sailing.gwt.home.client.shared.placeholder.Placeholder;
|
||||
import com.sap.sailing.gwt.ui.regattaoverview.RegattaRaceStatesSettings;
|
||||
import com.sap.sailing.gwt.ui.shared.EventDTO;
|
||||
@@ -78,7 +79,7 @@ public class EventActivity extends AbstractActivity {
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
Window.alert("Shit happens at getRegattaStructureForEvent()");
|
||||
createErrorView("Error while loading the regatta structure with service getRegattaStructureOfEvent()", caught, panel);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
@@ -88,11 +89,16 @@ public class EventActivity extends AbstractActivity {
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
Window.alert("Shit happens at getRegattaStructureForEvent()");
|
||||
createErrorView("Error while loading the event with service getEventById()", caught, panel);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void createErrorView(String errorMessage, Throwable errorReason, AcceptsOneWidget panel) {
|
||||
ErrorView view = clientFactory.createErrorView(errorMessage, errorReason);
|
||||
panel.setWidget(view.asWidget());
|
||||
}
|
||||
|
||||
private void createEventView(EventDTO event, List<RaceGroupDTO> raceGroups, AcceptsOneWidget panel) {
|
||||
view = clientFactory.createEventView(event, raceGroups, eventPlace.getLeaderboardIdAsNameString(), timerForClientServerOffset);
|
||||
panel.setWidget(view.asWidget());
|
||||
@@ -114,7 +120,7 @@ public class EventActivity extends AbstractActivity {
|
||||
new AsyncCallback<List<RegattaOverviewEntryDTO>>() {
|
||||
@Override
|
||||
public void onFailure(Throwable cause) {
|
||||
Window.alert("Shit happens at getRaceStateEntriesForRaceGroup()");
|
||||
Window.setStatus("Error while loading the race states with service getRaceStateEntriesForRaceGroup()");
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
+3
-2
@@ -4,9 +4,9 @@ import java.util.List;
|
||||
|
||||
import com.google.gwt.activity.shared.AbstractActivity;
|
||||
import com.google.gwt.event.shared.EventBus;
|
||||
import com.google.gwt.user.client.Window;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.AcceptsOneWidget;
|
||||
import com.sap.sailing.gwt.home.client.place.error.ErrorView;
|
||||
import com.sap.sailing.gwt.home.client.shared.placeholder.Placeholder;
|
||||
import com.sap.sailing.gwt.ui.shared.EventBaseDTO;
|
||||
|
||||
@@ -33,7 +33,8 @@ public class EventsActivity extends AbstractActivity {
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
Window.alert("Shit happens");
|
||||
final ErrorView view = clientFactory.createErrorView("Error while loading the sailing server instances with service getPublicEventsOfAllSailingServers()", caught);
|
||||
panel.setWidget(view.asWidget());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
+8
-2
@@ -5,6 +5,7 @@ import com.google.gwt.event.shared.EventBus;
|
||||
import com.google.gwt.user.client.Window;
|
||||
import com.google.gwt.user.client.rpc.AsyncCallback;
|
||||
import com.google.gwt.user.client.ui.AcceptsOneWidget;
|
||||
import com.sap.sailing.gwt.home.client.place.error.ErrorView;
|
||||
import com.sap.sailing.gwt.home.client.shared.placeholder.Placeholder;
|
||||
import com.sap.sailing.gwt.ui.shared.LeaderboardSearchResultDTO;
|
||||
import com.sap.sse.common.search.KeywordQuery;
|
||||
@@ -15,6 +16,7 @@ public class SearchResultActivity extends AbstractActivity {
|
||||
private final SearchResultPlace searchResultPlace;
|
||||
|
||||
private SearchResultView view;
|
||||
private AcceptsOneWidget panel;
|
||||
|
||||
public SearchResultActivity(SearchResultPlace place, SearchResultClientFactory clientFactory) {
|
||||
this.clientFactory = clientFactory;
|
||||
@@ -26,13 +28,16 @@ public class SearchResultActivity extends AbstractActivity {
|
||||
private void bindEvents() {
|
||||
clientFactory.getEventBus().addHandler(SearchEvent.TYPE, new SearchEventHandler() {
|
||||
public void onDoSearch(SearchEvent event) {
|
||||
doSearch(event.getSearchText());
|
||||
if(view != null) {
|
||||
doSearch(event.getSearchText());
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void start(final AcceptsOneWidget panel, final EventBus eventBus) {
|
||||
this.panel = panel;
|
||||
panel.setWidget(new Placeholder());
|
||||
|
||||
view = clientFactory.createSearchResultView();
|
||||
@@ -50,7 +55,8 @@ public class SearchResultActivity extends AbstractActivity {
|
||||
|
||||
@Override
|
||||
public void onFailure(Throwable caught) {
|
||||
Window.alert("Shit happens");
|
||||
final ErrorView view = clientFactory.createErrorView("Error while seaching with service search()", caught);
|
||||
panel.setWidget(view.asWidget());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
.error_content {
|
||||
margin-top: 3em;
|
||||
margin-bottom: 3em;
|
||||
}
|
||||
.error_message {
|
||||
font-weight: bold;
|
||||
font-size: 20px;
|
||||
}
|
||||
.error_message_detail {
|
||||
font-size: 15px;
|
||||
}
|
||||
.reload_page_message {
|
||||
font-size: 20px;
|
||||
margin-right: 20px;
|
||||
}
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
package com.sap.sailing.gwt.home.client.shared.error;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.dom.client.DivElement;
|
||||
import com.google.gwt.event.dom.client.ClickEvent;
|
||||
import com.google.gwt.uibinder.client.UiBinder;
|
||||
import com.google.gwt.uibinder.client.UiField;
|
||||
import com.google.gwt.uibinder.client.UiHandler;
|
||||
import com.google.gwt.user.client.Window;
|
||||
import com.google.gwt.user.client.ui.Anchor;
|
||||
import com.google.gwt.user.client.ui.Composite;
|
||||
import com.google.gwt.user.client.ui.Widget;
|
||||
import com.sap.sailing.gwt.home.client.i18n.TextMessages;
|
||||
|
||||
public class ErrorMessage extends Composite {
|
||||
|
||||
interface ErrorUiBinder extends UiBinder<Widget, ErrorMessage> {
|
||||
}
|
||||
|
||||
private static ErrorUiBinder uiBinder = GWT.create(ErrorUiBinder.class);
|
||||
|
||||
@UiField DivElement errorMessage;
|
||||
@UiField DivElement errorMessageDetail;
|
||||
@UiField Anchor reloadPageAnchor;
|
||||
|
||||
public ErrorMessage(String detailMessage, Throwable errorReason) {
|
||||
ErrorMessageResources.INSTANCE.css().ensureInjected();
|
||||
initWidget(uiBinder.createAndBindUi(this));
|
||||
|
||||
this.setHeight(Window.getClientHeight() + "px");
|
||||
errorMessage.setInnerText(TextMessages.INSTANCE.errorMessageLoadingData());
|
||||
|
||||
Window.setStatus(detailMessage);
|
||||
}
|
||||
|
||||
@UiHandler("reloadPageAnchor")
|
||||
void reloadPage(ClickEvent e) {
|
||||
Window.Location.reload();
|
||||
}
|
||||
}
|
||||
+22
@@ -0,0 +1,22 @@
|
||||
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
|
||||
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
|
||||
xmlns:g="urn:import:com.google.gwt.user.client.ui"
|
||||
xmlns:s="urn:import:com.sap.sailing.gwt.home.client.shared">
|
||||
<ui:with field="i18n" type="com.sap.sailing.gwt.home.client.i18n.TextMessages"/>
|
||||
<ui:with field="res" type="com.sap.sailing.gwt.home.client.HomeResources" />
|
||||
<ui:with field="local_res" type="com.sap.sailing.gwt.home.client.shared.error.ErrorMessageResources" />
|
||||
<g:HTMLPanel>
|
||||
<div class="{res.mainCss.grid}">
|
||||
<div class="{res.mediaCss.columns}">
|
||||
<div class="{local_res.css.error_content}">
|
||||
<div ui:field="errorMessage" class="{local_res.css.error_message}"></div>
|
||||
<div ui:field="errorMessageDetail" class="{local_res.css.error_message_detail}"></div>
|
||||
</div>
|
||||
<div>
|
||||
<span class="{local_res.css.reload_page_message}"><ui:text from='{i18n.pleaseTryAgain}'/></span>
|
||||
<g:Anchor ui:field="reloadPageAnchor" href="javascript:;" styleName="{res.mainCss.button}"><ui:text from='{i18n.reloadPage}'/></g:Anchor>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</g:HTMLPanel>
|
||||
</ui:UiBinder>
|
||||
+19
@@ -0,0 +1,19 @@
|
||||
package com.sap.sailing.gwt.home.client.shared.error;
|
||||
|
||||
import com.google.gwt.core.client.GWT;
|
||||
import com.google.gwt.resources.client.ClientBundle;
|
||||
import com.google.gwt.resources.client.CssResource;
|
||||
|
||||
public interface ErrorMessageResources extends ClientBundle {
|
||||
public static final ErrorMessageResources INSTANCE = GWT.create(ErrorMessageResources.class);
|
||||
|
||||
@Source("com/sap/sailing/gwt/home/client/shared/error/ErrorMessage.css")
|
||||
LocalCss css();
|
||||
|
||||
public interface LocalCss extends CssResource {
|
||||
String error_content();
|
||||
String error_message();
|
||||
String error_message_detail();
|
||||
String reload_page_message();
|
||||
}
|
||||
}
|
||||
+3
@@ -1,5 +1,6 @@
|
||||
package com.sap.sailing.gwt.ui.client;
|
||||
|
||||
import com.sap.sailing.gwt.home.client.place.error.ErrorView;
|
||||
import com.sap.sse.gwt.client.mvp.ClientFactory;
|
||||
|
||||
/**
|
||||
@@ -10,4 +11,6 @@ import com.sap.sse.gwt.client.mvp.ClientFactory;
|
||||
*/
|
||||
public interface SailingClientFactory extends ClientFactory {
|
||||
SailingServiceAsync getSailingService();
|
||||
|
||||
ErrorView createErrorView(String errorMessage, Throwable errorReason);
|
||||
}
|
||||
Reference in new issue
Block a user