Agreed it's brittle. On the db side, it's not a big deal though. It just means when you change the enums, make sure the toString() method still retuns what's in the DB. I just wanted to caution that in case we're making changes.
On the API side, I generally think we shouldn't expose states directly to end users. That really does require a discussion thread. --Alex > -----Original Message----- > From: John Burwell [mailto:jburw...@basho.com] > Sent: Thursday, July 18, 2013 4:39 PM > To: dev@cloudstack.apache.org > Subject: Re: code formatting for enums > > Alex and Frank, > > In terms of conventions, the APIs exposed Java SDK and many other > common APIs following this convention. Hence, the reason for my > suggestion. > > The notion that changing an enum key can break the API and/or database > persistence feels a bit brittle. In particular, it doesn't conform to the > Law of > Least Surprise. It feels like we should have a transformation mechanism > from the API endpoint to an enum value, and employ foreign, artificial keys > to code tables in schema. This conversation has expanded a bit, and it seems > appropriate to open a new [DISCUSS] thread to delve into it further. Do y'all > agree? > > Thanks, > -John > > On Jul 18, 2013, at 7:19 PM, Frank Zhang <frank.zh...@citrix.com> wrote: > > > Those enums cannot be simply considered as internal data structures > where code convention applies to, they should be considered in API level. > > > > Most CloudStack API responses retrieve its fields from xxxVO classes > > which represent database table. In our example, enum State directly > > maps to UserVmResponse. state. Then the most important factor of name > convention is user experience where Running is more user friendly than > IS_RUNNING or whatever all capitalized sentence splitting by underscore. > > > > And any changes to those existing enum should be thought twice, as it > relates to API compatibility. > > > > Though we can introduce some mapping layer between internal enum and > > API response, I don't see any benefits if the only reason is to follow some > name convention. > > > >> -----Original Message----- > >> From: Alex Huang [mailto:alex.hu...@citrix.com] > >> Sent: Thursday, July 18, 2013 3:55 PM > >> To: dev@cloudstack.apache.org > >> Subject: RE: code formatting for enums > >> > >> Actually, that's more of a C/C++ coding convention. (Speaking of > >> which, please don't use "I" to start interfaces.) > >> > >> I prefer to have enums as follows > >> > >> Public class Vm { > >> enum State { > >> IsRunning, > >> Stopped, > >> } > >> } > >> > >> I generally like to write Vm.State.IsRunning in the code. It's readable > >> and > clear. > >> > >> As opposed to Vm.State.IS_RUNNING which is a little less readable. > >> > >> But the thing I've seen people do is just using IS_RUNNING or > >> State.IsRunning which often becomes confusing. I'm more against that > >> then all caps and underscore. > >> > >> My $.02. I will caution that any change to existing enums, we have > >> to think about how it maps to the database. If the VO object stores > >> the enum, you'll have to either upgrade the database or add methods > >> to the enum so that when storing it, it becomes the same. > >> > >> --Alex > >> > >>> -----Original Message----- > >>> From: John Burwell [mailto:jburw...@basho.com] > >>> Sent: Thursday, July 18, 2013 12:33 PM > >>> To: dev@cloudstack.apache.org > >>> Subject: Re: code formatting for enums > >>> > >>> All, > >>> > >>> Another thing I have noticed is that enum values are not capitalized. > >>> General coding convention is that enum values are declared in all > >>> caps using an underscore to separate words. I notice that our > >>> coding conventions are silent on enumerations. Any opposition to > >>> adding this rule to our coding conventions? > >>> > >>> Thanks, > >>> -John > >>> > >>> On Jul 17, 2013, at 12:24 PM, Alex Huang <alex.hu...@citrix.com> wrote: > >>> > >>>> That's because the first rule of auto-formatting is do no harm. > >>>> > >>>> The formatter is set not to screw with lines that are already > >>>> wrapped > >>> assuming the previous developer intended it that way. > >>>> > >>>> --Alex > >>>> > >>>>> -----Original Message----- > >>>>> From: Daan Hoogland [mailto:daan.hoogl...@gmail.com] > >>>>> Sent: Wednesday, July 17, 2013 8:23 AM > >>>>> To: dev > >>>>> Subject: Re: code formatting for enums > >>>>> > >>>>> thanks, > >>>>> it doesn't correct back to the one per line format, but at least > >>>>> it doesn't garble the enum when right anymore. > >>>>> > >>>>> > >>>>> > >>>>> On Wed, Jul 17, 2013 at 4:24 PM, Alex Huang > >>>>> <alex.hu...@citrix.com> > >>> wrote: > >>>>> > >>>>>> Windows->Preferences > >>>>>> Java->Formatter > >>>>>> Click on Edit in Active Profiles > >>>>>> Line Wrapping tab > >>>>>> Look for 'enum' declaration->Constants Select Wrap all elements, > >>>>>> every element on a new line in the "Line Wrapping policy:" drop > >>>>>> down > >>>>>> > >>>>>> --Alex > >>>>>> > >>>>>> > >>>>>>> -----Original Message----- > >>>>>>> From: Daan Hoogland [mailto:daan.hoogl...@gmail.com] > >>>>>>> Sent: Wednesday, July 17, 2013 6:22 AM > >>>>>>> To: dev > >>>>>>> Subject: code formatting for enums > >>>>>>> > >>>>>>> H, > >>>>>>> > >>>>>>> I am working on Networks with the eclipse.epf file loaded. Now > >>>>>>> the enum BroadcastDomainType gets saved as > >>>>>>> Native(null, null), Vlan("vlan", Integer.class), Vswitch("vs", > >>>>>>> String.class), LinkLocal(null, null), Vnet("vnet", > >>>>>> Long.class), Storage( > >>>>>>> "storage", Integer.class), Lswitch("lswitch", > >>>>>> String.class), Mido( > >>>>>>> "mido", String.class), Pvlan("pvlan", > >>>>>>> String.class), > >>>>>> UnDecided( > >>>>>>> null, null); > >>>>>>> instead of > >>>>>>> Native(null, null), > >>>>>>> Vlan("vlan", Integer.class), > >>>>>>> Vswitch("vs", String.class), > >>>>>>> LinkLocal(null, null), > >>>>>>> Vnet("vnet", Long.class), > >>>>>>> Storage("storage", Integer.class), > >>>>>>> Lswitch("lswitch", String.class), > >>>>>>> Mido("mido", String.class), > >>>>>>> Pvlan("pvlan", String.class), > >>>>>>> UnDecided(null, null); > >>>>>>> anybody know how to fix this? > >>>>>>> > >>>>>>> thanks, > >>>>>>> Daan > >>>>>> > >