Merge "Refactor TenantManage"
authorXia Yin Ben <xiayinben@huawei.com>
Tue, 1 Dec 2015 02:13:01 +0000 (02:13 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Tue, 1 Dec 2015 02:13:01 +0000 (02:13 +0000)
nemo-impl/src/main/java/org/opendaylight/nemo/user/tenantmanager/AAA.java
nemo-impl/src/main/java/org/opendaylight/nemo/user/tenantmanager/RegisterUser.java
nemo-impl/src/main/java/org/opendaylight/nemo/user/tenantmanager/TenantManage.java
nemo-impl/src/test/java/org/opendaylight/nemo/user/tenantmanager/AAATest.java
nemo-impl/src/test/java/org/opendaylight/nemo/user/tenantmanager/RegisterUserTest.java

index e9b959b9323e48cfcb809681717587f9fcce20b6..51e693e035fbef15188a3c56a21cc467491d01a8 100644 (file)
@@ -7,6 +7,8 @@
  */\r
 package org.opendaylight.nemo.user.tenantmanager;\r
 \r
+import java.util.Map;\r
+\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.UserId;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.UserName;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.UserPassword;\r
@@ -14,8 +16,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.com
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.User;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.user.rev151010.UserInstance;\r
 \r
-import java.util.List;\r
-\r
 /**\r
  * Created by z00293636 on 2015/8/29.\r
  */\r
@@ -37,39 +37,19 @@ public class AAA {
     private String checkUser(UserId userId, UserName userName, UserPassword userPassword, UserRoleName userRoleName)\r
     {\r
         tenantManage.fetchUsers();\r
-        List<User> userList = tenantManage.getUsersList();\r
+        final Map<UserId, User> users = tenantManage.getUsers();\r
         String errorInfo = null;\r
-        Boolean userexist = false;\r
-\r
-       if (userList != null)\r
-        {\r
-            for (User user : userList)\r
-            {\r
-                if (user.getUserId().equals(userId))\r
-                {\r
-                    userexist = true;\r
-                    if (!user.getUserName().equals(userName))\r
-                    {\r
-                        errorInfo = "The user name is not right.";\r
-                        break;\r
-                    }\r
-                    else if (!user.getUserPassword().equals(userPassword))\r
-                    {\r
-                        errorInfo = "The password is not right.";\r
-                        break;\r
-                    }\r
-                    else if (!user.getUserRole().equals(userRoleName))\r
-                    {\r
-                        errorInfo = "The role is not right.";\r
-                        break;\r
-                    }\r
-                }\r
-             }\r
-\r
-        }\r
-\r
-        if (!userexist)\r
-        {\r
+        final User user = users.get(userId);\r
+\r
+        if (users.containsKey(userId) && user != null) {\r
+            if (!user.getUserName().equals(userName)) {\r
+                errorInfo = "The user name is not right.";\r
+            } else if (!user.getUserPassword().equals(userPassword)) {\r
+                errorInfo = "The password is not right.";\r
+            } else if (!user.getUserRole().equals(userRoleName)) {\r
+                errorInfo = "The role is not right.";\r
+            }\r
+        } else {\r
             errorInfo = "The user is not exist.";\r
         }\r
         return errorInfo;\r
index d598b020f6b9baa27adedca3ac312cc5502bbe3f..5dbf6a04aa6339b94ee925ee331fbca2a3da845b 100644 (file)
@@ -7,21 +7,19 @@
  */\r
 package org.opendaylight.nemo.user.tenantmanager;\r
 \r
+import java.util.Map;\r
+\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.UserId;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.UserRoleName;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.RegisterUserInput;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.User;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.user.rev151010.user.roles.UserRole;\r
 \r
-import java.util.List;\r
-\r
 /**\r
  * Created by z00293636 on 2015/9/20.\r
  */\r
 public class RegisterUser {\r
-    private TenantManage tenantManage;\r
-    private List<UserRole> userRoleList;\r
-    private List<User> usersList;\r
+    private final TenantManage tenantManage;\r
 \r
     public RegisterUser(TenantManage tenantManage)\r
     {\r
@@ -33,19 +31,19 @@ public class RegisterUser {
         String errorInfo = null;\r
 \r
         tenantManage.fetchUserRoles();\r
-        userRoleList = tenantManage.getUserRoleList();\r
+        Map<UserRoleName, UserRole> userRoles = tenantManage.getUserRoles();\r
         tenantManage.fetchUsers();\r
-        usersList = tenantManage.getUsersList();\r
+        Map<UserId, User> users = tenantManage.getUsers();\r
 \r
-        if (userRoleList == null)\r
+        if (userRoles.isEmpty())\r
         {\r
             errorInfo = "There are no roles be defined.";\r
         }\r
         else\r
         {\r
-            if (IfRoleExist(input.getUserRole()))\r
+            if (userRoles.containsKey(input.getUserRole()))\r
             {\r
-                if (usersList != null && IfUserHasRegistered(input.getUserId()))\r
+                if (users.containsKey(input.getUserId()))\r
                 {\r
                     errorInfo = "The user has been registered.";\r
                 }\r
@@ -61,32 +59,5 @@ public class RegisterUser {
         }\r
         return errorInfo;\r
     }\r
-    private boolean IfRoleExist(UserRoleName userRoleName){\r
-        Boolean roleExist = false;\r
-\r
-        for (UserRole userRole : userRoleList)\r
-        {\r
-            if (userRole.getRoleName().equals(userRoleName))\r
-            {\r
-                roleExist = true;\r
-            }\r
-        }\r
-\r
-        return roleExist;\r
-    }\r
-\r
-    private boolean IfUserHasRegistered(UserId userId){\r
-        Boolean userHasRegistered = false;\r
-\r
-        for (User user : usersList)\r
-        {\r
-            if (user.getUserId().equals(userId))\r
-            {\r
-                userHasRegistered = true;\r
-            }\r
-        }\r
-\r
-        return userHasRegistered;\r
-    }\r
 \r
 }\r
index c20756b84b5fdf68122bf5d1440317a065d98ae3..cbf22e1fe1fc180fece9eea91e5e13407a7e15ef 100644 (file)
@@ -7,16 +7,19 @@
  */\r
 package org.opendaylight.nemo.user.tenantmanager;\r
 \r
-import com.google.common.base.Optional;\r
-import com.google.common.util.concurrent.FutureCallback;\r
-import com.google.common.util.concurrent.Futures;\r
-import com.google.common.util.concurrent.CheckedFuture;\r
-import com.google.common.util.concurrent.ListenableFuture;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+import java.util.concurrent.ExecutionException;\r
+import java.util.concurrent.TimeUnit;\r
+import java.util.concurrent.TimeoutException;\r
+\r
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;\r
 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;\r
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;\r
 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.UserId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.UserRoleName;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.RegisterUserInput;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.Users;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.User;\r
@@ -28,8 +31,12 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;\r
 import org.slf4j.LoggerFactory;\r
 \r
-import java.util.List;\r
-\r
+import com.google.common.base.Optional;\r
+import com.google.common.util.concurrent.CheckedFuture;\r
+import com.google.common.util.concurrent.FutureCallback;\r
+import com.google.common.util.concurrent.Futures;\r
+import com.google.common.util.concurrent.ListenableFuture;\r
+import com.google.common.util.concurrent.SettableFuture;\r
 \r
 /**\r
  * Created by z00293636 on 2015/8/29.\r
@@ -39,8 +46,8 @@ import java.util.List;
 public class TenantManage {\r
     private static final Logger LOG = LoggerFactory.getLogger(TenantManage.class);\r
     private DataBroker dataBroker;\r
-    private List<UserRole> userRoleList;\r
-    private List<User> usersList ;\r
+    private final SettableFuture<List<UserRole>> userRoleListFuture = SettableFuture.create();\r
+    private final SettableFuture<List<User>> usersListFuture = SettableFuture.create();\r
     private User user;\r
 \r
     public TenantManage(DataBroker dataBroker)\r
@@ -50,12 +57,12 @@ public class TenantManage {
 \r
     private void setUserRoleList(List<UserRole> userRoleList)\r
     {\r
-        this.userRoleList = userRoleList;\r
+        this.userRoleListFuture.set(userRoleList);\r
     }\r
 \r
     private void setUserList(List<User> userList)\r
     {\r
-        this.usersList = userList;\r
+        this.usersListFuture.set(userList);\r
     }\r
 \r
     private void setUser(User user)\r
@@ -63,14 +70,53 @@ public class TenantManage {
         this.user = user;\r
     }\r
 \r
-    public List<UserRole> getUserRoleList()\r
-    {\r
-        return userRoleList;\r
+    public List<UserRole> getUserRoleList() {\r
+        try {\r
+            return userRoleListFuture.get(1, TimeUnit.SECONDS);\r
+        } catch (InterruptedException | ExecutionException | TimeoutException e) {\r
+            LOG.error("Cannot read role information.", e);\r
+            return null;\r
+        }\r
     }\r
 \r
-    public List<User> getUsersList()\r
+    /**\r
+     *\r
+     * @return Map from UserRoleName to UserRole.  If no roles exist, an empty (not-null) map is returned.\r
+     */\r
+    public Map<UserRoleName, UserRole> getUserRoles() {\r
+        final Map<UserRoleName, UserRole> map = new HashMap<>();\r
+        final List<UserRole> userRoleList = getUserRoleList();\r
+        if (userRoleList != null) {\r
+            for (UserRole role : userRoleList) {\r
+                map.put(role.getRoleName(), role);\r
+            }\r
+        }\r
+        return map;\r
+    }\r
+\r
+    public List<User> getUsersList() {\r
+        try {\r
+            return usersListFuture.get(1, TimeUnit.SECONDS);\r
+        } catch (InterruptedException | ExecutionException | TimeoutException e) {\r
+            LOG.error("Cannot read user information.", e);\r
+            return null;\r
+        }\r
+    }\r
+\r
+    /**\r
+     *\r
+     * @return Map from UserId to User.  If no users exist, an empty (not-null) map is returned.\r
+     */\r
+    public Map<UserId, User> getUsers()\r
     {\r
-        return usersList;\r
+        final Map<UserId, User> map = new HashMap<>();\r
+        final List<User> userList = getUsersList();\r
+        if (userList != null) {\r
+            for (User user : userList) {\r
+                map.put(user.getUserId(), user);\r
+            }\r
+        }\r
+        return map;\r
     }\r
 \r
     public User getUser()\r
@@ -87,18 +133,14 @@ public class TenantManage {
             public void onSuccess(Optional<UserRoles> result)\r
             {\r
                 setUserRoleList(result.get().getUserRole());\r
-                return;\r
             }\r
 \r
             @Override\r
             public void onFailure(Throwable t)\r
             {\r
                 LOG.error("Can not read role information.", t);\r
-\r
-                return;\r
             }\r
         });\r
-         return;\r
     }\r
 \r
     public void fetchUsers(){\r
@@ -109,35 +151,25 @@ public class TenantManage {
             public void onSuccess(Optional<Users> result)\r
             {\r
                 setUserList(result.get().getUser());\r
-                return;\r
             }\r
 \r
             @Override\r
             public void onFailure(Throwable t)\r
             {\r
                 LOG.error("Can not read users information.", t);\r
-\r
-                return;\r
             }\r
         });\r
-        return;\r
     }\r
 \r
     public void fetchVNSpace(UserId userId)\r
     {\r
         fetchUsers();\r
-        if (getUsersList() != null)\r
-        {\r
-            for (User user : getUsersList())\r
-            {\r
-                if (user.getUserId().equals(userId))\r
-                {\r
-                    setUser(user);\r
-                    break;\r
-                }\r
-            }\r
+        final Map<UserId, User> users = getUsers();\r
+\r
+        User user = users.get(userId);\r
+        if (users.containsKey(userId) && user != null) {\r
+            setUser(user);\r
         }\r
-        return;\r
     }\r
 \r
     public void addUser(RegisterUserInput registerUserInput){\r
index 98f669a0dc4f0cc056123f10c124699c68a22f04..24f50ac385ad35da9ab550ed53440ead1ae1653b 100644 (file)
@@ -32,6 +32,7 @@ public class AAATest extends TestCase {
     private TenantManage tenantManage;
     private UserInstance userInstance;
 
+    @Override
     @Before
     public void setUp() throws Exception {
         tenantManage = mock(TenantManage.class);
@@ -47,7 +48,7 @@ public class AAATest extends TestCase {
         String acutal = aaa.checkUser(userInstance);
         String expected = "The user is not exist.";
         verify(tenantManage).fetchUsers();
-        verify(tenantManage).getUsersList();
+        verify(tenantManage).getUsers();
         Assert.assertNotNull(aaa);
         Assert.assertEquals(expected,acutal);
     }
index e0a66896bb6478ede5f528930f075e22a56340f9..26ce1765d016f3c17339451f2badbdb07c799b01 100644 (file)
@@ -38,6 +38,7 @@ public class RegisterUserTest extends TestCase {
     private RegisterUser registerUser;
     private TenantManage tenantManage;
     private RegisterUserInput input;
+    @Override
     @Before
     public void setUp() throws Exception {
         tenantManage = mock(TenantManage.class);
@@ -62,8 +63,8 @@ public class RegisterUserTest extends TestCase {
         when(input.getUserRole()).thenReturn(mock(UserRoleName.class));
         registerUser.registerUser(input);
 
-        verify(tenantManage,times(2)).getUserRoleList();
-        verify(tenantManage,times(2)).getUsersList();
+        verify(tenantManage,times(2)).getUserRoles();
+        verify(tenantManage,times(2)).getUsers();
         Assert.assertNotNull(tenantManage);
         Assert.assertNotNull(registerUser);
     }