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. > >> > >> > >> > >