summaryrefslogtreecommitdiffstats
path: root/authz-batch/src/main/java/com/att/authz/reports/ApprNotify.java
blob: 79bdb5b82de5e36fb9ca288e88b0272ef74c4a25 (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
/*******************************************************************************
 * Copyright (c) 2016 AT&T Intellectual Property. All rights reserved.
 *******************************************************************************/
package com.att.authz.reports;

import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

import com.att.authz.Batch;
import com.att.authz.actions.Email;
import com.att.authz.actions.Message;
import com.att.authz.env.AuthzTrans;
import com.att.authz.helpers.Approver;
import com.att.authz.helpers.Notification;
import com.att.authz.layer.Result;
import com.att.authz.org.Organization;
import com.att.authz.org.Organization.Identity;
import com.att.authz.org.OrganizationException;
import com.att.authz.org.OrganizationFactory;
import com.att.dao.CassAccess;
import com.att.dao.aaf.cass.ApprovalDAO;
import com.att.dao.aaf.cass.ApprovalDAO.Data;
import org.onap.aaf.inno.env.APIException;

public class ApprNotify extends Batch {
	private final ApprovalDAO apprDAO;
	private Result<List<Data>> rladd;
	private Email email;

	public ApprNotify(AuthzTrans trans) throws APIException, IOException {
		super(trans.env());
		apprDAO = new ApprovalDAO(trans, cluster, CassAccess.KEYSPACE);
		session = apprDAO.getSession(trans);
		rladd = apprDAO.readByStatus(trans,"pending");
		if(isDryRun()) {
			email = new Email();//EmailPrint();
		} else {
			email = new Email();
		}
		email.subject("AAF Approval Notification (ENV: %s)",batchEnv);
		email.preamble("AAF is the AT&T System for Fine-Grained Authorizations.  "
				+ "You are being asked to Approve in the %s environment before AAF Actions can be taken. \n\n"
				+ "  Please follow this link:\n\n\t%s/approve"
				,batchEnv,env.getProperty(GUI_URL));

		Notification.load(trans, session, Notification.v2_0_14);
	}
	
	@Override
	protected void run(AuthzTrans trans) {
		if(rladd.isOK()) {
			if(rladd.isEmpty()) {
				trans.warn().log("No Pending Approvals to Process");
			} else {
				Organization org=null;
				//Map<String,Organization> users = new HashMap<String,Organization>();
				Map<String,Approver> users = new TreeMap<String,Approver>();
				
				for(Data data : rladd.value) {
					// We've already seen this approver. Simply add the new request to him.
					try {
						Approver approver = users.get(data.approver);
						if(approver==null) {
							org = OrganizationFactory.obtain(trans.env(), data.approver);
							approver = new Approver(data.approver, org);
							users.put(data.approver, approver);
						}
						approver.addRequest(data.user);
					} catch (OrganizationException e) {
						trans.error().log(e);
					}
				}
	
				// Notify
				Message msg = new Message();
				for(Approver approver : users.values()) {
					try {
						Notification n = Notification.addApproval(trans, org.getIdentity(trans, approver.name));
						approver.build(msg);
						n.set(msg);
						if(n.update(trans, session, isDryRun())) {
							Identity user = n.org.getIdentity(trans, approver.name);
							email.clear();
							email.addTo(user.email());
							email.msg(msg);
							email.exec(trans, n.org);
						}
					} catch (OrganizationException e) {
						trans.error().log(e);
					}
				}
			}
		} else {
			trans.error().log('[',rladd.status,']',rladd.details);
		}
	}
	
	@Override
	protected void _close(AuthzTrans trans) {
		apprDAO.close(trans);
	}
	
	

}