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 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);
sb.append(line);
sb.append('\n');
}
- header = sb.toString();
+ 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 {
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
+ }
+ }
+
+
+ sb.setLength(0);
br = new BufferedReader(new FileReader(footer_html));
try {
while((line=br.readLine())!=null) {
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(env.access(),f);
try {
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);
}