import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Creates the shared state bean to be used in server to client
* communication.
- *
- * Subclasses should implement this method and return a new instance of the
- * correct state class.
- *
- * All configuration of the values of the state should be performed in
- * {@link #getState()}, not in {@link #createState()}.
+ * <p>
+ * By default a state object of the defined return type of
+ * {@link #getState()} is created. Subclasses can override this method and
+ * return a new instance of the correct state class but this should rarely
+ * be necessary.
+ * </p>
+ * <p>
+ * No configuration of the values of the state should be performed in
+ * {@link #createState()}.
*
* @since 7.0
*
* @return new shared state object
*/
protected ComponentState createState() {
+ try {
+ Method m = getClass().getMethod("getState", (Class[]) null);
+ Class<? extends ComponentState> type = (Class<? extends ComponentState>) m
+ .getReturnType();
+ return type.newInstance();
+ } catch (Exception e) {
+ getLogger().log(
+ Level.INFO,
+ "Error determining state object class for "
+ + getClass().getName());
+ }
+
+ // Fall back to ComponentState if detection fails for some reason.
return new ComponentState();
}
}
return connectorId;
}
+
+ private Logger getLogger() {
+ return Logger.getLogger(AbstractComponent.class.getName());
+ }
}
import com.vaadin.event.ComponentEventListener;
import com.vaadin.event.MouseEvents.ClickEvent;
import com.vaadin.terminal.Sizeable;
-import com.vaadin.terminal.gwt.client.ComponentState;
import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.ui.AbstractSplitPanelConnector.AbstractSplitPanelRPC;
import com.vaadin.terminal.gwt.client.ui.AbstractSplitPanelConnector.AbstractSplitPanelState;
return (AbstractSplitPanelState) super.getState();
}
- @Override
- protected ComponentState createState() {
- return new AbstractSplitPanelState();
- }
}
import com.vaadin.event.ShortcutAction.KeyCode;
import com.vaadin.event.ShortcutAction.ModifierKey;
import com.vaadin.event.ShortcutListener;
-import com.vaadin.terminal.gwt.client.ComponentState;
import com.vaadin.terminal.gwt.client.MouseEventDetails;
import com.vaadin.terminal.gwt.client.ui.ButtonConnector.ButtonServerRpc;
import com.vaadin.terminal.gwt.client.ui.ButtonState;
super.focus();
}
- @Override
- protected ComponentState createState() {
- return new ButtonState();
- }
-
@Override
public ButtonState getState() {
return (ButtonState) super.getState();