Merge "Remove instancecheck from vnspacemanager."
[nemo.git] / nemo-impl / src / main / java / org / opendaylight / nemo / user / tenantmanager / TenantManage.java
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