/******************************************************************************* * Copyright (c) 2016 AT&T Intellectual Property. All rights reserved. *******************************************************************************/ package com.att.authz.gui.pages; import java.io.IOException; import java.net.ConnectException; import java.util.ArrayList; import java.util.List; import com.att.aft.dme2.internal.jetty.http.HttpStatus; import com.att.authz.env.AuthzEnv; import com.att.authz.env.AuthzTrans; import com.att.authz.gui.AuthGUI; import com.att.authz.gui.BreadCrumbs; import com.att.authz.gui.Page; import com.att.authz.gui.Table; import com.att.authz.gui.Table.Cells; import com.att.authz.gui.table.AbsCell; import com.att.authz.gui.table.RefCell; import com.att.authz.gui.table.TextCell; import org.onap.aaf.cadi.CadiException; import org.onap.aaf.cadi.client.Future; import org.onap.aaf.cadi.client.Rcli; import org.onap.aaf.cadi.client.Retryable; import org.onap.aaf.inno.env.APIException; import org.onap.aaf.inno.env.Env; import org.onap.aaf.inno.env.Slot; import org.onap.aaf.inno.env.TimeTaken; import aaf.v2_0.Perm; import aaf.v2_0.Perms; /** * Detail Page for Permissions * */ public class PermDetail extends Page { public static final String HREF = "/gui/permdetail"; public static final String NAME = "PermDetail"; private static final String BLANK = ""; public PermDetail(final AuthGUI gui, Page ... breadcrumbs) throws APIException, IOException { super(gui.env, NAME, HREF, new String[] {"type","instance","action"}, new BreadCrumbs(breadcrumbs), new Table("Permission Details",gui.env.newTransNoAvg(),new Model(gui.env()),"class=detail") ); } /** * Implement the table content for Permissions Detail * * */ private static class Model implements Table.Data { private static final String[] headers = new String[0]; private Slot type, instance, action; public Model(AuthzEnv env) { type = env.slot(NAME+".type"); instance = env.slot(NAME+".instance"); action = env.slot(NAME+".action"); } @Override public String[] headers() { return headers; } @Override public Cells get(final AuthGUI gui, final AuthzTrans trans) { final String pType = trans.get(type, null); final String pInstance = trans.get(instance, null); final String pAction = trans.get(action, null); if(pType==null || pInstance==null || pAction==null) { return Cells.EMPTY; } ArrayList rv = new ArrayList(); rv.add(new AbsCell[]{new TextCell("Type:"),new TextCell(pType)}); rv.add(new AbsCell[]{new TextCell("Instance:"),new TextCell(pInstance)}); rv.add(new AbsCell[]{new TextCell("Action:"),new TextCell(pAction)}); try { gui.clientAsUser(trans.getUserPrincipal(), new Retryable() { @Override public Void code(Rcli client)throws CadiException, ConnectException, APIException { TimeTaken tt = trans.start("AAF Perm Details",Env.REMOTE); try { Future fp= client.read("/authz/perms/"+pType + '/' + pInstance + '/' + pAction,gui.permsDF); if(fp.get(AuthGUI.TIMEOUT)) { tt.done(); tt = trans.start("Load Data", Env.SUB); List ps = fp.value.getPerm(); if(!ps.isEmpty()) { Perm perm = fp.value.getPerm().get(0); String desc = (perm.getDescription()!=null?perm.getDescription():BLANK); rv.add(new AbsCell[]{new TextCell("Description:"),new TextCell(desc)}); boolean first=true; for(String r : perm.getRoles()) { if(first){ first=false; rv.add(new AbsCell[] { new TextCell("Associated Roles:"), new TextCell(r) }); } else { rv.add(new AbsCell[] { AbsCell.Null, new TextCell(r) }); } } } String historyLink = PermHistory.HREF + "?type=" + pType + "&instance=" + pInstance + "&action=" + pAction; rv.add(new AbsCell[] {new RefCell("See History",historyLink)}); } else { rv.add(new AbsCell[] {new TextCell( fp.code()==HttpStatus.NOT_FOUND_404? "*** Implicit Permission ***": "*** Data Unavailable ***" )}); } } finally { tt.done(); } return null; } }); } catch (Exception e) { e.printStackTrace(); } return new Cells(rv,null); } } }