From e699f6f1a33ac13a02a10939d15e991320fe64c1 Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Tue, 9 Sep 2008 13:30:57 +0000 Subject: [PATCH] LMS-445 Show UserFailureException properly SVN: 8249 --- .../web/client/IGenericClientService.java | 6 +- .../application/AbstractAsyncCallback.java | 3 +- .../InvalidSessionException.java | 2 +- .../UserFailureException.java | 2 +- .../web/server/GenericClientService.java | 29 ++++++--- .../util/UserFailureExceptionTranslater.java | 62 +++++++++++++++++++ .../openbis/generic/server/GenericServer.java | 2 +- 7 files changed, 93 insertions(+), 13 deletions(-) rename openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/{application/util => exception}/InvalidSessionException.java (93%) rename openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/{application/util => exception}/UserFailureException.java (94%) create mode 100644 openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/util/UserFailureExceptionTranslater.java diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IGenericClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IGenericClientService.java index 0f2643f5b9a..6d424ffb9a3 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IGenericClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/IGenericClientService.java @@ -23,6 +23,7 @@ import com.google.gwt.user.client.rpc.RemoteService; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.ApplicationInfo; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Group; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.SessionContext; +import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException; /** * Service interface for the generic GWT client. @@ -54,10 +55,11 @@ public interface IGenericClientService extends RemoteService /** * Returns a list of all groups which belong to the specified database instance. */ - public List<Group> listGroups(String databaseInstanceCode); + public List<Group> listGroups(String databaseInstanceCode) throws UserFailureException; /** * Registers a new group with specified code and optional description and group leader ID. */ - public void registerGroup(String groupCode, String descriptionOrNull, String groupLeaderOrNull); + public void registerGroup(String groupCode, String descriptionOrNull, String groupLeaderOrNull) + throws UserFailureException; } 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 d47c1a55500..1ff36d543e0 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 @@ -20,8 +20,8 @@ import com.extjs.gxt.ui.client.widget.MessageBox; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwt.user.client.rpc.InvocationException; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.InvalidSessionException; import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.StringUtils; +import ch.systemsx.cisd.openbis.generic.client.web.client.exception.InvalidSessionException; @@ -46,6 +46,7 @@ public abstract class AbstractAsyncCallback<T> implements AsyncCallback<T> public void onFailure(Throwable caught) { + System.out.println(caught); final String msg; if (caught instanceof InvocationException) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/util/InvalidSessionException.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/exception/InvalidSessionException.java similarity index 93% rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/util/InvalidSessionException.java rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/exception/InvalidSessionException.java index 9dd1343a6e1..1c4b7d98d00 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/util/InvalidSessionException.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/exception/InvalidSessionException.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package ch.systemsx.cisd.openbis.generic.client.web.client.application.util; +package ch.systemsx.cisd.openbis.generic.client.web.client.exception; /** * This <code>UserFailureException</code> extension signals that a <code>Session</code> has diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/util/UserFailureException.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/exception/UserFailureException.java similarity index 94% rename from openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/util/UserFailureException.java rename to openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/exception/UserFailureException.java index 74b290afd53..612101170e8 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/application/util/UserFailureException.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/client/exception/UserFailureException.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package ch.systemsx.cisd.openbis.generic.client.web.client.application.util; +package ch.systemsx.cisd.openbis.generic.client.web.client.exception; import com.google.gwt.user.client.rpc.IsSerializable; diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/GenericClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/GenericClientService.java index 78489e41b7e..ce5ee64b8fd 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/GenericClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/GenericClientService.java @@ -24,6 +24,7 @@ import javax.servlet.http.HttpSession; import org.apache.log4j.Logger; import ch.systemsx.cisd.common.exceptions.InvalidSessionException; +import ch.systemsx.cisd.common.exceptions.UserFailureException; import ch.systemsx.cisd.common.logging.LogCategory; import ch.systemsx.cisd.common.logging.LogFactory; import ch.systemsx.cisd.common.servlet.IRequestContextProvider; @@ -37,6 +38,7 @@ import ch.systemsx.cisd.openbis.generic.client.web.client.dto.Group; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.SessionContext; import ch.systemsx.cisd.openbis.generic.client.web.client.dto.User; import ch.systemsx.cisd.openbis.generic.client.web.server.util.GroupTranslater; +import ch.systemsx.cisd.openbis.generic.client.web.server.util.UserFailureExceptionTranslater; import ch.systemsx.cisd.openbis.generic.shared.IGenericServer; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; @@ -179,19 +181,32 @@ public class GenericClientService implements IGenericClientService public List<Group> listGroups(String databaseInstanceCode) { - DatabaseInstanceIdentifier identifier = new DatabaseInstanceIdentifier(databaseInstanceCode); - List<Group> result = new ArrayList<Group>(); - List<GroupPE> groups = server.listGroups(getSessionToken(), identifier); - for (GroupPE group : groups) + try { - result.add(GroupTranslater.translate(group)); + DatabaseInstanceIdentifier identifier = new DatabaseInstanceIdentifier(databaseInstanceCode); + List<Group> result = new ArrayList<Group>(); + List<GroupPE> groups = server.listGroups(getSessionToken(), identifier); + for (GroupPE group : groups) + { + result.add(GroupTranslater.translate(group)); + } + return result; + } catch (UserFailureException e) + { + throw UserFailureExceptionTranslater.translate(e); } - return result; } public void registerGroup(String groupCode, String descriptionOrNull, String groupLeaderOrNull) { - server.registerGroup(getSessionToken(), groupCode, descriptionOrNull, groupLeaderOrNull); + try + { + String sessionToken = getSessionToken(); + server.registerGroup(sessionToken, groupCode, descriptionOrNull, groupLeaderOrNull); + } catch (UserFailureException e) + { + throw UserFailureExceptionTranslater.translate(e); + } } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/util/UserFailureExceptionTranslater.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/util/UserFailureExceptionTranslater.java new file mode 100644 index 00000000000..b8fa9629c91 --- /dev/null +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/client/web/server/util/UserFailureExceptionTranslater.java @@ -0,0 +1,62 @@ +/* + * 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.server.util; + +import ch.systemsx.cisd.common.exceptions.CheckedExceptionTunnel; +import ch.systemsx.cisd.common.utilities.ClassUtils; +import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException; + +/** + * Translator of server side {@link ch.systemsx.cisd.common.exceptions.UserFailureException} into + * GWT compatible {@link UserFailureException}. + * + * @author Franz-Josef Elmer + */ +public class UserFailureExceptionTranslater +{ + private static final String WEB_CLIENT_EXCEPTIONS_PACKAGE = + getPackageName(UserFailureException.class); + + private static String getPackageName(Class<?> clazz) + { + String fullName = clazz.getName(); + return fullName.substring(0, fullName.length() - clazz.getSimpleName().length() - 1); + } + + private UserFailureExceptionTranslater() + { + } + + /** + * Converts any {@link ch.systemsx.cisd.common.exceptions.UserFailureException} or subclass of + * it to a <i>GWT</i> {@link UserFailureException} (or subclass of it if this one could be + * found in the same package). + */ + public static UserFailureException translate(ch.systemsx.cisd.common.exceptions.UserFailureException exception) + { + final String className = WEB_CLIENT_EXCEPTIONS_PACKAGE + exception.getClass().getSimpleName(); + String message = exception.getMessage(); + try + { + return ClassUtils.create(UserFailureException.class, className, message); + } catch (final CheckedExceptionTunnel e) + { + return new UserFailureException(message); + } + + } +} diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/GenericServer.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/GenericServer.java index f6c10b4e024..4c067226d3a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/GenericServer.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/server/GenericServer.java @@ -29,7 +29,7 @@ import ch.systemsx.cisd.common.servlet.RequestContextProviderAdapter; import ch.systemsx.cisd.lims.base.dto.GroupPE; import ch.systemsx.cisd.lims.base.dto.PersonPE; import ch.systemsx.cisd.lims.base.identifier.DatabaseInstanceIdentifier; -import ch.systemsx.cisd.openbis.generic.client.web.client.application.util.UserFailureException; +import ch.systemsx.cisd.openbis.generic.client.web.client.exception.UserFailureException; import ch.systemsx.cisd.openbis.generic.shared.IGenericServer; import ch.systemsx.cisd.openbis.generic.shared.dto.Session; -- GitLab