Merge "Add INFO.yaml file"
[aaf/authz.git] / auth / auth-service / src / main / java / org / onap / aaf / auth / service / facade / AuthzFacadeImpl.java
1 /**
2  * ============LICENSE_START====================================================
3  * org.onap.aaf
4  * ===========================================================================
5  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
6  * ===========================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END====================================================
19  *
20  */
21
22 package org.onap.aaf.auth.service.facade;
23
24 import static org.onap.aaf.auth.dao.cass.Status.ERR_ChoiceNeeded;
25 import static org.onap.aaf.auth.dao.cass.Status.ERR_DelegateNotFound;
26 import static org.onap.aaf.auth.dao.cass.Status.ERR_DependencyExists;
27 import static org.onap.aaf.auth.dao.cass.Status.ERR_FutureNotRequested;
28 import static org.onap.aaf.auth.dao.cass.Status.ERR_InvalidDelegate;
29 import static org.onap.aaf.auth.dao.cass.Status.ERR_NsNotFound;
30 import static org.onap.aaf.auth.dao.cass.Status.ERR_PermissionNotFound;
31 import static org.onap.aaf.auth.dao.cass.Status.ERR_RoleNotFound;
32 import static org.onap.aaf.auth.dao.cass.Status.ERR_UserNotFound;
33 import static org.onap.aaf.auth.dao.cass.Status.ERR_UserRoleNotFound;
34 import static org.onap.aaf.auth.layer.Result.ERR_ActionNotCompleted;
35 import static org.onap.aaf.auth.layer.Result.ERR_Backend;
36 import static org.onap.aaf.auth.layer.Result.ERR_BadData;
37 import static org.onap.aaf.auth.layer.Result.ERR_ConflictAlreadyExists;
38 import static org.onap.aaf.auth.layer.Result.ERR_Denied;
39 import static org.onap.aaf.auth.layer.Result.ERR_NotFound;
40 import static org.onap.aaf.auth.layer.Result.ERR_NotImplemented;
41 import static org.onap.aaf.auth.layer.Result.ERR_Policy;
42 import static org.onap.aaf.auth.layer.Result.ERR_Security;
43 import static org.onap.aaf.auth.layer.Result.OK;
44
45 import java.io.IOException;
46 import java.lang.reflect.Method;
47 import java.util.Date;
48
49 import javax.servlet.http.HttpServletRequest;
50 import javax.servlet.http.HttpServletResponse;
51
52 import org.onap.aaf.auth.dao.cass.NsType;
53 import org.onap.aaf.auth.dao.cass.Status;
54 import org.onap.aaf.auth.dao.hl.Question;
55 import org.onap.aaf.auth.env.AuthzEnv;
56 import org.onap.aaf.auth.env.AuthzTrans;
57 import org.onap.aaf.auth.layer.FacadeImpl;
58 import org.onap.aaf.auth.layer.Result;
59 import org.onap.aaf.auth.rserv.RServlet;
60 import org.onap.aaf.auth.rserv.RouteReport;
61 import org.onap.aaf.auth.rserv.doc.ApiDoc;
62 import org.onap.aaf.auth.service.AuthzCassServiceImpl;
63 import org.onap.aaf.auth.service.AuthzService;
64 import org.onap.aaf.auth.service.mapper.Mapper;
65 import org.onap.aaf.auth.service.mapper.Mapper.API;
66 import org.onap.aaf.cadi.aaf.client.Examples;
67 import org.onap.aaf.misc.env.APIException;
68 import org.onap.aaf.misc.env.Data;
69 import org.onap.aaf.misc.env.Env;
70 import org.onap.aaf.misc.env.TimeTaken;
71 import org.onap.aaf.misc.env.Data.TYPE;
72 import org.onap.aaf.misc.env.util.Chrono;
73 import org.onap.aaf.misc.rosetta.Marshal;
74 import org.onap.aaf.misc.rosetta.env.RosettaDF;
75 import org.onap.aaf.misc.rosetta.env.RosettaData;
76
77 import aaf.v2_0.Api;
78
79 /**
80  * AuthzFacade
81  * 
82  * This Service Facade encapsulates the essence of the API Service can do, and provides
83  * a single created object for elements such as RosettaDF.
84  *
85  * The Responsibilities of this class are to:
86  * 1) Interact with the Service Implementation (which might be supported by various kinds of Backend Storage)
87  * 2) Validate incoming data (if applicable)
88  * 3) Convert the Service response into the right Format, and mark the Content Type
89  *              a) In the future, we may support multiple Response Formats, aka JSON or XML, based on User Request.
90  * 4) Log Service info, warnings and exceptions as necessary
91  * 5) When asked by the API layer, this will create and write Error content to the OutputStream
92  * 
93  * Note: This Class does NOT set the HTTP Status Code.  That is up to the API layer, so that it can be 
94  * clearly coordinated with the API Documentation
95  * 
96  * @author Pavani & Jonathan
97  *
98  */
99 public abstract class AuthzFacadeImpl<NSS,PERMS,PERMKEY,ROLES,USERS,USERROLES,DELGS,CERTS,KEYS,REQUEST,HISTORY,ERR,APPROVALS> extends FacadeImpl implements AuthzFacade 
100         {
101         private static final String FORBIDDEN = "Forbidden";
102         private static final String NOT_FOUND = "Not Found";
103         private static final String NOT_ACCEPTABLE = "Not Acceptable";
104         private static final String GENERAL_SERVICE_ERROR = "General Service Error";
105         private static final String NO_DATA = "***No Data***";
106         private AuthzService<NSS,PERMS,PERMKEY,ROLES,USERS,USERROLES,DELGS,CERTS,KEYS,REQUEST,HISTORY,ERR,APPROVALS> service = null;
107         private final RosettaDF<NSS> nssDF;
108         private final RosettaDF<PERMS> permsDF;
109         private final RosettaDF<ROLES> roleDF;
110         private final RosettaDF<USERS> usersDF;
111         private final RosettaDF<USERROLES> userrolesDF;
112         private final RosettaDF<CERTS> certsDF;
113         private final RosettaDF<DELGS> delgDF;
114         private final RosettaDF<REQUEST> permRequestDF;
115         private final RosettaDF<REQUEST> roleRequestDF;
116         private final RosettaDF<REQUEST> userRoleRequestDF;
117         private final RosettaDF<REQUEST> rolePermRequestDF;
118         private final RosettaDF<REQUEST> nsRequestDF;
119         private final RosettaDF<REQUEST> credRequestDF;
120         private final RosettaDF<REQUEST> delgRequestDF;
121         private final RosettaDF<HISTORY> historyDF;
122         private final RosettaDF<KEYS>    keysDF;
123
124         private final RosettaDF<ERR>            errDF;
125         private final RosettaDF<APPROVALS>  approvalDF;
126         // Note: Api is not different per Version
127         private final RosettaDF<Api>            apiDF;
128
129
130         @SuppressWarnings("unchecked")
131         public AuthzFacadeImpl(AuthzEnv env, AuthzService<NSS,PERMS,PERMKEY,ROLES,USERS,USERROLES,DELGS,CERTS,KEYS,REQUEST,HISTORY,ERR,APPROVALS> service, Data.TYPE dataType) throws APIException {
132                 this.service = service;
133                 (nssDF                          = env.newDataFactory(service.mapper().getClass(API.NSS))).in(dataType).out(dataType);
134                 (permRequestDF          = env.newDataFactory(service.mapper().getClass(API.PERM_REQ))).in(dataType).out(dataType);
135                 (permsDF                        = env.newDataFactory(service.mapper().getClass(API.PERMS))).in(dataType).out(dataType);
136 //              (permKeyDF                      = env.newDataFactory(service.mapper().getClass(API.PERM_KEY))).in(dataType).out(dataType);
137                 (roleDF                         = env.newDataFactory(service.mapper().getClass(API.ROLES))).in(dataType).out(dataType);
138                 (roleRequestDF          = env.newDataFactory(service.mapper().getClass(API.ROLE_REQ))).in(dataType).out(dataType);
139                 (usersDF                        = env.newDataFactory(service.mapper().getClass(API.USERS))).in(dataType).out(dataType);
140                 (userrolesDF                    = env.newDataFactory(service.mapper().getClass(API.USER_ROLES))).in(dataType).out(dataType);
141                 (certsDF                        = env.newDataFactory(service.mapper().getClass(API.CERTS))).in(dataType).out(dataType)
142                         .rootMarshal((Marshal<CERTS>) service.mapper().getMarshal(API.CERTS));
143                 ;
144                 (userRoleRequestDF      = env.newDataFactory(service.mapper().getClass(API.USER_ROLE_REQ))).in(dataType).out(dataType);
145                 (rolePermRequestDF      = env.newDataFactory(service.mapper().getClass(API.ROLE_PERM_REQ))).in(dataType).out(dataType);
146                 (nsRequestDF            = env.newDataFactory(service.mapper().getClass(API.NS_REQ))).in(dataType).out(dataType);
147                 (credRequestDF          = env.newDataFactory(service.mapper().getClass(API.CRED_REQ))).in(dataType).out(dataType);
148                 (delgRequestDF          = env.newDataFactory(service.mapper().getClass(API.DELG_REQ))).in(dataType).out(dataType);
149                 (historyDF                      = env.newDataFactory(service.mapper().getClass(API.HISTORY))).in(dataType).out(dataType);
150                 ( keysDF                        = env.newDataFactory(service.mapper().getClass(API.KEYS))).in(dataType).out(dataType);
151                 (delgDF                         = env.newDataFactory(service.mapper().getClass(API.DELGS))).in(dataType).out(dataType);
152                 (approvalDF             = env.newDataFactory(service.mapper().getClass(API.APPROVALS))).in(dataType).out(dataType);
153                 (errDF                          = env.newDataFactory(service.mapper().getClass(API.ERROR))).in(dataType).out(dataType);
154                 (apiDF                          = env.newDataFactory(Api.class)).in(dataType).out(dataType);
155         }
156         
157         public Mapper<NSS,PERMS,PERMKEY,ROLES,USERS,USERROLES,DELGS,CERTS,KEYS,REQUEST,HISTORY,ERR,APPROVALS> mapper() {
158                 return service.mapper();
159         }
160         
161         /* (non-Javadoc)
162          * @see com.att.authz.facade.AuthzFacade#error(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, int)
163          * 
164          * Note: Conforms to AT&T TSS RESTful Error Structure
165          */
166         @Override
167         public void error(AuthzTrans trans, HttpServletResponse response, Result<?> result) {
168                 String msg = result.details==null?"%s":"%s - " + result.details.trim();
169                 String msgId;
170                 String[] detail;
171                 boolean hidemsg = false;
172                 if(result.variables==null) {
173                         detail = new String[1];
174                 } else {
175                         int l = result.variables.length;
176                         detail=new String[l+1];
177                         System.arraycopy(result.variables, 0, detail, 1, l);
178                 }
179                 //int httpstatus;
180                 
181                 switch(result.status) {
182                         case ERR_ActionNotCompleted:
183                                 msgId = "SVC1202";
184                                 detail[0] = "Accepted, Action not complete";
185                                 response.setStatus(/*httpstatus=*/202);
186                                 break;
187
188                         case ERR_Policy:
189                                 msgId = "SVC3403";
190                                 detail[0] = FORBIDDEN;
191                                 response.setStatus(/*httpstatus=*/403);
192                                 break;
193                         case ERR_Security:
194                                 msgId = "SVC2403";
195                                 detail[0] = FORBIDDEN;
196                                 response.setStatus(/*httpstatus=*/403);
197                                 break;
198                         case ERR_Denied:
199                                 msgId = "SVC1403";
200                                 detail[0] = FORBIDDEN;
201                                 response.setStatus(/*httpstatus=*/403);
202                                 break;
203                         // This is still forbidden to directly impact, but can be Requested when passed
204                         // with "request=true" query Param
205                         case ERR_FutureNotRequested:
206                                 msgId = "SVC2403";
207                                 detail[0] = msg;
208                                 response.setStatus(/*httpstatus=*/403);
209                                 break;
210                                 
211                         case ERR_NsNotFound:
212                                 msgId = "SVC2404";
213                                 detail[0] = NOT_FOUND;
214                                 response.setStatus(/*httpstatus=*/404);
215                                 break;
216                         case ERR_RoleNotFound:
217                                 msgId = "SVC3404";
218                                 detail[0] = NOT_FOUND;
219                                 response.setStatus(/*httpstatus=*/404);
220                                 break;
221                         case ERR_PermissionNotFound:
222                                 msgId = "SVC4404";
223                                 detail[0] = NOT_FOUND;
224                                 response.setStatus(/*httpstatus=*/404);
225                                 break;
226                         case ERR_UserNotFound:
227                                 msgId = "SVC5404";
228                                 detail[0] = NOT_FOUND;
229                                 response.setStatus(/*httpstatus=*/404);
230                                 break;
231                         case ERR_UserRoleNotFound:
232                                 msgId = "SVC6404";
233                                 detail[0] = NOT_FOUND;
234                                 response.setStatus(/*httpstatus=*/404);
235                                 break;
236                         case ERR_DelegateNotFound:
237                                 msgId = "SVC7404";
238                                 detail[0] = NOT_FOUND;
239                                 response.setStatus(/*httpstatus=*/404);
240                                 break;
241                         case ERR_NotFound:
242                                 msgId = "SVC1404";
243                                 detail[0] = NOT_FOUND;
244                                 response.setStatus(/*httpstatus=*/404);
245                                 break;
246
247                         case ERR_InvalidDelegate:
248                                 msgId="SVC2406";
249                                 detail[0] = NOT_ACCEPTABLE;
250                                 response.setStatus(/*httpstatus=*/406);
251                                 break;
252                         case ERR_BadData:
253                                 msgId="SVC1406";
254                                 detail[0] = NOT_ACCEPTABLE;
255                                 response.setStatus(/*httpstatus=*/406);
256                                 break;
257                                 
258                         case ERR_ConflictAlreadyExists:
259                                 msgId = "SVC1409";
260                                 detail[0] = "Conflict Already Exists";
261                                 response.setStatus(/*httpstatus=*/409);
262                                 break;
263                         
264                         case ERR_DependencyExists:
265                                 msgId = "SVC1424";
266                                 detail[0] = "Failed Dependency";
267                                 response.setStatus(/*httpstatus=*/424);
268                                 break;
269                         
270                         case ERR_NotImplemented:
271                                 msgId = "SVC1501";
272                                 detail[0] = "Not Implemented"; 
273                                 response.setStatus(/*httpstatus=*/501);
274                                 break;
275                                 
276                         case Status.ACC_Future:
277                                 msgId = "SVC1202";
278                                 detail[0] = "Accepted for Future, pending Approvals";
279                                 response.setStatus(/*httpstatus=*/202);
280                                 break;
281                         case ERR_ChoiceNeeded:
282                                 msgId = "SVC1300";
283                                 detail = result.variables;
284                                 response.setStatus(/*httpstatus=*/300);
285                                 break;
286                         case ERR_Backend: 
287                                 msgId = "SVC2500";
288                                 detail[0] = GENERAL_SERVICE_ERROR;
289                                 response.setStatus(/*httpstatus=*/500);
290                                 hidemsg = true;
291                                 break;
292
293                         default: 
294                                 msgId = "SVC1500";
295                                 detail[0] = GENERAL_SERVICE_ERROR;
296                                 response.setStatus(/*httpstatus=*/500);
297                                 hidemsg = true;
298                                 break;
299                 }
300
301                 try {
302                         StringBuilder holder = new StringBuilder();
303                         ERR em = service.mapper().errorFromMessage(holder,msgId,msg,detail);
304                         trans.checkpoint(
305                                         "ErrResp [" + 
306                                         msgId +
307                                         "] " +
308                                         holder.toString(),
309                                         Env.ALWAYS);
310                         if(hidemsg) {
311                                 holder.setLength(0);
312                                 em = mapper().errorFromMessage(holder, msgId, "Server had an issue processing this request");
313                         }
314                         errDF.newData(trans).load(em).to(response.getOutputStream());
315                 } catch (Exception e) {
316                         trans.error().log(e,"unable to send response for",msg);
317                 }
318         }
319         
320         ///////////////////////////
321         // Namespace
322         ///////////////////////////
323         public static final String CREATE_NS = "createNamespace";
324         public static final String ADD_NS_ADMIN = "addNamespaceAdmin";
325         public static final String DELETE_NS_ADMIN = "delNamespaceAdmin";
326         public static final String ADD_NS_RESPONSIBLE = "addNamespaceResponsible";
327         public static final String DELETE_NS_RESPONSIBLE = "delNamespaceResponsible";
328         public static final String GET_NS_BY_NAME = "getNamespaceByName";
329         public static final String GET_NS_BY_ADMIN = "getNamespaceByAdmin";
330         public static final String GET_NS_BY_RESPONSIBLE = "getNamespaceByResponsible";
331         public static final String GET_NS_BY_EITHER = "getNamespaceByEither";
332         public static final String GET_NS_CHILDREN = "getNamespaceChildren";
333         public static final String UPDATE_NS_DESC = "updateNamespaceDescription";
334         public static final String DELETE_NS = "deleteNamespace";
335         
336
337         /* (non-Javadoc)
338          * @see com.att.authz.facade.AuthzFacade#createNS(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
339          */
340         @Override
341         public Result<Void> requestNS(AuthzTrans trans, HttpServletRequest req, HttpServletResponse resp, NsType type) {
342                 TimeTaken tt = trans.start(CREATE_NS, Env.SUB|Env.ALWAYS);
343                 try {
344                         REQUEST request;
345                         try {
346                                 Data<REQUEST> rd = nsRequestDF.newData().load(req.getInputStream());
347                                 if(Question.willSpecialLog(trans, trans.user())) {
348                                         Question.logEncryptTrace(trans,rd.asString());
349                                 }
350                                 request = rd.asObject();
351                         } catch(APIException e) {
352                                 trans.error().log("Invalid Input",IN,CREATE_NS);
353                                 return Result.err(Status.ERR_BadData,"Invalid Input");
354                         }
355                         
356                         Result<Void> rp = service.createNS(trans,request,type);
357                         switch(rp.status) {
358                                 case OK: 
359                                         setContentType(resp,nsRequestDF.getOutType());
360                                         return Result.ok();
361                                 default:
362                                         return Result.err(rp);
363                         }
364                 } catch (Exception e) {
365                         trans.error().log(e,IN,CREATE_NS);
366                         return Result.err(e);
367                 } finally {
368                         tt.done();
369                 }
370         }
371
372         /* (non-Javadoc)
373          * @see com.att.authz.facade.AuthzFacade#addAdminToNS(org.onap.aaf.auth.env.test.AuthzTrans, java.lang.String, java.lang.String)
374          */
375         @Override
376         public Result<Void> addAdminToNS(AuthzTrans trans, HttpServletResponse resp, String ns, String id) {
377                 TimeTaken tt = trans.start(ADD_NS_ADMIN + ' ' + ns + ' ' + id, Env.SUB|Env.ALWAYS);
378                 try {
379                         Result<Void> rp = service.addAdminNS(trans,ns,id);
380                         switch(rp.status) {
381                                 case OK: 
382                                         //TODO Perms??
383                                         setContentType(resp,nsRequestDF.getOutType());
384                                         resp.getOutputStream().println();
385                                         return Result.ok();
386                                 default:
387                                         return Result.err(rp);
388                         }
389                 } catch (Exception e) {
390                         trans.error().log(e,IN,ADD_NS_ADMIN);
391                         return Result.err(e);
392                 } finally {
393                         tt.done();
394                 }
395         }
396
397         /* (non-Javadoc)
398          * @see com.att.authz.facade.AuthzFacade#delAdminFromNS(org.onap.aaf.auth.env.test.AuthzTrans, java.lang.String, java.lang.String)
399          */
400         @Override
401         public Result<Void> delAdminFromNS(AuthzTrans trans, HttpServletResponse resp, String ns, String id) {
402                 TimeTaken tt = trans.start(DELETE_NS_ADMIN + ' ' + ns + ' ' + id, Env.SUB|Env.ALWAYS);
403                 try {
404                         Result<Void> rp = service.delAdminNS(trans, ns, id);
405                         switch(rp.status) {
406                                 case OK: 
407                                         setContentType(resp,nsRequestDF.getOutType());
408                                         return Result.ok();
409                                 default:
410                                         return Result.err(rp);
411                         }
412                 } catch (Exception e) {
413                         trans.error().log(e,IN,DELETE_NS_ADMIN);
414                         return Result.err(e);
415                 } finally {
416                         tt.done();
417                 }
418         }
419
420         /* (non-Javadoc)
421          * @see com.att.authz.facade.AuthzFacade#addAdminToNS(org.onap.aaf.auth.env.test.AuthzTrans, java.lang.String, java.lang.String)
422          */
423         @Override
424         public Result<Void> addResponsibilityForNS(AuthzTrans trans, HttpServletResponse resp, String ns, String id) {
425                 TimeTaken tt = trans.start(ADD_NS_RESPONSIBLE + ' ' + ns + ' ' + id, Env.SUB|Env.ALWAYS);
426                 try {
427                         Result<Void> rp = service.addResponsibleNS(trans,ns,id);
428                         switch(rp.status) {
429                                 case OK: 
430                                         setContentType(resp,nsRequestDF.getOutType());
431                                         resp.getOutputStream().println();
432                                         return Result.ok();
433                                 default:
434                                         return Result.err(rp);
435                         }
436                 } catch (Exception e) {
437                         trans.error().log(e,IN,ADD_NS_RESPONSIBLE);
438                         return Result.err(e);
439                 } finally {
440                         tt.done();
441                 }
442         }
443
444         /* (non-Javadoc)
445          * @see com.att.authz.facade.AuthzFacade#delAdminFromNS(org.onap.aaf.auth.env.test.AuthzTrans, java.lang.String, java.lang.String)
446          */
447         @Override
448         public Result<Void> delResponsibilityForNS(AuthzTrans trans, HttpServletResponse resp, String ns, String id) {
449                 TimeTaken tt = trans.start(DELETE_NS_RESPONSIBLE + ' ' + ns + ' ' + id, Env.SUB|Env.ALWAYS);
450                 try {
451                         Result<Void> rp = service.delResponsibleNS(trans, ns, id);
452                         switch(rp.status) {
453                                 case OK: 
454                                         setContentType(resp,nsRequestDF.getOutType());
455                                         resp.getOutputStream().println();
456                                         return Result.ok();
457                                 default:
458                                         return Result.err(rp);
459                         }
460                 } catch (Exception e) {
461                         trans.error().log(e,IN,DELETE_NS_RESPONSIBLE);
462                         return Result.err(e);
463                 } finally {
464                         tt.done();
465                 }
466         }
467
468         /* (non-Javadoc)
469          * @see com.att.authz.facade.AuthzFacade#getNSsByName(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String)
470          */
471         @Override
472         public Result<Void> getNSsByName(AuthzTrans trans, HttpServletResponse resp, String ns) {
473                 TimeTaken tt = trans.start(GET_NS_BY_NAME + ' ' + ns, Env.SUB|Env.ALWAYS);
474                 try {
475                         Result<NSS> rp = service.getNSbyName(trans, ns);
476                         switch(rp.status) {
477                                 case OK: 
478                                         RosettaData<NSS> data = nssDF.newData(trans).load(rp.value);
479                                         if(Question.willSpecialLog(trans, trans.user())) {
480                                                 Question.logEncryptTrace(trans,data.asString());
481                                         }
482                                         data.to(resp.getOutputStream());
483                                         setContentType(resp,nssDF.getOutType());
484                                         return Result.ok();
485                                 default:
486                                         return Result.err(rp);
487                         }
488                 } catch (Exception e) {
489                         trans.error().log(e,IN,GET_NS_BY_NAME);
490                         return Result.err(e);
491                 } finally {
492                         tt.done();
493                 }
494         }
495         
496 //      TODO: uncomment when on cassandra 2.1.2 for MyNamespace GUI page
497         /* (non-Javadoc)
498          * @see com.att.authz.facade.AuthzFacade#getNSsByAdmin(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String)
499          */
500         @Override
501         public Result<Void> getNSsByAdmin(AuthzTrans trans, HttpServletResponse resp, String user, boolean full){
502                 TimeTaken tt = trans.start(GET_NS_BY_ADMIN + ' ' + user, Env.SUB|Env.ALWAYS);
503                 try {
504                         Result<NSS> rp = service.getNSbyAdmin(trans, user, full);
505                         switch(rp.status) {
506                                 case OK: 
507                                         RosettaData<NSS> data = nssDF.newData(trans).load(rp.value);
508                                         if(Question.willSpecialLog(trans, trans.user())) {
509                                                 Question.logEncryptTrace(trans,data.asString());
510                                         }
511                                         data.to(resp.getOutputStream());
512                                         setContentType(resp,nssDF.getOutType());
513                                         return Result.ok();
514                                 default:
515                                         return Result.err(rp);
516                         }
517                 } catch (Exception e) {
518                         trans.error().log(e,IN,GET_NS_BY_ADMIN);
519                         return Result.err(e);
520                 } finally {
521                         tt.done();
522                 }
523         }
524         
525 //      TODO: uncomment when on cassandra 2.1.2 for MyNamespace GUI page
526         /* (non-Javadoc)
527          * @see com.att.authz.facade.AuthzFacade#getNSsByResponsible(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String)
528          */
529         @Override
530         public Result<Void> getNSsByResponsible(AuthzTrans trans, HttpServletResponse resp, String user, boolean full){
531                 TimeTaken tt = trans.start(GET_NS_BY_RESPONSIBLE + ' ' + user, Env.SUB|Env.ALWAYS);
532                 try {
533                         Result<NSS> rp = service.getNSbyResponsible(trans, user, full);
534                         switch(rp.status) {
535                                 case OK: 
536                                         RosettaData<NSS> data = nssDF.newData(trans).load(rp.value);
537                                         if(Question.willSpecialLog(trans, trans.user())) {
538                                                 Question.logEncryptTrace(trans,data.asString());
539                                         }
540                                         data.to(resp.getOutputStream());
541
542                                         setContentType(resp,nssDF.getOutType());
543                                         return Result.ok();
544                                 default:
545                                         return Result.err(rp);
546                         }
547                 } catch (Exception e) {
548                         trans.error().log(e,IN,GET_NS_BY_RESPONSIBLE);
549                         return Result.err(e);
550                 } finally {
551                         tt.done();
552                 }
553         }
554
555         /* (non-Javadoc)
556          * @see com.att.authz.facade.AuthzFacade#getNSsByResponsible(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String)
557          */
558         @Override
559         public Result<Void> getNSsByEither(AuthzTrans trans, HttpServletResponse resp, String user, boolean full){
560                 TimeTaken tt = trans.start(GET_NS_BY_EITHER + ' ' + user, Env.SUB|Env.ALWAYS);
561                 try {
562                         Result<NSS> rp = service.getNSbyEither(trans, user, full);
563                         
564                         switch(rp.status) {
565                                 case OK: 
566                                         RosettaData<NSS> data = nssDF.newData(trans).load(rp.value);
567                                         if(Question.willSpecialLog(trans, trans.user())) {
568                                                 Question.logEncryptTrace(trans,data.asString());
569                                         }
570                                         data.to(resp.getOutputStream());
571
572                                         setContentType(resp,nssDF.getOutType());
573                                         return Result.ok();
574                                 default:
575                                         return Result.err(rp);
576                         }
577                 } catch (Exception e) {
578                         trans.error().log(e,IN,GET_NS_BY_EITHER);
579                         return Result.err(e);
580                 } finally {
581                         tt.done();
582                 }
583         }
584
585         /* (non-Javadoc)
586          * @see com.att.authz.facade.AuthzFacade#getNSsByResponsible(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String)
587          */
588         @Override
589         public Result<Void> getNSsChildren(AuthzTrans trans, HttpServletResponse resp, String parent){
590                 TimeTaken tt = trans.start(GET_NS_CHILDREN + ' ' + parent, Env.SUB|Env.ALWAYS);
591                 try {
592                         Result<NSS> rp = service.getNSsChildren(trans, parent);
593                         switch(rp.status) {
594                                 case OK: 
595                                         RosettaData<NSS> data = nssDF.newData(trans).load(rp.value);
596                                         if(Question.willSpecialLog(trans, trans.user())) {
597                                                 Question.logEncryptTrace(trans,data.asString());
598                                         }
599                                         data.to(resp.getOutputStream());
600                                         setContentType(resp,nssDF.getOutType());
601                                         return Result.ok();
602                                 default:
603                                         return Result.err(rp);
604                         }
605                 } catch (Exception e) {
606                         trans.error().log(e,IN,GET_NS_CHILDREN);
607                         return Result.err(e);
608                 } finally {
609                         tt.done();
610                 }
611         }
612
613         @Override
614         public Result<Void> updateNsDescription(AuthzTrans trans, HttpServletRequest req, HttpServletResponse resp) {
615                 TimeTaken tt = trans.start(UPDATE_NS_DESC, Env.SUB|Env.ALWAYS);
616                 try {
617                         REQUEST rreq;
618                         try {
619                                 RosettaData<REQUEST> data = nsRequestDF.newData().load(req.getInputStream());
620                                 if(Question.willSpecialLog(trans, trans.user())) {
621                                         Question.logEncryptTrace(trans,data.asString());
622                                 }
623                                 rreq = data.asObject();
624                         } catch(APIException e) {
625                                 trans.error().log("Invalid Input",IN,UPDATE_NS_DESC);
626                                 return Result.err(Status.ERR_BadData,"Invalid Input");
627
628                         }
629                         Result<Void> rp = service.updateNsDescription(trans, rreq);
630                         switch(rp.status) {
631                                 case OK: 
632                                         setContentType(resp,nsRequestDF.getOutType());
633                                         return Result.ok();
634                                 default:
635                                         return Result.err(rp);
636                         }
637                 } catch (Exception e) {
638                         trans.error().log(e,IN,UPDATE_NS_DESC);
639                         return Result.err(e);
640                 } finally {
641                         tt.done();
642                 }
643         }
644         
645         /*
646          * (non-Javadoc)
647          * @see com.att.authz.facade.AuthzFacade#requestNS(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
648          */
649         @Override
650         public Result<Void> deleteNS(AuthzTrans trans, HttpServletRequest req, HttpServletResponse resp, String ns) {
651                 TimeTaken tt = trans.start(DELETE_NS + ' ' + ns, Env.SUB|Env.ALWAYS);
652                 try {
653                         Result<Void> rp = service.deleteNS(trans,ns);
654                         switch(rp.status) {
655                                 case OK: 
656                                         setContentType(resp,nsRequestDF.getOutType());
657                                         return Result.ok();
658                                 default:
659                                         return Result.err(rp);
660                         }
661                 } catch (Exception e) {
662                         trans.error().log(e,IN,DELETE_NS);
663                         return Result.err(e);
664                 } finally {
665                         tt.done();
666                 }
667         }
668
669         private final static String NS_CREATE_ATTRIB = "nsCreateAttrib";
670         private final static String NS_UPDATE_ATTRIB = "nsUpdateAttrib";
671         private final static String READ_NS_BY_ATTRIB = "readNsByAttrib";
672         private final static String NS_DELETE_ATTRIB = "nsDeleteAttrib";
673         
674         /* (non-Javadoc)
675          * @see com.att.authz.facade.AuthzFacade#createAttribForNS(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String, java.lang.String, java.lang.String)
676          */
677         @Override
678         public Result<Void> createAttribForNS(AuthzTrans trans, HttpServletResponse resp, String ns, String key, String value) {
679                 TimeTaken tt = trans.start(NS_CREATE_ATTRIB + ' ' + ns + ':'+key+':'+value, Env.SUB|Env.ALWAYS);
680                 try {
681                         Result<?> rp = service.createNsAttrib(trans,ns,key,value);
682                         switch(rp.status) {
683                                 case OK: 
684                                         setContentType(resp, keysDF.getOutType());
685                                         resp.getOutputStream().println();
686                                         return Result.ok();
687                                 default:
688                                         return Result.err(rp);
689                         }
690                 } catch (Exception e) {
691                         trans.error().log(e,IN,NS_CREATE_ATTRIB);
692                         return Result.err(e);
693                 } finally {
694                         tt.done();
695                 }
696         }
697
698         /* (non-Javadoc)
699          * @see com.att.authz.facade.AuthzFacade#readAttribForNS(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String)
700          */
701         @Override
702         public Result<Void> readNsByAttrib(AuthzTrans trans, HttpServletResponse resp, String key) {
703                 TimeTaken tt = trans.start(READ_NS_BY_ATTRIB + ' ' + key, Env.SUB|Env.ALWAYS);
704                 try {
705                         Result<KEYS> rp = service.readNsByAttrib(trans, key);
706                         switch(rp.status) {
707                                 case OK: 
708                                         RosettaData<KEYS> data = keysDF.newData(trans).load(rp.value);
709                                         if(Question.willSpecialLog(trans, trans.user())) {
710                                                 Question.logEncryptTrace(trans,data.asString());
711                                         }
712                                         data.to(resp.getOutputStream());
713                                         setContentType(resp,keysDF.getOutType());
714                                         return Result.ok();
715                                 default:
716                                         return Result.err(rp);
717                         }
718                 } catch (Exception e) {
719                         trans.error().log(e,IN,READ_NS_BY_ATTRIB);
720                         return Result.err(e);
721                 } finally {
722                         tt.done();
723                 }
724         }
725
726         /* (non-Javadoc)
727          * @see com.att.authz.facade.AuthzFacade#updAttribForNS(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String, java.lang.String, java.lang.String)
728          */
729         @Override
730         public Result<Void> updAttribForNS(AuthzTrans trans, HttpServletResponse resp, String ns, String key, String value) {
731                 TimeTaken tt = trans.start(NS_UPDATE_ATTRIB + ' ' + ns + ':'+key+':'+value, Env.SUB|Env.ALWAYS);
732                 try {
733                         Result<?> rp = service.updateNsAttrib(trans,ns,key,value);
734                         switch(rp.status) {
735                                 case OK: 
736                                         setContentType(resp, keysDF.getOutType());
737                                         resp.getOutputStream().println();
738                                         return Result.ok();
739                                 default:
740                                         return Result.err(rp);
741                         }
742                 } catch (Exception e) {
743                         trans.error().log(e,IN,NS_UPDATE_ATTRIB);
744                         return Result.err(e);
745                 } finally {
746                         tt.done();
747                 }
748
749         }
750
751         /* (non-Javadoc)
752          * @see com.att.authz.facade.AuthzFacade#delAttribForNS(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String, java.lang.String)
753          */
754         @Override
755         public Result<Void> delAttribForNS(AuthzTrans trans, HttpServletResponse resp, String ns, String key) {
756                 TimeTaken tt = trans.start(NS_DELETE_ATTRIB + ' ' + ns + ':'+key, Env.SUB|Env.ALWAYS);
757                 try {
758                         Result<?> rp = service.deleteNsAttrib(trans,ns,key);
759                         switch(rp.status) {
760                                 case OK: 
761                                         setContentType(resp, keysDF.getOutType());
762                                         resp.getOutputStream().println();
763                                         return Result.ok();
764                                 default:
765                                         return Result.err(rp);
766                         }
767                 } catch (Exception e) {
768                         trans.error().log(e,IN,NS_DELETE_ATTRIB);
769                         return Result.err(e);
770                 } finally {
771                         tt.done();
772                 }
773         }
774
775 //
776 // PERMISSION
777 //
778         public static final String CREATE_PERMISSION = "createPermission";
779         public static final String GET_PERMS_BY_TYPE = "getPermsByType";
780         public static final String GET_PERMS_BY_NAME = "getPermsByName";
781         public static final String GET_PERMISSIONS_BY_USER = "getPermissionsByUser";
782         public static final String GET_PERMISSIONS_BY_USER_SCOPE = "getPermissionsByUserScope";
783         public static final String GET_PERMISSIONS_BY_USER_WITH_QUERY = "getPermissionsByUserWithQuery";
784         public static final String GET_PERMISSIONS_BY_ROLE = "getPermissionsByRole";
785         public static final String GET_PERMISSIONS_BY_NS = "getPermissionsByNS";
786         public static final String UPDATE_PERMISSION = "updatePermission";
787         public static final String UPDATE_PERM_DESC = "updatePermissionDescription";
788         public static final String SET_PERMISSION_ROLES_TO = "setPermissionRolesTo";
789         public static final String DELETE_PERMISSION = "deletePermission";
790         
791         /*
792          * (non-Javadoc)
793          * @see com.att.authz.facade.AuthzFacade#createOrUpdatePerm(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, boolean, java.lang.String, java.lang.String, java.lang.String)
794          */
795         @Override
796         public Result<Void> createPerm(AuthzTrans trans, HttpServletRequest req, HttpServletResponse resp) {
797                 TimeTaken tt = trans.start( CREATE_PERMISSION, Env.SUB|Env.ALWAYS);     
798                 try {
799                         REQUEST rreq;
800                         try {
801                                 RosettaData<REQUEST> data = permRequestDF.newData().load(req.getInputStream());
802                                 if(Question.willSpecialLog(trans, trans.user())) {
803                                         Question.logEncryptTrace(trans,data.asString());
804                                 }
805                                 rreq = data.asObject();                 
806                         } catch(APIException e) {
807                                 trans.error().log("Invalid Input",IN,CREATE_PERMISSION);
808                                 return Result.err(Status.ERR_BadData,"Invalid Input");
809                         }
810                         
811                         Result<Void> rp = service.createPerm(trans,rreq);
812                         switch(rp.status) {
813                                 case OK: 
814                                         setContentType(resp,permsDF.getOutType());
815                                         return Result.ok();
816                                 default:
817                                         return Result.err(rp);
818                         }
819                 } catch (Exception e) {
820                         trans.error().log(e,IN,CREATE_PERMISSION);
821                         return Result.err(e);
822                 } finally {
823                         tt.done();
824                 }
825         }
826         
827         /* (non-Javadoc)
828          * @see com.att.authz.facade.AuthzFacade#getChildPerms(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String)
829          */
830         @Override
831         public Result<Void> getPermsByType(AuthzTrans trans, HttpServletResponse resp, String perm) {
832                 TimeTaken tt = trans.start(GET_PERMS_BY_TYPE + ' ' + perm, Env.SUB|Env.ALWAYS);
833                 try {
834                         
835                         Result<PERMS> rp = service.getPermsByType(trans, perm);
836                         switch(rp.status) {
837                                 case OK:
838                                         RosettaData<PERMS> data = permsDF.newData(trans).load(rp.value);
839                                         if(Question.willSpecialLog(trans, trans.user())) {
840                                                 Question.logEncryptTrace(trans,data.asString());
841                                         }
842                                         data.to(resp.getOutputStream());
843                                         setContentType(resp,permsDF.getOutType());
844                                         setCacheControlOff(resp);
845                                         return Result.ok();
846                                 default:
847                                         return Result.err(rp);
848                         }
849                 } catch (Exception e) {
850                         trans.error().log(e,IN,GET_PERMS_BY_TYPE);
851                         return Result.err(e);
852                 } finally {
853                         tt.done();
854                 }
855         }
856         
857         @Override
858         public Result<Void> getPermsByName(AuthzTrans trans, HttpServletResponse resp, 
859                         String type, String instance, String action) {
860                 
861                 TimeTaken tt = trans.start(GET_PERMS_BY_NAME + ' ' + type
862                                 + '|' + instance + '|' + action, Env.SUB|Env.ALWAYS);
863                 try {
864                         
865                         Result<PERMS> rp = service.getPermsByName(trans, type, instance, action);
866                         switch(rp.status) {
867                                 case OK:
868                                         RosettaData<PERMS> data = permsDF.newData(trans).load(rp.value);
869                                         if(Question.willSpecialLog(trans, trans.user())) {
870                                                 Question.logEncryptTrace(trans,data.asString());
871                                         }
872                                         data.to(resp.getOutputStream());
873                                         setContentType(resp,permsDF.getOutType());
874                                         setCacheControlOff(resp);
875                                         return Result.ok();
876                                 default:
877                                         return Result.err(rp);
878                         }
879                 } catch (Exception e) {
880                         trans.error().log(e,IN,GET_PERMS_BY_TYPE);
881                         return Result.err(e);
882                 } finally {
883                         tt.done();
884                 }
885         }
886
887         /* (non-Javadoc)
888          * @see com.att.authz.facade.AuthzFacade#getPermissionByUser(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String)
889          */
890         @Override
891         public Result<Void> getPermsByUser(AuthzTrans trans, HttpServletResponse resp,  String user) {
892                 TimeTaken tt = trans.start(GET_PERMISSIONS_BY_USER + ' ' + user, Env.SUB|Env.ALWAYS);
893                 try {
894                         Result<PERMS> rp = service.getPermsByUser(trans, user);
895                         switch(rp.status) {
896                                 case OK: 
897                                         RosettaData<PERMS> data = permsDF.newData(trans).load(rp.value);
898                                         if(Question.willSpecialLog(trans, trans.user())) {
899                                                 Question.logEncryptTrace(trans,data.asString());
900                                         }
901                                         data.to(resp.getOutputStream());
902                                         setContentType(resp,permsDF.getOutType());
903                                         setCacheControlOff(resp);
904                                         return Result.ok();
905                                 default:
906                                         return Result.err(rp);
907                         }
908                 } catch (Exception e) {
909                         trans.error().log(e,IN,GET_PERMISSIONS_BY_USER, user);
910                         return Result.err(e);
911                 } finally {
912                         tt.done();
913                 }
914         }
915         
916         /* (non-Javadoc)
917          * @see com.att.authz.facade.AuthzFacade#getPermissionByUser(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String)
918          */
919         @Override
920         public Result<Void> getPermsByUserScope(AuthzTrans trans, HttpServletResponse resp, String user, String[] scopes) {
921                 TimeTaken tt = trans.start(GET_PERMISSIONS_BY_USER_SCOPE + ' ' + user, Env.SUB|Env.ALWAYS);
922                 try {
923                         Result<PERMS> rp = service.getPermsByUserScope(trans, user, scopes);
924                         switch(rp.status) {
925                                 case OK: 
926                                         RosettaData<PERMS> data = permsDF.newData(trans).load(rp.value);
927                                         if(Question.willSpecialLog(trans, trans.user())) {
928                                                 Question.logEncryptTrace(trans,data.asString());
929                                         }
930                                         data.to(resp.getOutputStream());
931                                         setContentType(resp,permsDF.getOutType());
932                                         setCacheControlOff(resp);
933                                         return Result.ok();
934                                 default:
935                                         return Result.err(rp);
936                         }
937                 } catch (Exception e) {
938                         trans.error().log(e,IN,GET_PERMISSIONS_BY_USER_SCOPE, user);
939                         return Result.err(e);
940                 } finally {
941                         tt.done();
942                 }
943         }
944
945
946         
947         /* (non-Javadoc)
948          * @see com.att.authz.facade.AuthzFacade#getPermissionByUser(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String)
949          */
950         @Override
951         public Result<Void> getPermsByUserWithAAFQuery(AuthzTrans trans, HttpServletRequest req, HttpServletResponse resp, String user) {
952                 TimeTaken tt = trans.start(GET_PERMISSIONS_BY_USER_WITH_QUERY + ' ' + user, Env.SUB|Env.ALWAYS);
953                 try {
954                         PERMS perms;
955                         try {
956                                 RosettaData<PERMS> data = permsDF.newData().load(req.getInputStream());
957                                 if(Question.willSpecialLog(trans, trans.user())) {
958                                         Question.logEncryptTrace(trans,data.asString());
959                                 }
960                                 perms = data.asObject();                        
961                         } catch(APIException e) {
962                                 trans.error().log("Invalid Input",IN,GET_PERMISSIONS_BY_USER_WITH_QUERY);
963                                 return Result.err(Status.ERR_BadData,"Invalid Input");
964                         }
965
966                         Result<PERMS> rp = service.getPermsByUser(trans, perms, user);
967                         switch(rp.status) {
968                                 case OK: 
969                                         RosettaData<PERMS> data = permsDF.newData(trans).load(rp.value);
970                                         if(Question.willSpecialLog(trans, trans.user())) {
971                                                 Question.logEncryptTrace(trans,data.asString());
972                                         }
973                                         data.to(resp.getOutputStream());
974                                         setContentType(resp,permsDF.getOutType());
975                                         setCacheControlOff(resp);
976                                         return Result.ok();
977                                 default:
978                                         return Result.err(rp);
979                         }
980                 } catch (Exception e) {
981                         trans.error().log(e,IN,GET_PERMISSIONS_BY_USER_WITH_QUERY , user);
982                         return Result.err(e);
983                 } finally {
984                         tt.done();
985                 }
986         }
987
988         
989         /* (non-Javadoc)
990          * @see com.att.authz.facade.AuthzFacade#getPermissionsForRole(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String)
991          */
992         @Override
993         public Result<Void> getPermsForRole(AuthzTrans trans, HttpServletResponse resp, String roleName) {
994                 TimeTaken tt = trans.start(GET_PERMISSIONS_BY_ROLE + ' ' + roleName, Env.SUB|Env.ALWAYS);
995                 try {
996                         Result<PERMS> rp = service.getPermsByRole(trans, roleName);
997                         switch(rp.status) {
998                                 case OK:
999                                         RosettaData<PERMS> data = permsDF.newData(trans).load(rp.value);
1000                                         if(Question.willSpecialLog(trans, trans.user())) {
1001                                                 Question.logEncryptTrace(trans,data.asString());
1002                                         }
1003                                         data.to(resp.getOutputStream());
1004                                         setContentType(resp,permsDF.getOutType());
1005                                         setCacheControlOff(resp);
1006                                         return Result.ok();
1007                                 default:
1008                                         return Result.err(rp);
1009                         }
1010                 } catch (Exception e) {
1011                         trans.error().log(e,IN,GET_PERMISSIONS_BY_ROLE);
1012                         return Result.err(e);
1013                 } finally {
1014                         tt.done();
1015                 }
1016         }
1017         
1018         @Override
1019         public Result<Void> getPermsByNS(AuthzTrans trans,HttpServletResponse resp,String ns) {
1020                 TimeTaken tt = trans.start(GET_PERMISSIONS_BY_NS + ' ' + ns, Env.SUB|Env.ALWAYS);
1021                 try {
1022                         Result<PERMS> rp = service.getPermsByNS(trans, ns);
1023                         switch(rp.status) {
1024                                 case OK:
1025                                         RosettaData<PERMS> data = permsDF.newData(trans).load(rp.value);
1026                                         if(Question.willSpecialLog(trans, trans.user())) {
1027                                                 Question.logEncryptTrace(trans,data.asString());
1028                                         }
1029                                         data.to(resp.getOutputStream());
1030                                         setContentType(resp,permsDF.getOutType());
1031                                         setCacheControlOff(resp);
1032                                         return Result.ok();
1033                                 default:
1034                                         return Result.err(rp);
1035                         }
1036                 } catch (Exception e) {
1037                         trans.error().log(e,IN,GET_PERMISSIONS_BY_NS);
1038                         return Result.err(e);
1039                 } finally {
1040                         tt.done();
1041                 }
1042         }
1043
1044         /*
1045          * (non-Javadoc)
1046          * @see com.att.authz.facade.AuthzFacade#createOrUpdatePerm(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, boolean, java.lang.String, java.lang.String, java.lang.String)
1047          */
1048         @Override
1049         public Result<Void> renamePerm(AuthzTrans trans, HttpServletRequest req, HttpServletResponse resp,
1050                         String origType, String origInstance, String origAction) {
1051                 String cmdDescription = UPDATE_PERMISSION;
1052                 TimeTaken tt = trans.start( cmdDescription      + ' ' + origType + ' ' + origInstance + ' ' + origAction, Env.SUB|Env.ALWAYS);  
1053                 try {
1054                         REQUEST rreq;
1055                         try {
1056                                 RosettaData<REQUEST> data = permRequestDF.newData().load(req.getInputStream());
1057                                 if(Question.willSpecialLog(trans, trans.user())) {
1058                                         Question.logEncryptTrace(trans,data.asString());
1059                                 }
1060                                 rreq = data.asObject();                 
1061                         } catch(APIException e) {
1062                                 trans.error().log("Invalid Input",IN,cmdDescription);
1063                                 return Result.err(Status.ERR_BadData,"Invalid Input");
1064                         }
1065                         
1066                         Result<Void> rp = service.renamePerm(trans,rreq, origType, origInstance, origAction);
1067                         switch(rp.status) {
1068                                 case OK: 
1069                                         setContentType(resp,permsDF.getOutType());
1070                                         return Result.ok();
1071                                 default:
1072                                         return Result.err(rp);
1073                         }
1074                 } catch (Exception e) {
1075                         trans.error().log(e,IN,cmdDescription);
1076                         return Result.err(e);
1077                 } finally {
1078                         tt.done();
1079                 }
1080         }
1081         
1082         @Override
1083         public Result<Void> updatePermDescription(AuthzTrans trans, HttpServletRequest req, HttpServletResponse resp) {
1084                 TimeTaken tt = trans.start(UPDATE_PERM_DESC, Env.SUB|Env.ALWAYS);
1085                 try {
1086                         REQUEST rreq;
1087                         try {
1088                                 RosettaData<REQUEST> data = permRequestDF.newData().load(req.getInputStream());
1089                                 if(Question.willSpecialLog(trans, trans.user())) {
1090                                         Question.logEncryptTrace(trans,data.asString());
1091                                 }
1092                                 rreq = data.asObject();
1093                         } catch(APIException e) {
1094                                 trans.error().log("Invalid Input",IN,UPDATE_PERM_DESC);
1095                                 return Result.err(Status.ERR_BadData,"Invalid Input");
1096
1097                         }
1098                         Result<Void> rp = service.updatePermDescription(trans, rreq);
1099                         switch(rp.status) {
1100                                 case OK: 
1101                                         setContentType(resp,permRequestDF.getOutType());
1102                                         return Result.ok();
1103                                 default:
1104                                         return Result.err(rp);
1105                         }
1106                 } catch (Exception e) {
1107                         trans.error().log(e,IN,UPDATE_PERM_DESC);
1108                         return Result.err(e);
1109                 } finally {
1110                         tt.done();
1111                 }
1112         }
1113         
1114         
1115         @Override
1116         public Result<Void> resetPermRoles(AuthzTrans trans, HttpServletRequest req, HttpServletResponse resp) {
1117                 TimeTaken tt = trans.start(SET_PERMISSION_ROLES_TO, Env.SUB|Env.ALWAYS);
1118                 try {
1119                         REQUEST rreq;
1120                         try {
1121                                 RosettaData<REQUEST> data = rolePermRequestDF.newData().load(req.getInputStream());
1122                                 if(Question.willSpecialLog(trans, trans.user())) {
1123                                         Question.logEncryptTrace(trans,data.asString());
1124                                 }
1125                                 rreq = data.asObject();
1126                         } catch(APIException e) {
1127                                 trans.error().log("Invalid Input",IN, SET_PERMISSION_ROLES_TO);
1128                                 return Result.err(Status.ERR_BadData,"Invalid Input");
1129                         }
1130                         
1131                         Result<Void> rp = service.resetPermRoles(trans, rreq);
1132                         
1133                         switch(rp.status) {
1134                                 case OK: 
1135                                         setContentType(resp,permsDF.getOutType());
1136                                         return Result.ok();
1137                                 default:
1138                                         return Result.err(rp);
1139                         }
1140                 } catch (Exception e) {
1141                         trans.error().log(e,IN,SET_PERMISSION_ROLES_TO);
1142                         return Result.err(e);
1143                 } finally {
1144                         tt.done();
1145                 }
1146         }
1147         
1148         @Override
1149         public Result<Void> deletePerm(AuthzTrans trans, HttpServletRequest req, HttpServletResponse resp) {
1150                 TimeTaken tt = trans.start(DELETE_PERMISSION, Env.SUB|Env.ALWAYS);
1151                 try {
1152                         REQUEST rreq;
1153                         try {
1154                                 RosettaData<REQUEST> data = permRequestDF.newData().load(req.getInputStream());
1155                                 if(Question.willSpecialLog(trans, trans.user())) {
1156                                         Question.logEncryptTrace(trans,data.asString());
1157                                 }
1158                                 rreq = data.asObject();
1159                         } catch(APIException e) {
1160                                 trans.error().log("Invalid Input",IN,DELETE_PERMISSION);
1161                                 return Result.err(Status.ERR_BadData,"Invalid Input");
1162
1163                         }
1164
1165                         Result<Void> rp = service.deletePerm(trans,rreq);
1166                         switch(rp.status) {
1167                                 case OK: 
1168                                         setContentType(resp,permsDF.getOutType());
1169                                         return Result.ok();
1170                                 default:
1171                                         return Result.err(rp);
1172                         }
1173                 } catch (Exception e) {
1174                         trans.error().log(e,IN,DELETE_PERMISSION);
1175                         return Result.err(e);
1176                 } finally {
1177                         tt.done();
1178                 }
1179         }
1180
1181         @Override
1182         public Result<Void> deletePerm(AuthzTrans trans, HttpServletResponse resp, String type, String instance, String action) {
1183                 TimeTaken tt = trans.start(DELETE_PERMISSION + type + ' ' + instance + ' ' + action, Env.SUB|Env.ALWAYS);
1184                 try {
1185                         Result<Void> rp = service.deletePerm(trans,type,instance,action);
1186                         switch(rp.status) {
1187                                 case OK: 
1188                                         setContentType(resp,permsDF.getOutType());
1189                                         return Result.ok();
1190                                 default:
1191                                         return Result.err(rp);
1192                         }
1193                 } catch (Exception e) {
1194                         trans.error().log(e,IN,DELETE_PERMISSION);
1195                         return Result.err(e);
1196                 } finally {
1197                         tt.done();
1198                 }
1199         }
1200
1201         public static final String CREATE_ROLE = "createRole";
1202         public static final String GET_ROLES_BY_USER = "getRolesByUser";
1203         public static final String GET_ROLES_BY_NS = "getRolesByNS";
1204         public static final String GET_ROLES_BY_NAME_ONLY = "getRolesByNameOnly";
1205         public static final String GET_ROLES_BY_NAME = "getRolesByName";
1206         public static final String GET_ROLES_BY_PERM = "getRolesByPerm";
1207         public static final String UPDATE_ROLE_DESC = "updateRoleDescription"; 
1208         public static final String ADD_PERM_TO_ROLE = "addPermissionToRole";
1209         public static final String DELETE_PERM_FROM_ROLE = "deletePermissionFromRole";
1210         public static final String UPDATE_MGTPERM_ROLE = "updateMgtPermRole";
1211         public static final String DELETE_ROLE = "deleteRole";
1212         public static final String GET_CERT_BY_ID = "getCertByID";
1213
1214         @Override
1215         public Result<Void> createRole(AuthzTrans trans, HttpServletRequest req, HttpServletResponse resp) {
1216                 TimeTaken tt = trans.start(CREATE_ROLE, Env.SUB|Env.ALWAYS);
1217                 try {
1218                         REQUEST rreq;
1219                         try {
1220                                 RosettaData<REQUEST> data = roleRequestDF.newData().load(req.getInputStream());
1221                                 if(Question.willSpecialLog(trans, trans.user())) {
1222                                         Question.logEncryptTrace(trans,data.asString());
1223                                 }
1224                                 rreq = data.asObject();
1225                         } catch(APIException e) {
1226                                 trans.error().log("Invalid Input",IN,CREATE_ROLE);
1227                                 return Result.err(Status.ERR_BadData,"Invalid Input");
1228
1229                         }
1230                         Result<Void> rp = service.createRole(trans, rreq);
1231                         switch(rp.status) {
1232                                 case OK: 
1233                                         setContentType(resp,roleRequestDF.getOutType());
1234                                         return Result.ok();
1235                                 default:
1236                                         return Result.err(rp);
1237                         }
1238                 } catch (Exception e) {
1239                         trans.error().log(e,IN,CREATE_ROLE);
1240                         return Result.err(e);
1241                 } finally {
1242                         tt.done();
1243                 }
1244         }
1245
1246         /* (non-Javadoc)
1247          * @see com.att.authz.facade.AuthzFacade#getRolesByName(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String)
1248          */
1249         @Override
1250         public Result<Void> getRolesByName(AuthzTrans trans, HttpServletResponse resp, String role) {
1251                 TimeTaken tt = trans.start(GET_ROLES_BY_NAME + ' ' + role, Env.SUB|Env.ALWAYS);
1252                 try {
1253                         Result<ROLES> rp = service.getRolesByName(trans, role);
1254                         switch(rp.status) {
1255                                 case OK: 
1256                                         RosettaData<ROLES> data = roleDF.newData(trans).load(rp.value);
1257                                         if(Question.willSpecialLog(trans, trans.user())) {
1258                                                 Question.logEncryptTrace(trans,data.asString());
1259                                         }
1260                                         data.to(resp.getOutputStream());
1261                                         setContentType(resp,roleDF.getOutType());
1262                                         setCacheControlOff(resp);
1263                                         return Result.ok();
1264                                 default:
1265                                         return Result.err(rp);
1266                         }
1267                 } catch (Exception e) {
1268                         trans.error().log(e,IN,GET_ROLES_BY_NAME);
1269                         return Result.err(e);
1270                 } finally {
1271                         tt.done();
1272                 }
1273         }
1274
1275         /* (non-Javadoc)
1276          * @see com.att.authz.facade.AuthzFacade#getRolesByUser(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String)
1277          */
1278         @Override
1279         public Result<Void> getRolesByUser(AuthzTrans trans,HttpServletResponse resp, String user) {
1280                 TimeTaken tt = trans.start(GET_ROLES_BY_USER + ' ' + user, Env.SUB|Env.ALWAYS);
1281                 try {
1282                         Result<ROLES> rp = service.getRolesByUser(trans, user);
1283                         switch(rp.status) {
1284                                 case OK: 
1285                                         RosettaData<ROLES> data = roleDF.newData(trans).load(rp.value);
1286                                         if(Question.willSpecialLog(trans, trans.user())) {
1287                                                 Question.logEncryptTrace(trans,data.asString());
1288                                         }
1289                                         data.to(resp.getOutputStream());
1290                                         setContentType(resp,roleDF.getOutType());
1291                                         setCacheControlOff(resp);
1292                                         return Result.ok();
1293                                 default:
1294                                         return Result.err(rp);
1295                         }
1296                 } catch (Exception e) {
1297                         trans.error().log(e,IN,GET_ROLES_BY_USER, user);
1298                         return Result.err(e);
1299                 } finally {
1300                         tt.done();
1301                 }
1302         }
1303
1304         /* (non-Javadoc)
1305          * @see com.att.authz.facade.AuthzFacade#getRolesByUser(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String)
1306          */
1307         @Override
1308         public Result<Void> getRolesByNS(AuthzTrans trans,HttpServletResponse resp, String ns) {
1309                 TimeTaken tt = trans.start(GET_ROLES_BY_NS + ' ' + ns, Env.SUB|Env.ALWAYS);
1310                 try {
1311                         Result<ROLES> rp = service.getRolesByNS(trans, ns);
1312                         switch(rp.status) {
1313                                 case OK: 
1314                                         if(!rp.isEmpty()) {
1315                                                 RosettaData<ROLES> data = roleDF.newData(trans).load(rp.value);
1316                                                 if(Question.willSpecialLog(trans, trans.user())) {
1317                                                         Question.logEncryptTrace(trans,data.asString());
1318                                                 }
1319                                                 data.to(resp.getOutputStream());
1320                                         } else {
1321                                                 Question.logEncryptTrace(trans, NO_DATA);
1322                                         }
1323                                         setContentType(resp,roleDF.getOutType());
1324                                         setCacheControlOff(resp);
1325                                         return Result.ok();
1326                                 default:
1327                                         return Result.err(rp);
1328                         }
1329                 } catch (Exception e) {
1330                         trans.error().log(e,IN,GET_ROLES_BY_NS);
1331                         return Result.err(e);
1332                 } finally {
1333                         tt.done();
1334                 }
1335         }
1336
1337
1338         /* (non-Javadoc)
1339          * @see com.att.authz.facade.AuthzFacade#getRolesByNameOnly(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String)
1340          */
1341         @Override
1342         public Result<Void> getRolesByNameOnly(AuthzTrans trans,HttpServletResponse resp, String nameOnly) {
1343                 TimeTaken tt = trans.start(GET_ROLES_BY_NAME_ONLY + ' ' + nameOnly, Env.SUB|Env.ALWAYS);
1344                 try {
1345                         Result<ROLES> rp = service.getRolesByNameOnly(trans, nameOnly);
1346                         switch(rp.status) {
1347                                 case OK: 
1348                                         if(!rp.isEmpty()) {
1349                                                 RosettaData<ROLES> data = roleDF.newData(trans).load(rp.value);
1350                                                 if(Question.willSpecialLog(trans, trans.user())) {
1351                                                         Question.logEncryptTrace(trans,data.asString());
1352                                                 }
1353                                                 data.to(resp.getOutputStream());
1354                                         } else {
1355                                                 Question.logEncryptTrace(trans, NO_DATA);
1356                                         }
1357                                         setContentType(resp,roleDF.getOutType());
1358                                         setCacheControlOff(resp);
1359                                         return Result.ok();
1360                                 default:
1361                                         return Result.err(rp);
1362                         }
1363                 } catch (Exception e) {
1364                         trans.error().log(e,IN,GET_ROLES_BY_NAME_ONLY);
1365                         return Result.err(e);
1366                 } finally {
1367                         tt.done();
1368                 }
1369         }
1370
1371         /* (non-Javadoc)
1372          * @see com.att.authz.facade.AuthzFacade#getRolesByUser(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String)
1373          */
1374         @Override
1375         public Result<Void> getRolesByPerm(AuthzTrans trans,HttpServletResponse resp, String type, String instance, String action) {
1376                 TimeTaken tt = trans.start(GET_ROLES_BY_PERM + type +' '+instance+' '+action, Env.SUB|Env.ALWAYS);
1377                 try {
1378                         Result<ROLES> rp = service.getRolesByPerm(trans, type,instance,action);
1379                         switch(rp.status) {
1380                                 case OK: 
1381                                         RosettaData<ROLES> data = roleDF.newData(trans).load(rp.value);
1382                                         if(Question.willSpecialLog(trans, trans.user())) {
1383                                                 Question.logEncryptTrace(trans,data.asString());
1384                                         }
1385                                         data.to(resp.getOutputStream());
1386                                         setContentType(resp,roleDF.getOutType());
1387                                         setCacheControlOff(resp);
1388                                         return Result.ok();
1389                                 default:
1390                                         return Result.err(rp);
1391                         }
1392                 } catch (Exception e) {
1393                         trans.error().log(e,IN,GET_ROLES_BY_PERM);
1394                         return Result.err(e);
1395                 } finally {
1396                         tt.done();
1397                 }
1398         }
1399
1400         /*
1401          * (non-Javadoc)
1402          * @see com.att.authz.facade.AuthzFacade#updateDescription(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
1403          */
1404         @Override
1405         public Result<Void> updateRoleDescription(AuthzTrans trans, HttpServletRequest req, HttpServletResponse resp) {
1406                 TimeTaken tt = trans.start(UPDATE_ROLE_DESC, Env.SUB|Env.ALWAYS);
1407                 try {
1408                         REQUEST rreq;
1409                         try {
1410                                 RosettaData<REQUEST> data = roleRequestDF.newData().load(req.getInputStream());
1411                                 if(Question.willSpecialLog(trans, trans.user())) {
1412                                         Question.logEncryptTrace(trans,data.asString());
1413                                 }
1414                                 rreq = data.asObject();
1415                         } catch(APIException e) {
1416                                 trans.error().log("Invalid Input",IN,UPDATE_ROLE_DESC);
1417                                 return Result.err(Status.ERR_BadData,"Invalid Input");
1418
1419                         }
1420                         Result<Void> rp = service.updateRoleDescription(trans, rreq);
1421                         switch(rp.status) {
1422                                 case OK: 
1423                                         setContentType(resp,roleRequestDF.getOutType());
1424                                         return Result.ok();
1425                                 default:
1426                                         return rp;
1427                         }
1428                 } catch (Exception e) {
1429                         trans.error().log(e,IN,UPDATE_ROLE_DESC);
1430                         return Result.err(e);
1431                 } finally {
1432                         tt.done();
1433                 }
1434         }
1435
1436         @Override
1437         public Result<Void> addPermToRole(AuthzTrans trans, HttpServletRequest req, HttpServletResponse resp) {
1438                 TimeTaken tt = trans.start(ADD_PERM_TO_ROLE, Env.SUB|Env.ALWAYS);
1439                 try {
1440                         REQUEST rreq;
1441                         try {
1442                                 RosettaData<REQUEST> data = rolePermRequestDF.newData().load(req.getInputStream());
1443                                 if(Question.willSpecialLog(trans, trans.user())) {
1444                                         Question.logEncryptTrace(trans,data.asString());
1445                                 }
1446                                 rreq = data.asObject();
1447                         } catch(APIException e) {
1448                                 trans.error().log("Invalid Input",IN,ADD_PERM_TO_ROLE);
1449                                 return Result.err(Status.ERR_BadData,"Invalid Input");
1450
1451                         }
1452                         Result<Void> rp = service.addPermToRole(trans, rreq);
1453                         switch(rp.status) {
1454                                 case OK: 
1455                                         setContentType(resp,permsDF.getOutType());
1456                                         resp.getOutputStream().println();
1457                                         return Result.ok();
1458                                 default:
1459                                         return Result.err(rp);
1460                         }
1461                 } catch (Exception e) {
1462                         trans.error().log(e,IN,ADD_PERM_TO_ROLE);
1463                         return Result.err(e);
1464                 } finally {
1465                         tt.done();
1466                 }
1467         }
1468
1469         @Override
1470         public Result<Void> delPermFromRole(AuthzTrans trans, HttpServletRequest req, HttpServletResponse resp) {
1471                 TimeTaken tt = trans.start(DELETE_PERM_FROM_ROLE, Env.SUB|Env.ALWAYS);
1472                 try {
1473                         REQUEST rreq;
1474                         try {
1475                                 RosettaData<REQUEST> data = rolePermRequestDF.newData().load(req.getInputStream());
1476                                 if(Question.willSpecialLog(trans, trans.user())) {
1477                                         Question.logEncryptTrace(trans,data.asString());
1478                                 }
1479                                 rreq = data.asObject();
1480                         } catch(APIException e) {
1481                                 trans.error().log("Invalid Input",IN,DELETE_PERM_FROM_ROLE);
1482                                 return Result.err(Status.ERR_BadData,"Invalid Input");
1483
1484                         }
1485                         Result<Void> rp = service.delPermFromRole(trans, rreq);
1486                         switch(rp.status) {
1487                                 case OK: 
1488                                         setContentType(resp,permsDF.getOutType());
1489                                         resp.getOutputStream().println();
1490                                         return Result.ok();
1491                                 default:
1492                                         return Result.err(rp);
1493                         }
1494                 } catch (Exception e) {
1495                         trans.error().log(e,IN,DELETE_PERM_FROM_ROLE);
1496                         return Result.err(e);
1497                 } finally {
1498                         tt.done();
1499                 }
1500         }
1501
1502         /* (non-Javadoc)
1503          * @see com.att.authz.facade.AuthzFacade#delPermFromRole(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String, java.lang.String, java.lang.String, java.lang.String)
1504          */
1505         @Override
1506         public Result<Void> delPermFromRole(AuthzTrans trans, HttpServletResponse resp, String role, String type,
1507                         String instance, String action) {
1508                 TimeTaken tt = trans.start(DELETE_PERM_FROM_ROLE, Env.SUB|Env.ALWAYS);
1509                 try {
1510                         Result<Void> rp = service.delPermFromRole(trans, role, type, instance, action);
1511                         switch(rp.status) {
1512                                 case OK: 
1513                                         setContentType(resp,permsDF.getOutType());
1514                                         resp.getOutputStream().println();
1515                                         return Result.ok();
1516                                 default:
1517                                         return Result.err(rp);
1518                         }
1519                 } catch (Exception e) {
1520                         trans.error().log(e,IN,DELETE_PERM_FROM_ROLE);
1521                         return Result.err(e);
1522                 } finally {
1523                         tt.done();
1524                 }
1525         }
1526
1527         @Override
1528         public Result<Void> deleteRole(AuthzTrans trans, HttpServletResponse resp, String role) {
1529                 TimeTaken tt = trans.start(DELETE_ROLE + ' ' + role, Env.SUB|Env.ALWAYS);
1530                 try {
1531                         Result<Void> rp = service.deleteRole(trans, role);
1532                         switch(rp.status) {
1533                                 case OK: 
1534                                         setContentType(resp,permsDF.getOutType());
1535                                         return Result.ok();
1536                                 default:
1537                                         return Result.err(rp);
1538                         }
1539                 } catch (Exception e) {
1540                         trans.error().log(e,IN,DELETE_ROLE);
1541                         return Result.err(e);
1542                 } finally {
1543                         tt.done();
1544                 }
1545         }
1546
1547         @Override
1548         public Result<Void> deleteRole(AuthzTrans trans, HttpServletRequest req, HttpServletResponse resp) {
1549                 TimeTaken tt = trans.start(DELETE_ROLE, Env.SUB|Env.ALWAYS);
1550                 try {
1551                         REQUEST rreq;
1552                         try {
1553                                 RosettaData<REQUEST> data = roleRequestDF.newData().load(req.getInputStream());
1554                                 if(Question.willSpecialLog(trans, trans.user())) {
1555                                         Question.logEncryptTrace(trans,data.asString());
1556                                 }
1557                                 rreq = data.asObject();
1558                         } catch(APIException e) {
1559                                 trans.error().log("Invalid Input",IN,CREATE_ROLE);
1560                                 return Result.err(Status.ERR_BadData,"Invalid Input");
1561                         }
1562
1563                         Result<Void> rp = service.deleteRole(trans, rreq);
1564                         switch(rp.status) {
1565                                 case OK: 
1566                                         setContentType(resp,permsDF.getOutType());
1567                                         return Result.ok();
1568                                 default:
1569                                         return Result.err(rp);
1570                         }
1571                 } catch (Exception e) {
1572                         trans.error().log(e,IN,DELETE_ROLE);
1573                         return Result.err(e);
1574                 } finally {
1575                         tt.done();
1576                 }
1577         }
1578
1579         public static final String CREATE_CRED = "createUserCred";
1580         private static final String GET_CREDS_BY_NS = "getCredsByNS";
1581         private static final String GET_CREDS_BY_ID = "getCredsByID";
1582         public static final String UPDATE_CRED = "updateUserCred";
1583         public static final String EXTEND_CRED = "extendUserCred";
1584         public static final String DELETE_CRED = "deleteUserCred";
1585         public static final String DOES_CRED_MATCH = "doesCredMatch";
1586         public static final String VALIDATE_BASIC_AUTH = "validateBasicAuth";
1587
1588
1589
1590         @Override
1591         /**
1592          * Create Credential
1593          * 
1594          */
1595         public Result<Void> createUserCred(AuthzTrans trans, HttpServletRequest req) {
1596                 TimeTaken tt = trans.start(CREATE_CRED, Env.SUB|Env.ALWAYS);
1597                 try {
1598                         RosettaData<REQUEST> data = credRequestDF.newData().load(req.getInputStream());
1599                         if(Question.willSpecialLog(trans, trans.user())) {
1600                                 Question.logEncryptTrace(trans,data.asString());
1601                         }
1602                         return service.createUserCred(trans, data.asObject());
1603                 } catch(APIException e) {
1604                         trans.error().log(e,"Bad Input data");
1605                         return Result.err(Status.ERR_BadData, e.getLocalizedMessage());
1606                 } catch (Exception e) {
1607                         trans.error().log(e,IN,CREATE_CRED);
1608                         return Result.err(e);
1609                 } finally {
1610                         tt.done();
1611                 }
1612         }
1613
1614         @Override
1615         public Result<Void> changeUserCred(AuthzTrans trans, HttpServletRequest req) {
1616                 TimeTaken tt = trans.start(UPDATE_CRED, Env.SUB|Env.ALWAYS);
1617                 try {
1618                         RosettaData<REQUEST> data = credRequestDF.newData().load(req.getInputStream());
1619                         if(Question.willSpecialLog(trans, trans.user())) {
1620                                 Question.logEncryptTrace(trans,data.asString());
1621                         }
1622
1623                         return service.changeUserCred(trans, data.asObject());
1624                 } catch(APIException e) {
1625                         trans.error().log(e,"Bad Input data");
1626                         return Result.err(Status.ERR_BadData, e.getLocalizedMessage());
1627                 } catch (Exception e) {
1628                         trans.error().log(e,IN,UPDATE_CRED);
1629                         return Result.err(e);
1630                 } finally {
1631                         tt.done();
1632                 }
1633         }
1634
1635         /* (non-Javadoc)
1636          * @see com.att.authz.facade.AuthzFacade#extendUserCred(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletRequest, int)
1637          */
1638         @Override
1639         public Result<Void> extendUserCred(AuthzTrans trans, HttpServletRequest req, String days) {
1640                 TimeTaken tt = trans.start(EXTEND_CRED, Env.SUB|Env.ALWAYS);
1641                 try {
1642                         RosettaData<REQUEST> data = credRequestDF.newData().load(req.getInputStream());
1643                         if(Question.willSpecialLog(trans, trans.user())) {
1644                                 Question.logEncryptTrace(trans,data.asString());
1645                         }
1646
1647                         return service.extendUserCred(trans, data.asObject(), days);
1648                 } catch(APIException e) {
1649                         trans.error().log(e,"Bad Input data");
1650                         return Result.err(Status.ERR_BadData, e.getLocalizedMessage());
1651                 } catch (Exception e) {
1652                         trans.error().log(e,IN,EXTEND_CRED);
1653                         return Result.err(e);
1654                 } finally {
1655                         tt.done();
1656                 }
1657         }
1658
1659         @Override
1660         public Result<Void> getCredsByNS(AuthzTrans trans, HttpServletResponse resp, String ns) {
1661                 TimeTaken tt = trans.start(GET_CREDS_BY_NS + ' ' + ns, Env.SUB|Env.ALWAYS);
1662                 
1663                 try {
1664                         Result<USERS> ru = service.getCredsByNS(trans,ns);
1665                         switch(ru.status) {
1666                                 case OK: 
1667                                         RosettaData<USERS> data = usersDF.newData(trans).load(ru.value);
1668                                         if(Question.willSpecialLog(trans,trans.user())) {
1669                                                 Question.logEncryptTrace(trans,data.asString());
1670                                         }
1671                                         data.to(resp.getOutputStream());
1672                                         setContentType(resp,usersDF.getOutType());
1673                                         return Result.ok();
1674                                 default:
1675                                         return Result.err(ru);
1676                         }
1677                 } catch (Exception e) {
1678                         trans.error().log(e,IN,GET_CREDS_BY_NS);
1679                         return Result.err(e);
1680                 } finally {
1681                         tt.done();
1682                 }
1683                 
1684         }
1685         
1686         
1687         /* (non-Javadoc)
1688          * @see com.att.authz.facade.AuthzFacade#getCredsByID(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String)
1689          */
1690         @Override
1691         public Result<Void> getCredsByID(AuthzTrans trans, HttpServletResponse resp, String id) {
1692                 TimeTaken tt = trans.start(GET_CREDS_BY_ID + ' ' + id, Env.SUB|Env.ALWAYS);
1693                 
1694                 try {
1695                         Result<USERS> ru = service.getCredsByID(trans,id);
1696                         switch(ru.status) {
1697                                 case OK: 
1698                                         RosettaData<USERS> data = usersDF.newData(trans).load(ru.value);
1699                                         if(Question.willSpecialLog(trans, trans.user())) {
1700                                                 Question.logEncryptTrace(trans,data.asString());
1701                                         }
1702                                         data.to(resp.getOutputStream());
1703                                         setContentType(resp,usersDF.getOutType());
1704                                         return Result.ok();
1705                                 default:
1706                                         return Result.err(ru);
1707                         }
1708                 } catch (Exception e) {
1709                         trans.error().log(e,IN,GET_CREDS_BY_ID);
1710                         return Result.err(e);
1711                 } finally {
1712                         tt.done();
1713                 }
1714                 
1715         }
1716
1717         @Override
1718         public Result<Void> deleteUserCred(AuthzTrans trans, HttpServletRequest req) {
1719                 TimeTaken tt = trans.start(DELETE_CRED, Env.SUB|Env.ALWAYS);
1720                 try {
1721                         RosettaData<REQUEST> data = credRequestDF.newData().load(req.getInputStream());
1722                         if(Question.willSpecialLog(trans, trans.user())) {
1723                                 Question.logEncryptTrace(trans,data.asString());
1724                         }
1725
1726                         return service.deleteUserCred(trans, data.asObject());
1727                 } catch(APIException e) {
1728                         trans.error().log(e,"Bad Input data");
1729                         return Result.err(Status.ERR_BadData, e.getLocalizedMessage());
1730                 } catch (Exception e) {
1731                         trans.error().log(e,IN,DELETE_CRED);
1732                         return Result.err(e);
1733                 } finally {
1734                         tt.done();
1735                 }       
1736         }
1737         
1738         
1739         @Override
1740         public Result<Date> doesCredentialMatch(AuthzTrans trans, HttpServletRequest req, HttpServletResponse resp) {
1741                 TimeTaken tt = trans.start(DOES_CRED_MATCH, Env.SUB|Env.ALWAYS);
1742                 try {
1743                         RosettaData<REQUEST> data = credRequestDF.newData().load(req.getInputStream());
1744                         if(Question.willSpecialLog(trans, trans.user())) {
1745                                 Question.logEncryptTrace(trans,data.asString());
1746                         }
1747
1748                         return service.doesCredentialMatch(trans, data.asObject());
1749                 } catch(APIException e) {
1750                         trans.error().log(e,"Bad Input data");
1751                         return Result.err(Status.ERR_BadData, e.getLocalizedMessage());
1752                 } catch (IOException e) {
1753                         trans.error().log(e,IN,DOES_CRED_MATCH);
1754                         return Result.err(e);
1755                 } finally {
1756                         tt.done();
1757                 }       
1758         }
1759
1760
1761         @Override
1762         public Result<Void> validBasicAuth(AuthzTrans trans, HttpServletResponse resp, String basicAuth) {
1763                 TimeTaken tt = trans.start(VALIDATE_BASIC_AUTH, Env.SUB|Env.ALWAYS);
1764                 try {
1765                         Result<Date> result = service.validateBasicAuth(trans,basicAuth);
1766                         switch(result.status){
1767                                 case OK:
1768                                         resp.getOutputStream().write(Chrono.utcStamp(result.value).getBytes());
1769                                         return Result.ok();
1770                         }
1771                         return Result.err(result);
1772                 } catch (Exception e) {
1773                         trans.error().log(e,IN,VALIDATE_BASIC_AUTH);
1774                         return Result.err(e);
1775                 } finally {
1776                         tt.done();
1777                 }
1778         }
1779
1780         /* (non-Javadoc)
1781          * @see com.att.authz.facade.AuthzFacade#getCertInfoByID(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.String)
1782          */
1783         @Override
1784         public Result<Void> getCertInfoByID(AuthzTrans trans, HttpServletRequest req, HttpServletResponse resp, String id) {
1785                 TimeTaken tt = trans.start(GET_CERT_BY_ID, Env.SUB|Env.ALWAYS);
1786                 try {   
1787                         Result<CERTS> rci = service.getCertInfoByID(trans,req,id);
1788                         
1789                         switch(rci.status) {
1790                                 case OK: 
1791                                         if(Question.willSpecialLog(trans, trans.user())) {
1792                                                 RosettaData<CERTS> data = certsDF.newData(trans).load(rci.value);
1793                                                 Question.logEncryptTrace(trans,data.asString());
1794                                                 data.to(resp.getOutputStream());
1795                                         } else {
1796                                                 certsDF.direct(trans, rci.value, resp.getOutputStream());
1797                                         }
1798                                         setContentType(resp,certsDF.getOutType());
1799                                         return Result.ok();
1800                                 default:
1801                                         return Result.err(rci);
1802                         }
1803                 } catch (Exception e) {
1804                         trans.error().log(e,IN,GET_CERT_BY_ID);
1805                         return Result.err(e);
1806                 } finally {
1807                         tt.done();
1808                 }
1809         }
1810
1811         public static final String CREATE_DELEGATE = "createDelegate";
1812         public static final String UPDATE_DELEGATE = "updateDelegate";
1813         public static final String DELETE_DELEGATE = "deleteDelegate";
1814         public static final String GET_DELEGATE_USER = "getDelegatesByUser";
1815         public static final String GET_DELEGATE_DELG = "getDelegatesByDelegate";
1816         
1817         @Override
1818         public Result<Void> createDelegate(AuthzTrans trans, HttpServletRequest req, HttpServletResponse resp) {
1819                 TimeTaken tt = trans.start(CREATE_DELEGATE, Env.SUB|Env.ALWAYS);
1820                 try {   
1821                         Data<REQUEST> data = delgRequestDF.newData().load(req.getInputStream());
1822                         if(Question.willSpecialLog(trans, trans.user())) {
1823                                 Question.logEncryptTrace(trans,data.asString());
1824                         }
1825
1826                         return service.createDelegate(trans, data.asObject());
1827                 } catch (Exception e) {
1828                         trans.error().log(e,IN,CREATE_DELEGATE);
1829                         return Result.err(e);
1830                 } finally {
1831                         tt.done();
1832                 }
1833         }
1834         
1835         @Override
1836         public Result<Void> updateDelegate(AuthzTrans trans, HttpServletRequest req, HttpServletResponse resp) {
1837                 TimeTaken tt = trans.start(UPDATE_DELEGATE, Env.SUB|Env.ALWAYS);
1838                 try {   
1839                         Data<REQUEST> data = delgRequestDF.newData().load(req.getInputStream());
1840                         if(Question.willSpecialLog(trans, trans.user())) {
1841                                 Question.logEncryptTrace(trans,data.asString());
1842                         }
1843
1844                         return service.updateDelegate(trans, data.asObject());
1845                 } catch (Exception e) {
1846                         trans.error().log(e,IN,UPDATE_DELEGATE);
1847                         return Result.err(e);
1848                 } finally {
1849                         tt.done();
1850                 }
1851         }
1852         
1853         @Override
1854         public Result<Void> deleteDelegate(AuthzTrans trans,  HttpServletRequest req, HttpServletResponse resp) {
1855                 TimeTaken tt = trans.start(DELETE_DELEGATE, Env.SUB|Env.ALWAYS);
1856                 try {
1857                         Data<REQUEST> data = delgRequestDF.newData().load(req.getInputStream());
1858                         if(Question.willSpecialLog(trans, trans.user())) {
1859                                 Question.logEncryptTrace(trans,data.asString());
1860                         }
1861
1862                         return service.deleteDelegate(trans, data.asObject());
1863                 } catch (Exception e) {
1864                         trans.error().log(e,IN,DELETE_DELEGATE);
1865                         return Result.err(e);
1866                 } finally {
1867                         tt.done();
1868                 }
1869         }
1870         
1871         @Override
1872         public Result<Void> deleteDelegate(AuthzTrans trans, String userName) {
1873                 TimeTaken tt = trans.start(DELETE_DELEGATE + ' ' + userName, Env.SUB|Env.ALWAYS);
1874                 try {
1875                         return service.deleteDelegate(trans, userName);
1876                 } catch (Exception e) {
1877                         trans.error().log(e,IN,DELETE_DELEGATE);
1878                         return Result.err(e);
1879                 } finally {
1880                         tt.done();
1881                 }
1882         }
1883         
1884         @Override
1885         public Result<Void> getDelegatesByUser(AuthzTrans trans, String user, HttpServletResponse resp) {
1886                 TimeTaken tt = trans.start(GET_DELEGATE_USER, Env.SUB|Env.ALWAYS);
1887                 try {
1888                         Result<DELGS> rd = service.getDelegatesByUser(trans, user);
1889                         
1890                         switch(rd.status) {
1891                                 case OK: 
1892                                         RosettaData<DELGS> data = delgDF.newData(trans).load(rd.value);
1893                                         if(Question.willSpecialLog(trans, trans.user())) {
1894                                                 Question.logEncryptTrace(trans,data.asString());
1895                                         }
1896                                         data.to(resp.getOutputStream());
1897                                         setContentType(resp,delgDF.getOutType());
1898                                         return Result.ok();
1899                                 default:
1900                                         return Result.err(rd);
1901                         }
1902                 } catch (Exception e) {
1903                         trans.error().log(e,IN,GET_DELEGATE_USER);
1904                         return Result.err(e);
1905                 } finally {
1906                         tt.done();
1907                 }
1908         }
1909
1910         @Override
1911         public Result<Void> getDelegatesByDelegate(AuthzTrans trans, String delegate, HttpServletResponse resp) {
1912                 TimeTaken tt = trans.start(GET_DELEGATE_DELG, Env.SUB|Env.ALWAYS);
1913                 try {
1914                         Result<DELGS> rd = service.getDelegatesByDelegate(trans, delegate);
1915                         switch(rd.status) {
1916                                 case OK: 
1917                                         RosettaData<DELGS> data = delgDF.newData(trans).load(rd.value);
1918                                         if(Question.willSpecialLog(trans, trans.user())) {
1919                                                 Question.logEncryptTrace(trans,data.asString());
1920                                         }
1921                                         data.to(resp.getOutputStream());
1922                                         setContentType(resp,delgDF.getOutType());
1923                                         return Result.ok();
1924                                 default:
1925                                         return Result.err(rd);
1926                         }
1927                 } catch (Exception e) {
1928                         trans.error().log(e,IN,GET_DELEGATE_DELG);
1929                         return Result.err(e);
1930                 } finally {
1931                         tt.done();
1932                 }
1933         }
1934
1935         private static final String REQUEST_USER_ROLE = "createUserRole";
1936         private static final String GET_USERROLES = "getUserRoles";
1937         private static final String GET_USERROLES_BY_ROLE = "getUserRolesByRole";
1938         private static final String GET_USERROLES_BY_USER = "getUserRolesByUser";
1939         private static final String SET_ROLES_FOR_USER = "setRolesForUser";
1940         private static final String SET_USERS_FOR_ROLE = "setUsersForRole";
1941         private static final String EXTEND_USER_ROLE = "extendUserRole";
1942         private static final String DELETE_USER_ROLE = "deleteUserRole";
1943         @Override
1944         public Result<Void> requestUserRole(AuthzTrans trans, HttpServletRequest req, HttpServletResponse resp) {
1945                 TimeTaken tt = trans.start(REQUEST_USER_ROLE, Env.SUB|Env.ALWAYS);
1946                 try {
1947                         REQUEST request;
1948                         try {
1949                                 Data<REQUEST> data = userRoleRequestDF.newData().load(req.getInputStream());
1950                                 if(Question.willSpecialLog(trans, trans.user())) {
1951                                         Question.logEncryptTrace(trans,data.asString());
1952                                 }
1953
1954                                 request = data.asObject();
1955                         } catch(APIException e) {
1956                                 return Result.err(Status.ERR_BadData,"Invalid Input");
1957                         }
1958                         
1959                         Result<Void> rp = service.createUserRole(trans,request);
1960                         switch(rp.status) {
1961                                 case OK: 
1962                                         setContentType(resp,permsDF.getOutType());
1963                                         return Result.ok();
1964                                 default:
1965                                         return Result.err(rp);
1966                         }
1967                 } catch (Exception e) {
1968                         trans.error().log(e,IN,REQUEST_USER_ROLE);
1969                         return Result.err(e);
1970                 } finally {
1971                         tt.done();
1972                 }
1973         }
1974         
1975         @Override
1976         public Result<Void> getUserInRole(AuthzTrans trans, HttpServletResponse resp, String user, String role) {
1977                 TimeTaken tt = trans.start(GET_USERROLES + ' ' + user + '|' + role, Env.SUB|Env.ALWAYS);
1978                 try {
1979                         Result<USERS> ru = service.getUserInRole(trans,user,role);
1980                         switch(ru.status) {
1981                                 case OK: 
1982                                         RosettaData<USERS> data = usersDF.newData(trans).load(ru.value);
1983                                         if(Question.willSpecialLog(trans, trans.user())) {
1984                                                 Question.logEncryptTrace(trans,data.asString());
1985                                         }
1986
1987                                         data.to(resp.getOutputStream());
1988                                         setContentType(resp,usersDF.getOutType());
1989                                         setCacheControlOff(resp);
1990                                         return Result.ok();
1991                                 default:
1992                                         return Result.err(ru);
1993                         }
1994                 } catch (Exception e) {
1995                         trans.error().log(e,IN,GET_USERROLES);
1996                         return Result.err(e);
1997                 } finally {
1998                         tt.done();
1999                 }
2000
2001         }
2002
2003         @Override
2004         public Result<Void> getUserRolesByUser(AuthzTrans trans, HttpServletResponse resp, String user) {
2005                 TimeTaken tt = trans.start(GET_USERROLES_BY_USER + ' ' + user, Env.SUB|Env.ALWAYS);
2006                 try {
2007                         Result<USERROLES> ru = service.getUserRolesByUser(trans,user);
2008                         switch(ru.status) {
2009                                 case OK: 
2010                                         RosettaData<USERROLES> data = userrolesDF.newData(trans).load(ru.value);
2011                                         if(Question.willSpecialLog(trans, trans.user())) {
2012                                                 Question.logEncryptTrace(trans,data.asString());
2013                                         }
2014
2015                                         data.to(resp.getOutputStream());
2016                                         setContentType(resp,usersDF.getOutType());
2017                                         setCacheControlOff(resp);
2018                                         return Result.ok();
2019                                 default:
2020                                         return Result.err(ru);
2021                         }
2022                 } catch (Exception e) {
2023                         trans.error().log(e,IN,GET_USERROLES_BY_USER);
2024                         return Result.err(e);
2025                 } finally {
2026                         tt.done();
2027                 }
2028
2029         }
2030         
2031         @Override
2032         public Result<Void> getUserRolesByRole(AuthzTrans trans, HttpServletResponse resp, String role) {
2033                 TimeTaken tt = trans.start(GET_USERROLES_BY_ROLE + ' ' + role, Env.SUB|Env.ALWAYS);
2034                 try {
2035                         Result<USERROLES> ru = service.getUserRolesByRole(trans,role);
2036                         switch(ru.status) {
2037                                 case OK: 
2038                                         RosettaData<USERROLES> data = userrolesDF.newData(trans).load(ru.value);
2039                                         if(Question.willSpecialLog(trans, trans.user())) {
2040                                                 Question.logEncryptTrace(trans,data.asString());
2041                                         }
2042
2043                                         data.to(resp.getOutputStream());
2044                                         setContentType(resp,usersDF.getOutType());
2045                                         setCacheControlOff(resp);
2046                                         return Result.ok();
2047                                 default:
2048                                         return Result.err(ru);
2049                         }
2050                 } catch (Exception e) {
2051                         trans.error().log(e,IN,GET_USERROLES_BY_ROLE);
2052                         return Result.err(e);
2053                 } finally {
2054                         tt.done();
2055                 }
2056
2057         }
2058         
2059
2060         @Override
2061         public Result<Void> resetUsersForRole(AuthzTrans trans, HttpServletResponse resp, HttpServletRequest req) {
2062                 TimeTaken tt = trans.start(SET_USERS_FOR_ROLE, Env.SUB|Env.ALWAYS);
2063                 try {
2064                         REQUEST rreq;
2065                         try {
2066                                 RosettaData<REQUEST> data = userRoleRequestDF.newData().load(req.getInputStream());
2067                                 if(Question.willSpecialLog(trans, trans.user())) {
2068                                         Question.logEncryptTrace(trans,data.asString());
2069                                 }
2070                                 rreq = data.asObject();
2071                         } catch(APIException e) {
2072                                 trans.error().log("Invalid Input",IN, SET_USERS_FOR_ROLE);
2073                                 return Result.err(Status.ERR_BadData,"Invalid Input");
2074                         }
2075                         
2076                         Result<Void> rp = service.resetUsersForRole(trans, rreq);
2077                         
2078                         switch(rp.status) {
2079                                 case OK: 
2080                                         setContentType(resp,permsDF.getOutType());
2081                                         return Result.ok();
2082                                 default:
2083                                         return Result.err(rp);
2084                         }
2085                 } catch (Exception e) {
2086                         trans.error().log(e,IN,SET_USERS_FOR_ROLE);
2087                         return Result.err(e);
2088                 } finally {
2089                         tt.done();
2090                 }
2091                 
2092         }
2093
2094         @Override
2095         public Result<Void> resetRolesForUser(AuthzTrans trans, HttpServletResponse resp, HttpServletRequest req) {
2096                 TimeTaken tt = trans.start(SET_ROLES_FOR_USER, Env.SUB|Env.ALWAYS);
2097                 try {
2098                         REQUEST rreq;
2099                         try {
2100                                 RosettaData<REQUEST> data = userRoleRequestDF.newData().load(req.getInputStream());
2101                                 if(Question.willSpecialLog(trans, trans.user())) {
2102                                         Question.logEncryptTrace(trans,data.asString());
2103                                 }
2104
2105                                 rreq = data.asObject();
2106                         } catch(APIException e) {
2107                                 trans.error().log("Invalid Input",IN, SET_ROLES_FOR_USER);
2108                                 return Result.err(Status.ERR_BadData,"Invalid Input");
2109                         }
2110                         
2111                         Result<Void> rp = service.resetRolesForUser(trans, rreq);
2112                         
2113                         switch(rp.status) {
2114                                 case OK: 
2115                                         setContentType(resp,permsDF.getOutType());
2116                                         return Result.ok();
2117                                 default:
2118                                         return Result.err(rp);
2119                         }
2120                 } catch (Exception e) {
2121                         trans.error().log(e,IN,SET_ROLES_FOR_USER);
2122                         return Result.err(e);
2123                 } finally {
2124                         tt.done();
2125                 }
2126                 
2127         }
2128
2129         /* (non-Javadoc)
2130          * @see com.att.authz.facade.AuthzFacade#extendUserRoleExpiration(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, java.lang.String, java.lang.String)
2131          */
2132         @Override
2133         public Result<Void> extendUserRoleExpiration(AuthzTrans trans, HttpServletResponse resp, String user, String role) {
2134                 TimeTaken tt = trans.start(EXTEND_USER_ROLE + ' ' + user + ' ' + role, Env.SUB|Env.ALWAYS);
2135                 try {
2136                         return service.extendUserRole(trans,user,role);
2137                 } catch (Exception e) {
2138                         trans.error().log(e,IN,EXTEND_USER_ROLE);
2139                         return Result.err(e);
2140                 } finally {
2141                         tt.done();
2142                 }
2143         }
2144
2145         @Override
2146         public Result<Void> deleteUserRole(AuthzTrans trans, HttpServletResponse resp, String user, String role) {
2147                 TimeTaken tt = trans.start(DELETE_USER_ROLE + ' ' + user + ' ' + role, Env.SUB|Env.ALWAYS);
2148                 try {
2149                         Result<Void> rp = service.deleteUserRole(trans,user,role);
2150                         switch(rp.status) {
2151                                 case OK: 
2152                                         setContentType(resp,permsDF.getOutType());
2153                                         return Result.ok();
2154                                 default:
2155                                         return Result.err(rp);
2156                         }
2157                 } catch (Exception e) {
2158                         trans.error().log(e,IN,DELETE_USER_ROLE);
2159                         return Result.err(e);
2160                 } finally {
2161                         tt.done();
2162                 }
2163         }
2164
2165         private static final String UPDATE_APPROVAL = "updateApproval";
2166         private static final String GET_APPROVALS_BY_USER = "getApprovalsByUser.";
2167         private static final String GET_APPROVALS_BY_TICKET = "getApprovalsByTicket.";
2168         private static final String GET_APPROVALS_BY_APPROVER = "getApprovalsByApprover.";
2169         
2170         @Override
2171         public Result<Void> updateApproval(AuthzTrans trans, HttpServletRequest req, HttpServletResponse resp) {
2172                 TimeTaken tt = trans.start(UPDATE_APPROVAL, Env.SUB|Env.ALWAYS);
2173                 try {
2174                         Data<APPROVALS> data = approvalDF.newData().load(req.getInputStream());
2175                         if(Question.willSpecialLog(trans, trans.user())) {
2176                                 Question.logEncryptTrace(trans,data.asString());
2177                         }
2178
2179                         Result<Void> rp = service.updateApproval(trans, data.asObject());
2180                         
2181                         switch(rp.status) {
2182                                 case OK: 
2183                                         setContentType(resp,approvalDF.getOutType());
2184                                         return Result.ok();
2185                                 default:
2186                                         return Result.err(rp);
2187                         }
2188                 } catch (Exception e) {
2189                         trans.error().log(e,IN,UPDATE_APPROVAL);
2190                         return Result.err(e);
2191                 } finally {
2192                         tt.done();
2193                 }
2194         }
2195         
2196         @Override
2197         public Result<Void> getApprovalsByUser(AuthzTrans trans, HttpServletResponse resp, String user) {
2198                 TimeTaken tt = trans.start(GET_APPROVALS_BY_USER + ' ' + user, Env.SUB|Env.ALWAYS);
2199                 try {
2200                         Result<APPROVALS> rp = service.getApprovalsByUser(trans, user);
2201                         switch(rp.status) {
2202                                 case OK: 
2203                                         RosettaData<APPROVALS> data = approvalDF.newData(trans).load(rp.value);
2204                                         if(Question.willSpecialLog(trans, trans.user())) {
2205                                                 Question.logEncryptTrace(trans,data.asString());
2206                                         }
2207                                         data.to(resp.getOutputStream());
2208                                         
2209                                         setContentType(resp,permsDF.getOutType());
2210                                         return Result.ok();
2211                                 default:
2212                                         return Result.err(rp);
2213                         }
2214                 } catch (Exception e) {
2215                         trans.error().log(e,IN,GET_APPROVALS_BY_USER, user);
2216                         return Result.err(e);
2217                 } finally {
2218                         tt.done();
2219                 }
2220         }
2221
2222         @Override
2223         public Result<Void> getApprovalsByApprover(AuthzTrans trans, HttpServletResponse resp, String approver) {
2224                 TimeTaken tt = trans.start(GET_APPROVALS_BY_APPROVER + ' ' + approver, Env.SUB|Env.ALWAYS);
2225                 try {
2226                         Result<APPROVALS> rp = service.getApprovalsByApprover(trans, approver);
2227                         switch(rp.status) {
2228                                 case OK: 
2229                                         RosettaData<APPROVALS> data = approvalDF.newData(trans).load(rp.value);
2230                                         if(Question.willSpecialLog(trans, trans.user())) {
2231                                                 Question.logEncryptTrace(trans,data.asString());
2232                                         }
2233
2234                                         data.to(resp.getOutputStream());
2235                                         setContentType(resp,permsDF.getOutType());
2236                                         return Result.ok();
2237                                 default:
2238                                         return Result.err(rp);
2239                         }
2240                 } catch (Exception e) {
2241                         trans.error().log(e,IN,GET_APPROVALS_BY_APPROVER,approver);
2242                         return Result.err(e);
2243                 } finally {
2244                         tt.done();
2245                 }
2246         }
2247
2248         @Override
2249         public Result<Void> getApprovalsByTicket(AuthzTrans trans, HttpServletResponse resp, String ticket) {
2250                 TimeTaken tt = trans.start(GET_APPROVALS_BY_TICKET, Env.SUB|Env.ALWAYS);
2251                 try {
2252                         Result<APPROVALS> rp = service.getApprovalsByTicket(trans, ticket);
2253                         switch(rp.status) {
2254                                 case OK: 
2255                                         RosettaData<APPROVALS> data = approvalDF.newData(trans).load(rp.value);
2256                                         if(Question.willSpecialLog(trans, trans.user())) {
2257                                                 Question.logEncryptTrace(trans,data.asString());
2258                                         }
2259
2260                                         data.to(resp.getOutputStream());
2261                                         setContentType(resp,permsDF.getOutType());
2262                                         return Result.ok();
2263                                 default:
2264                                         return Result.err(rp);
2265                         }
2266                 } catch (Exception e) {
2267                         trans.error().log(e,IN,GET_APPROVALS_BY_TICKET);
2268                         return Result.err(e);
2269                 } finally {
2270                         tt.done();
2271                 }
2272         }
2273
2274
2275         
2276         public static final String GET_USERS_PERMISSION = "getUsersByPermission";
2277         public static final String GET_USERS_ROLE = "getUsersByRole";
2278
2279         /* (non-Javadoc)
2280          * @see com.att.authz.facade.AuthzFacade#getUsersByRole(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String)
2281          */
2282         @Override
2283         public Result<Void> getUsersByRole(AuthzTrans trans, HttpServletResponse resp, String role) {
2284                 TimeTaken tt = trans.start(GET_USERS_ROLE + ' ' + role, Env.SUB|Env.ALWAYS);
2285                 try {
2286                         Result<USERS> ru = service.getUsersByRole(trans,role);
2287                         switch(ru.status) {
2288                                 case OK: 
2289                                         RosettaData<USERS> data = usersDF.newData(trans).load(ru.value);
2290                                         if(Question.willSpecialLog(trans, trans.user())) {
2291                                                 Question.logEncryptTrace(trans,data.asString());
2292                                         }
2293
2294                                         data.to(resp.getOutputStream());
2295                                         setContentType(resp,usersDF.getOutType());
2296                                         return Result.ok();
2297                                 default:
2298                                         return Result.err(ru);
2299                         }
2300                 } catch (Exception e) {
2301                         trans.error().log(e,IN,GET_USERS_ROLE);
2302                         return Result.err(e);
2303                 } finally {
2304                         tt.done();
2305                 }
2306         }
2307
2308         /* (non-Javadoc)
2309          * @see com.att.authz.facade.AuthzFacade#getUsersByPermission(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String, java.lang.String, java.lang.String)
2310          */
2311         @Override
2312         public Result<Void> getUsersByPermission(AuthzTrans trans, HttpServletResponse resp, 
2313                         String type, String instance, String action) {
2314                 TimeTaken tt = trans.start(GET_USERS_PERMISSION + ' ' + type + ' ' + instance + ' ' +action, Env.SUB|Env.ALWAYS);
2315                 try {
2316                         Result<USERS> ru = service.getUsersByPermission(trans,type,instance,action);
2317                         switch(ru.status) {
2318                                 case OK: 
2319                                         RosettaData<USERS> data = usersDF.newData(trans).load(ru.value);
2320                                         if(Question.willSpecialLog(trans, trans.user())) {
2321                                                 Question.logEncryptTrace(trans,data.asString());
2322                                         }
2323
2324                                         data.to(resp.getOutputStream());
2325                                         setContentType(resp,usersDF.getOutType());
2326                                         return Result.ok();
2327                                 default:
2328                                         return Result.err(ru);
2329                         }
2330                 } catch (Exception e) {
2331                         trans.error().log(e,IN,GET_USERS_PERMISSION);
2332                         return Result.err(e);
2333                 } finally {
2334                         tt.done();
2335                 }
2336         }
2337
2338         
2339         public static final String GET_HISTORY_USER = "getHistoryByUser";
2340         public static final String GET_HISTORY_ROLE = "getHistoryByRole";
2341         public static final String GET_HISTORY_PERM = "getHistoryByPerm";
2342         public static final String GET_HISTORY_NS = "getHistoryByNS";
2343         /* (non-Javadoc)
2344          * @see com.att.authz.facade.AuthzFacade#getHistoryByUser(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
2345          */
2346         @Override
2347         public Result<Void> getHistoryByUser(AuthzTrans trans, HttpServletResponse resp, String user, int[] yyyymm, final int sort) {
2348                 StringBuilder sb = new StringBuilder();
2349                 sb.append(GET_HISTORY_USER);
2350                 sb.append(' ');
2351                 sb.append(user);
2352                 sb.append(" for ");
2353                 boolean first = true;
2354                 for(int i : yyyymm) {
2355                         if(first) {
2356                             first = false;
2357                         } else {
2358                             sb.append(',');
2359                         }
2360                         sb.append(i);
2361                 }
2362                 TimeTaken tt = trans.start(sb.toString(), Env.SUB|Env.ALWAYS);
2363
2364                 try {
2365                         Result<HISTORY> rh = service.getHistoryByUser(trans,user,yyyymm,sort);
2366                         switch(rh.status) {
2367                                 case OK: 
2368                                         RosettaData<HISTORY> data = historyDF.newData(trans).load(rh.value);
2369                                         if(Question.willSpecialLog(trans, trans.user())) {
2370                                                 Question.logEncryptTrace(trans,data.asString());
2371                                         }
2372
2373                                         data.to(resp.getOutputStream());
2374                                         setContentType(resp,historyDF.getOutType());
2375                                         return Result.ok();
2376                                 default:
2377                                         return Result.err(rh);
2378                         }
2379                 } catch (Exception e) {
2380                         trans.error().log(e,IN,GET_HISTORY_USER);
2381                         return Result.err(e);
2382                 } finally {
2383                         tt.done();
2384                 }
2385         }
2386
2387         /* (non-Javadoc)
2388          * @see com.att.authz.facade.AuthzFacade#getHistoryByRole(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String, int[])
2389          */
2390         @Override
2391         public Result<Void> getHistoryByRole(AuthzTrans trans, HttpServletResponse resp, String role, int[] yyyymm, final int sort) {
2392                 StringBuilder sb = new StringBuilder();
2393                 sb.append(GET_HISTORY_ROLE);
2394                 sb.append(' ');
2395                 sb.append(role);
2396                 sb.append(" for ");
2397                 boolean first = true;
2398                 for(int i : yyyymm) {
2399                         if(first) {
2400                             first = false;
2401                         } else {
2402                             sb.append(',');
2403                         }
2404                         sb.append(i);
2405                 }
2406                 TimeTaken tt = trans.start(sb.toString(), Env.SUB|Env.ALWAYS);
2407                 try {
2408                         Result<HISTORY> rh = service.getHistoryByRole(trans,role,yyyymm,sort);
2409                         switch(rh.status) {
2410                                 case OK: 
2411                                         RosettaData<HISTORY> data = historyDF.newData(trans).load(rh.value);
2412                                         if(Question.willSpecialLog(trans, trans.user())) {
2413                                                 Question.logEncryptTrace(trans,data.asString());
2414                                         }
2415
2416                                         data.to(resp.getOutputStream());
2417                                         setContentType(resp,historyDF.getOutType());
2418                                         return Result.ok();
2419                                 default:
2420                                         return Result.err(rh);
2421                         }
2422                 } catch (Exception e) {
2423                         trans.error().log(e,IN,GET_HISTORY_ROLE);
2424                         return Result.err(e);
2425                 } finally {
2426                         tt.done();
2427                 }
2428         }
2429
2430         /* (non-Javadoc)
2431          * @see com.att.authz.facade.AuthzFacade#getHistoryByNS(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String, int[])
2432          */
2433         @Override
2434         public Result<Void> getHistoryByNS(AuthzTrans trans, HttpServletResponse resp, String ns, int[] yyyymm, final int sort) {
2435                 StringBuilder sb = new StringBuilder();
2436                 sb.append(GET_HISTORY_NS);
2437                 sb.append(' ');
2438                 sb.append(ns);
2439                 sb.append(" for ");
2440                 boolean first = true;
2441                 for(int i : yyyymm) {
2442                         if(first) {
2443                             first = false;
2444                         } else {
2445                             sb.append(',');
2446                         }
2447                         sb.append(i);
2448                 }
2449                 TimeTaken tt = trans.start(sb.toString(), Env.SUB|Env.ALWAYS);
2450                 try {
2451                         Result<HISTORY> rh = service.getHistoryByNS(trans,ns,yyyymm,sort);
2452                         switch(rh.status) {
2453                                 case OK: 
2454                                         RosettaData<HISTORY> data = historyDF.newData(trans).load(rh.value);
2455                                         if(Question.willSpecialLog(trans, trans.user())) {
2456                                                 Question.logEncryptTrace(trans,data.asString());
2457                                         }
2458
2459                                         data.to(resp.getOutputStream());
2460                                         setContentType(resp,historyDF.getOutType());
2461                                         return Result.ok();
2462                                 default:
2463                                         return Result.err(rh);
2464                         }
2465                 } catch (Exception e) {
2466                         trans.error().log(e,IN,GET_HISTORY_NS);
2467                         return Result.err(e);
2468                 } finally {
2469                         tt.done();
2470                 }
2471         }
2472
2473         /* (non-Javadoc)
2474          * @see com.att.authz.facade.AuthzFacade#getHistoryByPerm(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String, int[])
2475          */
2476         @Override
2477         public Result<Void> getHistoryByPerm(AuthzTrans trans, HttpServletResponse resp, String perm, int[] yyyymm, final int sort) {
2478                 StringBuilder sb = new StringBuilder();
2479                 sb.append(GET_HISTORY_PERM);
2480                 sb.append(' ');
2481                 sb.append(perm);
2482                 sb.append(" for ");
2483                 boolean first = true;
2484                 for(int i : yyyymm) {
2485                         if(first) {
2486                             first = false;
2487                         } else {
2488                             sb.append(',');
2489                         }
2490                         sb.append(i);
2491                 }
2492                 TimeTaken tt = trans.start(sb.toString(), Env.SUB|Env.ALWAYS);
2493                 try {
2494                         Result<HISTORY> rh = service.getHistoryByPerm(trans,perm,yyyymm,sort);
2495                         switch(rh.status) {
2496                                 case OK: 
2497                                         RosettaData<HISTORY> data = historyDF.newData(trans).load(rh.value);
2498                                         if(Question.willSpecialLog(trans, trans.user())) {
2499                                                 Question.logEncryptTrace(trans,data.asString());
2500                                         }
2501
2502                                         data.to(resp.getOutputStream());
2503                                         setContentType(resp,historyDF.getOutType());
2504                                         return Result.ok();
2505                                 default:
2506                                         return Result.err(rh);
2507                         }
2508                 } catch (Exception e) {
2509                         trans.error().log(e,IN,GET_HISTORY_PERM);
2510                         return Result.err(e);
2511                 } finally {
2512                         tt.done();
2513                 }
2514         }
2515
2516         public final static String CACHE_CLEAR = "cacheClear "; 
2517 //      public final static String CACHE_VALIDATE = "validateCache";
2518         
2519         /* (non-Javadoc)
2520          * @see com.att.authz.facade.AuthzFacade#cacheClear(org.onap.aaf.auth.env.test.AuthzTrans, java.lang.String)
2521          */
2522         @Override
2523         public Result<Void> cacheClear(AuthzTrans trans, String cname) {
2524                 TimeTaken tt = trans.start(CACHE_CLEAR + cname, Env.SUB|Env.ALWAYS);
2525                 try {
2526                         return service.cacheClear(trans,cname);
2527                 } catch (Exception e) {
2528                         trans.error().log(e,IN,CACHE_CLEAR);
2529                         return Result.err(e);
2530                 } finally {
2531                         tt.done();
2532                 }
2533         }
2534
2535         /* (non-Javadoc)
2536  * @see com.att.authz.facade.AuthzFacade#cacheClear(org.onap.aaf.auth.env.test.AuthzTrans, java.lang.String, java.lang.Integer)
2537  */
2538         @Override
2539         public Result<Void> cacheClear(AuthzTrans trans, String cname,  String segments) {
2540                 TimeTaken tt = trans.start(CACHE_CLEAR + cname + ", segments[" + segments + ']', Env.SUB|Env.ALWAYS);
2541                 try {
2542                         String[] segs = segments.split("\\s*,\\s*");
2543                         int isegs[] = new int[segs.length];
2544                         for(int i=0;i<segs.length;++i) {
2545                                 try {
2546                                         isegs[i] = Integer.parseInt(segs[i]);
2547                                 } catch(NumberFormatException nfe) {
2548                                         isegs[i] = -1;
2549                                 }
2550                         }
2551                         return service.cacheClear(trans,cname, isegs);
2552                 } catch (Exception e) {
2553                         trans.error().log(e,IN,CACHE_CLEAR);
2554                         return Result.err(e);
2555                 } finally {
2556                         tt.done();
2557                 }
2558         }
2559
2560         /* (non-Javadoc)
2561          * @see com.att.authz.facade.AuthzFacade#dbReset(org.onap.aaf.auth.env.test.AuthzTrans)
2562          */
2563         @Override
2564         public void dbReset(AuthzTrans trans) {
2565                 service.dbReset(trans);
2566         }
2567
2568         /* (non-Javadoc)
2569          * @see com.att.authz.facade.AuthzFacade#getAPI(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse)
2570          */
2571         public final static String API_REPORT = "apiReport";
2572         @Override
2573         public Result<Void> getAPI(AuthzTrans trans, HttpServletResponse resp, RServlet<AuthzTrans> rservlet) {
2574                 TimeTaken tt = trans.start(API_REPORT, Env.SUB);
2575                 try {
2576                         Api api = new Api();
2577                         Api.Route ar;
2578                         Method[] meths = AuthzCassServiceImpl.class.getDeclaredMethods();
2579                         for(RouteReport rr : rservlet.routeReport()) {
2580                                 api.getRoute().add(ar = new Api.Route());
2581                                 ar.setMeth(rr.meth.name());
2582                                 ar.setPath(rr.path);
2583                                 ar.setDesc(rr.desc);
2584                                 ar.getContentType().addAll(rr.contextTypes);
2585                                 for(Method m : meths) {
2586                                         ApiDoc ad;
2587                                         if((ad = m.getAnnotation(ApiDoc.class))!=null &&
2588                                                         rr.meth.equals(ad.method()) &&
2589                                                     rr.path.equals(ad.path())) {
2590                                                 for(String param : ad.params()) {
2591                                                         ar.getParam().add(param);
2592                                                 }
2593                                                 for(String text : ad.text()) {
2594                                                         ar.getComments().add(text);
2595                                                 }
2596                                                 ar.setExpected(ad.expectedCode());
2597                                                 for(int ec : ad.errorCodes()) {
2598                                                         ar.getExplicitErr().add(ec);
2599                                                 }
2600                                         }
2601                                 }
2602                         }
2603                         RosettaData<Api> data = apiDF.newData(trans).load(api);
2604                         if(Question.willSpecialLog(trans, trans.user())) {
2605                                 Question.logEncryptTrace(trans,data.asString());
2606                         }
2607
2608                         data.to(resp.getOutputStream());
2609                         setContentType(resp,apiDF.getOutType());
2610                         return Result.ok();
2611
2612                 } catch (Exception e) {
2613                         trans.error().log(e,IN,API_REPORT);
2614                         return Result.err(e);
2615                 } finally {
2616                         tt.done();
2617                 }
2618         }
2619         
2620
2621         public final static String API_EXAMPLE = "apiExample";
2622
2623         /* (non-Javadoc)
2624          * @see com.att.authz.facade.AuthzFacade#getAPIExample(org.onap.aaf.auth.env.test.AuthzTrans, javax.servlet.http.HttpServletResponse, java.lang.String)
2625          */
2626         @Override
2627         public Result<Void> getAPIExample(AuthzTrans trans, HttpServletResponse resp, String nameOrContentType, boolean optional) {
2628                 TimeTaken tt = trans.start(API_EXAMPLE, Env.SUB);
2629                 try {
2630                         String content =Examples.print(apiDF.getEnv(), nameOrContentType, optional); 
2631                         resp.getOutputStream().print(content);
2632                         setContentType(resp,content.contains("<?xml")?TYPE.XML:TYPE.JSON);
2633                         return Result.ok();
2634                 } catch (Exception e) {
2635                         trans.error().log(e,IN,API_EXAMPLE);
2636                         return Result.err(Status.ERR_NotImplemented,e.getMessage());
2637                 } finally {
2638                         tt.done();
2639                 }
2640         }
2641
2642 }