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