// Path: componentrenderer/src/main/java/de/datenhahn/vaadin/componentrenderer/FocusPreserveExtension.java
// public class FocusPreserveExtension extends Grid.AbstractGridExtension {
//     private final FocusPreservingRefreshClientRpc focusRpc = getRpcProxy(FocusPreservingRefreshClientRpc.class);
// 
//     private FocusPreserveExtension(final Grid grid) {
//         super.extend(grid);
//     }
// 
//     public static FocusPreserveExtension extend(Grid grid) {
//         return new FocusPreserveExtension(grid);
//     }
// 
//     /**
//      * Saves the grid's current focus in this extension's internal state.
//      */
//     public void saveFocus() {
//         focusRpc.saveFocus();
//     }
// 
//     /**
//      * Restores the grid's focus from  extension's internal state.
//      */
//     public void restoreFocus() {
//         focusRpc.restoreFocus();
//     }
// }
// 
// Path: componentrenderer/src/main/java/de/datenhahn/vaadin/componentrenderer/grid/header/ComponentHeaderGenerator.java
// public interface ComponentHeaderGenerator extends HeaderGenerator<Component> {
// 
//     @Override
//     Component getHeader(Object propertyId);
// }
// 
// Path: componentrenderer/src/main/java/de/datenhahn/vaadin/componentrenderer/grid/header/HtmlHeaderGenerator.java
// public interface HtmlHeaderGenerator extends HeaderGenerator<String> {
// 
//     @Override
//     String getHeader(Object propertyId);
// }
// 
// Path: componentrenderer/src/main/java/de/datenhahn/vaadin/componentrenderer/grid/header/TextHeaderGenerator.java
// public interface TextHeaderGenerator extends HeaderGenerator<String> {
// 
//     @Override
//     String getHeader(Object propertyId);
// }


import com.vaadin.v7.data.util.BeanItemContainer;
import com.vaadin.v7.data.util.GeneratedPropertyContainer;
import com.vaadin.v7.ui.Grid;
import de.datenhahn.vaadin.componentrenderer.FocusPreserveExtension;
import de.datenhahn.vaadin.componentrenderer.grid.header.ComponentHeaderGenerator;
import de.datenhahn.vaadin.componentrenderer.grid.header.HtmlHeaderGenerator;
import de.datenhahn.vaadin.componentrenderer.grid.header.TextHeaderGenerator;
import java.util.Collection;
    public Grid.Column  addComponentColumn(Object propertyId, ComponentGenerator<T> generator) {
        return componentGridDecorator.addComponentColumn(propertyId, generator);
    }

    /**
     * Refreshes the grid preserving its current cell focus.
     */
    public ComponentGrid<T>  refresh() {
        componentGridDecorator.refresh();
        return this;
    }

    /**
     * Remove all items from the underlying {@link BeanItemContainer} and add
     * the new beans.
     *
     * @param beans a collection of beans
     * @return the grid for method chaining
     */
    public ComponentGrid<T>  setRows(Collection<T> beans) {
        componentGridDecorator.setRows(beans);
        return this;
    }
    /**
     * Generates component header fields using the passed {@link ComponentHeaderGenerator} and
     * sets them to the columns.
     *
     * @param generator the header generator
     * @return the grid for method chaining
     */
// Path: componentrenderer/src/main/java/de/datenhahn/vaadin/componentrenderer/FocusPreserveExtension.java
// public class FocusPreserveExtension extends Grid.AbstractGridExtension {
//     private final FocusPreservingRefreshClientRpc focusRpc = getRpcProxy(FocusPreservingRefreshClientRpc.class);
// 
//     private FocusPreserveExtension(final Grid grid) {
//         super.extend(grid);
//     }
// 
//     public static FocusPreserveExtension extend(Grid grid) {
//         return new FocusPreserveExtension(grid);
//     }
// 
//     /**
//      * Saves the grid's current focus in this extension's internal state.
//      */
//     public void saveFocus() {
//         focusRpc.saveFocus();
//     }
// 
//     /**
//      * Restores the grid's focus from  extension's internal state.
//      */
//     public void restoreFocus() {
//         focusRpc.restoreFocus();
//     }
// }
// 
// Path: componentrenderer/src/main/java/de/datenhahn/vaadin/componentrenderer/grid/header/ComponentHeaderGenerator.java
// public interface ComponentHeaderGenerator extends HeaderGenerator<Component> {
// 
//     @Override
//     Component getHeader(Object propertyId);
// }
// 
// Path: componentrenderer/src/main/java/de/datenhahn/vaadin/componentrenderer/grid/header/HtmlHeaderGenerator.java
// public interface HtmlHeaderGenerator extends HeaderGenerator<String> {
// 
//     @Override
//     String getHeader(Object propertyId);
// }
// 
// Path: componentrenderer/src/main/java/de/datenhahn/vaadin/componentrenderer/grid/header/TextHeaderGenerator.java
// public interface TextHeaderGenerator extends HeaderGenerator<String> {
// 
//     @Override
//     String getHeader(Object propertyId);
// }


// Path: componentrenderer/src/main/java/de/datenhahn/vaadin/componentrenderer/grid/ComponentGrid.java
import com.vaadin.v7.data.util.BeanItemContainer;
import com.vaadin.v7.data.util.GeneratedPropertyContainer;
import com.vaadin.v7.ui.Grid;
import de.datenhahn.vaadin.componentrenderer.FocusPreserveExtension;
import de.datenhahn.vaadin.componentrenderer.grid.header.ComponentHeaderGenerator;
import de.datenhahn.vaadin.componentrenderer.grid.header.HtmlHeaderGenerator;
import de.datenhahn.vaadin.componentrenderer.grid.header.TextHeaderGenerator;
import java.util.Collection;

    public Grid.Column  addComponentColumn(Object propertyId, ComponentGenerator<T> generator) {
        return componentGridDecorator.addComponentColumn(propertyId, generator);
    }

    /**
     * Refreshes the grid preserving its current cell focus.
     */
    public ComponentGrid<T>  refresh() {
        componentGridDecorator.refresh();
        return this;
    }

    /**
     * Remove all items from the underlying {@link BeanItemContainer} and add
     * the new beans.
     *
     * @param beans a collection of beans
     * @return the grid for method chaining
     */
    public ComponentGrid<T>  setRows(Collection<T> beans) {
        componentGridDecorator.setRows(beans);
        return this;
    }
    /**
     * Generates component header fields using the passed {@link ComponentHeaderGenerator} and
     * sets them to the columns.
     *
     * @param generator the header generator
     * @return the grid for method chaining
     */
    public ComponentGrid<T> generateHeaders(ComponentHeaderGenerator generator) {