Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 346961

Summary: NPE in ComposerField when condition added with "enter"
Product: z_Archived Reporter: Christoph Thommen <christoph.thommen>
Component: ScoutAssignee: Project Inbox <scout.core-inbox>
Status: CLOSED FIXED QA Contact:
Severity: normal    
Priority: P3 CC: ivan.motsch, zimmermann
Version: unspecifiedFlags: zimmermann: indigo+
zimmermann: juno+
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Attachments:
Description Flags
Composer Tree
none
Composer Form
none
patch modifies SwtScoutTable to not listen to the Enter key anymore none

Description Christoph Thommen CLA 2011-05-24 06:27:16 EDT
Created attachment 196417 [details]
Composer Tree

Add a condition for a field (f.e. Language), select "ist leer" and press enter. The condition "ist leer" is not correctly added to the composer tree. When you start a search now, following NullPointerException is thrown:


WARN  2011-05-23 10:38:22,064 (Worker-15) org.eclipse.scout.rt.client.ui.form.fields.composer.AbstractComposerField - write op null
java.lang.NullPointerException
	at org.eclipse.scout.rt.client.ui.form.fields.composer.AbstractComposerField.storeXMLRec(AbstractComposerField.java:451)
	at org.eclipse.scout.rt.client.ui.form.fields.composer.AbstractComposerField.storeXMLRec(AbstractComposerField.java:443)
	at org.eclipse.scout.rt.client.ui.form.fields.composer.AbstractComposerField.storeXML(AbstractComposerField.java:429)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm$13.visitField(AbstractForm.java:1717)
	at org.eclipse.scout.rt.client.ui.form.fields.AbstractCompositeField.visitFields(AbstractCompositeField.java:192)
	at org.eclipse.scout.rt.client.ui.form.fields.AbstractCompositeField.visitFields(AbstractCompositeField.java:182)
	at org.eclipse.scout.rt.client.ui.form.fields.AbstractCompositeField.visitFields(AbstractCompositeField.java:182)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.visitFields(AbstractForm.java:914)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.storeXML(AbstractForm.java:1727)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.storeXML(AbstractForm.java:1673)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.getXML(AbstractForm.java:1656)
	at org.eclipse.scout.rt.client.services.common.bookmark.internal.BookmarkUtility.bmStoreTablePage(BookmarkUtility.java:555)
	at org.eclipse.scout.rt.client.services.common.bookmark.internal.BookmarkUtility.createBookmark(BookmarkUtility.java:379)
	at org.eclipse.scout.rt.client.ui.desktop.AbstractDesktop.createBookmark(AbstractDesktop.java:1190)
	at org.eclipse.scout.rt.client.ui.desktop.navigation.internal.UserNavigationHistory.addStep(UserNavigationHistory.java:54)
	at org.eclipse.scout.rt.client.ui.desktop.navigation.internal.NavigationHistoryService.addStep(NavigationHistoryService.java:33)
	at org.eclipse.scout.rt.client.ui.desktop.outline.pages.AbstractPageWithTable$1.formChanged(AbstractPageWithTable.java:339)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.fireFormEvent(AbstractForm.java:1956)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.fireFormStoreBefore(AbstractForm.java:1901)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.storeStateInternal(AbstractForm.java:1106)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.doSaveWithoutMarkerChange(AbstractForm.java:1399)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.handleSystemButtonEventInternal(AbstractForm.java:2249)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm$P_SystemButtonListener.buttonChanged(AbstractForm.java:2281)
	at org.eclipse.scout.rt.client.ui.form.fields.button.AbstractButton.fireButtonEvent(AbstractButton.java:301)
	at org.eclipse.scout.rt.client.ui.form.fields.button.AbstractButton.fireButtonClicked(AbstractButton.java:270)
	at org.eclipse.scout.rt.client.ui.form.fields.button.AbstractButton.doClick(AbstractButton.java:199)
	at org.eclipse.scout.rt.client.ui.form.fields.button.AbstractButton$P_UIFacade.fireButtonClickedFromUI(AbstractButton.java:313)
	at org.eclipse.scout.rt.ui.swt.form.fields.button.SwtScoutButton$3.run(SwtScoutButton.java:252)
	at org.eclipse.scout.rt.ui.swt.concurrency.SwtScoutSynchronizer$1.runVoid(SwtScoutSynchronizer.java:61)
	at org.eclipse.scout.rt.client.ClientJob.run(ClientJob.java:153)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
