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 org.opendaylight.controller.md.sal.binding.api.DataBroker;
\r
11 import org.opendaylight.nemo.intent.IntentResolutionException;
\r
12 import org.opendaylight.nemo.intent.IntentResolver;
\r
13 import org.opendaylight.nemo.intent.computation.VNMappingException;
\r
14 import org.opendaylight.nemo.user.advancedquery.AdvancedQuery;
\r
15 import org.opendaylight.nemo.user.tenantmanager.AAA;
\r
16 import org.opendaylight.nemo.user.tenantmanager.RegisterUser;
\r
17 import org.opendaylight.nemo.user.tenantmanager.TenantManage;
\r
18 import org.opendaylight.nemo.user.transactionmanager.TransactionBegin;
\r
19 import org.opendaylight.nemo.user.transactionmanager.TransactionEnd;
\r
20 import org.opendaylight.nemo.user.vnspacemanager.languagestyle.LanguageIntent;
\r
21 import org.opendaylight.nemo.user.vnspacemanager.languagestyle.NEMOConstants;
\r
22 import org.opendaylight.nemo.user.vnspacemanager.languagestyle.NEMOParse.ParseException;
\r
23 import org.opendaylight.nemo.user.vnspacemanager.structurestyle.deleteintent.DeleteIntent;
\r
24 import org.opendaylight.nemo.user.vnspacemanager.structurestyle.updateintent.UpdateIntent;
\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.*;
\r
26 import org.opendaylight.yangtools.yang.common.RpcResult;
\r
27 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
\r
28 import org.slf4j.Logger;
\r
29 import org.slf4j.LoggerFactory;
\r
30 import java.util.concurrent.Future;
\r
32 import static org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.CommonRpcResult.ResultCode.Error;
\r
33 import static org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.CommonRpcResult.ResultCode.Ok;
\r
36 * Created by z00293636 on 2015/9/7.
\r
38 public class UserManager implements NemoIntentService {
\r
39 private static final Logger LOG = LoggerFactory.getLogger(UserManager.class);
\r
40 private final DataBroker dataBroker;
\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 public UserManager(DataBroker dataBroker0, IntentResolver intentResolver0)
\r
58 this.dataBroker = dataBroker0;
\r
60 this.intentResolver = intentResolver0;
\r
61 tenantManage = new TenantManage(dataBroker);
\r
62 aaa = new AAA(tenantManage);
\r
63 registerUser = new RegisterUser(tenantManage);
\r
64 updateIntent = new UpdateIntent(dataBroker,tenantManage);
\r
65 deleteIntent = new DeleteIntent(dataBroker, tenantManage);
\r
66 languageIntent = new LanguageIntent(dataBroker,tenantManage);
\r
67 advancedQuery = new AdvancedQuery(dataBroker, tenantManage);
\r
68 transactionBegin = new TransactionBegin();
\r
69 transactionEnd = new TransactionEnd();
\r
71 transaction = false;
\r
72 informresolver = false;
\r
75 public Future<RpcResult<AdvancedNemoQueryOutput>> advancedNemoQuery(AdvancedNemoQueryInput input) {
\r
77 final AdvancedNemoQueryOutputBuilder outputBuilder = new AdvancedNemoQueryOutputBuilder();
\r
78 String errorInfo = advancedQuery.advancedQuery(aaa, input);
\r
80 if (errorInfo != null){
\r
81 outputBuilder.setResultCode(Error).setMessage(errorInfo);
\r
84 outputBuilder.setResultCode(Ok).setMessage(advancedQuery.getAdvancedQueryReuslt(input));
\r
87 return RpcResultBuilder.success(outputBuilder).buildFuture();
\r
91 public Future<RpcResult<BeginTransactionOutput>> beginTransaction(BeginTransactionInput input) {
\r
93 final BeginTransactionOutputBuilder outputBuilder = new BeginTransactionOutputBuilder();
\r
95 outputBuilder.setResultCode(Error).setMessage("The previous transaction has not been finished.");
\r
98 String errorInfo = transactionBegin.transactionbegin(aaa,input);
\r
99 if (errorInfo != null){
\r
100 outputBuilder.setResultCode(Error).setMessage(errorInfo);
\r
103 transaction = true;
\r
104 outputBuilder.setResultCode(Ok).setMessage("Transaction Begin.");
\r
107 return RpcResultBuilder.success(outputBuilder).buildFuture();
\r
111 public Future<RpcResult<EndTransactionOutput>> endTransaction(EndTransactionInput input) {
\r
113 final EndTransactionOutputBuilder outputBuilder = new EndTransactionOutputBuilder();
\r
116 outputBuilder.setResultCode(Error).setMessage("The transaction has not started.");
\r
119 String errorInfo = transactionEnd.transactionend(aaa,input);
\r
120 if (errorInfo != null){
\r
121 outputBuilder.setResultCode(Error).setMessage(errorInfo);
\r
124 transaction = false;
\r
125 tenantManage.transactionHandling(input.getUserId());
\r
126 if (informresolver){
\r
127 informresolver = false;
\r
129 intentResolver.resolveIntent(input.getUserId());
\r
130 outputBuilder.setResultCode(Ok).setMessage("The transaction ends.");
\r
132 catch (IntentResolutionException e){
\r
133 LOG.error("Exception:",e);
\r
134 outputBuilder.setResultCode(Error).setMessage(e.getMessage());
\r
136 catch (VNMappingException e){
\r
137 LOG.error("Exception:",e);
\r
138 outputBuilder.setResultCode(Error).setMessage(e.getMessage());
\r
140 catch (Exception e){
\r
141 LOG.error("Exception:",e);
\r
145 outputBuilder.setResultCode(Ok).setMessage("The transaction ends.");
\r
149 return RpcResultBuilder.success(outputBuilder).buildFuture();
\r
153 public Future<RpcResult<LanguageStyleNemoRequestOutput>> languageStyleNemoRequest(LanguageStyleNemoRequestInput input) {
\r
155 final LanguageStyleNemoRequestOutputBuilder outputBuilder = new LanguageStyleNemoRequestOutputBuilder();
\r
157 String errorInfo = languageIntent.LanIntentHandler(aaa,input);
\r
158 if (errorInfo != null){
\r
159 if (errorInfo.contains(NEMOConstants.Results)){
\r
160 outputBuilder.setResultCode(Ok).setMessage(errorInfo);
\r
163 outputBuilder.setResultCode(Error).setMessage(errorInfo);
\r
167 outputBuilder.setResultCode(Ok).setMessage("The intent has been stored in this transaction.");
\r
168 informresolver = true;
\r
171 catch (ParseException e) {
\r
172 LOG.error("Exception:",e);
\r
173 outputBuilder.setResultCode(Error).setMessage(e.getMessage());
\r
175 catch (NumberFormatException e) {
\r
176 LOG.error("Exception:",e);
\r
177 outputBuilder.setResultCode(Error).setMessage(e.getMessage());
\r
179 return RpcResultBuilder.success(outputBuilder).buildFuture();
\r
183 public Future<RpcResult<RegisterUserOutput>> registerUser(RegisterUserInput input) {
\r
185 final RegisterUserOutputBuilder outputBuilder = new RegisterUserOutputBuilder();
\r
186 String errorInfo = registerUser.registerUser(input);
\r
188 if (errorInfo != null){
\r
189 outputBuilder.setResultCode(Error).setMessage(errorInfo);
\r
192 outputBuilder.setResultCode(Ok).setMessage("Register user successfully.");
\r
194 return RpcResultBuilder.success(outputBuilder).buildFuture();
\r
198 public Future<RpcResult<StructureStyleNemoDeleteOutput>> structureStyleNemoDelete(StructureStyleNemoDeleteInput input) {
\r
200 final StructureStyleNemoDeleteOutputBuilder outputBuilder = new StructureStyleNemoDeleteOutputBuilder();
\r
201 String errorInfo = deleteIntent.styleNemoDeleteOutput(aaa,input);
\r
203 if (errorInfo != null){
\r
204 outputBuilder.setResultCode(Error).setMessage(errorInfo);
\r
207 outputBuilder.setResultCode(Ok).setMessage("The intent has been handled by user manager successfully.");
\r
208 informresolver = true;
\r
210 return RpcResultBuilder.success(outputBuilder).buildFuture();
\r
214 public Future<RpcResult<StructureStyleNemoUpdateOutput>> structureStyleNemoUpdate(StructureStyleNemoUpdateInput input) {
\r
216 final StructureStyleNemoUpdateOutputBuilder outputBuilder = new StructureStyleNemoUpdateOutputBuilder();
\r
218 String erroInfo = updateIntent.updateIntent(aaa,input);
\r
219 if (erroInfo != null){
\r
220 outputBuilder.setResultCode(Error).setMessage(erroInfo);
\r
223 outputBuilder.setResultCode(Ok).setMessage("The intent has been handled by user manager successfully.");
\r
224 informresolver = true;
\r
227 catch (NumberFormatException e){
\r
228 LOG.error("Exception:",e);
\r
229 outputBuilder.setResultCode(Error).setMessage(e.getMessage());
\r
231 return RpcResultBuilder.success(outputBuilder).buildFuture();
\r