[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-openjfx-dev
Subject: Extending Builders with custom code
From: daniel.fuchs () oracle ! com (Daniel Fuchs)
Date: 2012-06-28 9:03:08
Message-ID: 4FEC1DCC.7030207 () oracle ! com
[Download RAW message or body]
Hi Michael,
As you noted making Builders immutable would break
backward compatibility.
Another interesting alternative could be to generate an
applyTo() method that takes another builder as parameter.
I am wondering whether the following would be doable:
For instance - today TextBuilder has a method:
public void applyTo(Text x)
If it add an additional
public (or even protected) void applyTo(TextBuilder otherBuilder)
then we could possibly also generate a:
public static TextBuilder create(TextBuilder initialConfiguration) {
final TextBuilder newBuilder = create();
initialConfiguration.applyTo(newBuilder);
return newBuilder;
}
Your example would then become:
final Text text1 = TextBuilder.create(builder).text("Hello
World!").y(50).build();
final Text text2 = TextBuilder.create(builder).text("Goodbye
World!").y(100).fill(Color.GREEN).build();
final Text text3 = TextBuilder.create(builder).text("JavaFX is
fun!").y(150).build();
I believe it would address your requirement without introducing any
backward compatibility issue.
Just thinking out loud...
-- daniel
On 6/28/12 9:43 AM, openjfx-dev-request at openjdk.java.net wrote:
> From: Michael Heinrichs<michael.heinrichs at oracle.com>
> Subject: Re: Extending Builders with custom code
>
> Hi Evo,
>
> there was an interesting comment after one of my blog posts about reusing builders. \
> Basically the commentator pointed out that making builders immutable would make \
> them much better suited for reuse. The obvious solution, changing our builders, \
> would break backward compatibility. But maybe you (or somebody on this alias) has a \
> good idea how this can be achieved without breaking backward compatibility. Below \
> is the full comment.
> Cheers,
> Michael
>
>
>
> Thanks for the post. I can clearly see the benefits of using builders and we have \
> been using them in some areas in our code. Your post made me realize that reusing \
> builders can be really powerful. Our application has a number of TableViews and \
> each view has a number of columns. The builders are a perfect fit for the scenario \
> where you want to create a number of columns that have many properties in common. \
> You can use a TableColumnBuilder to create partial specification for the column and \
> then stamp out the columns by setting the unique properties for each column and \
> build() them (Similar to your text1, text2, text3 example above). The only problem \
> is builders are not immutable. Every time you set a property on the builder it \
> affects all future build events. In you example above, if you only want text2 to be \
> green it would be nice if you were able to call it as follows:
> final Text text1 = builder.text(?Hello World!?).y(50).build();
> final Text text2 = builder.text(?Goodbye World!?).y(100).fill(Color.GREEN).build();
> final Text text3 = builder.text(?JavaFX is fun!?).y(150).build();
>
> But this results in both text2 and text3 turning green.
>
> I think making builders immutable will significantly improve the ability to reuse \
> them. Consider the following example:
> TableColumnBuilder standardColumnBuilder = TableColumnBuilder.create()
> .prefWidth(50.0)
> .sortable(false)
> .editable(false);
> TableColumnBuilder narrowColumnBuilder = standardColumnBuilder
> .prefWidth(40.0)
> .resizable(false);
> TableColumnBuilder narrowColumnBuilder = narrowColumnBuilder
> .prefWidth(80.0);
>
> If builders were immutable I would now have three templates that I could reuse to \
> build all the table columns but because they are not immutable I now have a \
> ?standardColumnBuilder? that is not resizable and has a width of 80.
> Cheers,
> Ab
>
>
>
> On 27.06.2012, at 17:50, Eva Krejcirova wrote:
>
> > > Hi All,
> > >
> > > I am currently working on a system for extending our automatically generated \
> > > Builder classes with custom code and I would like to ask for your help. Are you \
> > > missing some convenience methods in existing builders? I would be happy to hear \
> > > it! (preferably in a form of Jira issue ;-))
> > > Currently we have these Jira issues:
> > > * RT-19266 which talks about PathBuilder (adding moveTo(), lineTo() methods to \
> > > PathBuilder)
> > > * RT-16569 mentions the need for convenience methods in builders of layout \
> > > classes (but doesn't specify it more)
> > > Thanks,
> > > Eva
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic