You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by GitBox <gi...@apache.org> on 2022/02/28 15:16:47 UTC

[GitHub] [cloudstack] JoaoJandre commented on a change in pull request #6048: Refactor account type

JoaoJandre commented on a change in pull request #6048:
URL: https://github.com/apache/cloudstack/pull/6048#discussion_r815981665



##########
File path: api/src/main/java/com/cloud/user/Account.java
##########
@@ -16,35 +16,55 @@
 // under the License.
 package com.cloud.user;
 
-import java.util.Date;
-
 import org.apache.cloudstack.acl.ControlledEntity;
 import org.apache.cloudstack.api.Identity;
 import org.apache.cloudstack.api.InternalIdentity;
 
-public interface Account extends ControlledEntity, InternalIdentity, Identity {
+import java.util.Date;
+import java.util.HashMap;
 
+public interface Account extends ControlledEntity, InternalIdentity, Identity {
 
-    public enum State {
-        disabled, enabled, locked
+    /**
+     *  Account states.
+     * */
+    enum State {
+        DISABLED, ENABLED, LOCKED;
+
+        /**
+         * The toString method was overridden to maintain consistency in the DB, as the GenericDaoBase uses toString in the enum value to make the sql statements
+         * and previously the enum was in lowercase.
+         * */
+        @Override
+        public String toString(){
+            return super.toString().toLowerCase();
+        }
     }
 
-    public static final short ACCOUNT_TYPE_NORMAL = 0;
-    public static final short ACCOUNT_TYPE_ADMIN = 1;
-    public static final short ACCOUNT_TYPE_DOMAIN_ADMIN = 2;
-    public static final short ACCOUNT_TYPE_RESOURCE_DOMAIN_ADMIN = 3;
-    public static final short ACCOUNT_TYPE_READ_ONLY_ADMIN = 4;
-    public static final short ACCOUNT_TYPE_PROJECT = 5;
+    /**
+     * Account types.
+     * */
+    enum Type {
+        NORMAL, ADMIN, DOMAIN_ADMIN, RESOURCE_DOMAIN_ADMIN, READ_ONLY_ADMIN, PROJECT;

Review comment:
       I opted to hardcode them to ordinals because the `prepareAttribute` method in the `GenericDaoBase` uses the `ordinal()` method to convert enums to integers when they are annotated as `EnumType.ORDINAL`; this ensures compatibility to the current DB schema. Moreover, in the AccountTypeTest there is a unit test to ensure that the order is maintained.
   I hope to extend this refactoring in the future so that both the API and the DB schema use the string value of the enums instead of the integer value, thus making the application more intuitive.
   To answer your question, since the `Account.Type` uses `EnumType.ORDINAL`, we don't need a upgrade path to change anything in the DB. 




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscribe@cloudstack.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org