You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@groovy.apache.org by Schalk Cronjé <ys...@gmail.com> on 2015/11/11 16:39:20 UTC

Different behaviour for @Sortable 2.3.6+

This following code works under 2.3.3, but fails under 2.3.6 - 2.4.5

    @EqualsAndHashCode(excludes=['location'])
    @TupleConstructor
    @Sortable(excludes=['location'])
    @ToString
    class Bar implements Comparable {
         String version
         File location
    }

For the failure it complains that "int CompareTo" needs to be 
implemented. I was under the impression that @Sortable adds that method.

-- 
Schalk W. Cronjé
Twitter / Ello / Toeter : @ysb33r


Re: Different behaviour for @Sortable 2.3.6+

Posted by Schalk Cronjé <ys...@gmail.com>.
Now I also understand why it failed to compile.

As a side note, this crazy code (don't try this at home) works

    interface Foo extends Comparable<Bar> {}
    @Sortable class Bar implements Foo {}


On 12/11/2015 13:49, Paul King wrote:
> Yes, it was in 2.3.4 to make @Sortable work with @CompileStatic/@TypeChecked.
> See here:
> https://issues.apache.org/jira/browse/GROOVY-6870
> and
> SortableTransformTest#testSortableWithCompileStatic
>
> Cheers, Paul.
>
>
> On Thu, Nov 12, 2015 at 10:48 PM, Schalk Cronjé <ys...@gmail.com> wrote:
>> Paul,
>>
>> That must have been a change introduced between Groovy 2.3.3 (which ships
>> with Gradle 2.0) and Groovy 2.3.6
>>
>> The below code compiled against the Gradle 2.0 version, but failed it
>> compiled against later Gradle versions (due to newer versions of Groovy)
>>
>> interface Foo extends Comparable {
>>    String getVersion()
>>    File getLocation()
>> }
>>
>> @EqualsAndHashCode(excludes=['location'])
>> @TupleConstructor
>> @Sortable(excludes=['location'])
>> @ToString
>> class Bar implements Foo {
>>    String version
>>    File location
>> }
>>
>> I guess I can drop the Comparable from the Foo interface or change it to an
>> abstract class that is annotated with @Sortable.
>>
>> Thanks for the clarification.
>>
>>
>> On 12/11/2015 12:35, Paul King wrote:
>>
>> @Sortable on a class Foo will add "Comparable<Foo>" to the list of
>> implemented interfaces and a "compareTo(Foo other)" method.
>>
>> If you also implement the raw Comparable interface manually you will
>> need to also add a "compareTo(Object other)" method but the raw
>> version is not required or typically recommended.
>>
>> Cheers, Paul.
>>
>> On Thu, Nov 12, 2015 at 3:18 PM, Balachandran Sivakumar
>> <be...@gmail.com> wrote:
>>
>> Hi,
>>
>>              Just looked up the Groovy doc - The doc for @Sortable[1] says
>> that the generated Groovy class will implement the Comparable interface.
>> Thanks
>>
>> [1]
>> http://docs.groovy-lang.org/next/html/gapi/groovy/transform/Sortable.html
>>
>> On Thu, Nov 12, 2015 at 10:21 AM, Balachandran Sivakumar
>> <be...@gmail.com> wrote:
>>
>> Hi Schalk,
>>
>> This works on 2.4.5
>>
>> @EqualsAndHashCode(excludes = ['config'])
>> @Sortable(excludes = ['config'])
>> @TupleConstructor
>> @ToString
>> class Foo {
>>      String version
>>      File config
>> }
>>
>> I just have @Sortable annotation. From Groovy 2.3, Sortable implements
>> Comparable is what I understand from the Groovy Goodness page on this
>> topic[1]. So, just the class which is annotated with @Sortable is enough. I
>> think We don't have to implement an "interface" at all. Thanks
>>
>> [1]
>> http://mrhaki.blogspot.in/2014/05/groovy-goodness-use-sortable-annotation.html
>>
>>
>> On Wed, Nov 11, 2015 at 11:03 PM, Schalk Cronjé <ys...@gmail.com> wrote:
>>
>> Bala,
>>
>> That does not make sense, as the following will also fail:
>>
>> interface Foo extends Comparable {
>>    String getVersion()
>>    File getLocation()
>> }
>>
>> @EqualsAndHashCode(excludes=['location'])
>> @TupleConstructor
>> @Sortable(excludes=['location'])
>> @ToString
>> class Bar implements Foo {
>>    String version
>>    File location
>> }
>>
>>
>> On 11/11/2015 16:55, Balachandran Sivakumar wrote:
>>
>> Hi Schalk,
>>
>>
>>
>> On Wed, Nov 11, 2015 at 9:09 PM, Schalk Cronjé <ys...@gmail.com> wrote:
>>
>> This following code works under 2.3.3, but fails under 2.3.6 - 2.4.5
>>
>> @EqualsAndHashCode(excludes=['location'])
>> @TupleConstructor
>> @Sortable(excludes=['location'])
>> @ToString
>> class Bar implements Comparable {
>>
>>             I think @Sortable automatically makes it Comparable. So, we
>> don't have to "implement" Comparable if we use the @Sortable annotation.
>> Without the implements Comparable part, this works fine for me on groovy
>> 2.4.5. Thanks
>>
>>
>> --
>> Thank you
>> Balachandran Sivakumar
>>
>>
>>
>> --
>> Schalk W. Cronjé
>> Twitter / Ello / Toeter : @ysb33r
>>
>>
>>
>> --
>> Thank you
>> Balachandran Sivakumar
>>
>>
>>
>> --
>> Thank you
>> Balachandran Sivakumar
>>
>>
>>
>> --
>> Schalk W. Cronjé
>> Twitter / Ello / Toeter : @ysb33r


-- 
Schalk W. Cronjé
Twitter / Ello / Toeter : @ysb33r


Re: Different behaviour for @Sortable 2.3.6+

Posted by Paul King <pa...@asert.com.au>.
Yes, it was in 2.3.4 to make @Sortable work with @CompileStatic/@TypeChecked.
See here:
https://issues.apache.org/jira/browse/GROOVY-6870
and
SortableTransformTest#testSortableWithCompileStatic

Cheers, Paul.


On Thu, Nov 12, 2015 at 10:48 PM, Schalk Cronjé <ys...@gmail.com> wrote:
> Paul,
>
> That must have been a change introduced between Groovy 2.3.3 (which ships
> with Gradle 2.0) and Groovy 2.3.6
>
> The below code compiled against the Gradle 2.0 version, but failed it
> compiled against later Gradle versions (due to newer versions of Groovy)
>
> interface Foo extends Comparable {
>   String getVersion()
>   File getLocation()
> }
>
> @EqualsAndHashCode(excludes=['location'])
> @TupleConstructor
> @Sortable(excludes=['location'])
> @ToString
> class Bar implements Foo {
>   String version
>   File location
> }
>
> I guess I can drop the Comparable from the Foo interface or change it to an
> abstract class that is annotated with @Sortable.
>
> Thanks for the clarification.
>
>
> On 12/11/2015 12:35, Paul King wrote:
>
> @Sortable on a class Foo will add "Comparable<Foo>" to the list of
> implemented interfaces and a "compareTo(Foo other)" method.
>
> If you also implement the raw Comparable interface manually you will
> need to also add a "compareTo(Object other)" method but the raw
> version is not required or typically recommended.
>
> Cheers, Paul.
>
> On Thu, Nov 12, 2015 at 3:18 PM, Balachandran Sivakumar
> <be...@gmail.com> wrote:
>
> Hi,
>
>             Just looked up the Groovy doc - The doc for @Sortable[1] says
> that the generated Groovy class will implement the Comparable interface.
> Thanks
>
> [1]
> http://docs.groovy-lang.org/next/html/gapi/groovy/transform/Sortable.html
>
> On Thu, Nov 12, 2015 at 10:21 AM, Balachandran Sivakumar
> <be...@gmail.com> wrote:
>
> Hi Schalk,
>
> This works on 2.4.5
>
> @EqualsAndHashCode(excludes = ['config'])
> @Sortable(excludes = ['config'])
> @TupleConstructor
> @ToString
> class Foo {
>     String version
>     File config
> }
>
> I just have @Sortable annotation. From Groovy 2.3, Sortable implements
> Comparable is what I understand from the Groovy Goodness page on this
> topic[1]. So, just the class which is annotated with @Sortable is enough. I
> think We don't have to implement an "interface" at all. Thanks
>
> [1]
> http://mrhaki.blogspot.in/2014/05/groovy-goodness-use-sortable-annotation.html
>
>
> On Wed, Nov 11, 2015 at 11:03 PM, Schalk Cronjé <ys...@gmail.com> wrote:
>
> Bala,
>
> That does not make sense, as the following will also fail:
>
> interface Foo extends Comparable {
>   String getVersion()
>   File getLocation()
> }
>
> @EqualsAndHashCode(excludes=['location'])
> @TupleConstructor
> @Sortable(excludes=['location'])
> @ToString
> class Bar implements Foo {
>   String version
>   File location
> }
>
>
> On 11/11/2015 16:55, Balachandran Sivakumar wrote:
>
> Hi Schalk,
>
>
>
> On Wed, Nov 11, 2015 at 9:09 PM, Schalk Cronjé <ys...@gmail.com> wrote:
>
> This following code works under 2.3.3, but fails under 2.3.6 - 2.4.5
>
> @EqualsAndHashCode(excludes=['location'])
> @TupleConstructor
> @Sortable(excludes=['location'])
> @ToString
> class Bar implements Comparable {
>
>            I think @Sortable automatically makes it Comparable. So, we
> don't have to "implement" Comparable if we use the @Sortable annotation.
> Without the implements Comparable part, this works fine for me on groovy
> 2.4.5. Thanks
>
>
> --
> Thank you
> Balachandran Sivakumar
>
>
>
> --
> Schalk W. Cronjé
> Twitter / Ello / Toeter : @ysb33r
>
>
>
> --
> Thank you
> Balachandran Sivakumar
>
>
>
> --
> Thank you
> Balachandran Sivakumar
>
>
>
> --
> Schalk W. Cronjé
> Twitter / Ello / Toeter : @ysb33r

Re: Different behaviour for @Sortable 2.3.6+

Posted by Schalk Cronjé <ys...@gmail.com>.
Paul,

That must have been a change introduced between Groovy 2.3.3 (which 
ships with Gradle 2.0) and Groovy 2.3.6

The below code compiled against the Gradle 2.0 version, but failed it 
compiled against later Gradle versions (due to newer versions of Groovy)

    interface Foo extends Comparable {
       String getVersion()
       File getLocation()
    }

    @EqualsAndHashCode(excludes=['location'])
    @TupleConstructor
    @Sortable(excludes=['location'])
    @ToString
    class Bar implements Foo {
       String version
       File location
    }

I guess I can drop the Comparable from the Foo interface or change it to 
an abstract class that is annotated with @Sortable.

Thanks for the clarification.

On 12/11/2015 12:35, Paul King wrote:
> @Sortable on a class Foo will add "Comparable<Foo>" to the list of
> implemented interfaces and a "compareTo(Foo other)" method.
>
> If you also implement the raw Comparable interface manually you will
> need to also add a "compareTo(Object other)" method but the raw
> version is not required or typically recommended.
>
> Cheers, Paul.
>
> On Thu, Nov 12, 2015 at 3:18 PM, Balachandran Sivakumar
> <be...@gmail.com> wrote:
>> Hi,
>>
>>              Just looked up the Groovy doc - The doc for @Sortable[1] says
>> that the generated Groovy class will implement the Comparable interface.
>> Thanks
>>
>> [1]
>> http://docs.groovy-lang.org/next/html/gapi/groovy/transform/Sortable.html
>>
>> On Thu, Nov 12, 2015 at 10:21 AM, Balachandran Sivakumar
>> <be...@gmail.com> wrote:
>>> Hi Schalk,
>>>
>>> This works on 2.4.5
>>>
>>> @EqualsAndHashCode(excludes = ['config'])
>>> @Sortable(excludes = ['config'])
>>> @TupleConstructor
>>> @ToString
>>> class Foo {
>>>      String version
>>>      File config
>>> }
>>>
>>> I just have @Sortable annotation. From Groovy 2.3, Sortable implements
>>> Comparable is what I understand from the Groovy Goodness page on this
>>> topic[1]. So, just the class which is annotated with @Sortable is enough. I
>>> think We don't have to implement an "interface" at all. Thanks
>>>
>>> [1]
>>> http://mrhaki.blogspot.in/2014/05/groovy-goodness-use-sortable-annotation.html
>>>
>>>
>>> On Wed, Nov 11, 2015 at 11:03 PM, Schalk Cronjé <ys...@gmail.com> wrote:
>>>> Bala,
>>>>
>>>> That does not make sense, as the following will also fail:
>>>>
>>>> interface Foo extends Comparable {
>>>>    String getVersion()
>>>>    File getLocation()
>>>> }
>>>>
>>>> @EqualsAndHashCode(excludes=['location'])
>>>> @TupleConstructor
>>>> @Sortable(excludes=['location'])
>>>> @ToString
>>>> class Bar implements Foo {
>>>>    String version
>>>>    File location
>>>> }
>>>>
>>>>
>>>> On 11/11/2015 16:55, Balachandran Sivakumar wrote:
>>>>
>>>> Hi Schalk,
>>>>
>>>>
>>>>
>>>> On Wed, Nov 11, 2015 at 9:09 PM, Schalk Cronjé <ys...@gmail.com> wrote:
>>>>> This following code works under 2.3.3, but fails under 2.3.6 - 2.4.5
>>>>>
>>>>> @EqualsAndHashCode(excludes=['location'])
>>>>> @TupleConstructor
>>>>> @Sortable(excludes=['location'])
>>>>> @ToString
>>>>> class Bar implements Comparable {
>>>>
>>>>             I think @Sortable automatically makes it Comparable. So, we
>>>> don't have to "implement" Comparable if we use the @Sortable annotation.
>>>> Without the implements Comparable part, this works fine for me on groovy
>>>> 2.4.5. Thanks
>>>>
>>>>
>>>> --
>>>> Thank you
>>>> Balachandran Sivakumar
>>>>
>>>>
>>>>
>>>> --
>>>> Schalk W. Cronjé
>>>> Twitter / Ello / Toeter : @ysb33r
>>>
>>>
>>>
>>> --
>>> Thank you
>>> Balachandran Sivakumar
>>>
>>
>>
>> --
>> Thank you
>> Balachandran Sivakumar
>>


-- 
Schalk W. Cronjé
Twitter / Ello / Toeter : @ysb33r


Re: Different behaviour for @Sortable 2.3.6+

Posted by Paul King <pa...@asert.com.au>.
@Sortable on a class Foo will add "Comparable<Foo>" to the list of
implemented interfaces and a "compareTo(Foo other)" method.

If you also implement the raw Comparable interface manually you will
need to also add a "compareTo(Object other)" method but the raw
version is not required or typically recommended.

Cheers, Paul.

On Thu, Nov 12, 2015 at 3:18 PM, Balachandran Sivakumar
<be...@gmail.com> wrote:
> Hi,
>
>             Just looked up the Groovy doc - The doc for @Sortable[1] says
> that the generated Groovy class will implement the Comparable interface.
> Thanks
>
> [1]
> http://docs.groovy-lang.org/next/html/gapi/groovy/transform/Sortable.html
>
> On Thu, Nov 12, 2015 at 10:21 AM, Balachandran Sivakumar
> <be...@gmail.com> wrote:
>>
>> Hi Schalk,
>>
>> This works on 2.4.5
>>
>> @EqualsAndHashCode(excludes = ['config'])
>> @Sortable(excludes = ['config'])
>> @TupleConstructor
>> @ToString
>> class Foo {
>>     String version
>>     File config
>> }
>>
>> I just have @Sortable annotation. From Groovy 2.3, Sortable implements
>> Comparable is what I understand from the Groovy Goodness page on this
>> topic[1]. So, just the class which is annotated with @Sortable is enough. I
>> think We don't have to implement an "interface" at all. Thanks
>>
>> [1]
>> http://mrhaki.blogspot.in/2014/05/groovy-goodness-use-sortable-annotation.html
>>
>>
>> On Wed, Nov 11, 2015 at 11:03 PM, Schalk Cronjé <ys...@gmail.com> wrote:
>>>
>>> Bala,
>>>
>>> That does not make sense, as the following will also fail:
>>>
>>> interface Foo extends Comparable {
>>>   String getVersion()
>>>   File getLocation()
>>> }
>>>
>>> @EqualsAndHashCode(excludes=['location'])
>>> @TupleConstructor
>>> @Sortable(excludes=['location'])
>>> @ToString
>>> class Bar implements Foo {
>>>   String version
>>>   File location
>>> }
>>>
>>>
>>> On 11/11/2015 16:55, Balachandran Sivakumar wrote:
>>>
>>> Hi Schalk,
>>>
>>>
>>>
>>> On Wed, Nov 11, 2015 at 9:09 PM, Schalk Cronjé <ys...@gmail.com> wrote:
>>>>
>>>> This following code works under 2.3.3, but fails under 2.3.6 - 2.4.5
>>>>
>>>> @EqualsAndHashCode(excludes=['location'])
>>>> @TupleConstructor
>>>> @Sortable(excludes=['location'])
>>>> @ToString
>>>> class Bar implements Comparable {
>>>
>>>
>>>            I think @Sortable automatically makes it Comparable. So, we
>>> don't have to "implement" Comparable if we use the @Sortable annotation.
>>> Without the implements Comparable part, this works fine for me on groovy
>>> 2.4.5. Thanks
>>>
>>>
>>> --
>>> Thank you
>>> Balachandran Sivakumar
>>>
>>>
>>>
>>> --
>>> Schalk W. Cronjé
>>> Twitter / Ello / Toeter : @ysb33r
>>
>>
>>
>>
>> --
>> Thank you
>> Balachandran Sivakumar
>>
>
>
>
> --
> Thank you
> Balachandran Sivakumar
>

Re: Different behaviour for @Sortable 2.3.6+

Posted by Balachandran Sivakumar <be...@gmail.com>.
Hi,

            Just looked up the Groovy doc - The doc for @Sortable[1] says
that the generated Groovy class will implement the Comparable interface.
Thanks

[1]
http://docs.groovy-lang.org/next/html/gapi/groovy/transform/Sortable.html

On Thu, Nov 12, 2015 at 10:21 AM, Balachandran Sivakumar <
benignbala@gmail.com> wrote:

> Hi Schalk,
>
> This works on 2.4.5
>
> @EqualsAndHashCode(excludes = ['config'])
> @Sortable(excludes = ['config'])
> @TupleConstructor
> @ToString
> class Foo {
>     String version
>     File config
> }
>
> I just have @Sortable annotation. From Groovy 2.3, Sortable implements
> Comparable is what I understand from the Groovy Goodness page on this
> topic[1]. So, just the class which is annotated with @Sortable is enough. I
> think We don't have to implement an "interface" at all. Thanks
>
> [1]
> http://mrhaki.blogspot.in/2014/05/groovy-goodness-use-sortable-annotation.html
>
>
>
> On Wed, Nov 11, 2015 at 11:03 PM, Schalk Cronjé <ys...@gmail.com> wrote:
>
>> Bala,
>>
>> That does not make sense, as the following will also fail:
>>
>> interface Foo extends Comparable {
>>   String getVersion()
>>   File getLocation()
>> }
>>
>> @EqualsAndHashCode(excludes=['location'])
>> @TupleConstructor
>> @Sortable(excludes=['location'])
>> @ToString
>> class Bar implements Foo {
>>   String version
>>   File location
>> }
>>
>>
>> On 11/11/2015 16:55, Balachandran Sivakumar wrote:
>>
>> Hi Schalk,
>>
>>
>>
>> On Wed, Nov 11, 2015 at 9:09 PM, Schalk Cronjé <ys...@gmail.com> wrote:
>>
>>> This following code works under 2.3.3, but fails under 2.3.6 - 2.4.5
>>>
>>> @EqualsAndHashCode(excludes=['location'])
>>> @TupleConstructor
>>> @Sortable(excludes=['location'])
>>> @ToString
>>> class Bar implements Comparable {
>>>
>>>
>>            I think @Sortable automatically makes it Comparable. So, we
>> don't have to "implement" Comparable if we use the @Sortable annotation.
>> Without the implements Comparable part, this works fine for me on groovy
>> 2.4.5. Thanks
>>
>>
>> --
>> Thank you
>> Balachandran Sivakumar
>>
>>
>>
>> --
>> Schalk W. Cronjé
>> Twitter / Ello / Toeter : @ysb33r
>>
>>
>
>
> --
> Thank you
> Balachandran Sivakumar
>
>


-- 
Thank you
Balachandran Sivakumar

Re: Different behaviour for @Sortable 2.3.6+

Posted by Balachandran Sivakumar <be...@gmail.com>.
Hi Schalk,

This works on 2.4.5

@EqualsAndHashCode(excludes = ['config'])
@Sortable(excludes = ['config'])
@TupleConstructor
@ToString
class Foo {
    String version
    File config
}

I just have @Sortable annotation. From Groovy 2.3, Sortable implements
Comparable is what I understand from the Groovy Goodness page on this
topic[1]. So, just the class which is annotated with @Sortable is enough. I
think We don't have to implement an "interface" at all. Thanks

[1]
http://mrhaki.blogspot.in/2014/05/groovy-goodness-use-sortable-annotation.html



On Wed, Nov 11, 2015 at 11:03 PM, Schalk Cronjé <ys...@gmail.com> wrote:

> Bala,
>
> That does not make sense, as the following will also fail:
>
> interface Foo extends Comparable {
>   String getVersion()
>   File getLocation()
> }
>
> @EqualsAndHashCode(excludes=['location'])
> @TupleConstructor
> @Sortable(excludes=['location'])
> @ToString
> class Bar implements Foo {
>   String version
>   File location
> }
>
>
> On 11/11/2015 16:55, Balachandran Sivakumar wrote:
>
> Hi Schalk,
>
>
>
> On Wed, Nov 11, 2015 at 9:09 PM, Schalk Cronjé <ys...@gmail.com> wrote:
>
>> This following code works under 2.3.3, but fails under 2.3.6 - 2.4.5
>>
>> @EqualsAndHashCode(excludes=['location'])
>> @TupleConstructor
>> @Sortable(excludes=['location'])
>> @ToString
>> class Bar implements Comparable {
>>
>>
>            I think @Sortable automatically makes it Comparable. So, we
> don't have to "implement" Comparable if we use the @Sortable annotation.
> Without the implements Comparable part, this works fine for me on groovy
> 2.4.5. Thanks
>
>
> --
> Thank you
> Balachandran Sivakumar
>
>
>
> --
> Schalk W. Cronjé
> Twitter / Ello / Toeter : @ysb33r
>
>


-- 
Thank you
Balachandran Sivakumar

Re: Different behaviour for @Sortable 2.3.6+

Posted by Schalk Cronjé <ys...@gmail.com>.
Bala,

That does not make sense, as the following will also fail:

    interface Foo extends Comparable {
       String getVersion()
       File getLocation()
    }

    @EqualsAndHashCode(excludes=['location'])
    @TupleConstructor
    @Sortable(excludes=['location'])
    @ToString
    class Bar implements Foo {
       String version
       File location
    }


On 11/11/2015 16:55, Balachandran Sivakumar wrote:
> Hi Schalk,
>
>
>
> On Wed, Nov 11, 2015 at 9:09 PM, Schalk Cronjé <ysb33r@gmail.com 
> <ma...@gmail.com>> wrote:
>
>     This following code works under 2.3.3, but fails under 2.3.6 - 2.4.5
>
>         @EqualsAndHashCode(excludes=['location'])
>         @TupleConstructor
>         @Sortable(excludes=['location'])
>         @ToString
>         class Bar implements Comparable {
>
>
>            I think @Sortable automatically makes it Comparable. So, we 
> don't have to "implement" Comparable if we use the @Sortable 
> annotation. Without the implements Comparable part, this works fine 
> for me on groovy 2.4.5. Thanks
>
> -- 
> Thank you
> Balachandran Sivakumar
>


-- 
Schalk W. Cronjé
Twitter / Ello / Toeter : @ysb33r


Re: Different behaviour for @Sortable 2.3.6+

Posted by Balachandran Sivakumar <be...@gmail.com>.
Hi Schalk,



On Wed, Nov 11, 2015 at 9:09 PM, Schalk Cronjé <ys...@gmail.com> wrote:

> This following code works under 2.3.3, but fails under 2.3.6 - 2.4.5
>
> @EqualsAndHashCode(excludes=['location'])
> @TupleConstructor
> @Sortable(excludes=['location'])
> @ToString
> class Bar implements Comparable {
>
>
           I think @Sortable automatically makes it Comparable. So, we
don't have to "implement" Comparable if we use the @Sortable annotation.
Without the implements Comparable part, this works fine for me on groovy
2.4.5. Thanks


-- 
Thank you
Balachandran Sivakumar