Bug 949423 - Setting empty string for "KPI's name:" in KPI panel configuration causes NPE
Summary: Setting empty string for "KPI's name:" in KPI panel configuration causes NPE
Keywords:
Status: CLOSED CURRENTRELEASE
Alias: None
Product: JBoss BPMS Platform 6
Classification: Retired
Component: BAM
Version: 6.0.0
Hardware: Unspecified
OS: Linux
unspecified
unspecified
Target Milestone: ---
: 6.0.0
Assignee: David Gutierrez
QA Contact: Jan Hrcek
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2013-04-08 07:09 UTC by Jan Hrcek
Modified: 2014-08-06 20:09 UTC (History)
2 users (show)

Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Cause: Empty input value check missing. Consequence: Failure while trying to use the KPI's name. Fix: Add empty value check control. Result: Empty input value is rejected.
Clone Of:
Environment:
Last Closed: 2014-08-06 20:09:57 UTC
Type: Bug
Embargoed:


Attachments (Terms of Use)
Error dialog after entering empty name for "KPI's name" (377.37 KB, image/png)
2013-04-08 07:09 UTC, Jan Hrcek
no flags Details

Description Jan Hrcek 2013-04-08 07:09:01 UTC
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)

Comment 1 David Gutierrez 2013-05-02 18:33:33 UTC
An empty input value on the KPI's name is now rejected.

Github commit:
https://github.com/droolsjbpm/dashboard-builder/commit/be9fe84998253ec9156ffd1b92130747503b4771

Comment 2 Jan Hrcek 2013-06-10 05:32:53 UTC
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


Note You need to log in before you can comment on or make changes to this bug.