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
29 import java.util.concurrent.Future;
\r
31 import static org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.CommonRpcResult.ResultCode.Error;
\r
32 import static org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.CommonRpcResult.ResultCode.Ok;
\r
35 * Created by z00293636 on 2015/9/7.
\r
37 public class UserManager implements NemoIntentService {
\r
39 private final DataBroker dataBroker;
\r
41 private RegisterUser registerUser;
\r
42 private UpdateIntent updateIntent;
\r
43 private DeleteIntent deleteIntent;
\r
44 private LanguageIntent languageIntent;
\r
45 private TenantManage tenantManage;
\r
47 private TransactionBegin transactionBegin;
\r
48 private TransactionEnd transactionEnd;
\r
49 private AdvancedQuery advancedQuery;
\r
50 private IntentResolver intentResolver;
\r
52 Boolean transaction;
\r
53 Boolean informresolver;
\r
55 public UserManager(DataBroker dataBroker0, IntentResolver intentResolver0)
\r
57 this.dataBroker = dataBroker0;
\r
59 this.intentResolver = intentResolver0;
\r
60 tenantManage = new TenantManage(dataBroker);
\r
61 aaa = new AAA(tenantManage);
\r
62 registerUser = new RegisterUser(tenantManage);
\r
63 updateIntent = new UpdateIntent(dataBroker,tenantManage);
\r
64 deleteIntent = new DeleteIntent(dataBroker, tenantManage);
\r
65 languageIntent = new LanguageIntent(dataBroker,tenantManage);
\r
66 advancedQuery = new AdvancedQuery(dataBroker, tenantManage);
\r
67 transactionBegin = new TransactionBegin();
\r
68 transactionEnd = new TransactionEnd();
\r
70 transaction = false;
\r
71 informresolver = false;
\r
74 public Future<RpcResult<AdvancedNemoQueryOutput>> advancedNemoQuery(AdvancedNemoQueryInput input) {
\r
76 final AdvancedNemoQueryOutputBuilder outputBuilder = new AdvancedNemoQueryOutputBuilder();
\r
77 String errorInfo = advancedQuery.advancedQuery(aaa, input);
\r
79 if (errorInfo != null){
\r
80 outputBuilder.setResultCode(Error).setMessage(errorInfo);
\r
83 outputBuilder.setResultCode(Ok).setMessage(advancedQuery.getAdvancedQueryReuslt(input));
\r
86 return RpcResultBuilder.success(outputBuilder).buildFuture();
\r
90 public Future<RpcResult<BeginTransactionOutput>> beginTransaction(BeginTransactionInput input) {
\r
92 final BeginTransactionOutputBuilder outputBuilder = new BeginTransactionOutputBuilder();
\r
94 outputBuilder.setResultCode(Error).setMessage("The previous transaction has not been finished.");
\r
97 String errorInfo = transactionBegin.transactionbegin(aaa,input);
\r
98 if (errorInfo != null){
\r
99 outputBuilder.setResultCode(Error).setMessage(errorInfo);
\r
102 transaction = true;
\r
103 outputBuilder.setResultCode(Ok).setMessage("Transaction Begin.");
\r
106 return RpcResultBuilder.success(outputBuilder).buildFuture();
\r
110 public Future<RpcResult<EndTransactionOutput>> endTransaction(EndTransactionInput input) {
\r
112 final EndTransactionOutputBuilder outputBuilder = new EndTransactionOutputBuilder();
\r
115 outputBuilder.setResultCode(Error).setMessage("The transaction has not started.");
\r
118 String errorInfo = transactionEnd.transactionend(aaa,input);
\r
119 if (errorInfo != null){
\r
120 outputBuilder.setResultCode(Error).setMessage(errorInfo);
\r
123 transaction = false;
\r
124 tenantManage.transactionHandling(input.getUserId());
\r
125 if (informresolver){
\r
126 informresolver = false;
\r
128 intentResolver.resolveIntent(input.getUserId());
\r
129 outputBuilder.setResultCode(Ok).setMessage("The transaction ends.");
\r
131 catch (IntentResolutionException e){
\r
132 e.printStackTrace();
\r
133 outputBuilder.setResultCode(Error).setMessage(e.getMessage());
\r
135 catch (VNMappingException e){
\r
136 e.printStackTrace();
\r
137 outputBuilder.setResultCode(Error).setMessage(e.getMessage());
\r
139 catch (Exception e){
\r
140 e.printStackTrace();
\r
144 outputBuilder.setResultCode(Ok).setMessage("The transaction ends.");
\r
148 return RpcResultBuilder.success(outputBuilder).buildFuture();
\r
152 public Future<RpcResult<LanguageStyleNemoRequestOutput>> languageStyleNemoRequest(LanguageStyleNemoRequestInput input) {
\r
154 final LanguageStyleNemoRequestOutputBuilder outputBuilder = new LanguageStyleNemoRequestOutputBuilder();
\r
156 String errorInfo = languageIntent.LanIntentHandler(aaa,input);
\r
157 if (errorInfo != null){
\r
158 if (errorInfo.contains(NEMOConstants.Results)){
\r
159 outputBuilder.setResultCode(Ok).setMessage(errorInfo);
\r
162 outputBuilder.setResultCode(Error).setMessage(errorInfo);
\r
166 outputBuilder.setResultCode(Ok).setMessage("The intent has been stored in this transaction.");
\r
167 informresolver = true;
\r
170 catch (ParseException e) {
\r
171 e.printStackTrace();
\r
172 outputBuilder.setResultCode(Error).setMessage(e.getMessage());
\r
174 catch (NumberFormatException e) {
\r
175 e.printStackTrace();
\r
176 outputBuilder.setResultCode(Error).setMessage(e.getMessage());
\r
178 return RpcResultBuilder.success(outputBuilder).buildFuture();
\r
182 public Future<RpcResult<RegisterUserOutput>> registerUser(RegisterUserInput input) {
\r
184 final RegisterUserOutputBuilder outputBuilder = new RegisterUserOutputBuilder();
\r
185 String errorInfo = registerUser.registerUser(input);
\r
187 if (errorInfo != null){
\r
188 outputBuilder.setResultCode(Error).setMessage(errorInfo);
\r
191 outputBuilder.setResultCode(Ok).setMessage("Register user successfully.");
\r
193 return RpcResultBuilder.success(outputBuilder).buildFuture();
\r
197 public Future<RpcResult<StructureStyleNemoDeleteOutput>> structureStyleNemoDelete(StructureStyleNemoDeleteInput input) {
\r
199 final StructureStyleNemoDeleteOutputBuilder outputBuilder = new StructureStyleNemoDeleteOutputBuilder();
\r
200 String errorInfo = deleteIntent.styleNemoDeleteOutput(aaa,input);
\r
202 if (errorInfo != null){
\r
203 outputBuilder.setResultCode(Error).setMessage(errorInfo);
\r
206 outputBuilder.setResultCode(Ok).setMessage("The intent has been handled by user manager successfully.");
\r
207 informresolver = true;
\r
209 return RpcResultBuilder.success(outputBuilder).buildFuture();
\r
213 public Future<RpcResult<StructureStyleNemoUpdateOutput>> structureStyleNemoUpdate(StructureStyleNemoUpdateInput input) {
\r
215 final StructureStyleNemoUpdateOutputBuilder outputBuilder = new StructureStyleNemoUpdateOutputBuilder();
\r
217 String erroInfo = updateIntent.updateIntent(aaa,input);
\r
218 if (erroInfo != null){
\r
219 outputBuilder.setResultCode(Error).setMessage(erroInfo);
\r
222 outputBuilder.setResultCode(Ok).setMessage("The intent has been handled by user manager successfully.");
\r
223 informresolver = true;
\r
226 catch (NumberFormatException e){
\r
227 e.printStackTrace();
\r
228 outputBuilder.setResultCode(Error).setMessage(e.getMessage());
\r
230 return RpcResultBuilder.success(outputBuilder).buildFuture();
\r