Merge "AAFcli.java -Declare "value" on a separate line"
[aaf/authz.git] / auth / auth-gui / src / main / java / org / onap / aaf / auth / gui / pages / ApprovalForm.java
index 14d434c..a533736 100644 (file)
@@ -7,9 +7,9 @@
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -40,13 +40,12 @@ import org.onap.aaf.auth.gui.Table.Cells;
 import org.onap.aaf.auth.gui.table.AbsCell;
 import org.onap.aaf.auth.gui.table.ButtonCell;
 import org.onap.aaf.auth.gui.table.RadioCell;
-import org.onap.aaf.auth.gui.table.RefCell;
 import org.onap.aaf.auth.gui.table.TableData;
-import org.onap.aaf.auth.gui.table.TextAndRefCell;
 import org.onap.aaf.auth.gui.table.TextCell;
+import org.onap.aaf.auth.gui.table.TextToolTipCell;
 import org.onap.aaf.auth.org.Organization;
-import org.onap.aaf.auth.org.OrganizationFactory;
 import org.onap.aaf.auth.org.Organization.Identity;
+import org.onap.aaf.auth.org.OrganizationFactory;
 import org.onap.aaf.cadi.CadiException;
 import org.onap.aaf.cadi.client.Future;
 import org.onap.aaf.cadi.client.Rcli;
