You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by Robby Pelssers <ro...@ciber.com> on 2011/07/06 10:46:32 UTC

question regarding chainability of methods current API

Hi Simone,

I have one question to the current interface of Pipeline.  I know you wrote a SAXPipelineBuilder to allow chaining.

But it would have been much nicer if the Pipeline interface itself would have been chainable.

void addComponent(T pipelineComponent);  -->     Pipeline<T> addComponent(T pipelineComponent);

void setup(OutputStream outputStream);   -->     Pipeline<T> setup)(OutputStream outputStream);

Same for other methods for which it makes sense to chain them.

This would allow me to switch from

	@Test
	public void testXQuery1() throws Exception {
	    Map<String, Object> parameters = new HashMap<String, Object>();
	    parameters.put("sentence", "split words test");
	    XQJGenerator generator = new XQJGenerator(this.getClass().getResource("/xquery/stringtest.xquery")); 
	    generator.setXQDataSource(xqds);
	    Pipeline<SAXPipelineComponent> pipeline = new NonCachingPipeline<SAXPipelineComponent>();
	    pipeline.addComponent(generator);
	    pipeline.addComponent(new XMLSerializer().setIndent(true));
	    pipeline.setup(System.out, parameters);      
	    pipeline.execute();
	}

to 

	@Test
	public void testXQuery1() throws Exception {
	    Map<String, Object> parameters = new HashMap<String, Object>();
	    parameters.put("sentence", "split words test");
	    XQJGenerator generator = new XQJGenerator(this.getClass().getResource("/xquery/stringtest.xquery")); 
	    generator.setXQDataSource(xqds);
	    Pipeline<SAXPipelineComponent> pipeline = 
               new NonCachingPipeline<SAXPipelineComponent>()
               .addComponent(generator)
               .addComponent(new XMLSerializer().setIndent(true))
               .setup(System.out, parameters)
               .execute();
	}

which basically is what you intended to achieve if i'm correct.

I know it's quite a big API change but designing the API with chainability in mind makes sense.

Robby



Re: question regarding chainability of methods current API

Posted by Simone Tripodi <si...@apache.org>.
Hi Robby!
that feature is already available, have a look at the cocoon-sax
'builder'[1] package!
Your first email was received, maybe there was just a minor async
issue on your provider.
HTH, have a nice day!
All the best,
Simo

[1] http://s.apache.org/dZm

http://people.apache.org/~simonetripodi/
http://www.99soft.org/



On Wed, Jul 6, 2011 at 10:46 AM, Robby Pelssers
<ro...@ciber.com> wrote:
>
> Hi Simone,
>
> I have one question to the current interface of Pipeline.  I know you wrote a SAXPipelineBuilder to allow chaining.
>
> But it would have been much nicer if the Pipeline interface itself would have been chainable.
>
> void addComponent(T pipelineComponent);  -->     Pipeline<T> addComponent(T pipelineComponent);
>
> void setup(OutputStream outputStream);   -->     Pipeline<T> setup)(OutputStream outputStream);
>
> Same for other methods for which it makes sense to chain them.
>
> This would allow me to switch from
>
>        @Test
>        public void testXQuery1() throws Exception {
>            Map<String, Object> parameters = new HashMap<String, Object>();
>            parameters.put("sentence", "split words test");
>            XQJGenerator generator = new XQJGenerator(this.getClass().getResource("/xquery/stringtest.xquery"));
>            generator.setXQDataSource(xqds);
>            Pipeline<SAXPipelineComponent> pipeline = new NonCachingPipeline<SAXPipelineComponent>();
>            pipeline.addComponent(generator);
>            pipeline.addComponent(new XMLSerializer().setIndent(true));
>            pipeline.setup(System.out, parameters);
>            pipeline.execute();
>        }
>
> to
>
>        @Test
>        public void testXQuery1() throws Exception {
>            Map<String, Object> parameters = new HashMap<String, Object>();
>            parameters.put("sentence", "split words test");
>            XQJGenerator generator = new XQJGenerator(this.getClass().getResource("/xquery/stringtest.xquery"));
>            generator.setXQDataSource(xqds);
>            Pipeline<SAXPipelineComponent> pipeline =
>               new NonCachingPipeline<SAXPipelineComponent>()
>               .addComponent(generator)
>               .addComponent(new XMLSerializer().setIndent(true))
>               .setup(System.out, parameters)
>               .execute();
>        }
>
> which basically is what you intended to achieve if i'm correct.
>
> I know it's quite a big API change but designing the API with chainability in mind makes sense.
>
> Robby
>
>
>

FW: question regarding chainability of methods current API

Posted by Robby Pelssers <ro...@ciber.com>.
My mail to @dev did  not reach the mailinglist so trying again.


Hi Simone,

I have one question to the current interface of Pipeline.  I know you wrote a SAXPipelineBuilder to allow chaining.

But it would have been much nicer if the Pipeline interface itself would have been chainable.

void addComponent(T pipelineComponent);  -->     Pipeline<T> addComponent(T pipelineComponent);

void setup(OutputStream outputStream);   -->     Pipeline<T> setup)(OutputStream outputStream);

Same for other methods for which it makes sense to chain them.

This would allow me to switch from

	@Test
	public void testXQuery1() throws Exception {
	    Map<String, Object> parameters = new HashMap<String, Object>();
	    parameters.put("sentence", "split words test");
	    XQJGenerator generator = new XQJGenerator(this.getClass().getResource("/xquery/stringtest.xquery")); 
	    generator.setXQDataSource(xqds);
	    Pipeline<SAXPipelineComponent> pipeline = new NonCachingPipeline<SAXPipelineComponent>();
	    pipeline.addComponent(generator);
	    pipeline.addComponent(new XMLSerializer().setIndent(true));
	    pipeline.setup(System.out, parameters);      
	    pipeline.execute();
	}

to 

	@Test
	public void testXQuery1() throws Exception {
	    Map<String, Object> parameters = new HashMap<String, Object>();
	    parameters.put("sentence", "split words test");
	    XQJGenerator generator = new XQJGenerator(this.getClass().getResource("/xquery/stringtest.xquery")); 
	    generator.setXQDataSource(xqds);
	    Pipeline<SAXPipelineComponent> pipeline = 
               new NonCachingPipeline<SAXPipelineComponent>()
               .addComponent(generator)
               .addComponent(new XMLSerializer().setIndent(true))
               .setup(System.out, parameters)
               .execute();
	}

which basically is what you intended to achieve if i'm correct.

I know it's quite a big API change but designing the API with chainability in mind makes sense.

Robby




---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@cocoon.apache.org
For additional commands, e-mail: users-help@cocoon.apache.org