Description
When trying to delete an unregistered target the following exception is thrown (in the console):
3-apr-2012 12:33:15 com.vaadin.Application terminalError
SEVERE: Terminal error:
com.vaadin.event.ListenerMethod$MethodException
Cause: java.lang.IllegalArgumentException: defaultTargetID does not represent a TargetObject.
at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:510)
at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:162)
at com.vaadin.ui.AbstractComponent.fireEvent(AbstractComponent.java:1166)
at com.vaadin.ui.Button.fireClick(Button.java:380)
at com.vaadin.ui.Button.changeVariables(Button.java:196)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariableBurst(AbstractCommunicationManager.java:1297)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariables(AbstractCommunicationManager.java:1217)
at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.doHandleUidlRequest(AbstractCommunicationManager.java:733)
at com.vaadin.terminal.gwt.server.CommunicationManager.handleUidlRequest(CommunicationManager.java:296)
at com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:483)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.amdatu.web.dispatcher.handler.ServletHandler.handle(ServletHandler.java:70)
at org.amdatu.web.dispatcher.dispatch.CustomFilterChain.doFilter(CustomFilterChain.java:56)
at org.amdatu.web.dispatcher.dispatch.CustomFilterPipeline.dispatch(CustomFilterPipeline.java:59)
at org.amdatu.web.dispatcher.dispatch.ExtenderFilterChain.doFilter(ExtenderFilterChain.java:53)
at org.amdatu.web.dispatcher.dispatch.ExtenderFilterPipeline.dispatch(ExtenderFilterPipeline.java:44)
at org.amdatu.web.dispatcher.service.DispatcherServiceImpl.dispatchRequest(DispatcherServiceImpl.java:197)
at org.amdatu.web.dispatcher.filter.DispatchInterceptFilter.doFilter(DispatchInterceptFilter.java:69)
at org.apache.felix.http.base.internal.handler.FilterHandler.doHandle(FilterHandler.java:80)
at org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:68)
at org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:47)
at org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:33)
at org.apache.felix.http.base.internal.dispatch.FilterPipeline.dispatch(FilterPipeline.java:48)
at org.apache.felix.http.base.internal.dispatch.Dispatcher.dispatch(Dispatcher.java:39)
at org.apache.felix.http.base.internal.DispatcherServlet.service(DispatcherServlet.java:55)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:536)
at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:930)
at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:747)
at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:405)
at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582)
Caused by: java.lang.IllegalArgumentException: defaultTargetID does not represent a TargetObject.
at org.apache.ace.client.repository.stateful.impl.StatefulTargetRepositoryImpl.unregister(StatefulTargetRepositoryImpl.java:138)
at org.apache.ace.client.repository.stateful.impl.StatefulTargetRepositoryImpl.remove(StatefulTargetRepositoryImpl.java:120)
at org.apache.ace.client.repository.stateful.impl.StatefulTargetRepositoryImpl.remove(StatefulTargetRepositoryImpl.java:67)
at org.apache.ace.webui.vaadin.VaadinClient$RemoveItemButton$1.buttonClick(VaadinClient.java:679)
at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:490)
... 38 more
At the same time, the delete button in the Web UI shows a little error-image, but no other information is given. The user can not know it failed because of an unregistered target. I would suggest to disable the delete button if deletion is not possible, rather than throwing an exception. Also, it would be nice to explicitly and clearly see a message somewhere that the target is unregistered. You can see that now, but only by checking if the relevant checkbox in the information screen is unchecked.