dd06ce695c3350a255eef6a8af35817afa1b18b6
[nemo.git] / nemo-impl / src / main / java / org / opendaylight / nemo / user / UserManager.java
1 /*\r
2  * Copyright (c) 2015 Huawei, Inc. and others. All rights reserved.\r
3  *\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
7  */\r
8 package org.opendaylight.nemo.user;\r
9 \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 \r
29 import java.util.concurrent.Future;\r
30 \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
33 \r
34 /**\r
35  * Created by z00293636 on 2015/9/7.\r
36  */\r
37 public class UserManager implements NemoIntentService {\r
38 \r
39     private final DataBroker dataBroker;\r
40 \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
46     private AAA aaa;\r
47     private TransactionBegin transactionBegin;\r
48     private TransactionEnd transactionEnd;\r
49     private AdvancedQuery advancedQuery;\r
50     private IntentResolver intentResolver;\r
51 \r
52     Boolean transaction;\r
53     Boolean informresolver;\r
54 \r
55     public UserManager(DataBroker dataBroker0, IntentResolver intentResolver0)\r
56     {\r
57         this.dataBroker = dataBroker0;\r
58 \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
69 \r
70         transaction = false;\r
71         informresolver = false;\r
72     }\r
73     @Override\r
74     public Future<RpcResult<AdvancedNemoQueryOutput>> advancedNemoQuery(AdvancedNemoQueryInput input) {\r
75 \r
76         final AdvancedNemoQueryOutputBuilder outputBuilder = new AdvancedNemoQueryOutputBuilder();\r
77         String errorInfo = advancedQuery.advancedQuery(aaa, input);\r
78 \r
79         if (errorInfo != null){\r
80             outputBuilder.setResultCode(Error).setMessage(errorInfo);\r
81         }\r
82         else{\r
83             outputBuilder.setResultCode(Ok).setMessage(advancedQuery.getAdvancedQueryReuslt(input));\r
84         }\r
85 \r
86         return  RpcResultBuilder.success(outputBuilder).buildFuture();\r
87     }\r
88 \r
89     @Override\r
90     public Future<RpcResult<BeginTransactionOutput>> beginTransaction(BeginTransactionInput input) {\r
91 \r
92         final BeginTransactionOutputBuilder outputBuilder = new BeginTransactionOutputBuilder();\r
93         if (transaction){\r
94             outputBuilder.setResultCode(Error).setMessage("The previous transaction has not been finished.");\r
95         }\r
96         else{\r
97             String errorInfo = transactionBegin.transactionbegin(aaa,input);\r
98             if (errorInfo != null){\r
99                 outputBuilder.setResultCode(Error).setMessage(errorInfo);\r
100             }\r
101             else{\r
102                 transaction = true;\r
103                 outputBuilder.setResultCode(Ok).setMessage("Transaction Begin.");\r
104             }\r
105         }\r
106         return RpcResultBuilder.success(outputBuilder).buildFuture();\r
107     }\r
108 \r
109     @Override\r
110     public Future<RpcResult<EndTransactionOutput>> endTransaction(EndTransactionInput input) {\r
111 \r
112         final EndTransactionOutputBuilder outputBuilder = new EndTransactionOutputBuilder();\r
113 \r
114         if (!transaction){\r
115             outputBuilder.setResultCode(Error).setMessage("The transaction has not started.");\r
116         }\r
117         else{\r
118             String errorInfo = transactionEnd.transactionend(aaa,input);\r
119             if (errorInfo != null){\r
120                 outputBuilder.setResultCode(Error).setMessage(errorInfo);\r
121             }\r
122             else{\r
123                 transaction = false;\r
124                 tenantManage.transactionHandling(input.getUserId());\r
125                 if (informresolver){\r
126                     informresolver = false;\r
127                     try{\r
128                         intentResolver.resolveIntent(input.getUserId());\r
129                         outputBuilder.setResultCode(Ok).setMessage("The transaction ends.");\r
130                     }\r
131                     catch (IntentResolutionException e){\r
132                         e.printStackTrace();\r
133                         outputBuilder.setResultCode(Error).setMessage(e.getMessage());\r
134                     }\r
135                     catch (VNMappingException e){\r
136                         e.printStackTrace();\r
137                         outputBuilder.setResultCode(Error).setMessage(e.getMessage());\r
138                     }\r
139                     catch (Exception e){\r
140                         e.printStackTrace();\r
141                     }\r
142                 }\r
143                 else{\r
144                     outputBuilder.setResultCode(Ok).setMessage("The transaction ends.");\r
145                 }\r
146             }\r
147         }\r
148         return RpcResultBuilder.success(outputBuilder).buildFuture();\r
149     }\r
150 \r
151     @Override\r
152     public Future<RpcResult<LanguageStyleNemoRequestOutput>> languageStyleNemoRequest(LanguageStyleNemoRequestInput input) {\r
153 \r
154         final LanguageStyleNemoRequestOutputBuilder outputBuilder = new LanguageStyleNemoRequestOutputBuilder();\r
155         try {\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
160                 }\r
161                 else{\r
162                     outputBuilder.setResultCode(Error).setMessage(errorInfo);\r
163                 }\r
164             }\r
165             else{\r
166                 outputBuilder.setResultCode(Ok).setMessage("The intent has been stored in this transaction.");\r
167                 informresolver = true;\r
168             }\r
169         }\r
170         catch (ParseException e) {\r
171             e.printStackTrace();\r
172             outputBuilder.setResultCode(Error).setMessage(e.getMessage());\r
173         }\r
174         catch (NumberFormatException e) {\r
175             e.printStackTrace();\r
176             outputBuilder.setResultCode(Error).setMessage(e.getMessage());\r
177         }\r
178         return RpcResultBuilder.success(outputBuilder).buildFuture();\r
179     }\r
180 \r
181     @Override\r
182     public Future<RpcResult<RegisterUserOutput>> registerUser(RegisterUserInput input) {\r
183 \r
184         final RegisterUserOutputBuilder outputBuilder = new RegisterUserOutputBuilder();\r
185         String errorInfo = registerUser.registerUser(input);\r
186 \r
187         if (errorInfo != null){\r
188             outputBuilder.setResultCode(Error).setMessage(errorInfo);\r
189         }\r
190         else{\r
191             outputBuilder.setResultCode(Ok).setMessage("Register user successfully.");\r
192         }\r
193         return RpcResultBuilder.success(outputBuilder).buildFuture();\r
194     }\r
195 \r
196     @Override\r
197     public Future<RpcResult<StructureStyleNemoDeleteOutput>> structureStyleNemoDelete(StructureStyleNemoDeleteInput input) {\r
198 \r
199         final StructureStyleNemoDeleteOutputBuilder outputBuilder = new StructureStyleNemoDeleteOutputBuilder();\r
200         String errorInfo = deleteIntent.styleNemoDeleteOutput(aaa,input);\r
201 \r
202         if (errorInfo != null){\r
203             outputBuilder.setResultCode(Error).setMessage(errorInfo);\r
204         }\r
205         else{\r
206             outputBuilder.setResultCode(Ok).setMessage("The intent has been handled by user manager successfully.");\r
207             informresolver = true;\r
208         }\r
209         return RpcResultBuilder.success(outputBuilder).buildFuture();\r
210     }\r
211 \r
212     @Override\r
213     public Future<RpcResult<StructureStyleNemoUpdateOutput>> structureStyleNemoUpdate(StructureStyleNemoUpdateInput input) {\r
214 \r
215         final StructureStyleNemoUpdateOutputBuilder outputBuilder = new StructureStyleNemoUpdateOutputBuilder();\r
216         try {\r
217             String erroInfo = updateIntent.updateIntent(aaa,input);\r
218             if (erroInfo != null){\r
219                 outputBuilder.setResultCode(Error).setMessage(erroInfo);\r
220             }\r
221             else{\r
222                 outputBuilder.setResultCode(Ok).setMessage("The intent has been handled by user manager successfully.");\r
223                 informresolver = true;\r
224             }\r
225         }\r
226         catch (NumberFormatException e){\r
227             e.printStackTrace();\r
228             outputBuilder.setResultCode(Error).setMessage(e.getMessage());\r
229         }\r
230         return RpcResultBuilder.success(outputBuilder).buildFuture();\r
231     }\r
232 }\r