public void valueChanged(ITable source, String key, Object value, boolean isNew) {
   if (key.equals("~TYPE~") && value instanceof String) {
     type = TableTableType.getType((String) value);
     List<WidgetFactory> factories = widgetRegistry.getWidgets(type);
     for (int i = 0; i < factories.size(); ++i) {
       WidgetFactory factory = factories.get(i);
       if (factory instanceof TableWidgetFactory) {
         TableWidget widget = ((TableWidgetFactory) factory).createWidget(table);
         setWidget(widget);
         return;
       }
     }
   }
   setWidget(null);
   // TODO print cannot handle type
 }
 public Collection<WidgetMenuItem> getChangeToMenuItems() {
   List<WidgetMenuItem> changeItems = new ArrayList<WidgetMenuItem>();
   List<WidgetFactory> factories = widgetRegistry.getWidgets(type);
   for (int i = 0; i < factories.size(); ++i) {
     final WidgetFactory factory = factories.get(i);
     if (factory instanceof TableWidgetFactory) {
       changeItems.add(
           new WidgetMenuItem.Action(factory.getName()) {
             @Override
             public void execute() {
               TableWidget widget = ((TableWidgetFactory) factory).createWidget(table);
               setWidget(widget);
             }
           });
     }
   }
   return changeItems;
 }