On 4/8/13 11:18 AM, "Rohit Yadav" <bhais...@apache.org> wrote:
>On Mon, Apr 8, 2013 at 7:10 PM, John Burwell <jburw...@basho.com> wrote: > >> Rohit, >> >> Why would we need to rewrite any Java code to switch to an array? As I >> mentioned, array annotation values are treated as varargs. Therefore, >> annotations with single values can be left alone. Only cases where >> multiple values are required would require the addition of curly braces. >> For example, for an APICommand with one name, the following would >>continue >> to work: >> > >Hey John, you're right but it's a matter of code styling, I prefer >writing; > >@APICommand(name = {'name1'}) even if it's only one name, this way any >subsequent api author would know that name is an array and they can have >aliases which is what Kishan wants. > > >> >> @APICommand(name="apiName1") >> >> While for an APICommand with multiple names, the following form would >>now >> be supported: >> >> @APICommand(name={"apiName1", "apiName2", "apiName3"}) >> >> I am not familiar with the Marvin code, so I can not speak to the impact >> of this change to it. However, the only changes to the Java code >>should be >> the API commands with multiple names and the classes that actually >>consume >> the value of this annotation. >> > >Yes, you're right we can skip the code styling I referred then it won't >consume much coding, we just need to fix these; > >- Fix APICommand annotation interface definition to accept name as an >array >- Fix method in ApiServer which creates apiname->cmdclass map to care for >aliases >- Fix ApiDiscovery to take care of the aliases (create different response >objs for the same cmd class) >- Fix apidocs XmlWriter class to take of the aliases and the api html >generator to process the same. >- Fix Marvin's codegenerator.py to take care of the aliases (which means >create apiname related modules which would contain cmd and response >boilterplate fields/class) > >Cheers. > > >> >> Thanks, >> -John >> >> On Apr 8, 2013, at 9:22 AM, Rohit Yadav <bhais...@apache.org> wrote: >> >> > On Mon, Apr 8, 2013 at 6:33 PM, Kishan Kavala >><kishan.kav...@citrix.com >> >wrote: >> > >> >> APICommand annotation in API Cmd object has a name parameter. >>Currently >> >> name parameter takes only one value. I plan to enhance this to >>support >> >> comma separated values. This will allow multiple API names for the >>same >> API >> >> Cmd object. >> >> >> >> Current: >> >> @APICommand(name = "apiName1", .. >> >> >> >> Proposed: >> >> @APICommand(name = "apiName1, apiAlias2, apiAlias3", .. >> >> >> > >> > It's a hack, but doable. While not elegant as John suggests, parsing >> comma >> > separated value can lead to some issues. >> > >> > Changing the name field to array would require a lot of rewriting the >> > present apis annotation name fields, again doable by a small python >> program >> > (like the one I used in the last name field refactoring). >> > >> > This would really help remove duplicate cmd classes for apis such as >>copy >> > iso and volume which does the same job but requires two different cmd >> class >> > implementations. >> > >> > Whatever way you decide, pl. make sure to fix ApiDiscovery, ApiServer >> > cmdclass-apiname map generator method and apidocs generation >>accordingly. >> > >> > Cheers. >> > >> > >> >> >> >> Requirement: >> >> As part of CLOUDSTACK-763, I'll be introducing NetworkACLList >>(grouping >> of >> >> NetworkACLItems). Current APIs use *NetworkACL (create >> >> NetworkACL/deleteNetworkACL etc..) for NetworkACLItem related APIs. >> These >> >> APIs have to be changed to *NetworkACL Item(create >> >> NetworkACLItem/deleteNetworkACLItem etc..) to get the terminology >> right. We >> >> also need to support old API names for backward compatibility. Hence >>the >> >> need for API name alias. >> >> >> >> Terminology: >> >> NetworkACLItem - Individual ACL Entry (was NetworlACL earlier). >> >> NetworkACL - Group of Network ACL Items. API will use the term >> >> NetworkACLList to differentiate from the existing NetworkACL APIs. >> >> How about an additional attribute 'preferred' or 'deprecated' ? @APICommand(name={'Foo', 'Bar'}, preferred='Foo', deprecated='Bar')