summaryrefslogtreecommitdiffstats
path: root/authz-gui/src/main/java/com/att/authz/gui/pages/PermDetail.java
blob: ad26674f71005f4a8c3574ebba28873ab55493d2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
/*******************************************************************************
 * 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<AuthGUI,AuthzTrans>("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<AuthGUI,AuthzTrans> {
		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<AbsCell[]> rv = new ArrayList<AbsCell[]>();
			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<Void>() {
					@Override
					public Void code(Rcli<?> client)throws CadiException, ConnectException, APIException {
						TimeTaken tt = trans.start("AAF Perm Details",Env.REMOTE);
						try {
							Future<Perms> 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<Perm> 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);
		}
	}
}