Read focusItem in GridLCA

399884: [Grid] getFocusItem always return null
https://bugs.eclipse.org/bugs/show_bug.cgi?id=399884
diff --git a/bundles/org.eclipse.rap.nebula.widgets.grid.snippets/src/org/eclipse/rap/nebula/widgets/grid/snippets/GridSnippet.java b/bundles/org.eclipse.rap.nebula.widgets.grid.snippets/src/org/eclipse/rap/nebula/widgets/grid/snippets/GridSnippet.java
index 1767588..a403e89 100644
--- a/bundles/org.eclipse.rap.nebula.widgets.grid.snippets/src/org/eclipse/rap/nebula/widgets/grid/snippets/GridSnippet.java
+++ b/bundles/org.eclipse.rap.nebula.widgets.grid.snippets/src/org/eclipse/rap/nebula/widgets/grid/snippets/GridSnippet.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2012 EclipseSource and others.
+ * Copyright (c) 2012, 2013 EclipseSource and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,6 +11,8 @@
 package org.eclipse.rap.nebula.widgets.grid.snippets;
 
 import java.util.Arrays;
+
+import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.nebula.widgets.grid.Grid;
 import org.eclipse.nebula.widgets.grid.GridColumn;
 import org.eclipse.nebula.widgets.grid.GridColumnGroup;
@@ -31,6 +33,7 @@
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
 
 @SuppressWarnings("serial")
@@ -54,6 +57,7 @@
     createShowColumnGroup( parent );
     createShowHeaderButton( parent );
     createShowFooterButton( parent );
+    createQueryFocusItem( parent );
   }
 
   @Override
@@ -345,6 +349,19 @@
     } );
   }
 
+  private void createQueryFocusItem( Composite parent ) {
+    Button button = new Button( parent, SWT.PUSH );
+    button.setText( "Query focusItem" );
+    button.addSelectionListener( new SelectionAdapter() {
+      @Override
+      public void widgetSelected( SelectionEvent e ) {
+        Shell shell = grid.getShell();
+        String msg = "Current focusItem: " + grid.getFocusItem();
+        MessageDialog.openInformation( shell, "Information", msg );
+      }
+    } );
+  }
+
   private void updateItemsText( int startIndex ) {
     for( int index = startIndex; index < grid.getItemCount(); index++ ) {
       GridItem item = grid.getItem( index );
diff --git a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA.java b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA.java
index 5874d50..72205bd 100644
--- a/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA.java
+++ b/bundles/org.eclipse.rap.nebula.widgets.grid/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2012 EclipseSource and others.
+ * Copyright (c) 2012, 2013 EclipseSource and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,9 +28,9 @@
 import org.eclipse.nebula.widgets.grid.GridItem;
 import org.eclipse.nebula.widgets.grid.internal.IGridAdapter;
 import org.eclipse.rap.rwt.RWT;
+import org.eclipse.rap.rwt.internal.protocol.ClientMessageConst;
 import org.eclipse.rap.rwt.internal.protocol.ClientObjectFactory;
 import org.eclipse.rap.rwt.internal.protocol.IClientObject;
-import org.eclipse.rap.rwt.internal.protocol.ClientMessageConst;
 import org.eclipse.rap.rwt.internal.protocol.ProtocolUtil;
 import org.eclipse.rap.rwt.internal.util.NumberFormatUtil;
 import org.eclipse.rap.rwt.lifecycle.AbstractWidgetLCA;
@@ -112,6 +112,7 @@
     readSelection( grid );
     readScrollLeft( grid );
     readTopItemIndex( grid );
+    readFocusItem( grid );
     readCellToolTipTextRequested( grid );
     processSelectionEvent( grid, ClientMessageConst.EVENT_SELECTION );
     processSelectionEvent( grid, ClientMessageConst.EVENT_DEFAULT_SELECTION );
@@ -235,6 +236,16 @@
     }
   }
 
+  private static void readFocusItem( Grid grid ) {
+    String value = WidgetLCAUtil.readPropertyValue( grid, "focusItem" );
+    if( value != null ) {
+      GridItem item = getItem( grid, value );
+      if( item != null ) {
+        grid.setFocusItem( item );
+      }
+    }
+  }
+
   ////////////////
   // Cell tooltips
 
diff --git a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA_Test.java b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA_Test.java
index 4cd33a9..3f1a974 100644
--- a/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA_Test.java
+++ b/tests/org.eclipse.rap.nebula.widgets.grid.test/src/org/eclipse/nebula/widgets/grid/internal/gridkit/GridLCA_Test.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2012 EclipseSource and others.
+ * Copyright (c) 2012, 2013 EclipseSource and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -25,6 +25,8 @@
 import java.util.List;
 import java.util.Map;
 
+import junit.framework.TestCase;
+
 import org.eclipse.nebula.widgets.grid.Grid;
 import org.eclipse.nebula.widgets.grid.GridColumn;
 import org.eclipse.nebula.widgets.grid.GridItem;
@@ -50,8 +52,6 @@
 import org.json.JSONArray;
 import org.json.JSONException;
 
-import junit.framework.TestCase;
-
 
 @SuppressWarnings("restriction")
 public class GridLCA_Test extends TestCase {
@@ -1135,6 +1135,15 @@
     assertNull( message.findListenOperation( grid, "SetData" ) );
   }
 
+  public void testReadFocusItem() {
+    GridItem[] items = createGridItems( grid, 3, 1 );
+
+    Fixture.fakeSetParameter( getId( grid ), "focusItem", getId( items[ 2 ] ) );
+    lca.readData( grid );
+
+    assertSame( items[ 2 ], grid.getFocusItem() );
+  }
+
   //////////////////
   // Helping methods