package com.nimbits.server;
import java.io.IOException;
import java.util.Date;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.jdo.PersistenceManager;
import javax.mail.Address;
import javax.mail.MessagingException;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.nimbits.PMF;
import com.nimbits.client.Global;
import com.nimbits.client.objects.DataPoint;
import com.nimbits.server.nimbitsUser.CurrentUser;
import com.nimbits.server.nimbitsUser.NimbitsUser;
public class MailHandlerServlet extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest req,
HttpServletResponse resp)
throws IOException {
PersistenceManager pm = PMF.get().getPersistenceManager();
DataServiceImpl ds = new DataServiceImpl();
PointServiceImpl ps = new PointServiceImpl();
long timestamp;
String note;
String fromAddress = "";
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
MimeMessage message;
String inContent = null;
try {
message = new MimeMessage(session, req.getInputStream());
Address a[] =message.getFrom();
if (a.length > 0)
{
InternetAddress aa = (InternetAddress) a[0];
fromAddress =aa.getAddress();
}
String contentType = message.getContentType();
if (contentType.indexOf("multipart") > -1) {
DataHandler dataHandler;
dataHandler = message.getDataHandler();
DataSource dataSource = dataHandler.getDataSource();
MimeMultipart mimeMultipart = new MimeMultipart(dataSource);
Part part = mimeMultipart.getBodyPart(0);
contentType = part.getContentType();
inContent = (String)part.getContent();
} else {
try {
inContent = (String)message.getContent();
} catch (Exception e) {
Email.sendEmail(new SettingsServiceImpl().getInitParameter("admin"),e.getMessage() + " " + fromAddress + "not ok " );
return;
}
}
String Data[] = inContent.split(";");
NimbitsUser nuser = CurrentUser.getNimbitsUser(fromAddress, false,"MailHandlerServlet", pm);
if (nuser != null)
{
if (Data.length > 0)
{
for (String s : Data)
{
try {
String k[] = s.split(",");
if (k.length>1)
{
String pointname = k[0];
Double v = Double.valueOf(k[1]);
try {
if (k.length ==3)
{
timestamp = Long.getLong(k[2]);
}
else
{
timestamp = new Date().getTime();
}
} catch (Exception e) {
timestamp = new Date().getTime();
e.printStackTrace();
}
if (k.length ==4)
{
note = (k[3]);
}
else
{
note = "";
}
DataPoint point = ps.getPointByName(nuser.getID(), pointname, null);
ds.recordValue(nuser,point, new Date(timestamp),v, note,0,0, pm);
pm.close();
}
} catch ( Exception e) {
// TODO Auto-generated catch block
Email.sendEmail(new SettingsServiceImpl().getInitParameter("admin"),"Failed to process line in email: " + s + nuser.getEmail() + " " + e.getMessage() );
}
}
}
}
// Email.sendEmail(new SettingsServiceImpl().getInitParameter("admin"),fromAddress + " ok " + inContent);
} catch (MessagingException e) {
// TODO Auto-generated catch block
//..e.printStackTrace();
}
}
}
|