package org.vaadin.touchkit.gwt;
import java.util.Collection;
import java.util.HashSet;
import com.google.gwt.core.ext.typeinfo.JClassType;
import com.vaadin.client.ServerConnector;
import com.vaadin.client.ui.absolutelayout.AbsoluteLayoutConnector;
import com.vaadin.client.ui.accordion.AccordionConnector;
import com.vaadin.v7.client.ui.calendar.CalendarConnector;
import com.vaadin.v7.client.ui.combobox.ComboBoxConnector;
import com.vaadin.client.ui.customlayout.CustomLayoutConnector;
import com.vaadin.client.ui.gridlayout.GridLayoutConnector;
import com.vaadin.client.ui.menubar.MenuBarConnector;
import com.vaadin.client.ui.orderedlayout.HorizontalLayoutConnector;
import com.vaadin.client.ui.orderedlayout.VerticalLayoutConnector;
import com.vaadin.client.ui.panel.PanelConnector;
import com.vaadin.client.ui.popupview.PopupViewConnector;
import com.vaadin.v7.client.ui.richtextarea.RichTextAreaConnector;
import com.vaadin.client.ui.splitpanel.HorizontalSplitPanelConnector;
import com.vaadin.client.ui.splitpanel.VerticalSplitPanelConnector;
import com.vaadin.v7.client.ui.table.TableConnector;
import com.vaadin.client.ui.tabsheet.TabsheetConnector;
import com.vaadin.v7.client.ui.treetable.TreeTableConnector;
import com.vaadin.v7.client.ui.twincolselect.TwinColSelectConnector;
import com.vaadin.client.ui.window.WindowConnector;
import com.vaadin.server.widgetsetutils.ConnectorBundleLoaderFactory;
import com.vaadin.shared.ui.Connect.LoadStyle;
/**
* TouchKitWidgetMapGenerator enables lazy loading of some heavy widget classes
* that are rarely used in mobile devices. This way saves bandwidth and improves
* the loading time.
*
* Components for which the widgets are lazily loaded:
* <ul>
* <li>{@link com.vaadin.ui.VerticalLayout}</li>
* <li>{@link com.vaadin.ui.HorizontalLayout}</li>
* <li>{@link com.vaadin.ui.GridLayout}</li>
* <li>{@link com.vaadin.ui.AbsoluteLayout}</li>
* <li>{@link com.vaadin.ui.HorizontalSplitPanel}</li>
* <li>{@link com.vaadin.ui.VerticalSplitPanel}</li>
* <li>{@link com.vaadin.ui.Accordion}</li>
* <li>{@link com.vaadin.ui.ComboBox}</li>
* <li>{@link com.vaadin.ui.TabSheet}</li>
* <li>{@link com.vaadin.ui.MenuBar}</li>
* <li>{@link com.vaadin.ui.Panel}</li>
* <li>{@link com.vaadin.ui.Window}</li>
* <li>{@link com.vaadin.ui.RichTextArea}</li>
* <li>{@link com.vaadin.ui.TwinColSelect}</li>
* <li>{@link com.vaadin.ui.CustomLayout}</li>
* <li>{@link com.vaadin.ui.PopupView}</li>
* <li>{@link com.vaadin.ui.Calendar}</li>
* <li>{@link com.vaadin.ui.Table}</li>
* <li>{@link com.vaadin.ui.TreeTable}</li>
* </ul>
*/
public class TouchKitBundleLoaderFactory extends ConnectorBundleLoaderFactory {
Collection<String> lazyComponents = new HashSet<String>();
public TouchKitBundleLoaderFactory() {
add(VerticalLayoutConnector.class);
add(HorizontalLayoutConnector.class);
add(GridLayoutConnector.class);
add(AbsoluteLayoutConnector.class);
add(HorizontalSplitPanelConnector.class);
add(VerticalSplitPanelConnector.class);
add(AccordionConnector.class);
add(ComboBoxConnector.class);
add(TabsheetConnector.class);
add(MenuBarConnector.class);
add(PanelConnector.class);
add(WindowConnector.class);
add(RichTextAreaConnector.class);
add(TwinColSelectConnector.class);
add(CustomLayoutConnector.class);
add(PopupViewConnector.class);
add(CalendarConnector.class);
add(TableConnector.class);
add(TreeTableConnector.class);
}
private void add(Class<? extends ServerConnector> c) {
lazyComponents.add(c.getCanonicalName());
}
@Override
protected LoadStyle getLoadStyle(JClassType connectorType) {
if (lazyComponents.contains(connectorType.getQualifiedSourceName())) {
return LoadStyle.LAZY;
}
LoadStyle loadStyle = super.getLoadStyle(connectorType);
if (loadStyle == LoadStyle.DEFERRED) {
// with cache manifest everything is
// cached automatically anyways
loadStyle = LoadStyle.LAZY;
}
return loadStyle;
}
}