I don't think so. In my case the value passed to the build method is always
type Class and the return is a new object based on the class type.

The strategy builder service takes a set of services and constructs a new
service that directs calls by the object type of the parameters. You can't
use it for this purpose because in this case the parameter type is always
the same i.e. Class


On Fri, Sep 27, 2013 at 2:21 PM, Thiago H de Paula Figueiredo <
[email protected]> wrote:

> Is it just me or what you're proposing is very similar to what
> StrategyBuilder.build(Class, Map) already does in the sense that you want
> to associate certain objets to a given class (the config field in
> ObjectFactoryImpl)?
>
>
> On Fri, 27 Sep 2013 15:32:00 -0300, Barry Books <[email protected]> wrote:
>
>  I created a pretty simple service that's proven quite useful. The
>> interface
>> is
>>
>> *public* *interface* ObjectFactory {
>>
>>
>>  *public* <T> T build(Class<T> clazz);
>>
>>
>> }
>>
>>
>> it's built on top of autobuild and since it's a service you can plug in
>> different factories. The one I have this
>>
>>
>> *public* *class* ObjectFactoryImpl<T> *implements* ObjectFactory {
>>
>> *private* *final* Map<Class, Class> config;
>>
>> *private* *final* ObjectLocator locator;
>>
>>  *public* ObjectFactoryImpl(Map<Class,**Class> config, ObjectLocator
>> locator)
>> {
>>
>> *this*.config = config;
>>
>> *this*.locator = locator;
>>
>>
>> }
>>
>>
>>  @SuppressWarnings({ "unchecked", "hiding" })
>>
>> @Override
>>
>> *public* <T> T build(Class<T> clazz) {
>>
>> *if* ( config.containsKey(clazz) ) {
>>
>> *return* (T) locator.autobuild(config.get(**clazz));
>>
>> }
>>
>> *return* locator.autobuild(clazz);
>>
>>
>> }
>>
>> }
>>
>>
>> This allows constructing real objects from interfaces with a config like
>> this:
>>
>>
>> @Contribute(ObjectFactory.***class*)
>>
>> *public* *static* *void* contributeObjectFactory(**
>> MappedConfiguration<Class,
>> Class> configuration) {
>>
>> configuration.add(**PayLaterPayment.*class*, PayLaterPaymentDDB.*class*);
>>
>> configuration.add(**CreditCardPayment.*class*,
>> CreditCardPaymentDDB.*class*);
>>
>> configuration.add(**PayPalPayment.*class*,**PayPalPaymentDDB.*class*);
>>
>> configuration.add(Invoice.***class*,InvoiceDDB.*class*);
>>
>> configuration.add(InvoiceItem.***class*,LineItem.*class*);
>>
>>
>> }
>>
>>
>> What makes this useful is you can build modules that define interfaces and
>> then do things like
>>
>>
>> *public* *class* PayPalButton {
>>
>>  @Parameter
>>
>> *private* PaymentMethod payment;
>>
>>  @Inject
>>
>> *private* ObjectFactory objectFactory;
>>
>>  *void* onSelectedFromPayPal() { payment = objectFactory
>> .build(PayPalPayment.*class*); }
>>
>>
>> }
>>
>>
>> I also think it would make BeanEditForm even more useful. If there any
>> interest I'll open a JIRA and add the code.
>>
>>
>> Thanks
>>
>> Barry
>>
>
>
> --
> Thiago H. de Paula Figueiredo
>
> ------------------------------**------------------------------**---------
> To unsubscribe, e-mail: 
> dev-unsubscribe@tapestry.**apache.org<[email protected]>
> For additional commands, e-mail: [email protected]
>
>

Reply via email to