INFO  2011-05-23 10:38:22,080 (Worker-15) ch.post.pf.bap.ui.swt.core.services.BapExceptionHandlerService - Unexpected
ProcessingException[ProcessingStatus[ERROR code=0 Unexpected java.lang.NullPointerException]]
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.resetSearchFilter(AbstractForm.java:961)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.rebuildSearchFilter(AbstractForm.java:939)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.storeStateInternal(AbstractForm.java:1109)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.doSaveWithoutMarkerChange(AbstractForm.java:1399)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.handleSystemButtonEventInternal(AbstractForm.java:2249)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm$P_SystemButtonListener.buttonChanged(AbstractForm.java:2281)
	at org.eclipse.scout.rt.client.ui.form.fields.button.AbstractButton.fireButtonEvent(AbstractButton.java:301)
	at org.eclipse.scout.rt.client.ui.form.fields.button.AbstractButton.fireButtonClicked(AbstractButton.java:270)
	at org.eclipse.scout.rt.client.ui.form.fields.button.AbstractButton.doClick(AbstractButton.java:199)
	at org.eclipse.scout.rt.client.ui.form.fields.button.AbstractButton$P_UIFacade.fireButtonClickedFromUI(AbstractButton.java:313)
	at org.eclipse.scout.rt.ui.swt.form.fields.button.SwtScoutButton$3.run(SwtScoutButton.java:252)
	at org.eclipse.scout.rt.ui.swt.concurrency.SwtScoutSynchronizer$1.runVoid(SwtScoutSynchronizer.java:61)
	at org.eclipse.scout.rt.client.ClientJob.run(ClientJob.java:153)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Caused by: java.lang.NullPointerException
	at org.eclipse.scout.rt.client.ui.form.fields.composer.AbstractComposerField$Tree.exportTreeNodeData(AbstractComposerField.java:650)
	at org.eclipse.scout.rt.client.ui.basic.tree.AbstractTree.exportTreeNodeDataRec(AbstractTree.java:1985)
	at org.eclipse.scout.rt.client.ui.basic.tree.AbstractTree.exportTreeNodeDataRec(AbstractTree.java:1987)
	at org.eclipse.scout.rt.client.ui.basic.tree.AbstractTree.exportTreeData(AbstractTree.java:1979)
	at org.eclipse.scout.rt.client.ui.form.fields.composer.AbstractComposerField.exportFormFieldData(AbstractComposerField.java:272)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.exportFormData(AbstractForm.java:754)
	at ch.post.pf.bap.client.core.ui.searchforms.MarktinfosSearchForm.execResetSearchFilter(MarktinfosSearchForm.java:97)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.resetSearchFilter(AbstractForm.java:955)
	... 13 more
ERROR 2011-05-23 10:38:22,083 (main) ch.post.pf.gui.ocp.support.core.StatusTargetHandler - Error - ERROR - Fehler

