From a3d27259abd29cf8d8071d818297cd8b51b56b0d Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Mon, 29 Sep 2008 12:32:09 +0000 Subject: [PATCH] LMS-597 Introducing ICallbackListener in AbstractAsyncCallback for testing purposes. SVN: 8492 --- .../application/AbstractAsyncCallback.java | 23 +++++++- .../client/web/client/application/Client.java | 55 ++++++++++--------- .../application/DummyCallbackListener.java | 47 ++++++++++++++++ .../client/application/ICallbackListener.java | 48 ++++++++++++++++ .../client/application/ui/AddGroupDialog.java | 3 +- .../application/ui/AddPersonDialog.java | 3 +- .../client/application/ui/AddRoleDialog.java | 3 +- .../web/client/application/ui/GroupsView.java | 3 +- .../client/application/ui/LoginWidget.java | 7 ++- .../client/application/ui/PersonsView.java | 3 +- .../web/client/application/ui/RolesView.java | 6 +- .../web/client/application/ui/TopMenu.java | 3 +- 12 files changed, 169 insertions(+), 35 deletions(-) create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/DummyCallbackListener.java create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ICallbackListener.java diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/AbstractAsyncCallback.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/AbstractAsyncCallback.java index 1ff36d543e0..805cb2fff30 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/AbstractAsyncCallback.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/AbstractAsyncCallback.java @@ -33,6 +33,15 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.exception.InvalidSessi public abstract class AbstractAsyncCallback<T> implements AsyncCallback<T> { private static final String PREFIX = "exception_"; + private static ICallbackListener callbackListener = DummyCallbackListener.DUMMY_LISTENER; + + /** + * Sets the global callback listener. Note: THIS METHOD SHOULD ONLY BE USED IN TEST CODE. + */ + public static void setCallbackListener(ICallbackListener listenerOrNull) + { + callbackListener = listenerOrNull == null ? DummyCallbackListener.DUMMY_LISTENER : listenerOrNull; + } protected final GenericViewContext viewContext; @@ -46,6 +55,7 @@ public abstract class AbstractAsyncCallback<T> implements AsyncCallback<T> public void onFailure(Throwable caught) { + callbackListener.onFailureOf(this, caught); System.out.println(caught); final String msg; if (caught instanceof InvocationException) @@ -76,4 +86,15 @@ public abstract class AbstractAsyncCallback<T> implements AsyncCallback<T> } } -} + public final void onSuccess(T result) + { + callbackListener.startOnSuccessOf(this, result); + process(result); + callbackListener.finishOnSuccessOf(this, result); + } + + /** + * Processes the specified result of an asynchronous method invocation. + */ + protected abstract void process(T result); +} \ No newline at end of file diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Client.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Client.java index c21b2fe5302..406b5ec2b75 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Client.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/Client.java @@ -36,42 +36,24 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.dto.SessionContext; */ public class Client implements EntryPoint { - private GenericViewContext viewContext; - + GenericViewContext viewContext; + AbstractAsyncCallback<SessionContext> loginCallback; + public void onModuleLoad() { if (viewContext == null) { viewContext = createViewContext(); } + loginCallback = loginCallback(); final IGenericClientServiceAsync service = viewContext.getService(); service.getApplicationInfo(new AbstractAsyncCallback<ApplicationInfo>(viewContext) { - public void onSuccess(ApplicationInfo info) + @Override + public void process(ApplicationInfo info) { viewContext.getModel().setApplicationInfo(info); - service - .tryToGetCurrentSessionContext(new AbstractAsyncCallback<SessionContext>( - viewContext) - { - public void onSuccess(SessionContext sessionContext) - { - RootPanel rootPanel = RootPanel.get(); - rootPanel.clear(); - Component widget; - if (sessionContext == null) - { - widget = new LoginPage(viewContext); - } else - { - viewContext.getModel() - .setSessionContext(sessionContext); - widget = new Application(viewContext); - } - rootPanel.add(widget); - } - }); - + service.tryToGetCurrentSessionContext(loginCallback); } }); } @@ -94,4 +76,27 @@ public class Client implements EntryPoint return new GenericViewContext(service, messageProvider, imageBundle, pageController); } + private AbstractAsyncCallback<SessionContext> loginCallback() + { + return new AbstractAsyncCallback<SessionContext>(viewContext) + { + @Override + public void process(SessionContext sessionContext) + { + RootPanel rootPanel = RootPanel.get(); + rootPanel.clear(); + Component widget; + if (sessionContext == null) + { + widget = new LoginPage(viewContext); + } else + { + viewContext.getModel().setSessionContext(sessionContext); + widget = new Application(viewContext); + } + rootPanel.add(widget); + } + }; + } + } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/DummyCallbackListener.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/DummyCallbackListener.java new file mode 100644 index 00000000000..117d127313c --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/DummyCallbackListener.java @@ -0,0 +1,47 @@ +/* + * Copyright 2008 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.client.web.client.application; + +import com.google.gwt.user.client.rpc.AsyncCallback; + +/** + * Dummy implementation of a callback listener which does nothing. + * + * @author Franz-Josef Elmer + */ +class DummyCallbackListener implements ICallbackListener +{ + /** The one and only one instance of this class. */ + static final ICallbackListener DUMMY_LISTENER = new DummyCallbackListener(); + + private DummyCallbackListener() + { + } + + public <T> void onFailureOf(AsyncCallback<T> callback, Throwable throwable) + { + } + + public <T> void startOnSuccessOf(AsyncCallback<T> callback, T result) + { + } + + public <T> void finishOnSuccessOf(AsyncCallback<T> callback, T result) + { + } + +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ICallbackListener.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ICallbackListener.java new file mode 100644 index 00000000000..2488a5a6992 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ICallbackListener.java @@ -0,0 +1,48 @@ +/* + * Copyright 2008 ETH Zuerich, CISD + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package ch.systemsx.cisd.openbis.generic.client.web.client.application; + +import com.google.gwt.user.client.rpc.AsyncCallback; + +/** + * Listener of invocations of methods of {@link AsyncCallback}. + * + * @author Franz-Josef Elmer + */ +public interface ICallbackListener +{ + /** + * Handles invocations of {@link AsyncCallback#onFailure(Throwable)} of the specified + * callback object with the specified throwable. This method will be invoked before + * the callback object is actually handling the failure. + */ + public <T> void onFailureOf(AsyncCallback<T> callback, Throwable throwable); + + /** + * Handles invocations of {@link AsyncCallback#onSuccess(Object)} of the specified + * callback object with the specified result object. This method will be invoked before + * the callback object is actually processing the result object. + */ + public <T> void startOnSuccessOf(AsyncCallback<T> callback, T result); + + /** + * Handles invocations of {@link AsyncCallback#onSuccess(Object)} of the specified + * callback object with the specified result object. This method will be invoked after + * the callback object is actually processing the result object. + */ + public <T> void finishOnSuccessOf(AsyncCallback<T> callback, T result); +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AddGroupDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AddGroupDialog.java index 33afa6ab95f..5d691b2887b 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AddGroupDialog.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AddGroupDialog.java @@ -67,7 +67,8 @@ public class AddGroupDialog extends Window descriptionField.getValue(), null, new AbstractAsyncCallback<Void>(viewContext) { - public void onSuccess(Void result) + @Override + public void process(Void result) { hide(); groupList.refresh(); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AddPersonDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AddPersonDialog.java index d9c489d8da9..68fa42dbf87 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AddPersonDialog.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AddPersonDialog.java @@ -61,7 +61,8 @@ public class AddPersonDialog extends Window viewContext.getService().registerPerson(codeField.getValue(), new AbstractAsyncCallback<Void>(viewContext) { - public void onSuccess(Void result) + @Override + public void process(Void result) { hide(); personList.refresh(); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AddRoleDialog.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AddRoleDialog.java index f4c6a83bca8..ca69d5d4c75 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AddRoleDialog.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/AddRoleDialog.java @@ -73,7 +73,8 @@ public class AddRoleDialog extends Window final AbstractAsyncCallback<Void> roleLoadingCallback = new AbstractAsyncCallback<Void>(viewContext) { - public void onSuccess(Void result) + @Override + public void process(Void result) { hide(); roleList.refresh(); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/GroupsView.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/GroupsView.java index 70ff037aeba..a0940ec9d0a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/GroupsView.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/GroupsView.java @@ -171,7 +171,8 @@ public class GroupsView extends LayoutContainer viewContext.getService().listGroups(null, new AbstractAsyncCallback<List<Group>>(viewContext) { - public void onSuccess(List<Group> groups) + @Override + public void process(List<Group> groups) { display(groups); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/LoginWidget.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/LoginWidget.java index 127fce4f665..8d180c24dff 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/LoginWidget.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/LoginWidget.java @@ -55,13 +55,16 @@ public class LoginWidget extends VerticalPanel userField.setSelectOnFocus(true); userField.setAllowBlank(false); userField.setValidateOnBlur(true); + userField.setId("login-user"); formPanel.add(userField); passwordField = new TextField<String>(); passwordField.setPassword(true); passwordField.setAllowBlank(false); passwordField.setFieldLabel(viewContext.getMessage(PREFIX + "passwordLabel")); + passwordField.setId("login-password"); formPanel.add(passwordField); Button button = new Button(viewContext.getMessage(PREFIX + "buttonLabel")); + button.setId("login-button"); button.addSelectionListener(new SelectionListener<ComponentEvent>() { @Override @@ -77,10 +80,12 @@ public class LoginWidget extends VerticalPanel private void login(final GenericViewContext viewContext) { + System.out.println("LoginWidget.login()"); viewContext.getService().tryToLogin(userField.getValue(), passwordField.getValue(), new AbstractAsyncCallback<SessionContext>(viewContext) { - public void onSuccess(SessionContext sessionContext) + @Override + public void process(SessionContext sessionContext) { viewContext.getPageController().reload(); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/PersonsView.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/PersonsView.java index 14183ba0bae..ea68e39461e 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/PersonsView.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/PersonsView.java @@ -173,7 +173,8 @@ public class PersonsView extends LayoutContainer add(new Text("data loading...")); viewContext.getService().listPersons(new AbstractAsyncCallback<List<Person>>(viewContext) { - public void onSuccess(List<Person> persons) + @Override + public void process(List<Person> persons) { display(persons); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/RolesView.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/RolesView.java index 46c631a744e..95b5e64c863 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/RolesView.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/RolesView.java @@ -132,7 +132,8 @@ public class RolesView extends LayoutContainer final AbstractAsyncCallback<Void> roleListRefreshCallback = new AbstractAsyncCallback<Void>(viewContext) { - public void onSuccess(Void result) + @Override + public void process(Void result) { roleList.refresh(); } @@ -183,7 +184,8 @@ public class RolesView extends LayoutContainer viewContext.getService().listRoles( new AbstractAsyncCallback<List<RoleAssignment>>(viewContext) { - public void onSuccess(List<RoleAssignment> roles) + @Override + public void process(List<RoleAssignment> roles) { display(roles); } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TopMenu.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TopMenu.java index f5ad8f73129..cf8fa1303ee 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TopMenu.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/ui/TopMenu.java @@ -65,7 +65,8 @@ public class TopMenu extends LayoutContainer viewContext.getService().logout( new AbstractAsyncCallback<Void>(viewContext) { - public void onSuccess(Void result) + @Override + public void process(Void result) { viewContext.getPageController().reload(); } -- GitLab