Note: This bug is displayed in read-only format because the product is no longer active in Red Hat Bugzilla.

Bug 949423

Summary: Setting empty string for "KPI's name:" in KPI panel configuration causes NPE
Product: [Retired] JBoss BPMS Platform 6 Reporter: Jan Hrcek <jhrcek>
Component: BAMAssignee: David Gutierrez <dgutierr>
Status: CLOSED CURRENTRELEASE QA Contact: Jan Hrcek <jhrcek>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 6.0.0CC: rrajasek, rzhang
Target Milestone: ---   
Target Release: 6.0.0   
Hardware: Unspecified   
OS: Linux   
Whiteboard:
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.
Story Points: ---
Clone Of: Environment:
Last Closed: 2014-08-06 20:09:57 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Attachments:
Description Flags
Error dialog after entering empty name for "KPI's name" none

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