Die ursprüngliche Fehlermeldung ist:
encountered ProcessingException on Unexpected
cause: NullPointerException - Unexpected
WARN  2011-05-23 10:38:22,087 (Worker-15) org.eclipse.scout.rt.client.ui.form.fields.composer.AbstractComposerField - write op null
java.lang.NullPointerException
	at org.eclipse.scout.rt.client.ui.form.fields.composer.AbstractComposerField.storeXMLRec(AbstractComposerField.java:451)
	at org.eclipse.scout.rt.client.ui.form.fields.composer.AbstractComposerField.storeXMLRec(AbstractComposerField.java:443)
	at org.eclipse.scout.rt.client.ui.form.fields.composer.AbstractComposerField.storeXML(AbstractComposerField.java:429)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm$13.visitField(AbstractForm.java:1717)
	at org.eclipse.scout.rt.client.ui.form.fields.AbstractCompositeField.visitFields(AbstractCompositeField.java:192)
	at org.eclipse.scout.rt.client.ui.form.fields.AbstractCompositeField.visitFields(AbstractCompositeField.java:182)
	at org.eclipse.scout.rt.client.ui.form.fields.AbstractCompositeField.visitFields(AbstractCompositeField.java:182)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.visitFields(AbstractForm.java:914)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.storeXML(AbstractForm.java:1727)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.storeXML(AbstractForm.java:1673)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.getXML(AbstractForm.java:1656)
	at org.eclipse.scout.rt.client.LargeMemoryPolicy.storeSearchFormState(LargeMemoryPolicy.java:57)
	at org.eclipse.scout.rt.client.AbstractMemoryPolicy.handlePageFormEvent(AbstractMemoryPolicy.java:165)
	at org.eclipse.scout.rt.client.AbstractMemoryPolicy$1.formChanged(AbstractMemoryPolicy.java:56)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.fireFormEvent(AbstractForm.java:1956)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.fireFormStoreAfter(AbstractForm.java:1915)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.storeStateInternal(AbstractForm.java:1129)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.doSaveWithoutMarkerChange(AbstractForm.java:1399)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm.handleSystemButtonEventInternal(AbstractForm.java:2249)
	at org.eclipse.scout.rt.client.ui.form.AbstractForm$P_SystemButtonListener.buttonChanged(AbstractForm.java:2281)
	at org.eclipse.scout.rt.client.ui.form.fields.button.AbstractButton.fireButtonEvent(AbstractButton.java:301)
	at org.eclipse.scout.rt.client.ui.form.fields.button.AbstractButton.fireButtonClicked(AbstractButton.java:270)
	at org.eclipse.scout.rt.client.ui.form.fields.button.AbstractButton.doClick(AbstractButton.java:199)
	at org.eclipse.scout.rt.client.ui.form.fields.button.AbstractButton$P_UIFacade.fireButtonClickedFromUI(AbstractButton.java:313)
	at org.eclipse.scout.rt.ui.swt.form.fields.button.SwtScoutButton$3.run(SwtScoutButton.java:252)
	at org.eclipse.scout.rt.ui.swt.concurrency.SwtScoutSynchronizer$1.runVoid(SwtScoutSynchronizer.java:61)
	at org.eclipse.scout.rt.client.ClientJob.run(ClientJob.java:153)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)
Comment 1 Christoph Thommen CLA 2011-05-24 06:28:23 EDT
Created attachment 196418 [details]
Composer Form
Comment 2 Christian Ulrich CLA 2011-06-06 12:17:42 EDT
Created attachment 197416 [details]
patch modifies SwtScoutTable to not listen to the Enter key anymore

In Swing environment this problem doesn't occur because the SwingScoutTable only listens to Space key and left mouse button but SwtScoutTable listens also to the Enter key.
This results in a table which unchecks the selected row immediatly after the form has been closed by the same key event which ends up in an NPE because Eclipse Scout expects an operator to be selected.

The attached patch resolves this issue by modifying the SwtScoutTable to not listen to the Enter key anymore, so it behaves just like the SwingScoutTable.
Comment 3 Ivan Motsch CLA 2011-06-09 12:14:41 EDT
This patch would break major functionality using the CR key.
It is a key feature of the table to listen to the CR key (in swt only solvable that way).
Swing also listens to VK_ENTER but using a Action on the InputMap.

Solution is done in the causing location at SwtScoutTable:863 
case SWT.KeyUp: {
  if (getScoutObject().isCheckable()) {

is changed by respecting already handler CR event to
case SWT.KeyUp: {
          if (event.doit && getScoutObject().isCheckable()) {
Comment 4 Matthias Zimmermann CLA 2011-10-10 12:32:22 EDT
shipped with scout 3.7.1