Re: [CSV] CSVMutableRecord
On Tue, 15 Aug 2017 12:02:20 -0600, Gary Gregory wrote: On Tue, Aug 15, 2017 at 10:38 AM, nitin mahendruwrote: > On Tue, 15 Aug 2017 09:49:04 -0600, Gary Gregory wrote: > > That looks odd to me. What comes up for me is the use case where I > > want to > > ETL a file of 10,000,000 records and update, say, one column. If am > > forced > > to create a brand new record for every record read, that would be a > > shame. > > Why? > > > If I had a mutable record, I could just keep on updating it and using > > it to > > write each row. Read record, update it, write record. No extra memory > > needed. > > How is the size of 1 additional record going to matter compared to the > size of the whole program? > > > Either we can make the current record mutable (what's the harm?) or > > we can > > make the parser serve out mutable records based on a config setting. > > This > > could be a subclass of CSVRecord with the extra method I proposed. > > The harm is that you loose all the promises of immutability. > > Regards, > Gilles > > > > > Thoughts? > > > > Gary > > > > On Tue, Aug 15, 2017 at 8:33 AM, Gilles > > > > wrote: > > > >> On Tue, 15 Aug 2017 08:01:53 -0600, Gary Gregory wrote: > >> > >>> How does that work when you want to change more than one value? > >>> > >> > >> How about a "vararg" argument: > >> > >> /** > >> * @param orig Original to be copied. > >> * @param replace Fields to be replaced. > >> */ > >> public static CSVRecord createRecord(CSVRecord orig, > >> Pair ... > >> replace) { > >> // ... > >> } > >> > >> > >> Gilles > >> > >> > >> > >>> Gary > >>> > >>> On Aug 15, 2017 00:17, "Benedikt Ritter" > >>> wrote: > >>> > >>> Hi, > > I very much like that CSVRecord is unmodifiable. So I’d suggest an > API, > that creates a new record instead of mutating the existing one: > > CSVRecord newRecord = myRecord.put(1, „value") > > I’m not sure about „put“ as a method name since it clashes with > java.util.Map#put, which is mutation based... > > Regards, > Benedikt > > > Am 15.08.2017 um 02:54 schrieb Gary Gregory > : > > > > Feel free to provide a PR on GitHub :-) > > > > Gary > > > > On Aug 14, 2017 15:29, "Gary Gregory" > wrote: > > > >> I think we've kept the design as YAGNI as possible... :-) > >> > >> Gary > >> > >> On Mon, Aug 14, 2017 at 3:25 PM, nitin mahendru < > >> nitin.mahendr...@gmail.com> wrote: > >> > >>> Yeah that also is OK. I though there is a reason to keep the > CSVRecord > >>> without setters. But maybe not! > >>> > >>> Nitin > >>> > >>> > >>> > >>> > >>> On Mon, Aug 14, 2017 at 2:22 PM Gary Gregory > > > >>> wrote: > >>> > Hi All: > > Should we consider adding put(int,Object) and put(String, > Object) to > the > current CSVRecord class? > > Gary > > On Mon, Aug 14, 2017 at 2:54 PM, nitin mahendru < > nitin.mahendr...@gmail.com> > wrote: > > > Hi Everyone, > > > > I recently pushed a change(pull request 20) to get the line > ending > >>> from > the > > parser. > > > > Now I want to push another change which I feel will also be > useful > for > the > > community. I want to add a CSVRecordMutable class which had > a > >>> constructor > > which accepts a CSVRecord object. So when we have a > CSVRecordMutable >
Re: [CSV] CSVMutableRecord
On Tue, Aug 15, 2017 at 10:38 AM, nitin mahendruwrote: > How about having a state in the class itself which says that it's mutable > or not. > If we call a setter on an immutable then it throws an exception. > By default the records are immutable and you need to make them mutable > using a new API. > pros: Saves memory, Keeps the immutability benefits > cons: people using "mutable" records need to be careful.(While threading > maybe) > Interesting idea! But I think I like the idea of a subclass better if we are going to split the behavior b/w mutable and immutable. For my money and the KISS principle, I would just add the put method in CSVRecord. Gary > > -Nitin > > > > > On Tue, Aug 15, 2017 at 9:01 AM Gilles > wrote: > > > On Tue, 15 Aug 2017 09:49:04 -0600, Gary Gregory wrote: > > > That looks odd to me. What comes up for me is the use case where I > > > want to > > > ETL a file of 10,000,000 records and update, say, one column. If am > > > forced > > > to create a brand new record for every record read, that would be a > > > shame. > > > > Why? > > > > > If I had a mutable record, I could just keep on updating it and using > > > it to > > > write each row. Read record, update it, write record. No extra memory > > > needed. > > > > How is the size of 1 additional record going to matter compared to the > > size of the whole program? > > > > > Either we can make the current record mutable (what's the harm?) or > > > we can > > > make the parser serve out mutable records based on a config setting. > > > This > > > could be a subclass of CSVRecord with the extra method I proposed. > > > > The harm is that you loose all the promises of immutability. > > > > Regards, > > Gilles > > > > > > > > Thoughts? > > > > > > Gary > > > > > > On Tue, Aug 15, 2017 at 8:33 AM, Gilles > > > > > > wrote: > > > > > >> On Tue, 15 Aug 2017 08:01:53 -0600, Gary Gregory wrote: > > >> > > >>> How does that work when you want to change more than one value? > > >>> > > >> > > >> How about a "vararg" argument: > > >> > > >> /** > > >> * @param orig Original to be copied. > > >> * @param replace Fields to be replaced. > > >> */ > > >> public static CSVRecord createRecord(CSVRecord orig, > > >> Pair ... > > >> replace) { > > >> // ... > > >> } > > >> > > >> > > >> Gilles > > >> > > >> > > >> > > >>> Gary > > >>> > > >>> On Aug 15, 2017 00:17, "Benedikt Ritter" > > >>> wrote: > > >>> > > >>> Hi, > > > > I very much like that CSVRecord is unmodifiable. So I’d suggest an > > API, > > that creates a new record instead of mutating the existing one: > > > > CSVRecord newRecord = myRecord.put(1, „value") > > > > I’m not sure about „put“ as a method name since it clashes with > > java.util.Map#put, which is mutation based... > > > > Regards, > > Benedikt > > > > > Am 15.08.2017 um 02:54 schrieb Gary Gregory > > : > > > > > > Feel free to provide a PR on GitHub :-) > > > > > > Gary > > > > > > On Aug 14, 2017 15:29, "Gary Gregory" > > wrote: > > > > > >> I think we've kept the design as YAGNI as possible... :-) > > >> > > >> Gary > > >> > > >> On Mon, Aug 14, 2017 at 3:25 PM, nitin mahendru < > > >> nitin.mahendr...@gmail.com> wrote: > > >> > > >>> Yeah that also is OK. I though there is a reason to keep the > > CSVRecord > > >>> without setters. But maybe not! > > >>> > > >>> Nitin > > >>> > > >>> > > >>> > > >>> > > >>> On Mon, Aug 14, 2017 at 2:22 PM Gary Gregory > > > > > > >>> wrote: > > >>> > > Hi All: > > > > Should we consider adding put(int,Object) and put(String, > > Object) to > > the > > current CSVRecord class? > > > > Gary > > > > On Mon, Aug 14, 2017 at 2:54 PM, nitin mahendru < > > nitin.mahendr...@gmail.com> > > wrote: > > > > > Hi Everyone, > > > > > > I recently pushed a change(pull request 20) to get the line > > ending > > >>> from > > the > > > parser. > > > > > > Now I want to push another change which I feel will also be > > useful > > for > > the > > > community. I want to add a CSVRecordMutable class which had > > a > > >>> constructor > > > which accepts a CSVRecord object. So when we have a > > CSVRecordMutable > > object > > > from it then we can edit individual columns using it. > > > > > > I would be using this to write back my edited CSV file. My > > use case >
Re: [CSV] CSVMutableRecord
How about having a state in the class itself which says that it's mutable or not. If we call a setter on an immutable then it throws an exception. By default the records are immutable and you need to make them mutable using a new API. pros: Saves memory, Keeps the immutability benefits cons: people using "mutable" records need to be careful.(While threading maybe) -Nitin On Tue, Aug 15, 2017 at 9:01 AM Gilleswrote: > On Tue, 15 Aug 2017 09:49:04 -0600, Gary Gregory wrote: > > That looks odd to me. What comes up for me is the use case where I > > want to > > ETL a file of 10,000,000 records and update, say, one column. If am > > forced > > to create a brand new record for every record read, that would be a > > shame. > > Why? > > > If I had a mutable record, I could just keep on updating it and using > > it to > > write each row. Read record, update it, write record. No extra memory > > needed. > > How is the size of 1 additional record going to matter compared to the > size of the whole program? > > > Either we can make the current record mutable (what's the harm?) or > > we can > > make the parser serve out mutable records based on a config setting. > > This > > could be a subclass of CSVRecord with the extra method I proposed. > > The harm is that you loose all the promises of immutability. > > Regards, > Gilles > > > > > Thoughts? > > > > Gary > > > > On Tue, Aug 15, 2017 at 8:33 AM, Gilles > > > > wrote: > > > >> On Tue, 15 Aug 2017 08:01:53 -0600, Gary Gregory wrote: > >> > >>> How does that work when you want to change more than one value? > >>> > >> > >> How about a "vararg" argument: > >> > >> /** > >> * @param orig Original to be copied. > >> * @param replace Fields to be replaced. > >> */ > >> public static CSVRecord createRecord(CSVRecord orig, > >> Pair ... > >> replace) { > >> // ... > >> } > >> > >> > >> Gilles > >> > >> > >> > >>> Gary > >>> > >>> On Aug 15, 2017 00:17, "Benedikt Ritter" > >>> wrote: > >>> > >>> Hi, > > I very much like that CSVRecord is unmodifiable. So I’d suggest an > API, > that creates a new record instead of mutating the existing one: > > CSVRecord newRecord = myRecord.put(1, „value") > > I’m not sure about „put“ as a method name since it clashes with > java.util.Map#put, which is mutation based... > > Regards, > Benedikt > > > Am 15.08.2017 um 02:54 schrieb Gary Gregory > : > > > > Feel free to provide a PR on GitHub :-) > > > > Gary > > > > On Aug 14, 2017 15:29, "Gary Gregory" > wrote: > > > >> I think we've kept the design as YAGNI as possible... :-) > >> > >> Gary > >> > >> On Mon, Aug 14, 2017 at 3:25 PM, nitin mahendru < > >> nitin.mahendr...@gmail.com> wrote: > >> > >>> Yeah that also is OK. I though there is a reason to keep the > CSVRecord > >>> without setters. But maybe not! > >>> > >>> Nitin > >>> > >>> > >>> > >>> > >>> On Mon, Aug 14, 2017 at 2:22 PM Gary Gregory > > > >>> wrote: > >>> > Hi All: > > Should we consider adding put(int,Object) and put(String, > Object) to > the > current CSVRecord class? > > Gary > > On Mon, Aug 14, 2017 at 2:54 PM, nitin mahendru < > nitin.mahendr...@gmail.com> > wrote: > > > Hi Everyone, > > > > I recently pushed a change(pull request 20) to get the line > ending > >>> from > the > > parser. > > > > Now I want to push another change which I feel will also be > useful > for > the > > community. I want to add a CSVRecordMutable class which had > a > >>> constructor > > which accepts a CSVRecord object. So when we have a > CSVRecordMutable > object > > from it then we can edit individual columns using it. > > > > I would be using this to write back my edited CSV file. My > use case > >>> is to > > read a csv, mangle some columns, write back a new csv. > > > > I could have directly raised a pull request but I just > wanted to > float > the > > idea before and see the reaction. > > > > Thanks > > > > Nitin > > > > >>> > >> > >> > > > > >> > > > - > To unsubscribe, e-mail: user-unsubscr...@commons.apache.org > For additional commands, e-mail: user-h...@commons.apache.org > >
Re: [CSV] CSVMutableRecord
On Tue, 15 Aug 2017 09:49:04 -0600, Gary Gregory wrote: That looks odd to me. What comes up for me is the use case where I want to ETL a file of 10,000,000 records and update, say, one column. If am forced to create a brand new record for every record read, that would be a shame. Why? If I had a mutable record, I could just keep on updating it and using it to write each row. Read record, update it, write record. No extra memory needed. How is the size of 1 additional record going to matter compared to the size of the whole program? Either we can make the current record mutable (what's the harm?) or we can make the parser serve out mutable records based on a config setting. This could be a subclass of CSVRecord with the extra method I proposed. The harm is that you loose all the promises of immutability. Regards, Gilles Thoughts? Gary On Tue, Aug 15, 2017 at 8:33 AM, Gilleswrote: On Tue, 15 Aug 2017 08:01:53 -0600, Gary Gregory wrote: How does that work when you want to change more than one value? How about a "vararg" argument: /** * @param orig Original to be copied. * @param replace Fields to be replaced. */ public static CSVRecord createRecord(CSVRecord orig, Pair ... replace) { // ... } Gilles Gary On Aug 15, 2017 00:17, "Benedikt Ritter" wrote: Hi, I very much like that CSVRecord is unmodifiable. So I’d suggest an API, that creates a new record instead of mutating the existing one: CSVRecord newRecord = myRecord.put(1, „value") I’m not sure about „put“ as a method name since it clashes with java.util.Map#put, which is mutation based... Regards, Benedikt > Am 15.08.2017 um 02:54 schrieb Gary Gregory : > > Feel free to provide a PR on GitHub :-) > > Gary > > On Aug 14, 2017 15:29, "Gary Gregory" wrote: > >> I think we've kept the design as YAGNI as possible... :-) >> >> Gary >> >> On Mon, Aug 14, 2017 at 3:25 PM, nitin mahendru < >> nitin.mahendr...@gmail.com> wrote: >> >>> Yeah that also is OK. I though there is a reason to keep the CSVRecord >>> without setters. But maybe not! >>> >>> Nitin >>> >>> >>> >>> >>> On Mon, Aug 14, 2017 at 2:22 PM Gary Gregory >>> wrote: >>> Hi All: Should we consider adding put(int,Object) and put(String, Object) to the current CSVRecord class? Gary On Mon, Aug 14, 2017 at 2:54 PM, nitin mahendru < nitin.mahendr...@gmail.com> wrote: > Hi Everyone, > > I recently pushed a change(pull request 20) to get the line ending >>> from the > parser. > > Now I want to push another change which I feel will also be useful for the > community. I want to add a CSVRecordMutable class which had a >>> constructor > which accepts a CSVRecord object. So when we have a CSVRecordMutable object > from it then we can edit individual columns using it. > > I would be using this to write back my edited CSV file. My use case >>> is to > read a csv, mangle some columns, write back a new csv. > > I could have directly raised a pull request but I just wanted to float the > idea before and see the reaction. > > Thanks > > Nitin > >>> >> >> - To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org
Re: [CSV] CSVMutableRecord
That looks odd to me. What comes up for me is the use case where I want to ETL a file of 10,000,000 records and update, say, one column. If am forced to create a brand new record for every record read, that would be a shame. If I had a mutable record, I could just keep on updating it and using it to write each row. Read record, update it, write record. No extra memory needed. Either we can make the current record mutable (what's the harm?) or we can make the parser serve out mutable records based on a config setting. This could be a subclass of CSVRecord with the extra method I proposed. Thoughts? Gary On Tue, Aug 15, 2017 at 8:33 AM, Gilleswrote: > On Tue, 15 Aug 2017 08:01:53 -0600, Gary Gregory wrote: > >> How does that work when you want to change more than one value? >> > > How about a "vararg" argument: > > /** > * @param orig Original to be copied. > * @param replace Fields to be replaced. > */ > public static CSVRecord createRecord(CSVRecord orig, > Pair ... replace) { > // ... > } > > > Gilles > > > >> Gary >> >> On Aug 15, 2017 00:17, "Benedikt Ritter" wrote: >> >> Hi, >>> >>> I very much like that CSVRecord is unmodifiable. So I’d suggest an API, >>> that creates a new record instead of mutating the existing one: >>> >>> CSVRecord newRecord = myRecord.put(1, „value") >>> >>> I’m not sure about „put“ as a method name since it clashes with >>> java.util.Map#put, which is mutation based... >>> >>> Regards, >>> Benedikt >>> >>> > Am 15.08.2017 um 02:54 schrieb Gary Gregory : >>> > >>> > Feel free to provide a PR on GitHub :-) >>> > >>> > Gary >>> > >>> > On Aug 14, 2017 15:29, "Gary Gregory" wrote: >>> > >>> >> I think we've kept the design as YAGNI as possible... :-) >>> >> >>> >> Gary >>> >> >>> >> On Mon, Aug 14, 2017 at 3:25 PM, nitin mahendru < >>> >> nitin.mahendr...@gmail.com> wrote: >>> >> >>> >>> Yeah that also is OK. I though there is a reason to keep the >>> CSVRecord >>> >>> without setters. But maybe not! >>> >>> >>> >>> Nitin >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> On Mon, Aug 14, 2017 at 2:22 PM Gary Gregory >> > >>> >>> wrote: >>> >>> >>> Hi All: >>> >>> Should we consider adding put(int,Object) and put(String, Object) to >>> the >>> current CSVRecord class? >>> >>> Gary >>> >>> On Mon, Aug 14, 2017 at 2:54 PM, nitin mahendru < >>> nitin.mahendr...@gmail.com> >>> wrote: >>> >>> > Hi Everyone, >>> > >>> > I recently pushed a change(pull request 20) to get the line ending >>> >>> from >>> the >>> > parser. >>> > >>> > Now I want to push another change which I feel will also be useful >>> for >>> the >>> > community. I want to add a CSVRecordMutable class which had a >>> >>> constructor >>> > which accepts a CSVRecord object. So when we have a >>> CSVRecordMutable >>> object >>> > from it then we can edit individual columns using it. >>> > >>> > I would be using this to write back my edited CSV file. My use case >>> >>> is to >>> > read a csv, mangle some columns, write back a new csv. >>> > >>> > I could have directly raised a pull request but I just wanted to >>> float >>> the >>> > idea before and see the reaction. >>> > >>> > Thanks >>> > >>> > Nitin >>> > >>> >>> >>> >>> >> >>> >> >>> >>> >>> > > - > To unsubscribe, e-mail: user-unsubscr...@commons.apache.org > For additional commands, e-mail: user-h...@commons.apache.org > >
Re: [CSV] CSVMutableRecord
On Tue, 15 Aug 2017 08:01:53 -0600, Gary Gregory wrote: How does that work when you want to change more than one value? How about a "vararg" argument: /** * @param orig Original to be copied. * @param replace Fields to be replaced. */ public static CSVRecord createRecord(CSVRecord orig, Pair... replace) { // ... } Gilles Gary On Aug 15, 2017 00:17, "Benedikt Ritter" wrote: Hi, I very much like that CSVRecord is unmodifiable. So I’d suggest an API, that creates a new record instead of mutating the existing one: CSVRecord newRecord = myRecord.put(1, „value") I’m not sure about „put“ as a method name since it clashes with java.util.Map#put, which is mutation based... Regards, Benedikt > Am 15.08.2017 um 02:54 schrieb Gary Gregory : > > Feel free to provide a PR on GitHub :-) > > Gary > > On Aug 14, 2017 15:29, "Gary Gregory" wrote: > >> I think we've kept the design as YAGNI as possible... :-) >> >> Gary >> >> On Mon, Aug 14, 2017 at 3:25 PM, nitin mahendru < >> nitin.mahendr...@gmail.com> wrote: >> >>> Yeah that also is OK. I though there is a reason to keep the CSVRecord >>> without setters. But maybe not! >>> >>> Nitin >>> >>> >>> >>> >>> On Mon, Aug 14, 2017 at 2:22 PM Gary Gregory >>> wrote: >>> Hi All: Should we consider adding put(int,Object) and put(String, Object) to the current CSVRecord class? Gary On Mon, Aug 14, 2017 at 2:54 PM, nitin mahendru < nitin.mahendr...@gmail.com> wrote: > Hi Everyone, > > I recently pushed a change(pull request 20) to get the line ending >>> from the > parser. > > Now I want to push another change which I feel will also be useful for the > community. I want to add a CSVRecordMutable class which had a >>> constructor > which accepts a CSVRecord object. So when we have a CSVRecordMutable object > from it then we can edit individual columns using it. > > I would be using this to write back my edited CSV file. My use case >>> is to > read a csv, mangle some columns, write back a new csv. > > I could have directly raised a pull request but I just wanted to float the > idea before and see the reaction. > > Thanks > > Nitin > >>> >> >> - To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org
Re: [CSV] CSVMutableRecord
How does that work when you want to change more than one value? Gary On Aug 15, 2017 00:17, "Benedikt Ritter"wrote: > Hi, > > I very much like that CSVRecord is unmodifiable. So I’d suggest an API, > that creates a new record instead of mutating the existing one: > > CSVRecord newRecord = myRecord.put(1, „value") > > I’m not sure about „put“ as a method name since it clashes with > java.util.Map#put, which is mutation based... > > Regards, > Benedikt > > > Am 15.08.2017 um 02:54 schrieb Gary Gregory : > > > > Feel free to provide a PR on GitHub :-) > > > > Gary > > > > On Aug 14, 2017 15:29, "Gary Gregory" wrote: > > > >> I think we've kept the design as YAGNI as possible... :-) > >> > >> Gary > >> > >> On Mon, Aug 14, 2017 at 3:25 PM, nitin mahendru < > >> nitin.mahendr...@gmail.com> wrote: > >> > >>> Yeah that also is OK. I though there is a reason to keep the CSVRecord > >>> without setters. But maybe not! > >>> > >>> Nitin > >>> > >>> > >>> > >>> > >>> On Mon, Aug 14, 2017 at 2:22 PM Gary Gregory > >>> wrote: > >>> > Hi All: > > Should we consider adding put(int,Object) and put(String, Object) to > the > current CSVRecord class? > > Gary > > On Mon, Aug 14, 2017 at 2:54 PM, nitin mahendru < > nitin.mahendr...@gmail.com> > wrote: > > > Hi Everyone, > > > > I recently pushed a change(pull request 20) to get the line ending > >>> from > the > > parser. > > > > Now I want to push another change which I feel will also be useful > for > the > > community. I want to add a CSVRecordMutable class which had a > >>> constructor > > which accepts a CSVRecord object. So when we have a CSVRecordMutable > object > > from it then we can edit individual columns using it. > > > > I would be using this to write back my edited CSV file. My use case > >>> is to > > read a csv, mangle some columns, write back a new csv. > > > > I could have directly raised a pull request but I just wanted to > float > the > > idea before and see the reaction. > > > > Thanks > > > > Nitin > > > > >>> > >> > >> > > > - > To unsubscribe, e-mail: user-unsubscr...@commons.apache.org > For additional commands, e-mail: user-h...@commons.apache.org > >
Re: [CSV] CSVMutableRecord
Hi, I very much like that CSVRecord is unmodifiable. So I’d suggest an API, that creates a new record instead of mutating the existing one: CSVRecord newRecord = myRecord.put(1, „value") I’m not sure about „put“ as a method name since it clashes with java.util.Map#put, which is mutation based... Regards, Benedikt > Am 15.08.2017 um 02:54 schrieb Gary Gregory: > > Feel free to provide a PR on GitHub :-) > > Gary > > On Aug 14, 2017 15:29, "Gary Gregory" wrote: > >> I think we've kept the design as YAGNI as possible... :-) >> >> Gary >> >> On Mon, Aug 14, 2017 at 3:25 PM, nitin mahendru < >> nitin.mahendr...@gmail.com> wrote: >> >>> Yeah that also is OK. I though there is a reason to keep the CSVRecord >>> without setters. But maybe not! >>> >>> Nitin >>> >>> >>> >>> >>> On Mon, Aug 14, 2017 at 2:22 PM Gary Gregory >>> wrote: >>> Hi All: Should we consider adding put(int,Object) and put(String, Object) to the current CSVRecord class? Gary On Mon, Aug 14, 2017 at 2:54 PM, nitin mahendru < nitin.mahendr...@gmail.com> wrote: > Hi Everyone, > > I recently pushed a change(pull request 20) to get the line ending >>> from the > parser. > > Now I want to push another change which I feel will also be useful for the > community. I want to add a CSVRecordMutable class which had a >>> constructor > which accepts a CSVRecord object. So when we have a CSVRecordMutable object > from it then we can edit individual columns using it. > > I would be using this to write back my edited CSV file. My use case >>> is to > read a csv, mangle some columns, write back a new csv. > > I could have directly raised a pull request but I just wanted to float the > idea before and see the reaction. > > Thanks > > Nitin > >>> >> >> - To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org