PivotBuilderCustomizer.java
001 /*
002  * Copyright 2008-2015 the original author or authors.
003  *
004  * Licensed under the Apache License, Version 2.0 (the "License");
005  * you may not use this file except in compliance with the License.
006  * You may obtain a copy of the License at
007  *
008  *     http://www.apache.org/licenses/LICENSE-2.0
009  *
010  * Unless required by applicable law or agreed to in writing, software
011  * distributed under the License is distributed on an "AS IS" BASIS,
012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013  * See the License for the specific language governing permissions and
014  * limitations under the License.
015  */
016 package griffon.builder.pivot;
017 
018 import griffon.builder.pivot.factory.*;
019 import griffon.exceptions.PropertyException;
020 import griffon.inject.DependsOn;
021 import griffon.pivot.support.PivotAction;
022 import griffon.pivot.support.adapters.*;
023 import groovy.lang.Closure;
024 import groovy.util.Factory;
025 import groovy.util.FactoryBuilderSupport;
026 import org.apache.pivot.wtk.*;
027 import org.apache.pivot.wtk.content.ButtonDataRenderer;
028 import org.apache.pivot.wtk.content.CalendarButtonDataRenderer;
029 import org.apache.pivot.wtk.content.LinkButtonDataRenderer;
030 import org.apache.pivot.wtk.content.ListButtonColorItemRenderer;
031 import org.apache.pivot.wtk.content.ListButtonDataRenderer;
032 import org.apache.pivot.wtk.content.MenuBarItemDataRenderer;
033 import org.apache.pivot.wtk.content.MenuButtonDataRenderer;
034 import org.apache.pivot.wtk.content.MenuItemDataRenderer;
035 import org.apache.pivot.wtk.effects.BaselineDecorator;
036 import org.apache.pivot.wtk.effects.BlurDecorator;
037 import org.apache.pivot.wtk.effects.ClipDecorator;
038 import org.apache.pivot.wtk.effects.DropShadowDecorator;
039 import org.apache.pivot.wtk.effects.FadeDecorator;
040 import org.apache.pivot.wtk.effects.GrayscaleDecorator;
041 import org.apache.pivot.wtk.effects.OverlayDecorator;
042 import org.apache.pivot.wtk.effects.ReflectionDecorator;
043 import org.apache.pivot.wtk.effects.RotationDecorator;
044 import org.apache.pivot.wtk.effects.SaturationDecorator;
045 import org.apache.pivot.wtk.effects.ScaleDecorator;
046 import org.apache.pivot.wtk.effects.ShadeDecorator;
047 import org.apache.pivot.wtk.effects.TagDecorator;
048 import org.apache.pivot.wtk.effects.TranslationDecorator;
049 import org.apache.pivot.wtk.effects.WatermarkDecorator;
050 import org.apache.pivot.wtk.effects.easing.Circular;
051 import org.apache.pivot.wtk.effects.easing.Cubic;
052 import org.apache.pivot.wtk.effects.easing.Exponential;
053 import org.apache.pivot.wtk.effects.easing.Linear;
054 import org.apache.pivot.wtk.effects.easing.Quadratic;
055 import org.apache.pivot.wtk.effects.easing.Quartic;
056 import org.apache.pivot.wtk.effects.easing.Quintic;
057 import org.apache.pivot.wtk.effects.easing.Sine;
058 import org.apache.pivot.wtk.media.Image;
059 import org.codehaus.griffon.runtime.groovy.view.AbstractBuilderCustomizer;
060 import org.codehaus.groovy.runtime.MethodClosure;
061 
062 import javax.inject.Named;
063 import java.util.LinkedHashMap;
064 import java.util.Map;
065 
066 import static griffon.util.CollectionUtils.newList;
067 import static griffon.util.GriffonClassUtils.getPropertyValue;
068 import static griffon.util.GriffonClassUtils.setPropertyValue;
069 
070 /**
071  * @author Andres Almiray
072  * @since 2.0.0
073  */
074 @Named("pivot")
075 @DependsOn({"core"})
076 @SuppressWarnings("rawtypes")
077 public class PivotBuilderCustomizer extends AbstractBuilderCustomizer {
078     private final Map<String, Factory> factories = new LinkedHashMap<>();
079 
080     @SuppressWarnings("unchecked")
081     public PivotBuilderCustomizer() {
082         // PivotUtils.enhanceClasses();
083 
084         // -- griffon
085         registerFactory("application", new ApplicationFactory());
086 
087         // -- support
088         registerPivotBeanFactory("action", PivotAction.class);
089         registerFactory("actions", new JavaCollectionFactory());
090         registerFactory("noparent", new JavaCollectionFactory());
091         registerFactory("bxml", new BxmlFactory());
092         registerFactory("buttonGroup", new ButtonGroupFactory());
093 
094         registerFactory("dimensions", new PairFactory(Dimensions.class, "width", "height"));
095         registerFactory("point", new PairFactory(Point.class, "x", "y"));
096         registerFactory("span", new PairFactory(Span.class, "start", "end"));
097         registerFactory("insets", new InsetsFactory());
098         registerFactory("bounds", new BoundsFactory());
099 
100         registerFactory("widget", new WidgetFactory(Component.class, false));
101         registerFactory("container", new WidgetFactory(Container.class, false));
102         registerFactory("bean", new WidgetFactory(Object.class, true));
103 
104         // -- widgets
105         registerPivotComponentFactory("activityIndicator", ActivityIndicator.class);
106         registerPivotComponentFactory("fileBrowser", FileBrowser.class);
107         registerFactory("label", new TextComponentFactory(Label.class));
108         registerFactory("meter", new TextComponentFactory(Meter.class));
109         registerPivotComponentFactory("separator", Separator.class);
110         registerFactory("textArea", new TextComponentFactory(TextArea.class));
111         registerFactory("textInput", new TextComponentFactory(TextInput.class));
112 
113         registerFactory("slider", new SliderFactory());
114         registerPivotComponentFactory("spinner", Spinner.class);
115         registerFactory("numericSpinnerData", new NumericSpinnerDataFactory());
116         registerFactory("calendarDateSpinnerData", new CalendarDateSpinnerDataFactory());
117         registerPivotComponentFactory("scrollBar", ScrollBar.class);
118         registerFactory("scrollBarScope", new ScrollBarScopeFactory());
119 
120         // -- views
121         registerPivotComponentFactory("listView", ListView.class);
122         registerFactory("imageView", new ImageViewFactory());
123         // registerPivotComponentFactory("movieView", MovieView)
124         // registerPivotComponentFactory("tableView", TableView)
125         // registerPivotComponentFactory("tableViewHeader", TableViewHeader)
126         // registerPivotComponentFactory("treeView", TreeView)
127 
128         // -- buttons
129         registerFactory("buttonData", new ButtonDataFactory());
130         registerFactory("calendarButton", new ButtonFactory(CalendarButton.class));
131         registerFactory("checkbox", new ButtonFactory(Checkbox.class));
132         registerFactory("colorChooserButton", new ButtonFactory(ColorChooserButton.class));
133         registerFactory("linkButton", new ButtonFactory(LinkButton.class));
134         registerFactory("listButton", new ButtonFactory(ListButton.class));
135         registerFactory("menuButton", new ButtonFactory(MenuButton.class));
136         Factory button = new ButtonFactory(PushButton.class);
137         registerFactory("button", button);
138         registerFactory("pushButton", button);
139         registerFactory("radioButton", new ButtonFactory(RadioButton.class));
140 
141         registerFactory("buttonDataRenderer", new ButtonDataRendererFactory(ButtonDataRenderer.class));
142         registerFactory("calendarButtonDataRenderer", new ButtonDataRendererFactory(CalendarButtonDataRenderer.class));
143         registerFactory("linkButtonDataRenderer", new ButtonDataRendererFactory(LinkButtonDataRenderer.class));
144         registerFactory("listButtonColorItemRenderer", new ButtonDataRendererFactory(ListButtonColorItemRenderer.class));
145         registerFactory("listButtonDataRenderer", new ButtonDataRendererFactory(ListButtonDataRenderer.class));
146         registerFactory("menuButtonDataRenderer", new ButtonDataRendererFactory(MenuButtonDataRenderer.class));
147         registerFactory("buttonDataRenderer", new ButtonDataRendererFactory(ButtonDataRenderer.class));
148 
149         // -- menus
150         registerFactory("menu", new MenuFactory());
151         registerFactory("menuItem", new MenuItemFactory());
152         registerFactory("menuBar", new MenuBarFactory());
153         registerFactory("menuBarItem", new MenuBarItemFactory());
154         registerPivotComponentFactory("menuPopup", MenuPopup.class);
155         registerFactory("menuBarItemDataRenderer", new ButtonDataRendererFactory(MenuBarItemDataRenderer.class));
156         registerFactory("menuItemDataRenderer", new ButtonDataRendererFactory(MenuItemDataRenderer.class));
157 
158         // -- panes
159         Factory hbox = new BoxPaneFactory(Orientation.HORIZONTAL);
160         registerFactory("box", hbox);
161         registerFactory("hbox", hbox);
162         registerFactory("vbox", new BoxPaneFactory(Orientation.VERTICAL));
163         registerPivotContainerFactory("boxPane", BoxPane.class);
164         registerPivotContainerFactory("cardPane", CardPane.class);
165         registerPivotContainerFactory("flowPane", FlowPane.class);
166         registerFactory("gridPane", new GridPaneFactory());
167         registerFactory("gridRow", new GridPaneRowFactory());
168         registerPivotContainerFactory("gridFiller", GridPane.Filler.class);
169         registerFactory("scrollPane", new ScrollPaneFactory());
170         registerFactory("splitPane", new SplitPaneFactory());
171         registerPivotContainerFactory("stackPane", StackPane.class);
172         registerFactory("tabPane", new TabPaneFactory());
173         registerFactory("tablePane", new TablePaneFactory());
174         registerFactory("tablePaneColumn", new TablePaneColumnFactory());
175         registerFactory("tablePaneRow", new TablePaneRowFactory());
176         registerPivotContainerFactory("tablePaneFiller", TablePane.Filler.class);
177 
178         // -- containers
179         registerFactory("accordion", new AccordionFactory());
180         registerPivotContainerFactory("border", Border.class, true);
181         registerPivotContainerFactory("calendar", Calendar.class);
182         registerPivotContainerFactory("colorChooser", ColorChooser.class);
183         registerPivotContainerFactory("expander", Expander.class, true);
184         registerPivotComponentFactory("form", Form.class);
185         registerFactory("formSection", new FormSectionFactory());
186         registerFactory("formFlag", new FormFlagFactory());
187         registerPivotContainerFactory("panel", Panel.class);
188         registerFactory("panorama", new ViewportFactory(Panorama.class));
189         registerFactory("rollup", new RollupFactory());
190 
191         // -- windows
192         // registerPivotContainerFactory("alert", Alert)
193         // registerPivotContainerFactory("prompt", Prompt)
194         registerPivotContainerFactory("dialog", Dialog.class, true);
195         registerPivotContainerFactory("frame", Frame.class, true);
196         registerFactory("fileBrowserSheet", new FileBrowserSheetFactory());
197         registerPivotContainerFactory("palette", Palette.class, true);
198         registerPivotContainerFactory("sheet", Sheet.class, true);
199         registerFactory("tooltip", new TextComponentFactory(Tooltip.class));
200         registerPivotContainerFactory("window", Window.class, true);
201 
202         // -- effects
203         registerPivotBeanFactory("baselineDecorator", BaselineDecorator.class);
204         registerPivotBeanFactory("blurDecorator", BlurDecorator.class);
205         registerPivotBeanFactory("clipDecorator", ClipDecorator.class);
206         registerPivotBeanFactory("dropShadowDecorator", DropShadowDecorator.class);
207         registerPivotBeanFactory("fadeDecorator", FadeDecorator.class);
208         registerPivotBeanFactory("grayscaleDecorator", GrayscaleDecorator.class);
209         registerPivotBeanFactory("reflectionDecorator", ReflectionDecorator.class);
210         registerPivotBeanFactory("rotationDecorator", RotationDecorator.class);
211         registerPivotBeanFactory("saturationDecorator", SaturationDecorator.class);
212         registerPivotBeanFactory("scaleDecorator", ScaleDecorator.class);
213         registerPivotBeanFactory("shadeDecorator", ShadeDecorator.class);
214         registerPivotBeanFactory("translationDecorator", TranslationDecorator.class);
215         registerFactory("overlayDecorator", new SingleElementContainerFactory(OverlayDecorator.class, "component", Component.class));
216         registerFactory("tagDecorator", new SingleElementContainerFactory(TagDecorator.class, "tag", Visual.class));
217         registerFactory("watermarkDecorator", new SingleElementContainerFactory(WatermarkDecorator.class, "image", Image.class));
218 
219         registerBeanFactory("easingCircular", Circular.class);
220         registerBeanFactory("easingCubic", Cubic.class);
221         registerBeanFactory("easingExponential", Exponential.class);
222         registerBeanFactory("easingLinear", Linear.class);
223         registerBeanFactory("easingQuadratic", Quadratic.class);
224         registerBeanFactory("easingQuartic", Quartic.class);
225         registerBeanFactory("easingQuintic", Quintic.class);
226         registerBeanFactory("easingSine", Sine.class);
227 
228         registerFactory("picture", new PictureFactory());
229 
230         // -- listeners
231         registerFactory("accordionListener", new AdapterFactory(AccordionAdapter.class));
232         registerFactory("accordionAttributeListener", new AdapterFactory(AccordionAttributeAdapter.class));
233         registerFactory("accordionSelectionListener", new AdapterFactory(AccordionSelectionAdapter.class));
234         registerFactory("actionListener", new AdapterFactory(ActionAdapter.class));
235         registerFactory("actionClassListener", new AdapterFactory(ActionClassAdapter.class));
236         registerFactory("activityIndicatorListener", new AdapterFactory(ActivityIndicatorAdapter.class));
237         registerFactory("alertListener", new AdapterFactory(AlertAdapter.class));
238         registerFactory("blockListener", new AdapterFactory(BlockAdapter.class));
239         registerFactory("borderListener", new AdapterFactory(BorderAdapter.class));
240         registerFactory("boxPaneListener", new AdapterFactory(BoxPaneAdapter.class));
241         registerFactory("bulletedListListener", new AdapterFactory(BulletedListAdapter.class));
242         registerFactory("buttonListener", new AdapterFactory(ButtonAdapter.class));
243         registerFactory("buttonBindingListener", new AdapterFactory(ButtonBindingAdapter.class));
244         registerFactory("buttonGroupListener", new AdapterFactory(ButtonGroupAdapter.class));
245         registerFactory("buttonPressListener", new AdapterFactory(ButtonPressAdapter.class));
246         registerFactory("buttonStateListener", new AdapterFactory(ButtonStateAdapter.class));
247         registerFactory("calendarListener", new AdapterFactory(CalendarAdapter.class));
248         registerFactory("calendarBindingListener", new AdapterFactory(CalendarBindingAdapter.class));
249         registerFactory("calendarButtonListener", new AdapterFactory(CalendarButtonAdapter.class));
250         registerFactory("calendarButtonBindingListener", new AdapterFactory(CalendarButtonBindingAdapter.class));
251         registerFactory("calendarButtonSelectionListener", new AdapterFactory(CalendarButtonSelectionAdapter.class));
252         registerFactory("calendarSelectionListener", new AdapterFactory(CalendarSelectionAdapter.class));
253         registerFactory("cardPaneListener", new AdapterFactory(CardPaneAdapter.class));
254         registerFactory("clipboardContentListener", new AdapterFactory(ClipboardContentAdapter.class));
255         registerFactory("colorChooserBindingListener", new AdapterFactory(ColorChooserBindingAdapter.class));
256         registerFactory("colorChooserButtonBindingListener", new AdapterFactory(ColorChooserButtonBindingAdapter.class));
257         registerFactory("colorChooserButtonSelectionListener", new AdapterFactory(ColorChooserButtonSelectionAdapter.class));
258         registerFactory("colorChooserSelectionListener", new AdapterFactory(ColorChooserSelectionAdapter.class));
259         registerFactory("componentListener", new AdapterFactory(ComponentAdapter.class));
260         registerFactory("componentClassListener", new AdapterFactory(ComponentClassAdapter.class));
261         registerFactory("componentDataListener", new AdapterFactory(ComponentDataAdapter.class));
262         registerFactory("componentDecoratorListener", new AdapterFactory(ComponentDecoratorAdapter.class));
263         registerFactory("componentKeyListener", new AdapterFactory(ComponentKeyAdapter.class));
264         registerFactory("componentMouseListener", new AdapterFactory(ComponentMouseAdapter.class));
265         registerFactory("componentMouseButtonListener", new AdapterFactory(ComponentMouseButtonAdapter.class));
266         registerFactory("componentMouseWheelListener", new AdapterFactory(ComponentMouseWheelAdapter.class));
267         registerFactory("componentNodeListener", new AdapterFactory(ComponentNodeAdapter.class));
268         registerFactory("componentStateListener", new AdapterFactory(ComponentStateAdapter.class));
269         registerFactory("componentStyleListener", new AdapterFactory(ComponentStyleAdapter.class));
270         registerFactory("componentTooltipListener", new AdapterFactory(ComponentTooltipAdapter.class));
271         registerFactory("containerListener", new AdapterFactory(ContainerAdapter.class));
272         registerFactory("containerMouseListener", new AdapterFactory(ContainerMouseAdapter.class));
273         registerFactory("dialogListener", new AdapterFactory(DialogAdapter.class));
274         registerFactory("dialogCloseListener", new AdapterFactory(DialogCloseAdapter.class));
275         registerFactory("dialogStateListener", new AdapterFactory(DialogStateAdapter.class));
276         registerFactory("elementListener", new AdapterFactory(ElementAdapter.class));
277         registerFactory("expanderListener", new AdapterFactory(ExpanderAdapter.class));
278         registerFactory("fileBrowserListener", new AdapterFactory(FileBrowserAdapter.class));
279         registerFactory("fileBrowserSheetListener", new AdapterFactory(FileBrowserSheetAdapter.class));
280         registerFactory("fillPaneListener", new AdapterFactory(FillPaneAdapter.class));
281         registerFactory("formListener", new AdapterFactory(FormAdapter.class));
282         registerFactory("formAttributeListener", new AdapterFactory(FormAttributeAdapter.class));
283         registerFactory("frameListener", new AdapterFactory(FrameAdapter.class));
284         registerFactory("gridPaneListener", new AdapterFactory(GridPaneAdapter.class));
285         registerFactory("griffonPivotListener", new AdapterFactory(GriffonPivotAdapter.class));
286         registerFactory("imageListener", new AdapterFactory(ImageAdapter.class));
287         registerFactory("imageNodeListener", new AdapterFactory(ImageNodeAdapter.class));
288         registerFactory("imageViewListener", new AdapterFactory(ImageViewAdapter.class));
289         registerFactory("imageViewBindingListener", new AdapterFactory(ImageViewBindingAdapter.class));
290         registerFactory("labelListener", new AdapterFactory(LabelAdapter.class));
291         registerFactory("labelBindingListener", new AdapterFactory(LabelBindingAdapter.class));
292         registerFactory("listButtonListener", new AdapterFactory(ListButtonAdapter.class));
293         registerFactory("listButtonBindingListener", new AdapterFactory(ListButtonBindingAdapter.class));
294         registerFactory("listButtonItemListener", new AdapterFactory(ListButtonItemAdapter.class));
295         registerFactory("listButtonSelectionListener", new AdapterFactory(ListButtonSelectionAdapter.class));
296         registerFactory("listViewListener", new AdapterFactory(ListViewAdapter.class));
297         registerFactory("listViewBindingListener", new AdapterFactory(ListViewBindingAdapter.class));
298         registerFactory("listViewItemListener", new AdapterFactory(ListViewItemAdapter.class));
299         registerFactory("listViewItemStateListener", new AdapterFactory(ListViewItemStateAdapter.class));
300         registerFactory("listViewSelectionListener", new AdapterFactory(ListViewSelectionAdapter.class));
301         registerFactory("menuListener", new AdapterFactory(MenuAdapter.class));
302         registerFactory("menuBarListener", new AdapterFactory(MenuBarAdapter.class));
303         registerFactory("menuButtonListener", new AdapterFactory(MenuButtonAdapter.class));
304         registerFactory("menuItemSelectionListener", new AdapterFactory(MenuItemSelectionAdapter.class));
305         registerFactory("menuPopupListener", new AdapterFactory(MenuPopupAdapter.class));
306         registerFactory("menuPopupStateListener", new AdapterFactory(MenuPopupStateAdapter.class));
307         registerFactory("meterListener", new AdapterFactory(MeterAdapter.class));
308         registerFactory("movieListener", new AdapterFactory(MovieAdapter.class));
309         registerFactory("movieViewListener", new AdapterFactory(MovieViewAdapter.class));
310         registerFactory("nodeListener", new AdapterFactory(NodeAdapter.class));
311         registerFactory("numberedListListener", new AdapterFactory(NumberedListAdapter.class));
312         registerFactory("promptListener", new AdapterFactory(PromptAdapter.class));
313         registerFactory("rollupListener", new AdapterFactory(RollupAdapter.class));
314         registerFactory("rollupStateListener", new AdapterFactory(RollupStateAdapter.class));
315         registerFactory("scrollBarListener", new AdapterFactory(ScrollBarAdapter.class));
316         registerFactory("scrollBarValueListener", new AdapterFactory(ScrollBarValueAdapter.class));
317         registerFactory("scrollPaneListener", new AdapterFactory(ScrollPaneAdapter.class));
318         registerFactory("separatorListener", new AdapterFactory(SeparatorAdapter.class));
319         registerFactory("sheetCloseListener", new AdapterFactory(SheetCloseAdapter.class));
320         registerFactory("sheetStateListener", new AdapterFactory(SheetStateAdapter.class));
321         registerFactory("sliderListener", new AdapterFactory(SliderAdapter.class));
322         registerFactory("sliderValueListener", new AdapterFactory(SliderValueAdapter.class));
323         registerFactory("spinnerListener", new AdapterFactory(SpinnerAdapter.class));
324         registerFactory("spinnerBindingListener", new AdapterFactory(SpinnerBindingAdapter.class));
325         registerFactory("spinnerItemListener", new AdapterFactory(SpinnerItemAdapter.class));
326         registerFactory("spinnerSelectionListener", new AdapterFactory(SpinnerSelectionAdapter.class));
327         registerFactory("splitPaneListener", new AdapterFactory(SplitPaneAdapter.class));
328         registerFactory("suggestionPopupListener", new AdapterFactory(SuggestionPopupAdapter.class));
329         registerFactory("suggestionPopupCloseListener", new AdapterFactory(SuggestionPopupCloseAdapter.class));
330         registerFactory("suggestionPopupItemListener", new AdapterFactory(SuggestionPopupItemAdapter.class));
331         registerFactory("suggestionPopupSelectionListener", new AdapterFactory(SuggestionPopupSelectionAdapter.class));
332         registerFactory("suggestionPopupStateListener", new AdapterFactory(SuggestionPopupStateAdapter.class));
333         registerFactory("tablePaneListener", new AdapterFactory(TablePaneAdapter.class));
334         registerFactory("tablePaneAttributeListener", new AdapterFactory(TablePaneAttributeAdapter.class));
335         registerFactory("tableViewListener", new AdapterFactory(TableViewAdapter.class));
336         registerFactory("tableViewBindingListener", new AdapterFactory(TableViewBindingAdapter.class));
337         registerFactory("tableViewColumnListener", new AdapterFactory(TableViewColumnAdapter.class));
338         registerFactory("tableViewHeaderListener", new AdapterFactory(TableViewHeaderAdapter.class));
339         registerFactory("tableViewHeaderPressListener", new AdapterFactory(TableViewHeaderPressAdapter.class));
340         registerFactory("tableViewRowListener", new AdapterFactory(TableViewRowAdapter.class));
341         registerFactory("tableViewSelectionListener", new AdapterFactory(TableViewSelectionAdapter.class));
342         registerFactory("tableViewSortListener", new AdapterFactory(TableViewSortAdapter.class));
343         registerFactory("tabPaneListener", new AdapterFactory(TabPaneAdapter.class));
344         registerFactory("tabPaneAttributeListener", new AdapterFactory(TabPaneAttributeAdapter.class));
345         registerFactory("tabPaneSelectionListener", new AdapterFactory(TabPaneSelectionAdapter.class));
346         registerFactory("textAreaListener", new AdapterFactory(TextAreaAdapter.class));
347         registerFactory("textAreaBindingListener", new AdapterFactory(TextAreaBindingAdapter.class));
348         registerFactory("textAreaContentListener", new AdapterFactory(TextAreaContentAdapter.class));
349         registerFactory("textAreaSelectionListener", new AdapterFactory(TextAreaSelectionAdapter.class));
350         registerFactory("textInputListener", new AdapterFactory(TextInputAdapter.class));
351         registerFactory("textInputBindingListener", new AdapterFactory(TextInputBindingAdapter.class));
352         registerFactory("textInputContentListener", new AdapterFactory(TextInputContentAdapter.class));
353         registerFactory("textInputSelectionListener", new AdapterFactory(TextInputSelectionAdapter.class));
354         registerFactory("textNodeListener", new AdapterFactory(TextNodeAdapter.class));
355         registerFactory("textPaneListener", new AdapterFactory(TextPaneAdapter.class));
356         registerFactory("textPaneCharacterListener", new AdapterFactory(TextPaneCharacterAdapter.class));
357         registerFactory("textPaneSelectionListener", new AdapterFactory(TextPaneSelectionAdapter.class));
358         registerFactory("transitionListener", new AdapterFactory(TransitionAdapter.class));
359         registerFactory("treeViewListener", new AdapterFactory(TreeViewAdapter.class));
360         registerFactory("treeViewBranchListener", new AdapterFactory(TreeViewBranchAdapter.class));
361         registerFactory("treeViewNodeListener", new AdapterFactory(TreeViewNodeAdapter.class));
362         registerFactory("treeViewNodeStateListener", new AdapterFactory(TreeViewNodeStateAdapter.class));
363         registerFactory("treeViewSelectionListener", new AdapterFactory(TreeViewSelectionAdapter.class));
364         registerFactory("viewportListener", new AdapterFactory(ViewportAdapter.class));
365         registerFactory("windowActionMappingListener", new AdapterFactory(WindowActionMappingAdapter.class));
366         registerFactory("windowListener", new AdapterFactory(WindowAdapter.class));
367         registerFactory("windowClassListener", new AdapterFactory(WindowClassAdapter.class));
368         registerFactory("windowStateListener", new AdapterFactory(WindowStateAdapter.class));
369 
370         setFactories(factories);
371 
372         Closure c1 = new Closure(this) {
373             @Override
374             public Object call(Object... args) {
375                 return handleIdAttribute(args);
376             }
377 
378             private Object handleIdAttribute(Object[] args) {
379                 FactoryBuilderSupport builder = (FactoryBuilderSupport) args[0];
380                 Object node = args[1];
381                 Map attributes = (Map) args[2];
382                 if (attributes.containsKey("id")) {
383                     String id = attributes.remove("id").toString();
384                     builder.setVariable(id, node);
385 
386                     // set id: as name: if node supports the property
387                     try {
388                         Object name = getPropertyValue(node, "name");
389                         if (name == null) {
390                             setPropertyValue(node, "name", id);
391                         }
392                     } catch (PropertyException pe) {
393                         // ignore
394                     }
395                 }
396                 return null;
397             }
398         };
399         Closure c2 = new MethodClosure(ButtonGroupFactory.class, "buttonGroupAttributeDelegate");
400         setAttributeDelegates(newList(c1, c2));
401     }
402 
403     private void registerFactory(String name, Factory factory) {
404         factories.put(name, factory);
405     }
406 
407     private void registerBeanFactory(String name, Class pivotBeanClass) {
408         registerBeanFactory(name, pivotBeanClass, true);
409     }
410 
411     private void registerBeanFactory(String name, Class pivotBeanClass, boolean leaf) {
412         registerFactory(name, new BeanFactory(pivotBeanClass, leaf));
413     }
414 
415     private void registerPivotBeanFactory(String name, Class pivotBeanClass) {
416         registerPivotBeanFactory(name, pivotBeanClass, true);
417     }
418 
419     private void registerPivotBeanFactory(String name, Class pivotBeanClass, boolean leaf) {
420         registerFactory(name, new PivotBeanFactory(pivotBeanClass, leaf));
421     }
422 
423     private void registerPivotComponentFactory(String name, Class pivotBeanClass) {
424         registerPivotComponentFactory(name, pivotBeanClass, true);
425     }
426 
427     private void registerPivotComponentFactory(String name, Class pivotBeanClass, boolean leaf) {
428         registerFactory(name, new ComponentFactory(pivotBeanClass, leaf));
429     }
430 
431     private void registerPivotContainerFactory(String name, Class pivotBeanClass) {
432         registerPivotContainerFactory(name, pivotBeanClass, true);
433     }
434 
435     private void registerPivotContainerFactory(String name, Class pivotBeanClass, boolean singleElement) {
436         registerFactory(name, singleElement ? new SingleElementContainerFactory(pivotBeanClass, "content", Component.class) : new ContainerFactory(pivotBeanClass));
437     }
438 }