*/\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
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
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
\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
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
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
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