Merge "Refactor TenantManage"
[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 static org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.CommonRpcResult.ResultCode.Error; \r
11 import static org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nemo.intent.rev151010.CommonRpcResult.ResultCode.Ok; \r
12 \r
13 import org.opendaylight.controller.md.sal.binding.api.DataBroker;\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
30 \r
31 import java.util.concurrent.Future;\r
32 \r
33 /**\r
34  * Created by z00293636 on 2015/9/7.\r
35  */\r
36 public class UserManager implements NemoIntentService {\r
37 \r
38     private final DataBroker dataBroker;\r
39 \r
40     private VNSpaceManagement vnSpaceManagement;\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         vnSpaceManagement = new VNSpaceManagement(dataBroker);\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);\r
67         advancedQuery = new AdvancedQuery(dataBroker, tenantManage);\r
68 \r
69         transactionBegin = new TransactionBegin();\r
70         transactionEnd = new TransactionEnd();\r
71 \r
72         transaction = false;\r
73         informresolver = false;\r
74     }\r
75 \r
76     @Override\r
77     public Future<RpcResult<AdvancedNemoQueryOutput>> advancedNemoQuery(AdvancedNemoQueryInput input) {\r
78         final AdvancedNemoQueryOutputBuilder outputBuilder = new AdvancedNemoQueryOutputBuilder();\r
79 \r
80         String errorInfo = advancedQuery.advancedQuery(aaa, input);\r
81         if (errorInfo != null)\r
82         {\r
83             outputBuilder.setResultCode(Error).setMessage(errorInfo);\r
84         }\r
85         else\r
86         {\r
87             outputBuilder.setResultCode(Ok).setMessage(advancedQuery.getAdvancedQueryReuslt(input));\r
88         }\r
89 \r
90         return RpcResultBuilder.success(outputBuilder).buildFuture();\r
91     }\r
92 \r
93     @Override\r
94     public Future<RpcResult<BeginTransactionOutput>> beginTransaction(BeginTransactionInput input) {\r
95         final BeginTransactionOutputBuilder outputBuilder = new BeginTransactionOutputBuilder();\r
96 \r
97         if (transaction)\r
98         {\r
99             outputBuilder.setResultCode(Error).setMessage("The previous transaction has not been finished.");\r
100         }\r
101         else\r
102         {\r
103             String errorInfo = transactionBegin.transactionbegin(aaa,input);\r
104             if (errorInfo != null)\r
105             {\r
106                 outputBuilder.setResultCode(Error).setMessage(errorInfo);\r
107             }\r
108             else\r
109             {\r
110                 transaction = true;\r
111                 outputBuilder.setResultCode(Ok).setMessage("Transaction Begin.");\r
112             }\r
113         }\r
114 \r
115         return RpcResultBuilder.success(outputBuilder).buildFuture();\r
116     }\r
117 \r
118     @Override\r
119     public Future<RpcResult<EndTransactionOutput>> endTransaction(EndTransactionInput input) {\r
120         final EndTransactionOutputBuilder outputBuilder = new EndTransactionOutputBuilder();\r
121 \r
122         if (!transaction)\r
123         {\r
124             outputBuilder.setResultCode(Error).setMessage("The transaction has not started.");\r
125         }\r
126         else\r
127         {\r
128             String errorInfo = transactionEnd.transactionend(aaa,input);\r
129             if (errorInfo != null)\r
130             {\r
131                 outputBuilder.setResultCode(Error).setMessage(errorInfo);\r
132             }\r
133             else\r
134             {\r
135                 transaction = false;\r
136                 if (informresolver)\r
137                 {\r
138                     informresolver = false;\r
139                     try\r
140                     {\r
141                         intentResolver.resolveIntent(input.getUserId());\r
142                         outputBuilder.setResultCode(Ok).setMessage("The transaction ends.");\r
143                     }\r
144                     catch (IntentResolutionException | VNMappingException e)\r
145                     {\r
146                         e.printStackTrace();\r
147                         outputBuilder.setResultCode(Error).setMessage(e.getMessage());\r
148                     }\r
149                     catch (Exception e)\r
150                     {\r
151                         e.printStackTrace();\r
152                     }\r
153                 }\r
154                 else\r
155                 {\r
156                     outputBuilder.setResultCode(Ok).setMessage("The transaction ends.");\r
157                 }\r
158 \r
159             }\r
160         }\r
161 \r
162         return RpcResultBuilder.success(outputBuilder).buildFuture();\r
163     }\r
164 \r
165     @Override\r
166     public Future<RpcResult<LanguageStyleNemoRequestOutput>> languageStyleNemoRequest(LanguageStyleNemoRequestInput input) {\r
167         final LanguageStyleNemoRequestOutputBuilder outputBuilder = new LanguageStyleNemoRequestOutputBuilder();\r
168 \r
169         String errorInfo = languageIntent.LanIntentHandler(aaa,input);\r
170 \r
171         if (errorInfo != null)\r
172         {\r
173             outputBuilder.setResultCode(Error).setMessage(errorInfo);\r
174         }\r
175         else\r
176         {\r
177             outputBuilder.setResultCode(Ok).setMessage("The intent has been stored in this transaction.");\r
178             informresolver = true;\r
179         }\r
180 \r
181         return RpcResultBuilder.success(outputBuilder).buildFuture();\r
182     }\r
183 \r
184     @Override\r
185     public Future<RpcResult<RegisterUserOutput>> registerUser(RegisterUserInput input) {\r
186         final RegisterUserOutputBuilder registerUserOutputBuilder = new RegisterUserOutputBuilder();\r
187 \r
188         String errorInfo = registerUser.registerUser(input);\r
189 \r
190         if (errorInfo != null)\r
191         {\r
192             registerUserOutputBuilder.setResultCode(Error).setMessage(errorInfo);\r
193         }\r
194         else\r
195         {\r
196             registerUserOutputBuilder.setResultCode(Ok).setMessage("Register user successfully.");\r
197         }\r
198 \r
199         return RpcResultBuilder.success(registerUserOutputBuilder).buildFuture();\r
200     }\r
201 \r
202     @Override\r
203     public Future<RpcResult<StructureStyleNemoDeleteOutput>> structureStyleNemoDelete(StructureStyleNemoDeleteInput input) {\r
204         final StructureStyleNemoDeleteOutputBuilder outputBuilder = new StructureStyleNemoDeleteOutputBuilder();\r
205 \r
206         String errorInfo = deleteIntent.styleNemoDeleteOutput(aaa,input);\r
207 \r
208         if (errorInfo != null)\r
209         {\r
210             outputBuilder.setResultCode(Error).setMessage(errorInfo);\r
211         }\r
212         else\r
213         {\r
214             outputBuilder.setResultCode(Ok).setMessage("The intent has been handled by user manager successfully.");\r
215             informresolver = true;\r
216         }\r
217 \r
218         return RpcResultBuilder.success(outputBuilder).buildFuture();\r
219     }\r
220 \r
221     @Override\r
222     public Future<RpcResult<StructureStyleNemoUpdateOutput>> structureStyleNemoUpdate(StructureStyleNemoUpdateInput input) {\r
223         final StructureStyleNemoUpdateOutputBuilder outputBuilder = new StructureStyleNemoUpdateOutputBuilder();\r
224 \r
225         String erroInfo = updateIntent.updateIntent(aaa,input);\r
226 \r
227         if (erroInfo != null)\r
228         {\r
229             outputBuilder.setResultCode(Error).setMessage(erroInfo);\r
230         }\r
231         else\r
232         {\r
233             outputBuilder.setResultCode(Ok).setMessage("The intent has been handled by user manager successfully.");\r
234             informresolver = true;\r
235         }\r
236 \r
237         return RpcResultBuilder.success(outputBuilder).buildFuture();\r
238     }\r
239 }\r