You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ConnectorClassBasedFactory.java 1.1KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. /*
  2. @VaadinApache2LicenseForJavaFiles@
  3. */
  4. package com.vaadin.terminal.gwt.client.ui;
  5. import java.util.HashMap;
  6. import java.util.Map;
  7. import com.vaadin.shared.Connector;
  8. public abstract class ConnectorClassBasedFactory<T> {
  9. public interface Creator<T> {
  10. public T create();
  11. }
  12. private Map<Class<? extends Connector>, Creator<? extends T>> creators = new HashMap<Class<? extends Connector>, Creator<? extends T>>();
  13. protected void addCreator(Class<? extends Connector> cls,
  14. Creator<? extends T> creator) {
  15. creators.put(cls, creator);
  16. }
  17. /**
  18. * Creates a widget using GWT.create for the given connector, based on its
  19. * {@link AbstractComponentConnector#getWidget()} return type.
  20. *
  21. * @param connector
  22. * @return
  23. */
  24. public T create(Class<? extends Connector> connector) {
  25. Creator<? extends T> foo = creators.get(connector);
  26. if (foo == null) {
  27. throw new RuntimeException(getClass().getName()
  28. + " could not find a creator for connector of type "
  29. + connector.getName());
  30. }
  31. return foo.create();
  32. }
  33. }