functional/SceneGraphTests/src/test/scenegraph/binding/Factories.java

Print this page




  74         }
  75     }),
  76     Arc(shapes, new DefaultFactory() {
  77 
  78         public NodeAndBindee create() {
  79             Arc node = new Arc();
  80             node.setCenterX(50.0f);
  81             node.setCenterY(50.0f);
  82             node.setRadiusX(25.0f);
  83             node.setRadiusY(25.0f);
  84             node.setStartAngle(45.0f);
  85             node.setLength(270.0f);
  86             node.setType(ArcType.ROUND);
  87             addStroke(node);
  88             return new BindingApp.NodeAndBindee(node, node);
  89         }
  90     }),
  91     ArcTo(shapes, new DefaultFactory() {
  92 
  93         public NodeAndBindee create() {
  94             MoveTo moveTo = MoveToBuilder.create().x(50).y(50).build();
  95 
  96             ArcTo node = new ArcTo();
  97             node.setX(100.0f);
  98             node.setY(100.0f);
  99             node.setRadiusX(50.0f);
 100             node.setRadiusY(50.0f);
 101 
 102             Path path = PathBuilder.create().elements(moveTo, node).build();
 103             addStroke(path);
 104             return new BindingApp.NodeAndBindee(path, node);
 105         }
 106     }),
 107     CubicCurve(shapes, new DefaultFactory() {
 108 
 109         public NodeAndBindee create() {
 110             CubicCurve node = new CubicCurve();
 111             node.setStartX(0.0f);
 112             node.setStartY(50.0f);
 113 
 114             node.setControlX1(80.0f);
 115             node.setControlY1(250.0f);
 116 
 117             node.setControlX2(60.0f);
 118             node.setControlY2(-50.0f);
 119 
 120             node.setEndX(128.0f);
 121             node.setEndY(50.0f);
 122 
 123 
 124             addStroke(node);
 125             return new BindingApp.NodeAndBindee(node, node);
 126         }
 127     }),
 128 
 129 //    ClosePath(shapes, new DefaultFactory() {
 130 //
 131 //        public NodeAndBindee create() {
 132 //            ClosePath node = new ClosePath();
 133 //            addStroke(node);
 134 //            return new BindingApp.NodeAndBindee(node, node);
 135 //        }
 136 //    }),
 137     CubicCurveTo(shapes, new DefaultFactory() {
 138 
 139         public NodeAndBindee create() {
 140             MoveTo moveTo = MoveToBuilder.create().x(50).y(50).build();
 141 
 142             CubicCurveTo node = new CubicCurveTo();
 143             node.setControlX1(80.0f);
 144             node.setControlY1(250.0f);
 145 
 146             node.setControlX2(60.0f);
 147             node.setControlY2(-50.0f);
 148 
 149             Path path = PathBuilder.create().elements(moveTo, node).build();
 150             addStroke(path);
 151             return new BindingApp.NodeAndBindee(path, node);
 152         }
 153     }),
 154     Ellipse(shapes, new DefaultFactory() {
 155 
 156         public NodeAndBindee create() {
 157             Ellipse node = new Ellipse();
 158             node.setCenterX(50.0f);
 159             node.setCenterY(50.0f);
 160             node.setRadiusX(20.0f);
 161             node.setRadiusY(40.0f);
 162             addStroke(node);
 163             return new BindingApp.NodeAndBindee(node, node);
 164         }
 165     }),
 166     HLineTo(shapes, new DefaultFactory() {
 167 
 168         public NodeAndBindee create() {
 169             MoveTo moveTo = MoveToBuilder.create().x(50).y(50).build();
 170             HLineTo node = new HLineTo(100);
 171             Path path = PathBuilder.create().elements(moveTo, node).build();
 172             addStroke(path);
 173             return new BindingApp.NodeAndBindee(path, node);
 174         }
 175     }),
 176     Line(shapes, new DefaultFactory() {
 177 
 178         public NodeAndBindee create() {
 179             Line node = LineBuilder.create().startX(20).startY(20).endX(100).endY(50).build();
 180             addStroke(node);
 181             return new BindingApp.NodeAndBindee(node, node);
 182         }
 183     }),
 184     LineTo(shapes, new DefaultFactory() {
 185 
 186         public NodeAndBindee create() {
 187             MoveTo moveTo = MoveToBuilder.create().x(50).y(50).build();
 188 
 189             LineTo node = new LineTo(100, 80);
 190 
 191             Path path = PathBuilder.create().elements(moveTo, node).build();
 192             addStroke(path);
 193             return new BindingApp.NodeAndBindee(path, node);
 194         }
 195     }),
 196     MoveTo(shapes, new DefaultFactory() {
 197 
 198         public NodeAndBindee create() {
 199             MoveTo moveTo = MoveToBuilder.create().x(50).y(50).build();
 200 
 201             LineTo node = new LineTo(100, 80);
 202 
 203             Path path = PathBuilder.create().elements(moveTo, node).build();
 204             addStroke(path);
 205             return new BindingApp.NodeAndBindee(path, moveTo);
 206         }
 207     }),
 208     Path(shapes, new DefaultFactory() {
 209 
 210         public NodeAndBindee create() {
 211             MoveTo moveTo = MoveToBuilder.create().x(50).y(50).build();
 212 
 213             LineTo node = new LineTo(100, 80);
 214             LineTo node2 = new LineTo(200, 180);
 215 
 216             Path path = PathBuilder.create().elements(moveTo, node, node2).build();
 217             addStroke(path);
 218             return new BindingApp.NodeAndBindee(path, path);
 219         }
 220     }),
 221 //    PathElement(shapes, new DefaultFactory() {
 222 //
 223 //        public NodeAndBindee create() {
 224 //            PathElement node = new PathElement();
 225 //            addStroke(node);
 226 //            return new BindingApp.NodeAndBindee(node, node);
 227 //        }
 228 //    }),
 229     Polygon(shapes, new DefaultFactory() {
 230 
 231         public NodeAndBindee create() {
 232             Polygon node = new Polygon();
 233             node.getPoints().addAll(new Double[]{
 234                                     0.0, 0.0,
 235                                     120.0, 10.0,
 236                                     10.0, 120.0});


 247         }
 248     }),
 249     QuadCurve(shapes, new DefaultFactory() {
 250 
 251         public NodeAndBindee create() {
 252             QuadCurve node = new QuadCurve();
 253 
 254             node.setStartX(0.0f);
 255             node.setStartY(10.0f);
 256             node.setEndX(12.0f);
 257             node.setEndY(120.0f);
 258             node.setControlX(125.0f);
 259             node.setControlY(0.0f);
 260             addStroke(node);
 261             return new BindingApp.NodeAndBindee(node, node);
 262         }
 263     }),
 264     QuadCurveTo(shapes, new DefaultFactory() {
 265 
 266         public NodeAndBindee create() {
 267             MoveTo moveTo = MoveToBuilder.create().x(50).y(50).build();
 268             QuadCurveTo node = QuadCurveToBuilder.create().controlX(125).controlY(0).build();
 269             Path path = PathBuilder.create().elements(moveTo, node).build();


 270             addStroke(path);
 271             return new BindingApp.NodeAndBindee(path, path);        }
 272     }),
 273     SVGPath(shapes, new DefaultFactory() {
 274 
 275         public NodeAndBindee create() {
 276             SVGPath node = SVGPathBuilder.create().content("M40,60 C42,148 144,30 25,32").build();

 277             addStroke(node);
 278             return new BindingApp.NodeAndBindee(node, node);
 279         }
 280     }),
 281     VLineTo(shapes, new DefaultFactory() {
 282 
 283         public NodeAndBindee create() {
 284             MoveTo moveTo = MoveToBuilder.create().x(50).y(50).build();
 285             VLineTo node = new VLineTo(100);
 286             Path path = PathBuilder.create().elements(moveTo, node).build();
 287             addStroke(path);
 288             return new BindingApp.NodeAndBindee(path, node);
 289         }
 290     }),
 291     // </editor-fold>
 292 
 293     // <editor-fold defaultstate="collapsed" desc="effects">
 294     DropShadow(effects, new EffectFactory() {
 295             @Override
 296             public Effect getEffect() {
 297                 return new DropShadow();
 298             }
 299         })
 300     ,Shadow(effects, new EffectFactory() {
 301             @Override
 302             public Effect getEffect() {
 303                 return new Shadow();
 304             }
 305         })
 306     ,Reflection(effects, new EffectFactory() {
 307             @Override
 308             public Effect getEffect() {
 309                 return new Reflection();
 310             }
 311         })
 312     ,Blend(effects, new DefaultFactory() {
 313 
 314         public NodeAndBindee create() {
 315             Rectangle rect0 = new Rectangle(10, 10, 200, 200);
 316             rect0.setFill(new LinearGradient(0, 0, 0.25, 0.25, true, CycleMethod.REFLECT, new Stop[] { new Stop(0, Color.RED), new Stop(1, Color.YELLOW)} ));
 317 
 318             Rectangle rect = new Rectangle(50, 50, 100, 50);
 319             rect.setFill(Color.GREEN);
 320             Blend b = new Blend();
 321             b.setOpacity(0.7);
 322             b.setMode(BlendMode.ADD);
 323             b.setTopInput(ColorInputBuilder.create().paint(Color.BLUE).x(30).y(30).width(100).height(80).build());
 324             rect.setEffect(b);
 325             Group group = new Group(rect0,rect);
 326                 return new NodeAndBindee(group, b);
 327             }
 328         })
 329     ,Bloom(effects, new DefaultFactory() {
 330 
 331         public NodeAndBindee create() {
 332             Group group = new Group();
 333             Bloom bloom = new Bloom();
 334             group.setEffect(bloom);
 335             group.getChildren().add(RectangleBuilder.create().x(10).y(10).width(160).height(80).fill(Color.DARKBLUE).build());
 336             group.getChildren().add(RectangleBuilder.create().x(50).y(50).width(50).height(50).fill(Color.YELLOW).build());




 337             return new NodeAndBindee(group, bloom);
 338         }
 339         })
 340     ,BoxBlur(effects, new EffectFactory() {
 341             @Override
 342             public Effect getEffect() {
 343                 return new BoxBlur();
 344             }
 345         })
 346     ,ColorAdjust(effects, new EffectFactory() {
 347             @Override
 348             public Effect getEffect() {
 349                 return new ColorAdjust();
 350             }
 351         })
 352     ,DisplacementMap(effects, new DefaultFactory() {
 353 
 354         @Override
 355         public Constraint getConstraints(String name) {
 356             NumberConstraints nc = (NumberConstraints) super.getConstraints(name);
 357             switch(nc) {
 358                 case offsetX:
 359                 case offsetY:
 360                     return NumberConstraints.offsetForDisplacementMap;
 361                 default:
 362                     return nc;
 363             }
 364         }
 365 
 366         public NodeAndBindee create() {
 367             Group group = new Group();
 368             DisplacementMap dm = DisplacementMapBuilder.create().mapData(Consts.MAP_WAVES).build();
 369             group.setEffect(dm);
 370             group.getChildren().add(RectangleBuilder.create().x(50).y(50).width(200).height(80).fill(Color.DARKBLUE).build());
 371             group.getChildren().add(RectangleBuilder.create().x(0).y(0).width(250).height(200).fill(Color.TRANSPARENT).build());




 372             return new NodeAndBindee(group, dm);
 373         }
 374         })
 375 
 376     ,Flood(effects, new EffectFactory() {
 377             @Override
 378             public Effect getEffect() {
 379                 return ColorInputBuilder.create().x(0).y(0).width(50).height(50).build();





 380             }
 381         })
 382 
 383     ,GaussianBlur(effects, new EffectFactory() {
 384             @Override
 385             public Effect getEffect() {
 386                 return new GaussianBlur();
 387             }
 388         })
 389     ,Glow(effects, new EffectFactory() {
 390             @Override
 391             public Effect getEffect() {
 392                 return new Glow();
 393             }
 394         })
 395 
 396     ,Identity(effects, new EffectFactory() {
 397             @Override
 398             public Effect getEffect() {
 399                 return ImageInputBuilder.create().
 400                         source(new Image(Factories.class.getResourceAsStream("/test/scenegraph/resources/car.png"))).
 401                         build();
 402             }
 403         })
 404 
 405     ,InnerShadow(effects, new EffectFactory() {
 406             @Override
 407             public Effect getEffect() {
 408                 return new InnerShadow();
 409             }
 410         })
 411 
 412     // </editor-fold>
 413 
 414     // <editor-fold desc="Text">
 415     ,font(text, new DefaultFactory() {
 416 
 417         public NodeAndBindee create() {
 418             Text node = new Text("XO");
 419             node.setTranslateX(50);
 420             node.setTranslateY(150);
 421             node.setFont(Font.font("Arial", 60));


 561             RadioButton node = new RadioButton();
 562             prepareControl(node);
 563             return new BindingApp.NodeAndBindee(node, node);
 564         }
 565     }),
 566     Separator(controls, new DefaultFactory() {
 567 
 568         public NodeAndBindee create() {
 569             Separator node = new Separator();
 570             ToolBar toolBar = new ToolBar(
 571                     new Button("New"),
 572                     node,
 573                     new Button("Open"));
 574             prepareControl(toolBar);
 575             return new BindingApp.NodeAndBindee(toolBar, node);
 576         }
 577     }),
 578     ScrollBar(controls, new DefaultFactory() {
 579 
 580         public NodeAndBindee create() {
 581             ScrollBar node = ScrollBarBuilder.create().min(0).max(100).value(50).build();



 582             prepareControl(node);
 583             return new BindingApp.NodeAndBindee(node, node);
 584         }
 585     }),
 586     Slider(controls, new DefaultFactory() {
 587 
 588         public NodeAndBindee create() {
 589             Slider node = new Slider(0,100,50);
 590             //TODO: after fix of RT-11969 consider returning this functionality
 591 //            node.setShowTickLabels(true);
 592 //            node.setShowTickMarks(true);
 593             prepareControl(node);
 594             return new BindingApp.NodeAndBindee(node, node);
 595         }
 596     }),
 597     TableView(controls, new DefaultFactory() {
 598 
 599         public NodeAndBindee create() {
 600             TableView<Person> node = new TableView<Person>();
 601 


 722             } catch (java.lang.IllegalArgumentException e) {
 723                 System.err.println("ERROR: model lacks constraints: " + name);
 724                 //use default for now
 725             }
 726             return c;
 727         }
 728 
 729         public boolean verifyConstraint(String name) {
 730             return true;
 731         }
 732 
 733     }
 734 
 735     //utility
 736     private static abstract class EffectFactory extends DefaultFactory {
 737 
 738         public abstract Effect getEffect();
 739 
 740         public NodeAndBindee create() {
 741                 Effect effect = getEffect();
 742                 Rectangle rect = RectangleBuilder.create().x(100).y(100).width(100).height(100).fill(Color.LIGHTGREEN).
 743                         stroke(Color.DARKGREEN).arcHeight(20).arcWidth(30).effect(effect).build();




 744                 return new NodeAndBindee(rect, effect);
 745         }
 746 
 747     }
 748 
 749     private static final ObservableList<String> defaultList = FXCollections.<String>observableArrayList("item 1", "item 2", "longlonglonglonglonglongitem");
 750 
 751     private static void addStroke(Shape shape) {
 752         shape.setFill(Color.LIGHTGREEN);
 753         shape.setStroke(Color.DARKGREEN);
 754         shape.getStrokeDashArray().add(10.);
 755         shape.getStrokeDashArray().add(8.);
 756     }
 757 
 758     private static void prepareControl(Control control) {
 759         control.setLayoutX(50);
 760         control.setLayoutY(50);
 761         control.setPrefSize(100, 50);
 762         control.setMinSize(100, 50);
 763         control.setMaxSize(100, 50);


  74         }
  75     }),
  76     Arc(shapes, new DefaultFactory() {
  77 
  78         public NodeAndBindee create() {
  79             Arc node = new Arc();
  80             node.setCenterX(50.0f);
  81             node.setCenterY(50.0f);
  82             node.setRadiusX(25.0f);
  83             node.setRadiusY(25.0f);
  84             node.setStartAngle(45.0f);
  85             node.setLength(270.0f);
  86             node.setType(ArcType.ROUND);
  87             addStroke(node);
  88             return new BindingApp.NodeAndBindee(node, node);
  89         }
  90     }),
  91     ArcTo(shapes, new DefaultFactory() {
  92 
  93         public NodeAndBindee create() {
  94             MoveTo moveTo = new MoveTo(50, 50);
  95 
  96             ArcTo node = new ArcTo();
  97             node.setX(100.0f);
  98             node.setY(100.0f);
  99             node.setRadiusX(50.0f);
 100             node.setRadiusY(50.0f);
 101 
 102             Path path = new Path(moveTo, node);
 103             addStroke(path);
 104             return new BindingApp.NodeAndBindee(path, node);
 105         }
 106     }),
 107     CubicCurve(shapes, new DefaultFactory() {
 108 
 109         public NodeAndBindee create() {
 110             CubicCurve node = new CubicCurve();
 111             node.setStartX(0.0f);
 112             node.setStartY(50.0f);
 113 
 114             node.setControlX1(80.0f);
 115             node.setControlY1(250.0f);
 116 
 117             node.setControlX2(60.0f);
 118             node.setControlY2(-50.0f);
 119 
 120             node.setEndX(128.0f);
 121             node.setEndY(50.0f);
 122 
 123 
 124             addStroke(node);
 125             return new BindingApp.NodeAndBindee(node, node);
 126         }
 127     }),
 128 
 129 //    ClosePath(shapes, new DefaultFactory() {
 130 //
 131 //        public NodeAndBindee create() {
 132 //            ClosePath node = new ClosePath();
 133 //            addStroke(node);
 134 //            return new BindingApp.NodeAndBindee(node, node);
 135 //        }
 136 //    }),
 137     CubicCurveTo(shapes, new DefaultFactory() {
 138 
 139         public NodeAndBindee create() {
 140             MoveTo moveTo = new MoveTo(50, 50);
 141 
 142             CubicCurveTo node = new CubicCurveTo();
 143             node.setControlX1(80.0f);
 144             node.setControlY1(250.0f);
 145 
 146             node.setControlX2(60.0f);
 147             node.setControlY2(-50.0f);
 148 
 149             Path path = new Path(moveTo, node);
 150             addStroke(path);
 151             return new BindingApp.NodeAndBindee(path, node);
 152         }
 153     }),
 154     Ellipse(shapes, new DefaultFactory() {
 155 
 156         public NodeAndBindee create() {
 157             Ellipse node = new Ellipse();
 158             node.setCenterX(50.0f);
 159             node.setCenterY(50.0f);
 160             node.setRadiusX(20.0f);
 161             node.setRadiusY(40.0f);
 162             addStroke(node);
 163             return new BindingApp.NodeAndBindee(node, node);
 164         }
 165     }),
 166     HLineTo(shapes, new DefaultFactory() {
 167 
 168         public NodeAndBindee create() {
 169             MoveTo moveTo = new MoveTo(50, 50);
 170             HLineTo node = new HLineTo(100);
 171             Path path = new Path(moveTo, node);
 172             addStroke(path);
 173             return new BindingApp.NodeAndBindee(path, node);
 174         }
 175     }),
 176     Line(shapes, new DefaultFactory() {
 177 
 178         public NodeAndBindee create() {
 179             Line node = new Line(20, 20, 100, 50);
 180             addStroke(node);
 181             return new BindingApp.NodeAndBindee(node, node);
 182         }
 183     }),
 184     LineTo(shapes, new DefaultFactory() {
 185 
 186         public NodeAndBindee create() {
 187             MoveTo moveTo = new MoveTo(50, 50);
 188 
 189             LineTo node = new LineTo(100, 80);
 190 
 191             Path path = new Path(moveTo, node);
 192             addStroke(path);
 193             return new BindingApp.NodeAndBindee(path, node);
 194         }
 195     }),
 196     MoveTo(shapes, new DefaultFactory() {
 197 
 198         public NodeAndBindee create() {
 199             MoveTo moveTo = new MoveTo(50, 50);
 200 
 201             LineTo node = new LineTo(100, 80);
 202 
 203             Path path = new Path(moveTo, node);
 204             addStroke(path);
 205             return new BindingApp.NodeAndBindee(path, moveTo);
 206         }
 207     }),
 208     Path(shapes, new DefaultFactory() {
 209 
 210         public NodeAndBindee create() {
 211             MoveTo moveTo = new MoveTo(50, 50);
 212 
 213             LineTo node = new LineTo(100, 80);
 214             LineTo node2 = new LineTo(200, 180);
 215 
 216             Path path = new Path(moveTo, node, node2);
 217             addStroke(path);
 218             return new BindingApp.NodeAndBindee(path, path);
 219         }
 220     }),
 221 //    PathElement(shapes, new DefaultFactory() {
 222 //
 223 //        public NodeAndBindee create() {
 224 //            PathElement node = new PathElement();
 225 //            addStroke(node);
 226 //            return new BindingApp.NodeAndBindee(node, node);
 227 //        }
 228 //    }),
 229     Polygon(shapes, new DefaultFactory() {
 230 
 231         public NodeAndBindee create() {
 232             Polygon node = new Polygon();
 233             node.getPoints().addAll(new Double[]{
 234                                     0.0, 0.0,
 235                                     120.0, 10.0,
 236                                     10.0, 120.0});


 247         }
 248     }),
 249     QuadCurve(shapes, new DefaultFactory() {
 250 
 251         public NodeAndBindee create() {
 252             QuadCurve node = new QuadCurve();
 253 
 254             node.setStartX(0.0f);
 255             node.setStartY(10.0f);
 256             node.setEndX(12.0f);
 257             node.setEndY(120.0f);
 258             node.setControlX(125.0f);
 259             node.setControlY(0.0f);
 260             addStroke(node);
 261             return new BindingApp.NodeAndBindee(node, node);
 262         }
 263     }),
 264     QuadCurveTo(shapes, new DefaultFactory() {
 265 
 266         public NodeAndBindee create() {
 267             MoveTo moveTo = new MoveTo(50, 50);
 268             QuadCurveTo node = new QuadCurveTo();
 269                         node.setControlX(125);
 270                         node.setControlY(0);
 271             Path path = new Path(moveTo, node);
 272             addStroke(path);
 273             return new BindingApp.NodeAndBindee(path, path);        }
 274     }),
 275     SVGPath(shapes, new DefaultFactory() {
 276 
 277         public NodeAndBindee create() {
 278             SVGPath node = new SVGPath();
 279                         node.setContent("M40,60 C42,148 144,30 25,32");
 280             addStroke(node);
 281             return new BindingApp.NodeAndBindee(node, node);
 282         }
 283     }),
 284     VLineTo(shapes, new DefaultFactory() {
 285 
 286         public NodeAndBindee create() {
 287             MoveTo moveTo = new MoveTo(50, 50);
 288             VLineTo node = new VLineTo(100);
 289             Path path = new Path(moveTo, node);
 290             addStroke(path);
 291             return new BindingApp.NodeAndBindee(path, node);
 292         }
 293     }),
 294     // </editor-fold>
 295 
 296     // <editor-fold defaultstate="collapsed" desc="effects">
 297     DropShadow(effects, new EffectFactory() {
 298             @Override
 299             public Effect getEffect() {
 300                 return new DropShadow();
 301             }
 302         })
 303     ,Shadow(effects, new EffectFactory() {
 304             @Override
 305             public Effect getEffect() {
 306                 return new Shadow();
 307             }
 308         })
 309     ,Reflection(effects, new EffectFactory() {
 310             @Override
 311             public Effect getEffect() {
 312                 return new Reflection();
 313             }
 314         })
 315     ,Blend(effects, new DefaultFactory() {
 316 
 317         public NodeAndBindee create() {
 318             Rectangle rect0 = new Rectangle(10, 10, 200, 200);
 319             rect0.setFill(new LinearGradient(0, 0, 0.25, 0.25, true, CycleMethod.REFLECT, new Stop[] { new Stop(0, Color.RED), new Stop(1, Color.YELLOW)} ));
 320 
 321             Rectangle rect = new Rectangle(50, 50, 100, 50);
 322             rect.setFill(Color.GREEN);
 323             Blend b = new Blend();
 324             b.setOpacity(0.7);
 325             b.setMode(BlendMode.ADD);
 326             b.setTopInput(new ColorInput(30, 30, 100, 80, Color.BLUE));
 327             rect.setEffect(b);
 328             Group group = new Group(rect0,rect);
 329                 return new NodeAndBindee(group, b);
 330             }
 331         })
 332     ,Bloom(effects, new DefaultFactory() {
 333 
 334         public NodeAndBindee create() {
 335             Group group = new Group();
 336             Bloom bloom = new Bloom();
 337             group.setEffect(bloom);
 338                         Rectangle r1 = new Rectangle (10, 10, 160, 80);
 339                         r1.setFill(Color.DARKBLUE);
 340                         Rectangle r2 = new Rectangle (50, 50, 50, 50);
 341                         r1.setFill(Color.YELLOW);
 342             group.getChildren().add(r1);
 343             group.getChildren().add(r2);
 344             return new NodeAndBindee(group, bloom);
 345         }
 346         })
 347     ,BoxBlur(effects, new EffectFactory() {
 348             @Override
 349             public Effect getEffect() {
 350                 return new BoxBlur();
 351             }
 352         })
 353     ,ColorAdjust(effects, new EffectFactory() {
 354             @Override
 355             public Effect getEffect() {
 356                 return new ColorAdjust();
 357             }
 358         })
 359     ,DisplacementMap(effects, new DefaultFactory() {
 360 
 361         @Override
 362         public Constraint getConstraints(String name) {
 363             NumberConstraints nc = (NumberConstraints) super.getConstraints(name);
 364             switch(nc) {
 365                 case offsetX:
 366                 case offsetY:
 367                     return NumberConstraints.offsetForDisplacementMap;
 368                 default:
 369                     return nc;
 370             }
 371         }
 372 
 373         public NodeAndBindee create() {
 374             Group group = new Group();
 375             DisplacementMap dm = new DisplacementMap(Consts.MAP_WAVES);
 376             group.setEffect(dm);
 377                         Rectangle r1 = new Rectangle (50, 50, 200, 80);
 378                         r1.setFill(Color.DARKBLUE);
 379                         Rectangle r2 = new Rectangle (0, 0, 250, 200);
 380                         r1.setFill(Color.TRANSPARENT);
 381             group.getChildren().add(r1);
 382             group.getChildren().add(r2);
 383             return new NodeAndBindee(group, dm);
 384         }
 385         })
 386 
 387     ,Flood(effects, new EffectFactory() {
 388             @Override
 389             public Effect getEffect() {
 390                                 ColorInput temp = new ColorInput();
 391                                 temp.setX(0);
 392                                 temp.setY(0);
 393                                 temp.setWidth(50);
 394                                 temp.setHeight(50);
 395                 return temp;
 396             }
 397         })
 398 
 399     ,GaussianBlur(effects, new EffectFactory() {
 400             @Override
 401             public Effect getEffect() {
 402                 return new GaussianBlur();
 403             }
 404         })
 405     ,Glow(effects, new EffectFactory() {
 406             @Override
 407             public Effect getEffect() {
 408                 return new Glow();
 409             }
 410         })
 411 
 412     ,Identity(effects, new EffectFactory() {
 413             @Override
 414             public Effect getEffect() {
 415                 return new ImageInput(new Image(Factories.class.getResourceAsStream("/test/scenegraph/resources/car.png")));


 416             }
 417         })
 418 
 419     ,InnerShadow(effects, new EffectFactory() {
 420             @Override
 421             public Effect getEffect() {
 422                 return new InnerShadow();
 423             }
 424         })
 425 
 426     // </editor-fold>
 427 
 428     // <editor-fold desc="Text">
 429     ,font(text, new DefaultFactory() {
 430 
 431         public NodeAndBindee create() {
 432             Text node = new Text("XO");
 433             node.setTranslateX(50);
 434             node.setTranslateY(150);
 435             node.setFont(Font.font("Arial", 60));


 575             RadioButton node = new RadioButton();
 576             prepareControl(node);
 577             return new BindingApp.NodeAndBindee(node, node);
 578         }
 579     }),
 580     Separator(controls, new DefaultFactory() {
 581 
 582         public NodeAndBindee create() {
 583             Separator node = new Separator();
 584             ToolBar toolBar = new ToolBar(
 585                     new Button("New"),
 586                     node,
 587                     new Button("Open"));
 588             prepareControl(toolBar);
 589             return new BindingApp.NodeAndBindee(toolBar, node);
 590         }
 591     }),
 592     ScrollBar(controls, new DefaultFactory() {
 593 
 594         public NodeAndBindee create() {
 595                         ScrollBar node = new ScrollBar();
 596                         node.setMin(0);
 597                         node.setMax(100);
 598                         node.setValue(50);
 599             prepareControl(node);
 600             return new BindingApp.NodeAndBindee(node, node);
 601         }
 602     }),
 603     Slider(controls, new DefaultFactory() {
 604 
 605         public NodeAndBindee create() {
 606             Slider node = new Slider(0,100,50);
 607             //TODO: after fix of RT-11969 consider returning this functionality
 608 //            node.setShowTickLabels(true);
 609 //            node.setShowTickMarks(true);
 610             prepareControl(node);
 611             return new BindingApp.NodeAndBindee(node, node);
 612         }
 613     }),
 614     TableView(controls, new DefaultFactory() {
 615 
 616         public NodeAndBindee create() {
 617             TableView<Person> node = new TableView<Person>();
 618 


 739             } catch (java.lang.IllegalArgumentException e) {
 740                 System.err.println("ERROR: model lacks constraints: " + name);
 741                 //use default for now
 742             }
 743             return c;
 744         }
 745 
 746         public boolean verifyConstraint(String name) {
 747             return true;
 748         }
 749 
 750     }
 751 
 752     //utility
 753     private static abstract class EffectFactory extends DefaultFactory {
 754 
 755         public abstract Effect getEffect();
 756 
 757         public NodeAndBindee create() {
 758                 Effect effect = getEffect();
 759                 Rectangle rect = new Rectangle(100, 100, 100, 100);
 760                                 rect.setFill(Color.LIGHTGREEN);
 761                                 rect.setStroke(Color.DARKGREEN);
 762                                 rect.setArcHeight(20);
 763                                 rect.setArcWidth(30);
 764                                 rect.setEffect(effect);
 765                 return new NodeAndBindee(rect, effect);
 766         }
 767 
 768     }
 769 
 770     private static final ObservableList<String> defaultList = FXCollections.<String>observableArrayList("item 1", "item 2", "longlonglonglonglonglongitem");
 771 
 772     private static void addStroke(Shape shape) {
 773         shape.setFill(Color.LIGHTGREEN);
 774         shape.setStroke(Color.DARKGREEN);
 775         shape.getStrokeDashArray().add(10.);
 776         shape.getStrokeDashArray().add(8.);
 777     }
 778 
 779     private static void prepareControl(Control control) {
 780         control.setLayoutX(50);
 781         control.setLayoutY(50);
 782         control.setPrefSize(100, 50);
 783         control.setMinSize(100, 50);
 784         control.setMaxSize(100, 50);