0687364b18ab56a3a8bc42e0126529eeb4b8c899
[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                                 return exec(trans,org,sb);
171                         }
172                 }
173                 return exec(trans,org,sb);
174         }
175
176         protected Result<Void> exec(AuthzTrans trans, Organization org, StringBuilder sb) {
177                 try {
178                         /* int status = */
179                         org.sendEmail(trans,
180                                 toList, 
181                                 ccList, 
182                                 subject, 
183                                 sb.toString(), 
184                                 false);
185                 } catch (Exception e) {
186                         return Result.err(Result.ERR_ActionNotCompleted,e.getMessage());
187                 }
188                 return Result.ok();
189
190         }
191
192         public void log(PrintStream ps, String text) {
193                 ps.print(Chrono.dateTime());
194                 boolean first = true;
195                 for(String s : toList) {
196                         if(first) {
197                                 first = false;
198                                 ps.print(": ");
199                         } else {
200                                 ps.print(", ");
201                         }
202                         ps.print(s);
203                 }
204                 if(!ccList.isEmpty()) {
205                         first=true;
206                         for(String s : ccList) {
207                                 if(first) {
208                                         first = false;
209                                         ps.print(" [");
210                                 } else {
211                                         ps.print(", ");
212                                 }
213                                 ps.print(s);
214                         }
215                         ps.print(']');
216                 }
217
218                 ps.print(' ');
219                 ps.println(text);
220         }
221 }