Upgrade to latest oparent
[aaf/authz.git] / authz-batch / src / main / java / com / att / authz / reports / ApprNotify.java
1 /*******************************************************************************
2  * Copyright (c) 2016 AT&T Intellectual Property. All rights reserved.
3  *******************************************************************************/
4 package com.att.authz.reports;
5
6 import java.io.IOException;
7 import java.util.List;
8 import java.util.Map;
9 import java.util.TreeMap;
10
11 import com.att.authz.Batch;
12 import com.att.authz.actions.Email;
13 import com.att.authz.actions.Message;
14 import com.att.authz.env.AuthzTrans;
15 import com.att.authz.helpers.Approver;
16 import com.att.authz.helpers.Notification;
17 import com.att.authz.layer.Result;
18 import com.att.authz.org.Organization;
19 import com.att.authz.org.Organization.Identity;
20 import com.att.authz.org.OrganizationException;
21 import com.att.authz.org.OrganizationFactory;
22 import com.att.dao.CassAccess;
23 import com.att.dao.aaf.cass.ApprovalDAO;
24 import com.att.dao.aaf.cass.ApprovalDAO.Data;
25 import org.onap.aaf.inno.env.APIException;
26
27 public class ApprNotify extends Batch {
28         private final ApprovalDAO apprDAO;
29         private Result<List<Data>> rladd;
30         private Email email;
31
32         public ApprNotify(AuthzTrans trans) throws APIException, IOException {
33                 super(trans.env());
34                 apprDAO = new ApprovalDAO(trans, cluster, CassAccess.KEYSPACE);
35                 session = apprDAO.getSession(trans);
36                 rladd = apprDAO.readByStatus(trans,"pending");
37                 if(isDryRun()) {
38                         email = new Email();//EmailPrint();
39                 } else {
40                         email = new Email();
41                 }
42                 email.subject("AAF Approval Notification (ENV: %s)",batchEnv);
43                 email.preamble("AAF is the AT&T System for Fine-Grained Authorizations.  "
44                                 + "You are being asked to Approve in the %s environment before AAF Actions can be taken. \n\n"
45                                 + "  Please follow this link:\n\n\t%s/approve"
46                                 ,batchEnv,env.getProperty(GUI_URL));
47
48                 Notification.load(trans, session, Notification.v2_0_14);
49         }
50         
51         @Override
52         protected void run(AuthzTrans trans) {
53                 if(rladd.isOK()) {
54                         if(rladd.isEmpty()) {
55                                 trans.warn().log("No Pending Approvals to Process");
56                         } else {
57                                 Organization org=null;
58                                 //Map<String,Organization> users = new HashMap<String,Organization>();
59                                 Map<String,Approver> users = new TreeMap<String,Approver>();
60                                 
61                                 for(Data data : rladd.value) {
62                                         // We've already seen this approver. Simply add the new request to him.
63                                         try {
64                                                 Approver approver = users.get(data.approver);
65                                                 if(approver==null) {
66                                                         org = OrganizationFactory.obtain(trans.env(), data.approver);
67                                                         approver = new Approver(data.approver, org);
68                                                         users.put(data.approver, approver);
69                                                 }
70                                                 approver.addRequest(data.user);
71                                         } catch (OrganizationException e) {
72                                                 trans.error().log(e);
73                                         }
74                                 }
75         
76                                 // Notify
77                                 Message msg = new Message();
78                                 for(Approver approver : users.values()) {
79                                         try {
80                                                 Notification n = Notification.addApproval(trans, org.getIdentity(trans, approver.name));
81                                                 approver.build(msg);
82                                                 n.set(msg);
83                                                 if(n.update(trans, session, isDryRun())) {
84                                                         Identity user = n.org.getIdentity(trans, approver.name);
85                                                         email.clear();
86                                                         email.addTo(user.email());
87                                                         email.msg(msg);
88                                                         email.exec(trans, n.org);
89                                                 }
90                                         } catch (OrganizationException e) {
91                                                 trans.error().log(e);
92                                         }
93                                 }
94                         }
95                 } else {
96                         trans.error().log('[',rladd.status,']',rladd.details);
97                 }
98         }
99         
100         @Override
101         protected void _close(AuthzTrans trans) {
102                 apprDAO.close(trans);
103         }
104         
105         
106
107 }