On Fri, May 28, 2010 at 00:48, Richard S. Hall <he...@ungoverned.org> wrote:

> On 5/27/10 6:24 PM, Guillaume Nodet wrote:
>
>> Can those annotations be moved to a gogo specific package ? Something like
>> org.apache.felix.gogo.annotation
>> I'd rather even have them in a separate module, but i think that would
>> cause
>> problem because the coercion mechanism do actually use those.
>>
>> I think those annotations are still experimental, not part of RFC 132.
>> There are still things that need to be fleshed out, and I'm really keen on
>> implying that this will be 'the' way to create functions, until it can
>> support all the use cases.
>>
>>
>
> I think all of Gogo is experiment at this stage, thus the 0.x.0 version
> number. My guess is Gogo won't be able to go 1.0.0 until the RFC is
> complete, nor rejected and we just go our own way. So at this point, I don't
> see it as much of a concern. Clearly, once the OSGi packages stabilize, then
> we won't be able to mess with them.
>
> From an IP point of view, we can't include osgi packages that have not been
published yet.
I don't want to mess with such legal problems, but that's a fact.   I had to
remove some non published api from aries just because of that, and that's
also why i haven't modified the org.osgi.bundlerepository package when
working on OBR.
I think it's safer to do the same for gogo.


> However, I'm not against moving all packages inside of
> org.apache.felix.gogo package space and just avoid using org.osgi package
> space altogether, but I think this is extreme for a module that hasn't yet
> undergone a major release yet.
>
> I don't think we need to move all.  The existing packages have been proved
to be very usable and the annotations are quite untied so far, so I don't
see why moving everything would be needed.  It would be rather disruptive
without no value I think.

>
>  I think one very important use case is support for completion of arguments
>> (not only command names), which i'm not sure how it will fit yet.
>>
>
The inspect commands looks really cool.  That's one that would really
benefit from completion btw.   I wonder if using enums instead of strings
for the type and direction parameters would help here.



> In addition having string descriptions inside the code might be problematic
>> for localization, and the annotations for descriptions are still a bit
>> fuzzy
>> as there is a @Descriptor, but descrition attributes on @Flag and @Option
>> which looks redundant or misleading from an api pov.
>>
>>
>
> Yeah, we still need to think about localization.
>
> Regarding the redundant description, it is true it is redundant, and I
> experimented today with having the description only in Descriptor, but it
> was much more cumbersome to work with that way, so I put it back. If
> annotations supported interface extension we wouldn't have this issue at
> all.


Yeah, and I actually missed you latest commits.

I think it may be a bit cleaner to remove the description attribute on the
@Parameter.  It might be a bit more verbose in some cases, but much more
consistent I think.


