*
*/package org.onap.aaf.auth.batch.reports;
+import java.io.BufferedReader;
import java.io.File;
-import java.io.FileInputStream;
+import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import org.onap.aaf.auth.batch.Batch;
import org.onap.aaf.cadi.client.Holder;
import org.onap.aaf.cadi.util.CSV;
import org.onap.aaf.misc.env.APIException;
+import org.onap.aaf.misc.env.util.Chrono;
public class Notify extends Batch {
+ private static final String HTML_CSS = "HTML_CSS";
private final Mailer mailer;
- private final String mailFrom;
private final String header;
private final String footer;
private List<File> notifyFile;
+ public final String guiURL;
+ private int maxEmails;
+ private int indent;
public Notify(AuthzTrans trans) throws APIException, IOException, OrganizationException {
super(trans.env());
String mailerCls = env.getProperty("MAILER");
- mailFrom = env.getProperty("MAIL_FROM");
+ String mailFrom = env.getProperty("MAIL_FROM");
String header_html = env.getProperty("HEADER_HTML");
String footer_html = env.getProperty("FOOTER_HTML");
- if(mailerCls==null || mailFrom==null || header_html==null || footer_html==null) {
- throw new APIException("Notify requires MAILER, MAILER_FROM, HEADER_HTML and FOOTER_HTML properties");
+ String maxEmails = env.getProperty("MAX_EMAIL");
+ guiURL = env.getProperty("GUI_URL");
+ this.maxEmails = maxEmails==null?1:Integer.parseInt(maxEmails);
+ if(mailerCls==null || mailFrom==null || guiURL==null || header_html==null || footer_html==null) {
+ throw new APIException("Notify requires MAILER, MAILER_FROM, GUI_URL, HEADER_HTML and FOOTER_HTML properties");
}
try {
Class<?> mailc = Class.forName(mailerCls);
throw new APIException("Unable to construct " + mailerCls,e);
}
- FileInputStream fis = new FileInputStream(header_html);
+ String line;
+ StringBuilder sb = new StringBuilder();
+ BufferedReader br = new BufferedReader(new FileReader(header_html));
try {
- byte[] content = new byte[(int)fis.getChannel().size()];
- fis.read(content);
- header = new String(content);
+ while((line=br.readLine())!=null) {
+ sb.append(line);
+ sb.append('\n');
+ }
+ String html_css = env.getProperty(HTML_CSS);
+ int hc = sb.indexOf(HTML_CSS);
+ if(hc!=0 && html_css!=null) {
+ header = sb.replace(hc,hc+HTML_CSS.length(), html_css).toString();
+ } else {
+ header = sb.toString();
+ }
} finally {
- fis.close();
+ br.close();
+ }
+
+
+
+ // Establish index from header
+ int lastTag = header.lastIndexOf('<');
+ if(lastTag>0) {
+ int prevCR = header.lastIndexOf('\n',lastTag);
+ if(prevCR>0) {
+ indent = lastTag-prevCR;
+ } else {
+ indent = 6; //arbitrary
+ }
}
+
- fis = new FileInputStream(footer_html);
+ sb.setLength(0);
+ br = new BufferedReader(new FileReader(footer_html));
try {
- byte[] content = new byte[(int)fis.getChannel().size()];
- fis.read(content);
- footer = new String(content);
+ while((line=br.readLine())!=null) {
+ sb.append(line);
+ sb.append('\n');
+ }
+ footer = sb.toString();
} finally {
- fis.close();
+ br.close();
}
// Class Load possible data
NotifyBody.load(env.access());
// Create Intermediate Output
- File logDir = new File(logDir());
+ File logDir = logDir();
notifyFile = new ArrayList<>();
if(args().length>0) {
for(int i=0;i<args().length;++i) {
notifyFile.add(new File(logDir, args()[i]));
}
+ } else {
+ String fmt = "%s"+Chrono.dateOnlyStamp()+".csv";
+ File file;
+ for(NotifyBody nb : NotifyBody.getAll()) {
+ file = new File(logDir,String.format(fmt, nb.name()));
+ if(file.exists()) {
+ trans.info().printf("Processing %s",file.getCanonicalPath());
+ notifyFile.add(file);
+ } else {
+ trans.info().printf("No Files found for %s",nb.name());
+ }
+ }
}
}
final Set<String> errorSet = new HashSet<>();
try {
+ EMAILTYPE:
for(File f : notifyFile) {
- CSV csv = new CSV(f);
+ CSV csv = new CSV(env.access(),f);
try {
csv.visit(new CSV.Visitor() {
@Override
toList.clear();
ccList.clear();
try {
- String bodyS = nb.body(noAvg, notify, id);
Identity identity = trans.org().getIdentity(noAvg, id);
if(!identity.isPerson()) {
identity = identity.responsibleTo();
}
}
}
+
+ StringBuilder content = new StringBuilder();
+ content.append(String.format(header,version,Identity.mixedCase(identity.firstName())));
+
+ nb.body(noAvg, content, indent, notify, id);
+ content.append(footer);
- mailer.sendEmail(noAvg, dryRun, mailFrom, toList, ccList, subject,
- String.format(header,"2.1.9",Identity.mixedCase(identity.firstName()))+
- bodyS +
- footer, urgent);
+ if(!mailer.sendEmail(noAvg, dryRun, toList, ccList, subject,content.toString(), urgent)) {
+ trans.error().log("Mailer failed to send Mail");
+ }
+ if(maxEmails>0 && mailer.count()>=maxEmails) {
+ break EMAILTYPE;
+ }
} catch (OrganizationException e) {
trans.error().log(e);
}