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