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;
\r
10 import com.google.common.util.concurrent.Futures;
\r
11 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
\r
12 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker.RpcRegistration;
\r
13 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
\r
14 import org.opendaylight.nemo.intent.IntentResolutionException;
\r
15 import org.opendaylight.nemo.intent.IntentResolver;
\r
16 import org.opendaylight.nemo.intent.computation.VNMappingException;
\r
17 import org.opendaylight.nemo.user.advancedquery.AdvancedQuery;
\r
18 import org.opendaylight.nemo.user.tenantmanager.AAA;
\r
19 import org.opendaylight.nemo.user.tenantmanager.RegisterUser;
\r
20 import org.opendaylight.nemo.user.tenantmanager.TenantManage;
\r
21 import org.opendaylight.nemo.user.transactionmanager.TransactionBegin;
\r
22 import org.opendaylight.nemo.user.transactionmanager.TransactionEnd;
\r
23 import org.opendaylight.nemo.user.vnspacemanager.languagestyle.LanguageIntent;
\r
24 import org.opendaylight.nemo.user.vnspacemanager.structurestyle.deleteintent.DeleteIntent;
\r
25 import org.opendaylight.nemo.user.vnspacemanager.structurestyle.updateintent.UpdateIntent;
\r
26 import org.opendaylight.nemo.user.vnspacemanager.VNSpaceManagement;
\r
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.*;
\r
28 import org.opendaylight.yangtools.yang.common.RpcResult;
\r
29 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
\r
31 import java.util.concurrent.Future;
\r
34 * Created by z00293636 on 2015/9/7.
\r
36 public class UserManager implements NemoIntentService, AutoCloseable {
\r
38 private DataBroker dataBroker;
\r
39 private RpcProviderRegistry rpcProviderRegistry;
\r
41 private VNSpaceManagement vnSpaceManagement;
\r
42 private RegisterUser registerUser;
\r
43 private UpdateIntent updateIntent;
\r
44 private DeleteIntent deleteIntent;
\r
45 private LanguageIntent languageIntent;
\r
46 private TenantManage tenantManage;
\r
48 private TransactionBegin transactionBegin;
\r
49 private TransactionEnd transactionEnd;
\r
50 private AdvancedQuery advancedQuery;
\r
51 private IntentResolver intentResolver;
\r
53 Boolean transaction;
\r
54 Boolean informresolver;
\r
56 private RpcRegistration<NemoIntentService> rpcRegistration;
\r
58 public UserManager(DataBroker dataBroker, RpcProviderRegistry rpcProviderRegistry,
\r
59 IntentResolver intentResolver)
\r
61 this.dataBroker = dataBroker;
\r
62 this.rpcProviderRegistry = rpcProviderRegistry;
\r
64 this.intentResolver = intentResolver;
\r
65 vnSpaceManagement = new VNSpaceManagement(dataBroker);
\r
66 tenantManage = new TenantManage(dataBroker);
\r
67 aaa = new AAA(tenantManage);
\r
68 registerUser = new RegisterUser(tenantManage);
\r
69 updateIntent = new UpdateIntent(dataBroker,tenantManage);
\r
70 deleteIntent = new DeleteIntent(dataBroker, tenantManage);
\r
71 languageIntent = new LanguageIntent(dataBroker);
\r
72 advancedQuery = new AdvancedQuery(dataBroker, tenantManage);
\r
74 transactionBegin = new TransactionBegin();
\r
75 transactionEnd = new TransactionEnd();
\r
77 transaction = false;
\r
78 informresolver = false;
\r
80 rpcRegistration = rpcProviderRegistry.addRpcImplementation(NemoIntentService.class, this);
\r
83 public Future<RpcResult<AdvancedNemoQueryOutput>> advancedNemoQuery(AdvancedNemoQueryInput input) {
\r
84 RpcResult<AdvancedNemoQueryOutput> advancedNemoQueryOutputRpcResult = null;
\r
85 AdvancedNemoQueryOutputBuilder advancedNemoQueryOutputBuilder = new AdvancedNemoQueryOutputBuilder();
\r
87 String errorInfo = advancedQuery.advancedQuery(aaa, input);
\r
88 if (errorInfo != null)
\r
90 advancedNemoQueryOutputBuilder.setResultCode(CommonRpcResult.ResultCode.Error).setMessage(errorInfo);
\r
94 advancedNemoQueryOutputBuilder.setResultCode(CommonRpcResult.ResultCode.Ok).setMessage(advancedQuery.getAdvancedQueryReuslt(input));
\r
96 advancedNemoQueryOutputRpcResult = RpcResultBuilder.<AdvancedNemoQueryOutput>success(advancedNemoQueryOutputBuilder.build()).build();
\r
98 return Futures.immediateFuture(advancedNemoQueryOutputRpcResult);
\r
102 public Future<RpcResult<BeginTransactionOutput>> beginTransaction(BeginTransactionInput input) {
\r
103 RpcResult<BeginTransactionOutput> beginTransactionOutputResult = null;
\r
104 BeginTransactionOutputBuilder beginTransactionOutputBuilder = new BeginTransactionOutputBuilder();
\r
108 beginTransactionOutputBuilder.setResultCode(CommonRpcResult.ResultCode.Error).setMessage("The previous transaction has not been finished.");
\r
112 String errorInfo = transactionBegin.transactionbegin(aaa,input);
\r
113 if (errorInfo != null)
\r
115 beginTransactionOutputBuilder.setResultCode(CommonRpcResult.ResultCode.Error).setMessage(errorInfo);
\r
119 transaction = true;
\r
120 beginTransactionOutputBuilder.setResultCode(CommonRpcResult.ResultCode.Ok).setMessage("Transaction Begin.");
\r
123 beginTransactionOutputResult = RpcResultBuilder.<BeginTransactionOutput>success(beginTransactionOutputBuilder.build()).build();
\r
124 return Futures.immediateFuture(beginTransactionOutputResult);
\r
128 public Future<RpcResult<EndTransactionOutput>> endTransaction(EndTransactionInput input) {
\r
129 RpcResult<EndTransactionOutput> endTransactionOutputResult = null;
\r
130 EndTransactionOutputBuilder endTransactionOutputBuilder = new EndTransactionOutputBuilder();
\r
134 endTransactionOutputBuilder.setResultCode(CommonRpcResult.ResultCode.Error).setMessage("The transaction has not started.");
\r
138 String errorInfo = transactionEnd.transactionend(aaa,input);
\r
139 if (errorInfo != null)
\r
141 endTransactionOutputBuilder.setResultCode(CommonRpcResult.ResultCode.Error).setMessage(errorInfo);
\r
145 transaction = false;
\r
146 if (informresolver)
\r
148 informresolver = false;
\r
151 intentResolver.resolveIntent(input.getUserId());
\r
152 endTransactionOutputBuilder.setResultCode(CommonRpcResult.ResultCode.Ok).setMessage("The transaction ends.");
\r
154 catch (IntentResolutionException | VNMappingException e)
\r
156 e.printStackTrace();
\r
157 endTransactionOutputBuilder.setResultCode(CommonRpcResult.ResultCode.Error).setMessage(e.getMessage());
\r
159 catch (Exception e)
\r
161 e.printStackTrace();
\r
166 endTransactionOutputBuilder.setResultCode(CommonRpcResult.ResultCode.Ok).setMessage("The transaction ends.");
\r
171 endTransactionOutputResult = RpcResultBuilder.<EndTransactionOutput>success(endTransactionOutputBuilder.build()).build();
\r
172 return Futures.immediateFuture(endTransactionOutputResult);
\r
176 public Future<RpcResult<LanguageStyleNemoRequestOutput>> languageStyleNemoRequest(LanguageStyleNemoRequestInput input) {
\r
177 RpcResult<LanguageStyleNemoRequestOutput> styleNemoRequestOutputRpcResult = null;
\r
178 LanguageStyleNemoRequestOutputBuilder languageStyleNemoRequestOutputBuilder = new LanguageStyleNemoRequestOutputBuilder();
\r
180 String errorInfo = languageIntent.LanIntentHandler(aaa,input);
\r
182 if (errorInfo != null)
\r
184 languageStyleNemoRequestOutputBuilder.setResultCode(CommonRpcResult.ResultCode.Error).setMessage(errorInfo);
\r
188 languageStyleNemoRequestOutputBuilder.setResultCode(CommonRpcResult.ResultCode.Ok).setMessage("The intent has been stored in this transaction.");
\r
189 informresolver = true;
\r
191 styleNemoRequestOutputRpcResult = RpcResultBuilder.<LanguageStyleNemoRequestOutput>success(languageStyleNemoRequestOutputBuilder.build()).build();
\r
193 return Futures.immediateFuture(styleNemoRequestOutputRpcResult);
\r
197 public Future<RpcResult<RegisterUserOutput>> registerUser(RegisterUserInput input) {
\r
198 RpcResult<RegisterUserOutput> registerUserOutputRpcResult = null;
\r
199 RegisterUserOutputBuilder registerUserOutputBuilder = new RegisterUserOutputBuilder();
\r
200 String errorInfo = registerUser.registerUser(input);
\r
202 if (errorInfo != null)
\r
204 registerUserOutputBuilder.setResultCode(CommonRpcResult.ResultCode.Error).setMessage(errorInfo);
\r
208 registerUserOutputBuilder.setResultCode(CommonRpcResult.ResultCode.Ok).setMessage("Register user successfully.");
\r
211 registerUserOutputRpcResult = RpcResultBuilder.<RegisterUserOutput>success(registerUserOutputBuilder.build()).build();
\r
213 return Futures.immediateFuture(registerUserOutputRpcResult);
\r
217 public Future<RpcResult<StructureStyleNemoDeleteOutput>> structureStyleNemoDelete(StructureStyleNemoDeleteInput input) {
\r
218 RpcResult<StructureStyleNemoDeleteOutput> styleNemoDeleteOutputRpcResult = null;
\r
219 StructureStyleNemoDeleteOutputBuilder styleNemoDeleteOutputBuilder = new StructureStyleNemoDeleteOutputBuilder();
\r
221 String errorInfo = deleteIntent.styleNemoDeleteOutput(aaa,input);
\r
223 if (errorInfo != null)
\r
225 styleNemoDeleteOutputBuilder.setResultCode(CommonRpcResult.ResultCode.Error).setMessage(errorInfo);
\r
229 styleNemoDeleteOutputBuilder.setResultCode(CommonRpcResult.ResultCode.Ok).setMessage("The intent has been handled by user manager successfully.");
\r
230 informresolver = true;
\r
234 styleNemoDeleteOutputRpcResult = RpcResultBuilder.<StructureStyleNemoDeleteOutput>success(styleNemoDeleteOutputBuilder.build()).build();
\r
236 return Futures.immediateFuture(styleNemoDeleteOutputRpcResult);
\r
240 public Future<RpcResult<StructureStyleNemoUpdateOutput>> structureStyleNemoUpdate(StructureStyleNemoUpdateInput input) {
\r
241 RpcResult<StructureStyleNemoUpdateOutput> styleNemoUpdateOutputRpcResult = null;
\r
242 StructureStyleNemoUpdateOutputBuilder styleNemoUpdateOutputBuilder = new StructureStyleNemoUpdateOutputBuilder();
\r
244 String erroInfo = updateIntent.updateIntent(aaa,input);
\r
246 if (erroInfo != null)
\r
248 styleNemoUpdateOutputBuilder.setResultCode(CommonRpcResult.ResultCode.Error).setMessage(erroInfo);
\r
252 styleNemoUpdateOutputBuilder.setResultCode(CommonRpcResult.ResultCode.Ok).setMessage("The intent has been handled by user manager successfully.");
\r
253 informresolver = true;
\r
256 styleNemoUpdateOutputRpcResult = RpcResultBuilder.<StructureStyleNemoUpdateOutput>success(styleNemoUpdateOutputBuilder.build()).build();
\r
258 return Futures.immediateFuture(styleNemoUpdateOutputRpcResult);
\r
262 public void close() throws Exception {
\r
263 if ( null != rpcRegistration ) {
\r
264 rpcRegistration.close();
\r