felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christian Schneider <ch...@die-schneider.net>
Subject Make DependencyManager API more fluent?
Date Mon, 10 Nov 2014 10:40:34 GMT
I wonder if the DependencyManager API could be made a bit more fluent. 
Technically it already uses the fluent builder pattern
but all the builder verbs still look a lot like traditional setters.

I know what I propose is mostly syntactic sugar but I think the result 
looks more readable and crisp. See below for some ideas.

Christian

----

This is from samples.dependonservice:
     public void init(BundleContext context, DependencyManager manager) 
throws Exception {
         manager.add(createComponent()
             .setImplementation(DataGenerator.class)
             .add(createServiceDependency()
                 .setService(Store.class)
                 .setRequired(true)
             )
             .add(createServiceDependency()
                 .setService(LogService.class)
                 .setRequired(false)
             )
         );
     }

Why not make it look like this:
     public void init(BundleContext context, DependencyManager manager) 
throws Exception {
         component()
             .implementation(DataGenerator.class)
             .add(serviceDependency(Store.class).required())
             .add(serviceDependency(LogService.class))
             );
         );
     }

component() could create and add the component.

Or for configuration:
     public void init(BundleContext context, DependencyManager manager) 
throws Exception {
         manager.add(createComponent()
             .setImplementation(Task.class)
             .add(createConfigurationDependency()
                 .setPid("config.pid")
                 // The following is optional and allows to display our 
configuration from webconsole
                 .setHeading("Task Configuration")
                 .setDescription("Configuration for the Task Service")
                 .add(createPropertyMetaData()
                      .setCardinality(0)
                      .setType(String.class)
                      .setHeading("Task Interval")
                      .setDescription("Declare here the interval used to 
trigger the Task")
                      .setDefaults(new String[] {"10"})
                      .setId("interval"))));
     }

could be:
     public void init(BundleContext context, DependencyManager manager) 
throws Exception {
         component().implementation(Task.class)
             .configuration("config.pid")
                 .add(meta("Task Configuration)
                     .description("Configuration for the Task Service")
                     .add(property("interval")
                             .cardinality(0)
                             .type(String.class)
                             .heading("Task Interval")
                             .description("Declare here the interval 
used to trigger the Task")
                             .default("10"))
     }

-- 
Christian Schneider
http://www.liquid-reality.de

Open Source Architect
http://www.talend.com


Mime
View raw message