Created attachment 732560 [details] Error dialog after entering empty name for "KPI's name" Description of problem: When setting "KPI's name:" for some KPI panel to empty string, the "Unexpected error" modal dialog appears and it is impossible to get rid of that modal dialog, nor to fix the configuration of the panel - the error dialog just keeps reappearing. Version-Release number of selected component (if applicable): The dasbhoard-builder is not yet part of DR build of JBoss BPMS Platform 6, but from what I know it should be part of 6.0.0 - DR3. How reproducible: Seems to be 100% reproducible OS: Fedora 18 Browser: the same error in Firefox 19 and Google Chrome 26 Steps to Reproduce: 1. Download dashboard-builder from github and run quickstart demo as described in the "Quickstart" section cd dashboard-builder/scripts ./buildandrun_h2.sh 2. Browse to http://localhost:8080/dashbuilder/ and login with root/root 3. Using administration menu at the top navigate to Workspace: Showcase, Page: Sales opportunities 4. Congifure for example the first KPI panel "Opportunities by status" using "Options" > "Edit content" (click the gearwheel icon in the top-right corner of the panel) - this opens "Panel Edition" modal dialog. 5. In the "KPI's name:" field fill in empty string (i.e. delete the whole string "Opportunities by status" that is prefilled there) 6. Close the configuration modal dialog using "x" in the top-right corner Actual results: Modal dialog with message "An unexpected exception has occurred which has generated the following error log." appears. When "Show error log" button is clicked the following exception is displayed in the text area below the button (see [1] in the "Additional info" below). It is impossible to get rid of the "Unexpected error" window -when clicking "Continue" or "x" in the upper right corner, the dialog with error just reappears again -when stopping the application (ctrl+c in the console) and starting it again (running "mvn jetty:run -P h2,jetty" from directory dashboard-builder/modules/dashboard-showcase), navigating back to page with the panel. There is message "Panel isn't well configured". When trying to fix the configuration (usig options > Edit content again) the "Unexpected error" dialog appears again. Also when trying Options > Erase Panel, the errod dialog appears again. The only way to fix this is to restore the application H2 database from backup. Expected results: Some input validation should be in place for the "KPI's name" field. Either some message should be displayed (for example "Name of the KPI must be defined" or empty string as a KPI name should be allowed, without application throwing NullPointerException). For other parameters of KPI panel the input validation seems to be in place. E.G. parameter "Width" - when you delete the prefilled value and press enter (or enter a non-numeric value) - the value is not accepted and the application leaves the previously prefilled value in place. I would expect similar behaviour for "KPI's name" field. Additional info: [1] Exception that is displayed in the "Unexpected error" modal dialog after steps to reproduce are performed: Thread id=qtp1213359840-289 Thread begin date=Mon Apr 08 08:07:31 CEST 2013 Thread group=main Request URL=/dashbuilder/workspace/en/showcase/sales-dashboard?idPanel=2990&pAction=submit Request IP=0:0:0:0:0:0:0:1 Request date=Mon Apr 08 08:07:31 CEST 2013 Request header:user-agent=Mozilla/5.0 (X11; Linux x86_64; rv:19.0) Gecko/20100101 Firefox/19.0 Request header:referer=http://localhost:8080/dashbuilder/workspace/en/showcase/sales-dashboard Request header:cookie=JSESSIONID=5fw8avohfdlp1kwe2hwam7tcb; dashbuilderNavigationPoint=en-2b7-1; region_left_web_2_0_cookie=1 Request param:idPanel=2990 Request param:pAction=submit Tx id=749893037 Tx Isolation=2 Tx Auto commit=false Error id=1365401251990 Error date=Mon Apr 08 08:07:31 CEST 2013 Error stack trace=java.lang.NullPointerException at org.jboss.dashboard.ui.controller.requestChain.FactoryActionRequestExecutor$PanelActionTrace.<init>(FactoryActionRequestExecutor.java:134) at org.jboss.dashboard.ui.controller.requestChain.FactoryActionRequestExecutor.processRequest(FactoryActionRequestExecutor.java:97) at org.jboss.dashboard.ui.controller.requestChain.RequestChainProcessor.doRequestProcessing(RequestChainProcessor.java:61) at org.jboss.dashboard.ui.controller.requestChain.RequestChainProcessor.doRequestProcessing(RequestChainProcessor.java:63) at org.jboss.dashboard.ui.controller.requestChain.RequestChainProcessor.doRequestProcessing(RequestChainProcessor.java:63) at org.jboss.dashboard.ui.controller.requestChain.RequestChainProcessor.doRequestProcessing(RequestChainProcessor.java:63) at org.jboss.dashboard.ui.controller.requestChain.RequestChainProcessor.doRequestProcessing(RequestChainProcessor.java:63) at org.jboss.dashboard.ui.controller.requestChain.RequestChainProcessor.doRequestProcessing(RequestChainProcessor.java:63) at org.jboss.dashboard.ui.controller.requestChain.RequestChainProcessor.doRequestProcessing(RequestChainProcessor.java:63) at org.jboss.dashboard.ui.controller.requestChain.RequestChainProcessor.doRequestProcessing(RequestChainProcessor.java:63) at org.jboss.dashboard.ui.controller.requestChain.RequestChainProcessor.doRequestProcessing(RequestChainProcessor.java:63) at org.jboss.dashboard.ui.controller.requestChain.RequestChainProcessor.doRequestProcessing(RequestChainProcessor.java:63) at org.jboss.dashboard.ui.controller.ControllerServlet$3.txFragment(ControllerServlet.java:191) at org.jboss.dashboard.database.hibernate.HibernateTransaction.executeFragment(HibernateTransaction.java:242) at org.jboss.dashboard.database.hibernate.HibernateTxFragment.executeInitiator(HibernateTxFragment.java:177) at org.jboss.dashboard.database.hibernate.HibernateTxFragment.execute(HibernateTxFragment.java:165) at org.jboss.dashboard.ui.controller.ControllerServlet.processTheRequest(ControllerServlet.java:186) at org.jboss.dashboard.ui.controller.ControllerServlet$2.doWork(ControllerServlet.java:165) at org.jboss.dashboard.factory.Factory.runWork(Factory.java:295) at org.jboss.dashboard.factory.Factory.doWork(Factory.java:323) at org.jboss.dashboard.ui.controller.ControllerServlet.service(ControllerServlet.java:147) at javax.servlet.http.HttpServlet.service(HttpServlet.java:848) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:648) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:521) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255) at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) at org.eclipse.jetty.server.Server.handle(Server.java:365) at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485) at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:937) at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:998) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:856) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240) at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:627) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:51) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) at java.lang.Thread.run(Thread.java:722)
An empty input value on the KPI's name is now rejected. Github commit: https://github.com/droolsjbpm/dashboard-builder/commit/be9fe84998253ec9156ffd1b92130747503b4771
QA: Ok, problem is now solved. When user tries to enter an empty name it is not accepted and previous value is left in the "KPI's name" filed. Verified with dashbuilder build DR5 deployed on EAP 6.1 GA