2 * Copyright (c) 2015 Huawei, Inc. and others. All rights reserved.
\r
4 * This program and the accompanying materials are made available under the
\r
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
\r
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
\r
8 package org.opendaylight.nemo.user.tenantmanager;
\r
10 import com.google.common.base.Function;
\r
11 import com.google.common.base.Optional;
\r
12 import com.google.common.collect.Maps;
\r
13 import com.google.common.util.concurrent.CheckedFuture;
\r
14 import com.google.common.util.concurrent.FutureCallback;
\r
15 import com.google.common.util.concurrent.Futures;
\r
16 import com.google.common.util.concurrent.ListenableFuture;
\r
17 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
\r
18 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
\r
19 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
\r
20 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
\r
21 import org.opendaylight.nemo.user.vnspacemanager.languagestyle.NEMOConstants;
\r
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.common.rev151010.*;
\r
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.RegisterUserInput;
\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.Users;
\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.Objects;
\r
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.Operations;
\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.TemplateDefinitions;
\r
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.TemplateInstances;
\r
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.objects.*;
\r
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.operations.Operation;
\r
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.operations.OperationKey;
\r
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.template.definitions.TemplateDefinition;
\r
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.template.definitions.TemplateDefinitionKey;
\r
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.template.instances.TemplateInstance;
\r
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.user.intent.template.instances.TemplateInstanceKey;
\r
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.User;
\r
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.UserBuilder;
\r
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.users.UserKey;
\r
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.user.rev151010.UserRoles;
\r
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.user.rev151010.user.roles.UserRole;
\r
41 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
\r
42 import org.slf4j.Logger;
\r
43 import org.slf4j.LoggerFactory;
\r
45 import java.util.HashMap;
\r
46 import java.util.Map;
\r
47 import java.util.concurrent.ExecutionException;
\r
50 * Created by z00293636 on 2015/8/29.
\r
53 /* maintain tenant information, including how many tenants are active, their information */
\r
54 public class TenantManage {
\r
55 private static final Logger LOG = LoggerFactory.getLogger(TenantManage.class);
\r
56 private DataBroker dataBroker;
\r
58 private Map<UserId, Map<NodeId, Node>> userNodeMap = new HashMap<UserId, Map<NodeId, Node>>();
\r
59 private Map<UserId, Map<ConnectionId, Connection>> userConnectionMap = new HashMap<UserId, Map<ConnectionId, Connection>>();
\r
60 private Map<UserId, Map<FlowId, Flow>> userFlowMap = new HashMap<UserId, Map<FlowId, Flow>>();
\r
61 private Map<UserId, Map<OperationId, Operation>> userOperationMap = new HashMap<UserId, Map<OperationId, Operation>>();
\r
62 private Map<UserId, Map<TemplateName, TemplateDefinition>> userTemplateDefinitionMap = new HashMap<UserId, Map<TemplateName, TemplateDefinition>>();
\r
63 private Map<UserId, Map<TemplateInstanceId, TemplateInstance>> userTemplateInstanceMap = new HashMap<UserId, Map<TemplateInstanceId, TemplateInstance>>();
\r
64 private Map<UserId, Map<String, String>> userDeleteIntent = new HashMap<UserId, Map<String, String>>();
\r
65 private Map<UserId, Map<String, String>> userNameIdMap = new HashMap<UserId, Map<String, String>>();
\r
67 public TenantManage(DataBroker dataBroker){
\r
68 this.dataBroker = dataBroker;
\r
71 private void setUser(User user)
\r
76 public User getUser()
\r
83 * @return null if an error was encountered, or an empty map if there was no
\r
84 * error but no data was retrieved.
\r
86 public Map<UserRoleName, UserRole> getUserRoles() {
\r
88 InstanceIdentifier<UserRoles> userRolesInsId = InstanceIdentifier.builder(UserRoles.class).build();
\r
89 ListenableFuture<Optional<UserRoles>> userRolesFuture = this.dataBroker.newReadOnlyTransaction().read(
\r
90 LogicalDatastoreType.CONFIGURATION, userRolesInsId);
\r
92 final Optional<UserRoles> userRolesOpt;
\r
94 // TODO: consider time out here?
\r
95 userRolesOpt = userRolesFuture.get();
\r
96 } catch (InterruptedException e) {
\r
97 LOG.error("Cannot read role information.", e);
\r
99 } catch (ExecutionException e) {
\r
100 LOG.error("Cannot read role information.", e);
\r
104 // TODO: change to Java 8 lambda expressions
\r
105 return userRolesOpt.transform(new Function<UserRoles, Map<UserRoleName, UserRole>>() {
\r
107 public Map<UserRoleName, UserRole> apply(UserRoles input) {
\r
108 return Maps.uniqueIndex(input.getUserRole(), new Function<UserRole, UserRoleName>() {
\r
110 public UserRoleName apply(UserRole role) {
\r
111 return role.getRoleName();
\r
115 }).or(new HashMap<UserRoleName, UserRole>());
\r
120 * @return null if an error was encountered, or an empty map if there was no
\r
121 * error but no data was retrieved.
\r
123 public Map<UserId, User> getUsers() {
\r
124 InstanceIdentifier<Users> usersInsId = InstanceIdentifier.builder(Users.class).build();
\r
125 ListenableFuture<Optional<Users>> usersFuture = dataBroker.newReadOnlyTransaction().read(
\r
126 LogicalDatastoreType.CONFIGURATION, usersInsId);
\r
128 final Optional<Users> usersOpt;
\r
130 // TODO: consider time out here?
\r
131 usersOpt = usersFuture.get();
\r
132 } catch (InterruptedException e) {
\r
133 LOG.error("Cannot read user information.", e);
\r
135 } catch (ExecutionException e) {
\r
136 LOG.error("Cannot read user information.", e);
\r
140 // TODO: change to Java 8 lambda expressions
\r
141 return usersOpt.transform(new Function<Users, Map<UserId, User>>() {
\r
143 public Map<UserId, User> apply(Users input) {
\r
144 return Maps.uniqueIndex(input.getUser(), new Function<User, UserId>() {
\r
146 public UserId apply(User user) {
\r
147 return user.getUserId();
\r
151 }).or(new HashMap<UserId, User>());
\r
154 public void fetchVNSpace(UserId userId){
\r
155 final Map<UserId, User> users = getUsers();
\r
156 setUser((users != null) ? users.get(userId) : null);
\r
159 public void addUser(RegisterUserInput registerUserInput){
\r
160 WriteTransaction t = dataBroker.newWriteOnlyTransaction();
\r
161 if (registerUserInput.getUserId() != null)
\r
163 User user = new UserBuilder(registerUserInput).build();
\r
164 UserKey userKey = new UserKey(registerUserInput.getUserId());
\r
166 InstanceIdentifier<User> userid = InstanceIdentifier.builder(Users.class).child(User.class, userKey).build();
\r
168 t.put(LogicalDatastoreType.CONFIGURATION, userid, user,true);
\r
169 CheckedFuture<Void, TransactionCommitFailedException> f = t.submit();
\r
170 Futures.addCallback(f, new FutureCallback<Void>() {
\r
172 public void onFailure(Throwable t) {
\r
173 LOG.error("Could not write endpoint base container", t);
\r
177 public void onSuccess(Void result) {
\r
183 } catch (InterruptedException e) {
\r
184 // TODO Auto-generated catch block
\r
185 LOG.error("Exception:",e);
\r
186 } catch (ExecutionException e) {
\r
187 // TODO Auto-generated catch block
\r
188 LOG.error("Exception:",e);
\r
194 * create a space to store all information in one transaction
\r
196 public void transactionHandling(UserId userId){
\r
197 writeDataStore(userId);
\r
198 deleteDataStore(userId);
\r
200 userNodeMap.clear();
\r
201 userConnectionMap.clear();
\r
202 userFlowMap.clear();
\r
203 userOperationMap.clear();
\r
204 userTemplateDefinitionMap.clear();
\r
205 userTemplateInstanceMap.clear();
\r
206 userDeleteIntent.clear();
\r
210 * store and get all user node in one transaction into map
\r
213 public void setNode(UserId userId, NodeId nodeId, Node node){
\r
214 if (userNodeMap.containsKey(userId)){
\r
215 Map<NodeId, Node> nodeMap = userNodeMap.get(userId);
\r
216 nodeMap.put(nodeId, node);
\r
219 Map<NodeId, Node> nodeMap = new HashMap<NodeId, Node>();
\r
220 nodeMap.put(nodeId,node);
\r
221 userNodeMap.put(userId,nodeMap);
\r
223 setUserNameIdMap(userId, node.getNodeName().getValue(),nodeId.getValue());
\r
226 public Map<NodeId, Node> getNode(UserId userId){
\r
227 if (!userNodeMap.isEmpty()){
\r
228 return userNodeMap.get(userId);
\r
235 public void setConnection(UserId userId, ConnectionId connectionId, Connection connection){
\r
236 if (userConnectionMap.containsKey(userId)){
\r
237 Map<ConnectionId, Connection> connectionMap = userConnectionMap.get(userId);
\r
238 connectionMap.put(connectionId,connection);
\r
241 Map<ConnectionId, Connection> connectionMap = new HashMap<ConnectionId, Connection>();
\r
242 connectionMap.put(connectionId,connection);
\r
243 userConnectionMap.put(userId,connectionMap);
\r
245 setUserNameIdMap(userId, connection.getConnectionName().getValue(),connectionId.getValue());
\r
248 public Map<ConnectionId, Connection> getConnection(UserId userId){
\r
249 if (!userConnectionMap.isEmpty()){
\r
250 return userConnectionMap.get(userId);
\r
257 public void setFlow(UserId userId, FlowId flowId, Flow flow){
\r
258 if (userFlowMap.containsKey(userId)){
\r
259 Map<FlowId,Flow> flowMap = userFlowMap.get(userId);
\r
260 flowMap.put(flowId,flow);
\r
263 Map<FlowId,Flow> flowMap = new HashMap<FlowId, Flow>();
\r
264 flowMap.put(flowId,flow);
\r
265 userFlowMap.put(userId,flowMap);
\r
267 setUserNameIdMap(userId,flow.getFlowName().getValue(),flowId.getValue());
\r
270 public Map<FlowId,Flow> getFlow(UserId userId){
\r
271 if (!userFlowMap.isEmpty()){
\r
272 return userFlowMap.get(userId);
\r
279 public void setOperation(UserId userId, OperationId operationId, Operation operation){
\r
280 if (userOperationMap.containsKey(userId)){
\r
281 Map<OperationId, Operation> operationMap = userOperationMap.get(userId);
\r
282 operationMap.put(operationId,operation);
\r
285 Map<OperationId, Operation> operationMap = new HashMap<OperationId, Operation>();
\r
286 operationMap.put(operationId,operation);
\r
287 userOperationMap.put(userId,operationMap);
\r
289 setUserNameIdMap(userId,operation.getOperationName().getValue(),operationId.getValue());
\r
292 public Map<OperationId, Operation> getOperation(UserId userId){
\r
293 if (!userOperationMap.isEmpty()){
\r
294 return userOperationMap.get(userId);
\r
301 public void setTemplateDefinition(UserId userId,TemplateName templateName, TemplateDefinition definition){
\r
302 if (userTemplateDefinitionMap.containsKey(userId)){
\r
303 Map<TemplateName, TemplateDefinition> definitionMap = userTemplateDefinitionMap.get(userId);
\r
304 definitionMap.put(templateName,definition);
\r
307 Map<TemplateName, TemplateDefinition> definitionMap = new HashMap<TemplateName, TemplateDefinition>();
\r
308 definitionMap.put(templateName,definition);
\r
309 userTemplateDefinitionMap.put(userId,definitionMap);
\r
313 public Map<TemplateName, TemplateDefinition> getTempalteDefinition(UserId userId){
\r
314 if (!userTemplateDefinitionMap.isEmpty()){
\r
315 return userTemplateDefinitionMap.get(userId);
\r
322 public void setUserTemplateInstance(UserId userId, TemplateInstanceId instanceId, TemplateInstance instance){
\r
323 if (userTemplateInstanceMap.containsKey(userId)){
\r
324 Map<TemplateInstanceId, TemplateInstance> instanceMap = userTemplateInstanceMap.get(userId);
\r
325 instanceMap.put(instanceId,instance);
\r
328 Map<TemplateInstanceId, TemplateInstance> instanceMap = new HashMap<TemplateInstanceId, TemplateInstance>();
\r
329 instanceMap.put(instanceId,instance);
\r
330 userTemplateInstanceMap.put(userId,instanceMap);
\r
334 public Map<TemplateInstanceId, TemplateInstance> getTemplateInstance(UserId userId){
\r
335 if (!userTemplateInstanceMap.isEmpty()){
\r
336 return userTemplateInstanceMap.get(userId);
\r
344 * store all intent need to be deleted in the data store
\r
349 public void setUserDeleteIntent(UserId userId, String type, String objectId){
\r
350 if (userDeleteIntent.containsKey(userId)){
\r
351 Map<String, String> deleteObject = userDeleteIntent.get(userId);
\r
352 deleteObject.put(objectId,type);
\r
355 Map<String, String> deleteObject = new HashMap<String, String>();
\r
356 deleteObject.put(objectId,type);
\r
357 userDeleteIntent.put(userId, deleteObject);
\r
362 * store all name-id map
\r
367 public void setUserNameIdMap(UserId userId, String name, String objectId){
\r
368 if (userNameIdMap.containsKey(userId)){
\r
369 Map<String, String> map = userNameIdMap.get(userId);
\r
370 map.put(name,objectId);
\r
373 Map<String, String> nameIdMap = new HashMap<String, String>();
\r
374 nameIdMap.put(name, objectId);
\r
375 userNameIdMap.put(userId, nameIdMap);
\r
379 public Map<String, String> getUserNameIdMap(UserId userId){
\r
380 if (!userNameIdMap.isEmpty()){
\r
381 return userNameIdMap.get(userId);
\r
388 public String getObjectId(UserId userId, String name){
\r
389 if (userNameIdMap.containsKey(userId)){
\r
390 if (userNameIdMap.get(userId).containsKey(name)){
\r
391 return userNameIdMap.get(userId).get(name);
\r
397 public String getName(UserId userId, String objectId){
\r
398 if (userNameIdMap.containsKey(userId)){
\r
399 for (String name : userNameIdMap.get(userId).keySet()){
\r
400 if (objectId.equals(userNameIdMap.get(userId).get(name))){
\r
409 * get all information stored in data store
\r
412 public Map<NodeId, Node> getNodeDataStore(UserId userId){
\r
413 Map<NodeId, Node> nodeMap = new HashMap<NodeId, Node>();
\r
414 fetchVNSpace(userId);
\r
415 User user1 = getUser();
\r
416 if (user1.getObjects()!=null){
\r
417 if (user1.getObjects().getNode()!=null){
\r
418 for (Node node : user1.getObjects().getNode()){
\r
419 nodeMap.put(node.getNodeId(),node);
\r
423 return nodeMap.isEmpty()?null:nodeMap;
\r
426 public Map<ConnectionId, Connection> getConnectionDataStore(UserId userId){
\r
427 Map<ConnectionId, Connection> connectionMap = new HashMap<ConnectionId, Connection>();
\r
428 fetchVNSpace(userId);
\r
429 User user1 = getUser();
\r
430 if (user1.getObjects()!=null){
\r
431 if (user1.getObjects().getConnection()!=null){
\r
432 for (Connection connection : user1.getObjects().getConnection()){
\r
433 connectionMap.put(connection.getConnectionId(),connection);
\r
437 return connectionMap.isEmpty()?null:connectionMap;
\r
440 public Map<FlowId, Flow> getFlowDataStore(UserId userId){
\r
441 Map<FlowId, Flow> flowMap = new HashMap<FlowId, Flow>();
\r
442 fetchVNSpace(userId);
\r
443 User user1 = getUser();
\r
444 if (user1.getObjects()!=null){
\r
445 if (user1.getObjects().getFlow()!=null){
\r
446 for (Flow flow : user1.getObjects().getFlow()){
\r
447 flowMap.put(flow.getFlowId(),flow);
\r
451 return flowMap.isEmpty()?null:flowMap;
\r
454 public Map<OperationId, Operation> getOperationDataStore(UserId userId){
\r
455 Map<OperationId, Operation> operationMap = new HashMap<OperationId, Operation>();
\r
456 fetchVNSpace(userId);
\r
457 User user1 = getUser();
\r
458 if (user1.getOperations()!=null){
\r
459 if (user1.getOperations().getOperation()!=null){
\r
460 for (Operation operation : user1.getOperations().getOperation()){
\r
461 operationMap.put(operation.getOperationId(),operation);
\r
465 return operationMap.isEmpty()?null:operationMap;
\r
468 public Map<TemplateName, TemplateDefinition> getDefinitionDataStore(UserId userId){
\r
469 Map<TemplateName, TemplateDefinition> definitionMap = new HashMap<TemplateName, TemplateDefinition>();
\r
470 fetchVNSpace(userId);
\r
471 User user1 = getUser();
\r
472 if (user1.getTemplateDefinitions()!=null){
\r
473 if (user1.getTemplateDefinitions().getTemplateDefinition()!=null){
\r
474 for (TemplateDefinition definition : user1.getTemplateDefinitions().getTemplateDefinition()){
\r
475 definitionMap.put(definition.getTemplateName(),definition);
\r
479 return definitionMap.isEmpty()?null:definitionMap;
\r
482 public Map<TemplateInstanceId, TemplateInstance> getInstanceDataStore(UserId userId){
\r
483 Map<TemplateInstanceId, TemplateInstance> instanceMap = new HashMap<TemplateInstanceId, TemplateInstance>();
\r
484 fetchVNSpace(userId);
\r
485 User user1 = getUser();
\r
486 if (user1.getTemplateInstances()!=null){
\r
487 if (user1.getTemplateInstances().getTemplateInstance()!=null){
\r
488 for (TemplateInstance instance : user1.getTemplateInstances().getTemplateInstance()){
\r
489 instanceMap.put(instance.getTemplateInstanceId(),instance);
\r
493 return instanceMap.isEmpty()?null:instanceMap;
\r
497 * write all information in one transaction into data store
\r
499 private void writeDataStore(UserId userId){
\r
501 UserKey userKey = new UserKey(userId);
\r
502 if (getNode(userId)!=null){
\r
503 for (NodeId nodeId : getNode(userId).keySet()){
\r
504 NodeKey nodeKey = new NodeKey(nodeId);
\r
505 WriteTransaction t = dataBroker.newWriteOnlyTransaction();
\r
506 InstanceIdentifier<Node> nodeid = InstanceIdentifier.builder(Users.class).child(User.class, userKey).child(Objects.class).child(Node.class,nodeKey).build();
\r
507 t.put(LogicalDatastoreType.CONFIGURATION, nodeid, getNode(userId).get(nodeId),true);
\r
508 CheckedFuture<Void, TransactionCommitFailedException> f = t.submit();
\r
509 Futures.addCallback(f, new FutureCallback<Void>() {
\r
511 public void onFailure(Throwable t) {
\r
512 LOG.error("Could not write node instance", t);
\r
515 public void onSuccess(Void result) {
\r
520 } catch (InterruptedException e) {
\r
521 // TODO Auto-generated catch block
\r
522 LOG.error("Exception:",e);
\r
523 } catch (ExecutionException e) {
\r
524 // TODO Auto-generated catch block
\r
525 LOG.error("Exception:",e);
\r
530 if (getConnection(userId)!=null){
\r
531 for (ConnectionId connectionId : getConnection(userId).keySet()){
\r
532 ConnectionKey connectionKey = new ConnectionKey(connectionId);
\r
533 WriteTransaction t = dataBroker.newWriteOnlyTransaction();
\r
534 InstanceIdentifier<Connection> connectionid = InstanceIdentifier.builder(Users.class).child(User.class, userKey).child(Objects.class).child(Connection.class,connectionKey).build();
\r
535 t.put(LogicalDatastoreType.CONFIGURATION, connectionid, getConnection(userId).get(connectionId),true);
\r
536 CheckedFuture<Void, TransactionCommitFailedException> f = t.submit();
\r
537 Futures.addCallback(f, new FutureCallback<Void>() {
\r
539 public void onFailure(Throwable t) {
\r
540 LOG.error("Could not write connection instance", t);
\r
543 public void onSuccess(Void result) {
\r
548 } catch (InterruptedException e) {
\r
549 // TODO Auto-generated catch block
\r
550 LOG.error("Exception:",e);
\r
551 } catch (ExecutionException e) {
\r
552 // TODO Auto-generated catch block
\r
553 LOG.error("Exception:",e);
\r
557 if (getFlow(userId)!=null){
\r
558 for (FlowId flowId : getFlow(userId).keySet()){
\r
559 FlowKey flowKey = new FlowKey(flowId);
\r
560 WriteTransaction t = dataBroker.newWriteOnlyTransaction();
\r
561 InstanceIdentifier<Flow> flowid = InstanceIdentifier.builder(Users.class).child(User.class, userKey).child(Objects.class).child(Flow.class,flowKey).build();
\r
562 t.put(LogicalDatastoreType.CONFIGURATION, flowid, getFlow(userId).get(flowId),true);
\r
563 CheckedFuture<Void, TransactionCommitFailedException> f = t.submit();
\r
564 Futures.addCallback(f, new FutureCallback<Void>() {
\r
566 public void onFailure(Throwable t) {
\r
567 LOG.error("Could not write endpoint base container", t);
\r
570 public void onSuccess(Void result) {
\r
575 } catch (InterruptedException e) {
\r
576 // TODO Auto-generated catch block
\r
577 LOG.error("Exception:",e);
\r
578 } catch (ExecutionException e) {
\r
579 // TODO Auto-generated catch block
\r
580 LOG.error("Exception:",e);
\r
584 if (getOperation(userId)!=null){
\r
585 for (OperationId operationId : getOperation(userId).keySet()){
\r
586 OperationKey operationKey = new OperationKey(operationId);
\r
587 WriteTransaction t = dataBroker.newWriteOnlyTransaction();
\r
588 InstanceIdentifier<Operation> operationid = InstanceIdentifier.builder(Users.class).child(User.class, userKey).child(Operations.class).child(Operation.class,operationKey).build();
\r
589 t.put(LogicalDatastoreType.CONFIGURATION, operationid, getOperation(userId).get(operationId),true);
\r
590 CheckedFuture<Void, TransactionCommitFailedException> f = t.submit();
\r
591 Futures.addCallback(f, new FutureCallback<Void>() {
\r
593 public void onFailure(Throwable t) {
\r
594 LOG.error("Could not write endpoint base container", t);
\r
598 public void onSuccess(Void result) {
\r
604 } catch (InterruptedException e) {
\r
605 // TODO Auto-generated catch block
\r
606 LOG.error("Exception:",e);
\r
607 } catch (ExecutionException e) {
\r
608 // TODO Auto-generated catch block
\r
609 LOG.error("Exception:",e);
\r
613 if (getTempalteDefinition(userId)!=null){
\r
614 for (TemplateName templateName : getTempalteDefinition(userId).keySet()){
\r
615 TemplateDefinitionKey key = new TemplateDefinitionKey(templateName);
\r
616 WriteTransaction t = dataBroker.newWriteOnlyTransaction();
\r
617 InstanceIdentifier<TemplateDefinition> templateDefinitionId = InstanceIdentifier.builder(Users.class).child(User.class, userKey)
\r
618 .child(TemplateDefinitions.class).child(TemplateDefinition.class, key)
\r
620 t.put(LogicalDatastoreType.CONFIGURATION, templateDefinitionId, getTempalteDefinition(userId).get(templateName),true);
\r
621 CheckedFuture<Void, TransactionCommitFailedException> f = t.submit();
\r
622 Futures.addCallback(f, new FutureCallback<Void>() {
\r
624 public void onFailure(Throwable t) {
\r
625 LOG.error("Could not write endpoint base container", t);
\r
628 public void onSuccess(Void result) {
\r
633 } catch (InterruptedException e) {
\r
634 // TODO Auto-generated catch block
\r
635 LOG.error("Exception:",e);
\r
636 } catch (ExecutionException e) {
\r
637 // TODO Auto-generated catch block
\r
638 LOG.error("Exception:",e);
\r
642 if (getTemplateInstance(userId)!=null){
\r
643 for (TemplateInstanceId instanceId : getTemplateInstance(userId).keySet()){
\r
644 TemplateInstanceKey key = new TemplateInstanceKey(instanceId);
\r
645 WriteTransaction t = dataBroker.newWriteOnlyTransaction();
\r
646 InstanceIdentifier<TemplateInstance> templateDefinitionId = InstanceIdentifier.builder(Users.class).child(User.class, userKey)
\r
647 .child(TemplateInstances.class).child(TemplateInstance.class, key)
\r
649 t.put(LogicalDatastoreType.CONFIGURATION, templateDefinitionId, getTemplateInstance(userId).get(instanceId),true);
\r
650 CheckedFuture<Void, TransactionCommitFailedException> f = t.submit();
\r
651 Futures.addCallback(f, new FutureCallback<Void>() {
\r
653 public void onFailure(Throwable t) {
\r
654 LOG.error("Could not write endpoint base container", t);
\r
657 public void onSuccess(Void result) {
\r
662 } catch (InterruptedException e) {
\r
663 // TODO Auto-generated catch block
\r
664 LOG.error("Exception:",e);
\r
665 } catch (ExecutionException e) {
\r
666 // TODO Auto-generated catch block
\r
667 LOG.error("Exception:",e);
\r
674 * delete intent in data store
\r
677 private void deleteDataStore(UserId userId){
\r
678 if (userDeleteIntent.get(userId)!=null){
\r
679 Map<String, String> deleteObject = userDeleteIntent.get(userId);
\r
681 for (String objectId : deleteObject.keySet()){
\r
682 if (deleteObject.get(objectId).equals(NEMOConstants.node)){
\r
683 UserKey userKey = new UserKey(userId);
\r
684 NodeKey nodeKey = new NodeKey(new NodeId(objectId));
\r
685 WriteTransaction t = dataBroker.newWriteOnlyTransaction();
\r
686 InstanceIdentifier<Node> nodeid = InstanceIdentifier.builder(Users.class).child(User.class, userKey).child(Objects.class).child(Node.class,nodeKey).build();
\r
687 t.delete(LogicalDatastoreType.CONFIGURATION, nodeid);
\r
688 CheckedFuture<Void, TransactionCommitFailedException> f = t.submit();
\r
689 Futures.addCallback(f, new FutureCallback<Void>() {
\r
691 public void onFailure(Throwable t) {
\r
692 LOG.error("Could not delete node instance", t);
\r
695 public void onSuccess(Void result) {
\r
699 if (deleteObject.get(objectId).equals(NEMOConstants.connection)){
\r
700 UserKey userKey = new UserKey(userId);
\r
701 ConnectionKey connectionKey = new ConnectionKey(new ConnectionId(objectId));
\r
702 WriteTransaction t = dataBroker.newWriteOnlyTransaction();
\r
703 InstanceIdentifier<Connection> connectionid = InstanceIdentifier.builder(Users.class).child(User.class, userKey).child(Objects.class).child(Connection.class,connectionKey).build();
\r
704 t.delete(LogicalDatastoreType.CONFIGURATION, connectionid);
\r
705 CheckedFuture<Void, TransactionCommitFailedException> f = t.submit();
\r
706 Futures.addCallback(f, new FutureCallback<Void>() {
\r
708 public void onFailure(Throwable t) {
\r
709 LOG.error("Could not delete connection instance", t);
\r
712 public void onSuccess(Void result) {
\r
716 if (deleteObject.get(objectId).equals(NEMOConstants.flow)){
\r
717 UserKey userKey = new UserKey(userId);
\r
718 FlowKey flowKey = new FlowKey(new FlowId(objectId));
\r
719 WriteTransaction t = dataBroker.newWriteOnlyTransaction();
\r
720 InstanceIdentifier<Flow> flowid = InstanceIdentifier.builder(Users.class).child(User.class, userKey).child(Objects.class).child(Flow.class,flowKey).build();
\r
721 t.delete(LogicalDatastoreType.CONFIGURATION, flowid);
\r
722 CheckedFuture<Void, TransactionCommitFailedException> f = t.submit();
\r
723 Futures.addCallback(f, new FutureCallback<Void>() {
\r
725 public void onFailure(Throwable t) {
\r
726 LOG.error("Could not delete flow instance", t);
\r
729 public void onSuccess(Void result) {
\r
733 if (deleteObject.get(objectId).equals(NEMOConstants.operation)){
\r
734 UserKey userKey = new UserKey(userId);
\r
735 OperationKey operationKey = new OperationKey(new OperationId(objectId));
\r
736 WriteTransaction t = dataBroker.newWriteOnlyTransaction();
\r
737 InstanceIdentifier<Operation> operationid = InstanceIdentifier.builder(Users.class).child(User.class, userKey).child(Operations.class).child(Operation.class,operationKey).build();
\r
738 t.delete(LogicalDatastoreType.CONFIGURATION, operationid);
\r
739 CheckedFuture<Void, TransactionCommitFailedException> f = t.submit();
\r
740 Futures.addCallback(f, new FutureCallback<Void>() {
\r
742 public void onFailure(Throwable t) {
\r
743 LOG.error("Could not delete operation instance", t);
\r
746 public void onSuccess(Void result) {
\r