>
>
>  I just want to make my point clear before a release is cut ;-)
>>
>>
>
> Thanks.
>
> -> richard
>
>
>
>> On Wed, May 5, 2010 at 07:55, Peter Kriens<peter.kri...@aqute.biz>
>>  wrote:
>>
>>
>>
>>> I guess we should have tried this out in a sandbox but this experiment
>>> seems rather harmless for existing users and potentially very powerful.
>>> And
>>> this experiment is timely because I do have to update RFC 147. Will do
>>> different next time :-)
>>>
>>> On 4 mei 2010, at 08:33, Guillaume Nodet wrote:
>>>
>>>
>>>
>>>> A few things that would be missing imho to make that interesting:
>>>>  * parameters annotation to mark parameters as optional or multi-valued
>>>>
>>>>
>>> How do you see this? We do have the type of the parameter so we can
>>> deduce
>>> it is multi value. However, how do we know the last one? We would need
>>> some
>>> kind of separator. And do not forget that we have real objects, not
>>> strings.
>>>
>>> We had not gotten around the optional mandatory part. I think I'd like to
>>> have a special annotation for that.
>>>
>>>
>>>
>>>>  * flag and option could be merged (they are the same, maybe use an enum
>>>> value on the annotation to differentiate them and maybe have a smart
>>>>
>>>>
>>> default
>>>
>>>
>>>> value based on the fact that the annotated parameter is a boolean or
>>>> not)
>>>>
>>>>
>>> Well, it is shorter and easier on the eyes to have different annotations
>>> I
>>> think.
>>>
>>>
>>>
>>>>  * option should support a list of value
>>>>
>>>>
>>> Not sure how this interplays with the type we also have.
>>>
>>>
>>>
>>>>  * options should have multiple names (annotations support String[]
>>>> quite
>>>> well)
>>>>
>>>>
>>> Ok.
>>>
>>>
>>>
>>>>  * if we want to add some help information, we need an annotation on the
>>>> method
>>>>
>>>>
>>> Yes. I think some help on the arguments would also be nice.
>>>
>>>
>>>
>>>>  * we have a nice coercion mechanism defined in blueprint (handling
>>>> generics, collections and such), we should  reuse it (without having a
>>>> dependency to blueprint)
>>>>
>>>>
>>> I agree we should follow the same rules in tsh though implementation code
>>> will differ because the args/options/flags will have to be parsed in the
>>> heart of the method selection algorithm, they directly interfere with it.
>>> The low level type converter should be very similar to the BP type
>>> converter
>>> I think. When working on the BP converter I used a lot of lessons from
>>> tsh.
>>> However, the BP type converter takes generics better into account.
>>>
>>> Kind regards,
>>>
>>>        Peter Kriens
>>>
>>>
>>>
>>>
>>>
>>>> On Mon, May 3, 2010 at 23:25, Richard S. Hall<he...@ungoverned.org>
>>>>
>>>>
>>> wrote:
>>>
>>>
>>>>
>>>>
>>>>> On 5/3/10 16:56, Guillaume Nodet wrote:
>>>>>
>>>>>
>>>>>
>>>>>> On Mon, May 3, 2010 at 21:17, Richard S. Hall<he...@ungoverned.org>
>>>>>> wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>> On 5/3/10 14:51, Guillaume Nodet wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> What are those annotations suppose to actually provide ?  It seems
>>>>>>>>
>>>>>>>>
>>>>>>> all
>>>
>>>
>>>> they
>>>>>>>> can do is provide some basic help to the user, but does not really
>>>>>>>>
>>>>>>>>
>>>>>>> help
>>>
>>>
>>>> the
>>>>>>>> user writing complex commands and dealing with complex arguments.
>>>>>>>>
>>>>>>>> Have a look at an existing example:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>> http://svn.apache.org/repos/asf/felix/trunk/karaf/shell/commands/src/main/java/org/apache/felix/karaf/shell/commands/GrepAction.java
>>>
>>>
>>>> I think those annotations would not provide the slightest help in
>>>>>>>> analyzing
>>>>>>>> such a command line.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>> I don't think there will ever be a single solution that can help
>>>>>>>
>>>>>>>
>>>>>> everyone
>>>
>>>
>>>> implement any possible command. If people need to do something that is
>>>>>>> super
>>>>>>> complex, then they can always fall back to parsing their own
>>>>>>>
>>>>>>>
>>>>>> arguments.
>>>
>>>
>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>> I can agree to that, but then I don't see why it has to be in the
>>>>>>
>>>>>>
>>>>> proposed
>>>
>>>
>>>> spec.  Having it as a separate module might be a better approach then.
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>> The issue is you cannot easily do what we are trying to achieve in a
>>>>> separate module since it is modifying how the runtime coerces arguments
>>>>>
>>>>>
>>>> when
>>>
>>>
>>>> invoking methods. There is no place to hook into this externally.
>>>>>
>>>>>
>>>> However, I
>>>
>>>
>>>> agree that it could be just an implementation-specific feature of the
>>>>>
>>>>>
>>>> Gogo
>>>
>>>
>>>> runtime.
>>>>>
>>>>> I actually talked with Peter specifically about this and he felt the
>>>>> feature might be worthwhile for the spec, which is why he committed it
>>>>> there, but nothing is set in stone at this point.
>>>>>
>>>>> ->  richard
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>> At this point, we're just messing around with allowing optional
>>>>>>> method
>>>>>>> parameters and out of order specification of arguments.
>>>>>>>
>>>>>>> ->   richard
>>>>>>>
>>>>>>>
>>>>>>> On Mon, May 3, 2010 at 19:01,<pkri...@apache.org>    wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> Author: pkriens
>>>>>>>>> Date: Mon May  3 17:01:53 2010
>>>>>>>>> New Revision: 940514
>>>>>>>>>
>>>>>>>>> URL: http://svn.apache.org/viewvc?rev=940514&view=rev
>>>>>>>>> Log:
>>>>>>>>> Annotations for parameters
>>>>>>>>>
>>>>>>>>> Added:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>> felix/trunk/gogo/runtime/src/main/java/org/osgi/service/command/Flag.java
>>>
>>>
>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>> felix/trunk/gogo/runtime/src/main/java/org/osgi/service/command/Option.java
>>>
>>>
>>>> Added:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>> felix/trunk/gogo/runtime/src/main/java/org/osgi/service/command/Flag.java
>>>
>>>
>>>> URL:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>> http://svn.apache.org/viewvc/felix/trunk/gogo/runtime/src/main/java/org/osgi/service/command/Flag.java?rev=940514&view=auto
>>>
>>>
>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>> ==============================================================================
>>>
>>>
>>>> ---
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>> felix/trunk/gogo/runtime/src/main/java/org/osgi/service/command/Flag.java
>>>
>>>
>>>> (added)
>>>>>>>>> +++
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>> felix/trunk/gogo/runtime/src/main/java/org/osgi/service/command/Flag.java
>>>
>>>
>>>> Mon May  3 17:01:53 2010
>>>>>>>>> @@ -0,0 +1,6 @@
>>>>>>>>> +package org.osgi.service.command;
>>>>>>>>> +
>>>>>>>>> +public @interface Flag {
>>>>>>>>> +       String name();
>>>>>>>>> +       String help() default "no help";
>>>>>>>>> +}
>>>>>>>>>
>>>>>>>>> Added:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>> felix/trunk/gogo/runtime/src/main/java/org/osgi/service/command/Option.java
>>>
>>>
>>>> URL:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>> http://svn.apache.org/viewvc/felix/trunk/gogo/runtime/src/main/java/org/osgi/service/command/Option.java?rev=940514&view=auto
>>>
>>>
>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>> ==============================================================================
>>>
>>>
>>>> ---
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>> felix/trunk/gogo/runtime/src/main/java/org/osgi/service/command/Option.java
>>>
>>>
>>>> (added)
>>>>>>>>> +++
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>> felix/trunk/gogo/runtime/src/main/java/org/osgi/service/command/Option.java
>>>
>>>
>>>> Mon May  3 17:01:53 2010
>>>>>>>>> @@ -0,0 +1,6 @@
>>>>>>>>> +package org.osgi.service.command;
>>>>>>>>> +
>>>>>>>>> +public @interface Option {
>>>>>>>>> +       String name();
>>>>>>>>> +       String dflt();
>>>>>>>>> +}
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>
>>>> --
>>>> Cheers,
>>>> Guillaume Nodet
>>>> ------------------------
>>>> Blog: http://gnodet.blogspot.com/
>>>> ------------------------
>>>> Open Source SOA
>>>> http://fusesource.com
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>>
>


-- 
Cheers,
Guillaume Nodet
------------------------
Blog: http://gnodet.blogspot.com/
------------------------
Open Source SOA
http://fusesource.com

Reply via email to