AT&T 2.0.19 Code drop, stage 3
[aaf/authz.git] / auth / auth-batch / src / main / java / org / onap / aaf / auth / actions / Email.java
1 /**
2  * ============LICENSE_START====================================================
3  * org.onap.aaf
4  * ===========================================================================
5  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
6  * ===========================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END====================================================
19  *
20  */
21
22 package org.onap.aaf.auth.actions;
23
24 import java.io.PrintStream;
25 import java.util.ArrayList;
26 import java.util.Collection;
27 import java.util.List;
28
29 import org.onap.aaf.auth.env.AuthzTrans;
30 import org.onap.aaf.auth.layer.Result;
31 import org.onap.aaf.auth.org.Organization;
32 import org.onap.aaf.auth.org.OrganizationException;
33 import org.onap.aaf.auth.org.Organization.Identity;
34 import org.onap.aaf.misc.env.util.Chrono;
35
36 public class Email implements Action<Organization,Void, String>{
37         protected final List<String> toList;
38         protected final List<String> ccList;
39         private final String[] defaultCC;
40         protected String subject;
41         private String preamble;
42         private Message msg;
43         private String sig;
44         protected String lineIndent="  ";
45         private long lastSent=0L;
46
47         
48         public Email(String ... defaultCC) {
49                 toList = new ArrayList<String>();
50                 this.defaultCC = defaultCC;
51                 ccList = new ArrayList<String>();
52                 clear();
53         }
54         
55         public Email clear() {
56                 toList.clear();
57                 ccList.clear();
58                 for(String s: defaultCC) {
59                         ccList.add(s);
60                 }
61                 return this;
62         }
63         
64
65         public void indent(String indent) {
66                 lineIndent = indent;
67         }
68         
69         public void preamble(String format, Object ... args) {
70                 preamble = String.format(format, args);
71         }
72
73         public Email addTo(Identity id) {
74                 if(id!=null) {
75                         if(!toList.contains(id.email())) {
76                                 toList.add(id.email());
77                         }
78                 }
79                 return this;
80         }
81
82         public Email addTo(Collection<String> users) {
83                 for(String u : users) {
84                         addTo(u);
85                 }
86                 return this;
87         }
88
89         public Email addTo(String email) {
90                 if(!toList.contains(email)) {
91                         toList.add(email);
92                 }
93                 return this;
94         }
95
96         public Email addCC(Identity id) {
97                 if(id!=null) {
98                         if(!ccList.contains(id.email())) {
99                                 ccList.add(id.email());
100                         }
101                 }
102                 return this;
103         }
104
105         public Email addCC(String email) {
106                 if(!ccList.contains(email)) {
107                         ccList.add(email);
108                 }
109                 return this;
110         }
111
112         
113         public Email add(Identity id, boolean toSuper) throws OrganizationException {
114                 Identity responsible = id.responsibleTo();
115                 if(toSuper) {
116                         addTo(responsible.email());
117                         addCC(id.email());
118                 } else {
119                         addCC(responsible.email());
120                         addTo(id.email());
121                 }
122                 return this;
123         }
124         
125         public Email subject(String format, Object ... args) {
126                 if(format.contains("%s")) {
127                         subject = String.format(format, args);
128                 } else {
129                         subject = format;
130                 }
131                 return this;
132         }
133         
134         
135         public Email signature(String format, Object ... args) {
136                 sig = String.format(format, args);
137                 return this;
138         }
139         
140         public void msg(Message msg) {
141                 this.msg = msg;
142         }
143         
144         @Override
145         public Result<Void> exec(AuthzTrans trans, Organization org, String text) {
146                 StringBuilder sb = new StringBuilder();
147                 if(preamble!=null) {
148                         sb.append(lineIndent);
149                         sb.append(preamble);
150                         sb.append("\n\n");
151                 }
152                 
153                 if(msg!=null) {
154                         msg.msg(sb,lineIndent);
155                         sb.append("\n");
156                 }
157
158                 if(sig!=null) {
159                         sb.append(sig);
160                         sb.append("\n");
161                 }
162                 
163                 long ct = System.currentTimeMillis();
164                 long wait = ct-lastSent;
165                 lastSent = ct;
166                 if(wait < 100) { // 10 per second
167                         try {
168                                 Thread.sleep(wait);
169                         } catch (InterruptedException e) {
170                         }
171                 }
172                 return exec(trans,org,sb);
173         }
174
175         protected Result<Void> exec(AuthzTrans trans, Organization org, StringBuilder sb) {
176                 try {
177                         /* int status = */
178                         org.sendEmail(trans,
179                                 toList, 
180                                 ccList, 
181                                 subject, 
182                                 sb.toString(), 
183                                 false);
184                 } catch (Exception e) {
185                         return Result.err(Result.ERR_ActionNotCompleted,e.getMessage());
186                 }
187                 return Result.ok();
188
189         }
190
191         public void log(PrintStream ps, String text) {
192                 ps.print(Chrono.dateTime());
193                 boolean first = true;
194                 for(String s : toList) {
195                         if(first) {
196                                 first = false;
197                                 ps.print(": ");
198                         } else {
199                                 ps.print(", ");
200                         }
201                         ps.print(s);
202                 }
203                 if(!ccList.isEmpty()) {
204                         first=true;
205                         for(String s : ccList) {
206                                 if(first) {
207                                         first = false;
208                                         ps.print(" [");
209                                 } else {
210                                         ps.print(", ");
211                                 }
212                                 ps.print(s);
213                         }
214                         ps.print(']');
215                 }
216
217                 ps.print(' ');
218                 ps.println(text);
219         }
220 }