On Mon, Jan 28, 2013 at 10:18 AM, Bruno P. Kinoshita <ki...@apache.org>wrote:

> Hi Matt
>
> >  As for the modularization, I went ahead and did this in the trunk.  On
> >the overall I think Bruno's work is proceeding in a good direction, so I
> >agree that it should be merged back to trunk when ready.
>
> Thanks! I'll sync the repos here at office in the next hours. Regarding
> the other refactorings.
>
> >- LoopingGenerator's wrapping constructor should only accept other looping
> >generators; otherwise, the objects will do things users probably don't
> >expect.
>
> +1 it makes sense indeed
>

I've actually realized now that it should not be necessary for the
generator wrapped by one of these to implement
whatever-the-name-of-the-abstract-class is.  I am now thinking
PredicatedGenerator with a Behavior enum { TEST_BEFORE, TEST_AFTER }.

Matt


>
> >- LoopingGenerator should be renamed to something that relates to its
> >"stoppable" quality. StoppableGenerator?  InterruptibleGenerator?
>
> I first named it StoppableGenerator, then changed to LoopGenerator since
> it was being used in classes that reproduced while, dowhile, until, etc.
>
> StoppableGenerator makes it very clear the "stoppable" behaviour of the
> generators, but I'm okay with any name. My main concern was having the
> stop() method in the Generator interface :)
>
> >- Several of the generator implementations, e.g. UntilGenerate, don't seem
> >to behave consistently with their description.
>
> I'll take a look on the generators again, but I remember it took me some
> time to get used to the Until, DoWhile, UntilGenerate and other generators.
>
> >- I still feel Range should be decoupled from Generator.  I think it would
> >be better to join a Range<T> with a UnaryFunction<T, T> to create the step
> >needed to go from Range to Generator.  This would be more flexible than a
> >simple addition-based step anyway.
>
> +1 sounds great Matt. IIUC, this way if I wanted something like a
> PrimeNumberGenerator, I could pass a PrimeNumberFunction. FWIW, there is a
> Range in the lambda project too, probably it is worth taking a look on
> their API too.
>
> Thanks!
>
> Bruno P. Kinoshita
> http://kinoshita.eti.br
> http://tupilabs.com
>
>
> >________________________________
> > From: Matt Benson <gudnabr...@gmail.com>
> >To: Simone Tripodi <simonetrip...@apache.org>
> >Cc: Commons Developers List <dev@commons.apache.org>
> >Sent: Monday, January 28, 2013 2:00 PM
> >Subject: Re: [functor] Patch for FUNCTOR-14, new Generators and Ranges
> >
> >Hi Simo,
> >  As for the modularization, I went ahead and did this in the trunk.  On
> >the overall I think Bruno's work is proceeding in a good direction, so I
> >agree that it should be merged back to trunk when ready.  I have some more
> >refactorings i am interested to try out on this, or another, branch.
> These
> >are all, of course, my opinion:
> >
> >- LoopingGenerator's wrapping constructor should only accept other looping
> >generators; otherwise, the objects will do things users probably don't
> >expect.
> >- LoopingGenerator should be renamed to something that relates to its
> >"stoppable" quality. StoppableGenerator?  InterruptibleGenerator?
> >- Several of the generator implementations, e.g. UntilGenerate, don't seem
> >to behave consistently with their description.
> >- I still feel Range should be decoupled from Generator.  I think it would
> >be better to join a Range<T> with a UnaryFunction<T, T> to create the step
> >needed to go from Range to Generator.  This would be more flexible than a
> >simple addition-based step anyway.
> >
> >Does anyone object to any of these changes?
> >
> >Matt
> >
> >
> >On Mon, Jan 28, 2013 at 2:46 AM, Simone Tripodi <simonetrip...@apache.org
> >wrote:
> >
> >> Hi Matt,
> >>
> >> I had a quick look at your branch and I honestly think it is a very
> >> good work, maybe we could insert even more modules granularization,
> >> but IMHO it worths to merge it in the main branch.
> >> Do you see any blocker?
> >>
> >> Best and thanks!
> >> -Simo
> >>
> >> http://people.apache.org/~simonetripodi/
> >> http://simonetripodi.livejournal.com/
> >> http://twitter.com/simonetripodi
> >> http://www.99soft.org/
> >>
> >>
> >> On Sun, Jan 27, 2013 at 6:39 PM, Matt Benson <gudnabr...@gmail.com>
> wrote:
> >> > All:  I have merged Bruno's work to
> >> >
> >>
> https://svn.apache.org/repos/asf/commons/proper/functor/branches/FUNCTOR-14-mmbased
> >> > on functor's multi-module reorg.
> >> >
> >> > Matt
> >> >
> >> >
> >> > On Wed, Sep 19, 2012 at 2:12 AM, Simone Tripodi <
> >> simonetrip...@apache.org>wrote:
> >> >
> >> >> Olá Bruno,
> >> >>
> >> >> excellent work, congrats!! I will have a look tonight (my local TZ)
> >> >> I'll try to let you know ASAP!
> >> >>
> >> >> thanks, all the best!
> >> >> -Simo
> >> >>
> >> >> http://people.apache.org/~simonetripodi/
> >> >> http://simonetripodi.livejournal.com/
> >> >> http://twitter.com/simonetripodi
> >> >> http://www.99soft.org/
> >> >>
> >> >>
> >> >> On Wed, Sep 19, 2012 at 4:12 AM, Bruno P. Kinoshita
> >> >> <brunodepau...@yahoo.com.br> wrote:
> >> >> > Hi all,
> >> >> >
> >> >> > me again bringing a new implementation idea for the Generators API
> >> >> >
> >> >> > in [functor], and looking forward to some thoughts on this :-)
> >> >> >
> >> >> > There is a separate branch for this issue [1], and here's what has
> >> been
> >> >> done.
> >> >> >
> >> >> > - Split Generator interface into Generator interface and
> LoopGenerator
> >> >> > (abstract class). IMO, this will help in modularization (see this
> >> >> discussion [2])
> >> >> > in the Generators API, as the stop() method and the wrapped
> >> generators,
> >> >> > for instance, had been added because of the generators created for
> >> >> handling
> >> >> > execution flow control (e.g.: GenerateWhile, UntilGenerate, etc).
> >> >> >
> >> >> > - Moved LoopGenerator and its implementations under the newly
> created
> >> >> > org.apache.commons.functor.generator.loop package.
> >> >> >
> >> >> > - Moved IntegerRange and LongRange from
> >> >> org.apache.commons.functor.generator.util to
> >> >> > the newly created org.apache.commons.functor.generator.range
> package.
> >> >> >
> >> >> > - Created a Range API, with a Range interface, a Ranges helper
> >> interface
> >> >> and
> >> >> > some implementations (including existing IntegerRange and
> LongRange,
> >> and
> >> >> new
> >> >> > ones like DoubleRange, FloatRange and CharacterRange).
> >> >> >
> >> >> > - Added steps different than 1 to Ranges (not the generator
> interface,
> >> >> as this
> >> >> > is related only to ranges).
> >> >> >
> >> >> > - The Ranges implemented are all Generators too, what is very
> >> >> convenient, as you
> >> >> > can use Ranges to both define intervals and/or execute a procedure
> for
> >> >> each of its
> >> >> > elements.
> >> >> >
> >> >> > I've wrote a sample code using the existing Generators API [3] and
> >> wrote
> >> >> the
> >> >> > same code for the new Generators API [4]. The API is compatible,
> but
> >> as
> >> >> some
> >> >> > packages changed, you have to update existing code (but as
> [functor]
> >> >> hasn't been
> >> >> > released yet, it shouldn't be a problem I believe :-). Both codes
> >> >> produce the
> >> >> > same output too (0 1 2 3 4 5 6 7 8 9 ).
> >> >> >
> >> >> > And here's an example [5] of creating Ranges and using them as
> >> >> Generators. More
> >> >> > examples can be found in the tests for the Generator and the Range
> >> API's.
> >> >> >
> >> >> > I've updated the examples page and added tests. I've also updated
> the
> >> >> parent
> >> >> > pom to 26, but as this is not related to the FUNCTOR-14 issue, we
> can
> >> >> drop this
> >> >> >
> >> >> > part when merging the code.
> >> >> >
> >> >> > I'll merge the changes to trunk if everybody thinks this new
> >> >> implementation is
> >> >> > better than the current one.
> >> >> >
> >> >> > A side note: PHP recently got generators too [6], and an
> interesting
> >> >> thing that I noticed in
> >> >> > their Wiki was the discussion about callback functions. After
> reading
> >> the
> >> >> > discussion, for me it looks like [functor] generators API is more
> >> >> similar to
> >> >> > callback handler. Differently than the Python and PHP
> implementations
> >> >> with the
> >> >> > yield statement.
> >> >> >
> >> >> > Thank you in advance!
> >> >> >
> >> >> > [1]
> >> >>
> >>
> https://svn.apache.org/repos/asf/commons/proper/functor/branches/generators-FUNCTOR-14
> >> >> > [2] http://markmail.org/message/nymsk7l64aj4csxi
> >> >> > [3] https://gist.github.com/3747204
> >> >> > [4] https://gist.github.com/3747207
> >> >> > [5] https://gist.github.com/3747224
> >> >> > [5] https://wiki.php.net/rfc/generators
> >> >> >
> >> >> > Bruno P. Kinoshita
> >> >> > http://kinoshita.eti.br
> >> >> > http://tupilabs.com
> >> >> >
> >> >> >>________________________________
> >> >> >> From: Matt Benson <gudnabr...@gmail.com>
> >> >> >>To: Bruno P. Kinoshita <brunodepau...@yahoo.com.br>
> >> >> >>Cc: Commons Developers List <dev@commons.apache.org>
> >> >> >>Sent: Wednesday, 6 June 2012 9:56 AM
> >> >> >>Subject: Re: [functor] Patch for FUNCTOR-14, new Generators and
> Ranges
> >> >> >>
> >> >> >>On Tue, Jun 5, 2012 at 11:48 PM, Bruno P. Kinoshita
> >> >> >><brunodepau...@yahoo.com.br> wrote:
> >> >> >>> Hi Matt,
> >> >> >>>
> >> >> >>>
> >> >> >>>> Would there be a type of Range that could not be turned into a
> >> >> >>>> Generator given a compatible Step parameter?  If not, we could
> >> define:
> >> >> >>>>
> >> >> >>>> interface Range<T, S>  {
> >> >> >>>> ...
> >> >> >>>>    Generator<T>  toGenerator(S step);
> >> >> >>>> }
> >> >> >>>>
> >> >> >>>> This way, Range itself does not contain a step, but still
> maintains
> >> >> >>>> control over how a step is used to create a generator.
> >> >> >>>
> >> >> >>> I can't think of any type that could not be turned into a
> generator
> >> >> given
> >> >> >>> the step parameter. But if a range has no step, I think we would
> >> have
> >> >> to
> >> >> >>> remove the isEmpty(), contains(), containsAll() methods from
> range
> >> >> >>> implementations, as using steps higher than 1, we need to use the
> >> step
> >> >> value
> >> >> >>> to check if a range is empty or contains a certain element (e.g.:
> >> >> integer
> >> >> >>> range (1, 2], step 3, check if contains(2) or isEmpty()).
> >> >> >>>
> >> >> >>
> >> >> >>My thought was that by decoupling a Range from a step, you use only
> >> >> >>the bound types/values to determine inclusion of a given value.
> If a
> >> >> >>Generator is created from (1, 2] with step 3, then that Generator
> will
> >> >> >>only return 1, but that doesn't reflect on the Range, IMO.
> >> >> >>
> >> >> >>Matt
> >> >> >>
> >> >> >>>
> >> >> >>>> Either way, I like the notion that a Range is its own type that
> >> just
> >> >> >>>> *happens* to either provide access to, or an implementation of,
> >> >> >>>> Generator.
> >> >> >>>
> >> >> >>> +1, let it provide access or be an implementation of Generator.
> In
> >> >> case we
> >> >> >>> do the latter case, I believe isEmpty(), contains() and other
> >> methods
> >> >> using
> >> >> >>> the step value would be doable.
> >> >> >>>
> >> >> >>> Regards,
> >> >> >>>
> >> >> >>>
> >> >> >>> Bruno P. Kinoshita
> >> >> >>> http://www.kinoshita.eti.br
> >> >> >>> http://www.tupilabs.com
> >> >> >>>
> >> >> >>> On 06/05/2012 11:52 PM, Matt Benson wrote:
> >> >> >>>>
> >> >> >>>> Hi, Bruno.  Likewise, answers inline:
> >> >> >>>>
> >> >> >>>> On Tue, Jun 5, 2012 at 9:32 PM, Bruno P. Kinoshita
> >> >> >>>> <brunodepau...@yahoo.com.br>  wrote:
> >> >> >>>>>
> >> >> >>>>> Hi Matt!
> >> >> >>>>>
> >> >> >>>>> Thanks for your response! Answers added inline.
> >> >> >>>>>
> >> >> >>>>>
> >> >> >>>>>> 1.  Why are a Range's type and step-type potentially different
> >> >> >>>>>> (different type variables, etc.)?
> >> >> >>>>>
> >> >> >>>>>
> >> >> >>>>> When I started writing this patch, the range's type and
> step-type
> >> >> were
> >> >> >>>>> the
> >> >> >>>>> same (i.e. the interface had only one generics type,<T>), but
> >> then I
> >> >> >>>>> created the CharacterRange and it didn't work because its range
> >> type
> >> >> is
> >> >> >>>>> Character and its step-type is Integer (same would happen for a
> >> >> >>>>> DateRange).
> >> >> >>>>
> >> >> >>>>
> >> >> >>>> I see; good point.
> >> >> >>>>
> >> >> >>>>>
> >> >> >>>>> What do you think? Maybe with some generics magic or with a
> >> different
> >> >> >>>>> approach we could remove the step-type? (I would be +1 for
> this)
> >> >> >>>>>
> >> >> >>>>>
> >> >> >>>>>> 2.  Why, if it is a Generator's responsibility to generate
> items
> >> >> >>>>>> subsequent to the lower endpoint, is the step part of the
> range
> >> at
> >> >> >>>>>> all? Based on [1], which definition of "range" are we
> attempting
> >> to
> >> >> >>>>>> represent?
> >> >> >>>>>
> >> >> >>>>>
> >> >> >>>>> In google guava and java-yield a range is a generator, as it
> was
> >> in
> >> >> >>>>> [functor] too (this patch removes the old IntegerRange, a
> >> generator
> >> >> of
> >> >> >>>>> Integers).
> >> >> >>>>>
> >> >> >>>>> [functor] has generators that don't require steps
> (GenerateWhile,
> >> >> >>>>> WhileGenerate, UntilGenerate, etc). I think random generators
> >> >> wouldn't
> >> >> >>>>> use
> >> >> >>>>> steps too (e.g.: RandomIntegerGenerator,
> USPhoneNumberGenerator,
> >> >> >>>>> UUIDGenerator, PrimeNumberGenerator).
> >> >> >>>>>
> >> >> >>>>> The initial idea of the Range interface, was to have similar
> >> >> behavior as
> >> >> >>>>> commons-lang's Range [1], plus being able to define steps and
> have
> >> >> the
> >> >> >>>>> actual process (the yield) being executed by an external
> agent, a
> >> >> >>>>> generator.
> >> >> >>>>> In the end, I think the of the Range in my patch would be more
> >> like
> >> >> an
> >> >> >>>>> Interval [2]?.
> >> >> >>>>>
> >> >> >>>>>
> >> >> >>>>>> The current code seems to implement definition 2 and
> >> >> >>>>>> *part* of definition 3, deferring the rest to a corresponding
> >> >> >>>>>> Generator.
> >> >> >>>>>
> >> >> >>>>>
> >> >> >>>>> I couldn't have said it better :-)
> >> >> >>>>>
> >> >> >>>>>
> >> >> >>>>>> Settling the question of whether [functor]'s Range is a
> >> >> >>>>>> "2-range" or also a "3-range" would seem to dictate our
> action:
> >>  do
> >> >> we
> >> >> >>>>>> move the step to the generator, or do we make Range calculate
> >> each
> >> >> >>>>>> item (in which case would it be simpler for Range to implement
> >> >> >>>>>> Generator)?
> >> >> >>>>>
> >> >> >>>>>
> >> >> >>>>> After reading your considerations, I now think that it would be
> >> >> better to
> >> >> >>>>> maintain the current approach (Range implements a Generator)
> and
> >> try
> >> >> to
> >> >> >>>>> implement generators for double, float and character using the
> >> actual
> >> >> >>>>> interfaces and try to use steps. What do you think?
> >> >> >>>>
> >> >> >>>>
> >> >> >>>> Would there be a type of Range that could not be turned into a
> >> >> >>>> Generator given a compatible Step parameter?  If not, we could
> >> define:
> >> >> >>>>
> >> >> >>>> interface Range<T, S>  {
> >> >> >>>> ...
> >> >> >>>>   Generator<T>  toGenerator(S step);
> >> >> >>>> }
> >> >> >>>>
> >> >> >>>> This way, Range itself does not contain a step, but still
> maintains
> >> >> >>>> control over how a step is used to create a generator.
> >> >> >>>>
> >> >> >>>>>
> >> >> >>>>> Do you think we should keep the naming standard
> >> >> IntegerRange/LongRange,
> >> >> >>>>> or
> >> >> >>>>> change them to IntegerGenerator/LongGenerator?
> >> >> >>>>
> >> >> >>>>
> >> >> >>>> Either way, I like the notion that a Range is its own type that
> >> just
> >> >> >>>> *happens* to either provide access to, or an implementation of,
> >> >> >>>> Generator.
> >> >> >>>>
> >> >> >>>> br,
> >> >> >>>> Matt
> >> >> >>>>
> >> >> >>>>>
> >> >> >>>>> Thank you for reviewing my patch and for the interesting
> >> questions!
> >> >> I'm
> >> >> >>>>> no
> >> >> >>>>> FP expert either, feel free to suggest different ideas, no hard
> >> >> feelings
> >> >> >>>>> :)
> >> >> >>>>>
> >> >> >>>>> [1]
> >> >> >>>>>
> >> >> >>>>>
> >> >>
> >>
> http://svn.apache.org/viewvc/commons/proper/lang/trunk/src/main/java/org/apache/commons/lang3/Range.java?view=markup
> >> >> >>>>> [2] http://en.wikipedia.org/wiki/Interval_(mathematics)
> >> >> >>>>>
> >> >> >>>>> Bruno P. Kinoshita
> >> >> >>>>> http://www.kinoshita.eti.br
> >> >> >>>>> http://www.tupilabs.com
> >> >> >>>>>
> >> >> >>>>>
> >> >> >>>>> On 06/05/2012 12:08 PM, Matt Benson wrote:
> >> >> >>>>>>
> >> >> >>>>>>
> >> >> >>>>>> Hi, Bruno!
> >> >> >>>>>>
> >> >> >>>>>>   I have some questions:
> >> >> >>>>>>
> >> >> >>>>>> 1.  Why are a Range's type and step-type potentially different
> >> >> >>>>>> (different type variables, etc.)?
> >> >> >>>>>> 2.  Why, if it is a Generator's responsibility to generate
> items
> >> >> >>>>>> subsequent to the lower endpoint, is the step part of the
> range
> >> at
> >> >> >>>>>> all?  Based on [1], which definition of "range" are we
> >> attempting to
> >> >> >>>>>> represent?  The current code seems to implement definition 2
> and
> >> >> >>>>>> *part* of definition 3, deferring the rest to a corresponding
> >> >> >>>>>> Generator.  Settling the question of whether [functor]'s Range
> >> is a
> >> >> >>>>>> "2-range" or also a "3-range" would seem to dictate our
> action:
> >>  do
> >> >> we
> >> >> >>>>>> move the step to the generator, or do we make Range calculate
> >> each
> >> >> >>>>>> item (in which case would it be simpler for Range to implement
> >> >> >>>>>> Generator)?
> >> >> >>>>>>
> >> >> >>>>>> I am by no means an FP or any other type of expert, so feel
> free
> >> to
> >> >> >>>>>> show me why I'm wrong on a given point!
> >> >> >>>>>>
> >> >> >>>>>> br,
> >> >> >>>>>> Matt
> >> >> >>>>>>
> >> >> >>>>>> [1] http://en.wikipedia.org/wiki/Range_(computer_science)
> >> >> >>>>>>
> >> >> >>>>>> On Mon, Jun 4, 2012 at 11:59 PM, Bruno P. Kinoshita
> >> >> >>>>>> <brunodepau...@yahoo.com.br>    wrote:
> >> >> >>>>>>>
> >> >> >>>>>>>
> >> >> >>>>>>> Hi all,
> >> >> >>>>>>>
> >> >> >>>>>>> I've finished a patch for FUNCTOR-14, regarding the
> Generators
> >> API
> >> >> in
> >> >> >>>>>>> [functor]. I'd like to hear what others think about what was
> >> done
> >> >> >>>>>>> before
> >> >> >>>>>>> attaching the patch to JIRA:
> >> >> >>>>>>>
> >> >> >>>>>>> - Didn't change the Generator interface. Although I
> commented in
> >> >> the
> >> >> >>>>>>> issue about removing the stop() and isStopped() methods and
> >> moving
> >> >> to a
> >> >> >>>>>>> different interface, it would require a major refactoring, as
> >> many
> >> >> >>>>>>> other
> >> >> >>>>>>> generators are built upon this idea.
> >> >> >>>>>>>
> >> >> >>>>>>> - Created IntegerGenerator, LongGenerator, FloatGenerator,
> >> >> >>>>>>> DoubleGenerator and CharacterGenerator. Didn't implement a
> >> >> >>>>>>> DateGenerator as
> >> >> >>>>>>> it would require more time and a discussion on how to use
> days,
> >> >> months,
> >> >> >>>>>>> years, days of week, etc.
> >> >> >>>>>>>
> >> >> >>>>>>> - Introduced Ranges, with the following initial ranges:
> >> >> IntegerRange,
> >> >> >>>>>>> LongRange, FloatRange, DoubleRange and CharacterRange. This
> API
> >> is
> >> >> >>>>>>> quite
> >> >> >>>>>>> similar to other existing APIs, with the difference that you
> can
> >> >> >>>>>>> specify the
> >> >> >>>>>>> step (like ranges in Matlab)
> >> >> >>>>>>>
> >> >> >>>>>>> - The generators that use numbers (there are many other
> >> generators,
> >> >> >>>>>>> like
> >> >> >>>>>>> GenerateWhile, GenerateUntil, etc) use ranges to create the
> >> >> series. The
> >> >> >>>>>>> objects are created only when the generator is executed,
> >> calling a
> >> >> >>>>>>> procedure. Like in python, but instead of retrieving the
> value
> >> >> with a
> >> >> >>>>>>> 'yield' statement, we give a procedure to be executed using
> the
> >> >> value
> >> >> >>>>>>> created.
> >> >> >>>>>>>
> >> >> >>>>>>> - Included tests to cover the changes.
> >> >> >>>>>>>
> >> >> >>>>>>> - Updated web site examples.
> >> >> >>>>>>>
> >> >> >>>>>>> All the tests passed, no checkstyle/pmd/findbugs errors. The
> >> >> character
> >> >> >>>>>>> range/generator is a very simple, and there are some
> operations
> >> >> with
> >> >> >>>>>>> double/float in the ranges and generators. I keep my code
> >> mirrored
> >> >> in
> >> >> >>>>>>> github
> >> >> >>>>>>> too, in case someone prefers reading it there
> >> >> >>>>>>> https://github.com/kinow/functor.
> >> >> >>>>>>>
> >> >> >>>>>>> Let me know what you think about it :-)
> >> >> >>>>>>>
> >> >> >>>>>>> Thank you in advance!
> >> >> >>>>>>>
> >> >> >>>>>>> Bruno P. Kinoshita
> >> >> >>>>>>> http://kinoshita.eti.br
> >> >> >>>>>>> http://tupilabs.com
> >> >> >>>>>>>
> >> >> >>>>>>>
> >> >> >>>>>>>
> >> >> ---------------------------------------------------------------------
> >> >> >>>>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> >> >> >>>>>>> For additional commands, e-mail: dev-h...@commons.apache.org
> >> >> >>>>>>
> >> >> >>>>>>
> >> >> >>>>>>
> >> >> >>>>>>
> >> >> ---------------------------------------------------------------------
> >> >> >>>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> >> >> >>>>>> For additional commands, e-mail: dev-h...@commons.apache.org
> >> >> >>>>>>
> >> >> >>>>>
> >> >> >>>>
> >> >> >>>>
> >> ---------------------------------------------------------------------
> >> >> >>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> >> >> >>>> For additional commands, e-mail: dev-h...@commons.apache.org
> >> >> >>>>
> >> >> >>>
> >> >> >>
> >> >>
> >>---------------------------------------------------------------------
> >> >> >>To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> >> >> >>For additional commands, e-mail: dev-h...@commons.apache.org
> >> >> >>
> >> >> >>
> >> >> >>
> >> >> >>
> >> >> >
> >> >> >
> ---------------------------------------------------------------------
> >> >> > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> >> >> > For additional commands, e-mail: dev-h...@commons.apache.org
> >> >> >
> >> >>
> >> >> ---------------------------------------------------------------------
> >> >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> >> >> For additional commands, e-mail: dev-h...@commons.apache.org
> >> >>
> >> >>
> >>
> >
> >
> >
>

Reply via email to