AT&T 2.0.19 Code drop, stage 4
[aaf/authz.git] / authz-gui / src / main / java / com / att / authz / gui / pages / NssShow.java
1 /*******************************************************************************
2  * Copyright (c) 2016 AT&T Intellectual Property. All rights reserved.
3  *******************************************************************************/
4 package com.att.authz.gui.pages;
5
6 import java.io.IOException;
7 import java.net.ConnectException;
8 import java.util.ArrayList;
9 import java.util.Collections;
10 import java.util.Comparator;
11 import java.util.List;
12
13 import com.att.authz.env.AuthzEnv;
14 import com.att.authz.env.AuthzTrans;
15 import com.att.authz.gui.AuthGUI;
16 import com.att.authz.gui.BreadCrumbs;
17 import com.att.authz.gui.Page;
18 import com.att.authz.gui.Table;
19 import com.att.authz.gui.Table.Cells;
20 import com.att.authz.gui.table.AbsCell;
21 import com.att.authz.gui.table.RefCell;
22 import org.onap.aaf.cadi.CadiException;
23 import org.onap.aaf.cadi.client.Future;
24 import org.onap.aaf.cadi.client.Rcli;
25 import org.onap.aaf.cadi.client.Retryable;
26 import org.onap.aaf.inno.env.APIException;
27 import org.onap.aaf.inno.env.Env;
28 import org.onap.aaf.inno.env.Slot;
29 import org.onap.aaf.inno.env.TimeTaken;
30
31 import aaf.v2_0.Nss;
32 import aaf.v2_0.Nss.Ns;
33
34 public class NssShow extends Page {
35         public static final String HREF = "/gui/mynamespaces";
36
37         public NssShow(final AuthGUI gui, final Page ... breadcrumbs) throws APIException, IOException {
38                 super(gui.env, "MyNamespaces",HREF, NO_FIELDS,
39                                 new BreadCrumbs(breadcrumbs), 
40                                 new Table<AuthGUI,AuthzTrans>("Namespaces I administer",gui.env.newTransNoAvg(),new Model("admin",gui.env), 
41                                                 "class=std", "style=display: inline-block; width: 45%; margin: 10px;"),
42                                 new Table<AuthGUI,AuthzTrans>("Namespaces I own",gui.env.newTransNoAvg(),new Model("responsible",gui.env),
43                                                 "class=std", "style=display: inline-block; width: 45%; margin: 10px;"));
44         }
45         
46         private static class Model implements Table.Data<AuthGUI,AuthzTrans> {
47                 private String[] headers;
48                 private String privilege = null;
49                 public final Slot sNssByUser;
50                 private boolean isAdmin;
51
52                 public Model(String privilege,AuthzEnv env) {
53                         super();
54                         headers = new String[] {privilege};
55                         this.privilege = privilege;
56                         isAdmin = "admin".equals(privilege);
57                         sNssByUser = env.slot("NSS_SHOW_MODEL_DATA");
58                 }
59
60                 @Override
61                 public String[] headers() {
62                         return headers;
63                 }
64                 
65                 @Override
66                 public Cells get(final AuthGUI gui, final AuthzTrans trans) {
67                         ArrayList<AbsCell[]> rv = new ArrayList<AbsCell[]>();
68                         List<Ns> nss = trans.get(sNssByUser, null);
69                         if(nss==null) {
70                                 TimeTaken tt = trans.start("AAF Nss by User for " + privilege,Env.REMOTE);
71                                 try {
72                                         nss = gui.clientAsUser(trans.getUserPrincipal(), new Retryable<List<Ns>>() {
73                                                 @Override
74                                                 public List<Ns> code(Rcli<?> client) throws CadiException, ConnectException, APIException {
75                                                         List<Ns> nss = null;
76                                                         Future<Nss> fp = client.read("/authz/nss/either/" + trans.user(),gui.nssDF);
77                                                         if(fp.get(AuthGUI.TIMEOUT)) {
78                                                                 TimeTaken tt = trans.start("Load Data for " + privilege, Env.SUB);
79                                                                 try {
80                                                                         if(fp.value!=null) {
81                                                                                 nss = fp.value.getNs();
82                                                                                 Collections.sort(nss, new Comparator<Ns>() {
83                                                                                         public int compare(Ns ns1, Ns ns2) {
84                                                                                                 return ns1.getName().compareToIgnoreCase(ns2.getName());
85                                                                                         }
86                                                                                 });
87                                                                                 trans.put(sNssByUser,nss);
88                                                                         } 
89                                                                 } finally {
90                                                                         tt.done();
91                                                                 }
92                                                         }else {
93                                                                 gui.writeError(trans, fp, null);
94                                                         }
95                                                         return nss;
96                                                 }
97                                         });
98                                 } catch (Exception e) {
99                                         trans.error().log(e);
100                                 } finally {
101                                         tt.done();
102                                 }
103                         }
104                         
105                         if(nss!=null) {
106                                 for(Ns n : nss) {
107                                         if((isAdmin && !n.getAdmin().isEmpty())
108                                           || (!isAdmin && !n.getResponsible().isEmpty())) {
109                                                 AbsCell[] sa = new AbsCell[] {
110                                                         new RefCell(n.getName(),NsDetail.HREF
111                                                                         +"?name="+n.getName()),
112                                                 };
113                                                 rv.add(sa);
114                                         }
115                                 }
116                         }
117
118                         return new Cells(rv,null);
119                 }
120         }
121         
122
123 }