@@ -67,9 +66,9 @@ public class ApprovalForm extends Page {
     // Package on purpose
     static final String NAME="Approvals";
     static final String HREF = "/gui/approve";
-    static final String[] FIELDS = new String[] {"line[]","user"};
-    
-    
+    static final String[] FIELDS = new String[] {"line[]","user","delegate_of","as_user"};
+
+
     public ApprovalForm(final AAF_GUI gui, final Page ... breadcrumbs) throws APIException, IOException {
         super(gui.env,NAME,HREF, FIELDS,
 
@@ -91,7 +90,7 @@ public class ApprovalForm extends Page {
                 }
             },
             new Form(true,new Table<AAF_GUI,AuthzTrans>("Approval Requests", gui.env.newTransNoAvg(),new Model(gui.env),"class=stdform"))
-                .preamble("The following requires your Approval to proceed in the AAF System.</p><p class=subtext>Hover on Identity for Name; click for WebPhone; If Deny is the only option, User is no longer valid."),
+                .preamble("The following requires your Approval to proceed in the AAF System.</p><p class=subtext>Hover on Name for Identity; If Deny is the only option, User is no longer valid."),
             new NamedCode(false, "selectAlljs") {
                 @Override
                 public void code(final Cache<HTMLGen> cache, final HTMLGen hgen) throws APIException, IOException {
@@ -106,35 +105,47 @@ public class ApprovalForm extends Page {
                     hgen.end(jsStart);
                 }
             });
-        
     }
-    
+
     /**
      * Implement the Table Content for Approvals
-     * 
+     *
      * @author Jonathan
      *
      */
     private static class Model extends TableData<AAF_GUI,AuthzTrans> {
         //TODO come up with a generic way to do ILM Info (people page)
-        private static final String TODO_ILM_INFO = "TODO: ILM Info";
-        private static final String DOMAIN_OF_USER = "@DOMAIN";
-        
+//        private static final String TODO_ILM_INFO = "TODO: ILM Info";
+
+
         private static final String[] headers = new String[] {"Identity","Request","Approve","Deny"};
         private Slot sUser;
-        
+        private Slot sAsDelegate;
+        private Slot sAsUser;
+
         public Model(AuthzEnv env) {
             sUser = env.slot(NAME+".user");
+            sAsDelegate = env.slot(NAME+".delegate_of");
+            sAsUser = env.slot(NAME + ".as_user");
         }
-        
+
         @Override
         public String[] headers() {
             return headers;
         }
-        
+
         @Override
         public Cells get(final AuthzTrans trans, final AAF_GUI gui) {
             final String userParam = trans.get(sUser, null);
+
+            final String asDelegate = trans.get(sAsDelegate, null);
+            final String approver;
+            if(asDelegate==null) {
+                approver = trans.get(sAsUser,trans.user());
+            } else {
+                approver = asDelegate;
+            }
+
             ArrayList<AbsCell[]> rv = new ArrayList<>();
             String msg = null;
             TimeTaken tt = trans.start("AAF Get Approvals for Approver",Env.REMOTE);
@@ -144,11 +155,11 @@ public class ApprovalForm extends Page {
                 int numLeft = gui.clientAsUser(trans.getUserPrincipal(), new Retryable<Integer>() {
                     @Override
                     public Integer code(Rcli<?> client) throws CadiException, ConnectException, APIException {
-                        Future<Approvals> fa = client.read("/authz/approval/approver/"+trans.user(),gui.getDF(Approvals.class));
+                        Future<Approvals> fa = client.read("/authz/approval/approver/"+approver,gui.getDF(Approvals.class));
                         int numLeft = 0;
-                        if(fa.get(AAF_GUI.TIMEOUT)) {
-                            
-                            if(fa.value!=null) {
+                        if (fa.get(AAF_GUI.TIMEOUT)) {
+
+                            if (fa.value!=null) {
                                 for (Approval appr : fa.value.getApprovals()) {
                                     if ("pending".equals(appr.getStatus())) {
                                         if (userParam!=null && !appr.getUser().equalsIgnoreCase(userParam)) {
@@ -159,10 +170,10 @@ public class ApprovalForm extends Page {
                                     }
                                 }
                             }
-                            
+
                             String prevApprover = null;
                             int overallIndex = 0;
-                                
+
                             for (Approval appr : pendingApprovals) {
                                 String currApprover = appr.getApprover();
                                 if (!currApprover.equals(prevApprover)) {
@@ -175,7 +186,7 @@ public class ApprovalForm extends Page {
                         return numLeft;
                     }
                 });
-                
+
                 if (!pendingApprovals.isEmpty()) {
                     // Only add select all links if we have approvals
                     AbsCell[] selectAllRow = new AbsCell[] {
@@ -186,105 +197,116 @@ public class ApprovalForm extends Page {
                         };
                     rv.add(selectAllRow);
                 }
-                        
+
                 int line=-1;
-                
+
                 while (!beginIndicesPerApprover.isEmpty()) {
                     int beginIndex = beginIndicesPerApprover.remove(0);
                     int endIndex = (beginIndicesPerApprover.isEmpty()?pendingApprovals.size():beginIndicesPerApprover.get(0));
                     List<Approval> currApproverList = pendingApprovals.subList(beginIndex, endIndex);
-                    
-                    String currApproverFull = currApproverList.get(0).getApprover();
-                    String currApproverShort = currApproverFull.substring(0,currApproverFull.indexOf('@'));
-                    String currApprover = (trans.user().indexOf('@')<0?currApproverShort:currApproverFull);
-                    if (!currApprover.equals(trans.user())) {
-                        AbsCell[] approverHeader;
-                        if (currApproverFull.substring(currApproverFull.indexOf('@')).equals(DOMAIN_OF_USER)) {
-                            approverHeader = new AbsCell[] { 
-                                    new TextAndRefCell("Approvals Delegated to Me by ", currApprover,
-                                            TODO_ILM_INFO + currApproverShort, 
-                                            true,
-                                            new String[] {"colspan=4", "class=head"})
-                            };
-                        } else {
-                            approverHeader = new AbsCell[] { 
-                                    new TextCell("Approvals Delegated to Me by " + currApprover,
-                                            new String[] {"colspan=4", "class=head"})
-                            };
-                        }
-                        rv.add(approverHeader);
-                    }
-                    
-                    // Sort by User Requesting
-                    Collections.sort(currApproverList, new Comparator<Approval>() {
-                        @Override
-                        public int compare(Approval a1, Approval a2) {
-                            return a1.getUser().compareTo(a2.getUser());
+
+                    Identity iapprover = trans.org().getIdentity(trans,currApproverList.get(0).getApprover());
+                    if(iapprover==null) {
+                        rv.add(new AbsCell[] {
+                                new TextCell(currApproverList.get(0).getApprover() + " is not part of Organization",
+                                        new String[] {"colspan=4", "class=head"})
+                        });
+                    } else {
+                        if (!iapprover.fullID().equals(trans.user())) {
+
+                            AbsCell[] approverHeader;
+    //                        if (domainOfUser.equals(domainOfApprover)) {
+    //                            approverHeader = new AbsCell[] {
+    //                                    new TextAndRefCell("Approvals Delegated to Me by ", currApproverFull,
+    //                                            TODO_ILM_INFO + currApproverShort,
+    //                                            true,
+    //                                            new String[] {"colspan=4", "class=head"})
+    //                            };
+    //                        } else {
+                                approverHeader = new AbsCell[] {
+                                        new TextCell("Approvals Delegated to Me by " + iapprover.fullName()
+                                            + '(' + iapprover.id() + ')',
+                                                new String[] {"colspan=4", "class=head"})
+                                };
+    //                        }
+                            rv.add(approverHeader);
                         }
-                    });
-                    
-                    String prevUser = null;
-                    boolean userOK=true;
 
-                    for (Approval appr : currApproverList) {
-                        if(++line<MAX_LINE) { // limit number displayed at one time.
-                            AbsCell userCell;
-                            String user = appr.getUser();
-                            if(user.equals(prevUser)) {
-                                userCell = AbsCell.Null; 
-                            } else if (user.endsWith(DOMAIN_OF_USER)){
-                                userOK=true;
-                                String title;
-                                Organization org = OrganizationFactory.obtain(trans.env(), user);
-                                if(org==null) {
-                                    title="";
-                                } else {
-                                    Identity au = org.getIdentity(trans, user);
-                                    if(au!=null) {
-                                        if("MECHID".equals(au.type())) {
-                                            Identity managedBy = au.responsibleTo();
-                                            if(managedBy==null) {
-                                                title ="title=" + au.type();
+                        // Sort by User Requesting
+                        Collections.sort(currApproverList, new Comparator<Approval>() {
+                            @Override
+                            public int compare(Approval a1, Approval a2) {
+                                return a1.getUser().compareTo(a2.getUser());
+                            }
+                        });
+
+                        String prevUser = null;
+                        boolean userOK=true;
+                        for (Approval appr : currApproverList) {
+                            if (++line<MAX_LINE) { // limit number displayed at one time.
+                                AbsCell userCell;
+                                String user = appr.getUser();
+
+                                if (user.equals(prevUser)) {
+                                    userCell = AbsCell.Null;
+                                } else if (user.endsWith(trans.org().getRealm())){
+                                    userOK=true;
+                                    String title;
+                                    Organization org = OrganizationFactory.obtain(trans.env(), user);
+                                    if (org==null) {
+                                        title="";
+                                        userCell = new TextCell(user);
+                                    } else {
+                                        Identity au = org.getIdentity(trans, user);
+                                        if (au!=null) {
+                                            if(au.isPerson()) {
+                                                userCell = new TextToolTipCell(au.fullName(),"Identity: " + au.id());
                                             } else {
-                                                title="title=Sponsor is " + managedBy.fullName();                                                
+                                                Identity managedBy = au.responsibleTo();
+                                                if (managedBy==null) {
+                                                    title ="Identity: " + au.type();
+                                                } else {
+                                                    title="Sponsor: " + managedBy.fullName();
+                                                }
+                                                userCell = new TextToolTipCell(au.fullID(),title);
                                             }
                                         } else {
-                                            title="title=" + au.fullName();
+                                            userOK=false;
+                                            title="Not a User at " + org.getName();
+                                            userCell = new TextToolTipCell(user,title);
                                         }
-                                    } else {
-                                        userOK=false;
-                                        title="title=Not a User at " + org.getName();
                                     }
+    //                                userCell = new RefCell(prevUser,
+    //                                    TODO_ILM_INFO+user.substring(0, user.length()-domainOfApprover.length()),
+    //                                    true,
+    //                                    title);
+
+                                } else {
+                                    userCell = new TextCell(user);
                                 }
+                                AbsCell[] sa = new AbsCell[] {
+                                    userCell,
+                                    new TextCell(appr.getMemo()),
+                                    userOK?new RadioCell("line."+ line,"approve", "approved|"+appr.getTicket()):new TextCell(""),
+                                    new RadioCell("line."+ line,"deny", "denied|"+appr.getTicket())
+                                };
+                                rv.add(sa);
                                 prevUser=user;
-                                userCell = new RefCell(prevUser,
-                                    TODO_ILM_INFO+user.substring(0, user.length()-DOMAIN_OF_USER.length()),
-                                    true,
-                                    title);
                             } else {
-                                userCell = new TextCell(prevUser);
+                                ++numLeft;
                             }
-                            AbsCell[] sa = new AbsCell[] {
-                                userCell,
-                                new TextCell(appr.getMemo()),
-                                userOK?new RadioCell("line."+ line,"approve", "approved|"+appr.getTicket()):new TextCell(""),
-                                new RadioCell("line."+ line,"deny", "denied|"+appr.getTicket())
-                            };
-                            rv.add(sa);
-                        } else {
-                            ++numLeft;
                         }
                     }
-                }
-                if(numLeft>0) {
-                    msg = "After these, there will be " + numLeft + " approvals left to process";
-                }
-                if(rv.isEmpty()) {
                     if (numLeft>0) {
-                        msg = "No Approvals to process at this time for user " + userParam +". You have " 
-                            + numLeft + " other approvals to process.";
-                    } else {
-                        msg = "No Approvals to process at this time";
+                        msg = "After these, there will be " + numLeft + " approvals left to process";
+                    }
+                    if (rv.isEmpty()) {
+                        if (numLeft>0) {
+                            msg = "No Approvals to process at this time for user " + userParam +". You have "
+                                + numLeft + " other approvals to process.";
+                        } else {
+                            msg = "No Approvals to process at this time";
+                        }
                     }
                 }
             } catch (Exception e) {