Advertisement
Guest User

kurac

a guest
Apr 27th, 2017
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.44 KB | None | 0 0
  1. /*
  2.  * To change this license header, choose License Headers in Project Properties.
  3.  * To change this template file, choose Tools | Templates
  4.  * and open the template in the editor.
  5.  */
  6. package org.foi.nwtis.krigaslje.web.dretve;
  7.  
  8. import java.io.IOException;
  9. import java.time.LocalDateTime;
  10. import java.time.format.DateTimeFormatter;
  11. import java.util.logging.Level;
  12. import java.util.logging.Logger;
  13. import java.util.regex.*;
  14. import javax.mail.Flags;
  15. import javax.mail.Folder;
  16. import javax.mail.Message;
  17. import javax.mail.MessagingException;
  18. import javax.mail.NoSuchProviderException;
  19. import javax.mail.Session;
  20. import javax.mail.Store;
  21. import javax.mail.internet.ContentType;
  22. import javax.mail.internet.MimeMessage;
  23. import javax.mail.search.FlagTerm;
  24. import javax.servlet.ServletContext;
  25. import org.foi.nwtis.krigaslje.konfiguracije.Konfiguracija;
  26.  
  27. /**
  28.  *
  29.  * @author grupa_2
  30.  */
  31. public class ObradaPoruka extends Thread {
  32.  
  33.     private boolean prekid_obrade = false;
  34.     private ServletContext sc = null;
  35.  
  36.     @Override
  37.     public void interrupt() {
  38.         prekid_obrade = true;
  39.         super.interrupt(); //To change body of generated methods, choose Tools | Templates.
  40.     }
  41.  
  42.     @Override
  43.     public void run() {
  44.         Konfiguracija konf = (Konfiguracija) sc.getAttribute("Mail_Konfig");
  45.         String serverDatabase = konf.dajPostavku("server.database");
  46.         String adminUsername = konf.dajPostavku("admin.username");
  47.         String adminPassword = konf.dajPostavku("admin.password");
  48.         String adminDatabase = konf.dajPostavku("admin.database");
  49.         String userUsername = konf.dajPostavku("user.username");
  50.         String userPassword = konf.dajPostavku("user.password");
  51.         String userDatabase = konf.dajPostavku("user.database");
  52.         String driverDatabaseOdbc = konf.dajPostavku("driver.database.odbc");
  53.         String driverDatabaseMysql = konf.dajPostavku("driver.database.mysql");
  54.         String driverDatabaseDerby = konf.dajPostavku("driver.database.derby");
  55.         String driverDatabasePostgressql = konf.dajPostavku("driver.database.postgresql");
  56.         String server = konf.dajPostavku("mail.server");
  57.         String port = konf.dajPostavku("mail.port");
  58.         String korisnik = konf.dajPostavku("mail.usernameThread");
  59.         String lozinka = konf.dajPostavku("mail.passwordThread");
  60.         String timeSecThread = konf.dajPostavku("mail.timeSecThread");
  61.         String numMessages = konf.dajPostavku("mail.sumMessages");
  62.         String subject = konf.dajPostavku("mail.subject");
  63.         String folderNWTiS = konf.dajPostavku("mail.folderNWTiS");
  64.         String folderOther = konf.dajPostavku("folderOther");
  65.         String usernameStat = konf.dajPostavku("mail.usernameStatistics");
  66.         String subjectStat = konf.dajPostavku("mail.subjectStatistics");
  67.         String usernameView = konf.dajPostavku("mail.usernameView");
  68.         String passwordView = konf.dajPostavku("mail.passwordView");
  69.  
  70.         int trajanjeCiklusa = Integer.parseInt(konf.dajPostavku("mail.timeSecThread"));
  71.  
  72.         int trajanjeObrade = 0;
  73.         //TODO odredi trajanje obrade
  74.         int redniBrojCiklusa = 0;
  75.  
  76.         int brojUredaja = 0;
  77.         int brojMjerenja = 0;
  78.         int brojDogadaja = 0;
  79.        
  80.        
  81.  
  82.         while (!prekid_obrade) {
  83.             // Start the session
  84.             java.util.Properties properties = System.getProperties();
  85.             properties.put("mail.smtp.host", server);
  86.             Session session = Session.getInstance(properties, null);
  87.  
  88.             // Connect to the store
  89.             try {
  90.                 Store store = session.getStore("imap");
  91.                 store.connect(server, korisnik, lozinka);
  92.  
  93.                 // Open the INBOX folder
  94.                 Folder folder = store.getFolder("INBOX");
  95.                 folder.open(Folder.READ_ONLY);
  96.  
  97.                 //dohvacam neprocitane
  98.                 Flags seen = new Flags(Flags.Flag.SEEN);
  99.                 FlagTerm unseenFlagTerm = new FlagTerm(seen, false);
  100.                 Message[] messages = folder.search(unseenFlagTerm);
  101.  
  102.                 for (int i = 0; i < messages.length; ++i) {
  103.                     MimeMessage message = (MimeMessage) messages[i];
  104.                     try {
  105.                         Object object = (Object) message.getContent();
  106.                         ContentType ct = new ContentType(message.getContentType());
  107.                         //String s = "";
  108.                         //"text/plain".equalsIgnoreCase(ct.getBaseType())
  109.                         //(message.getSubject().equals(subject))
  110.                         if (message.getSubject().equals(subject)) { // TU JE SRANJE
  111.                             if ("text/plain".equalsIgnoreCase(ct.getBaseType())) {
  112.                                 //obrada poruke
  113.                                 String body = (String) object;
  114.  
  115.                                 String REGEX_TEMP = "TEMP IoT ([0-9]) T: (\\d{4}.\\d{2}.\\d{2}) (\\d{2}:\\d{2}:\\d{2}) C: (\\d{2}.\\d{1});";
  116.  
  117.                                 String REGEX_EVENT = "EVENT IoT (\\d{1}) T: (\\d{4}.\\d{2}.\\d{2}) (\\d{2}:\\d{2}:\\d{2}) F: (\\d{2});";
  118.  
  119.                                 String REGEX_ADD = "ADD IoT ([1-6]{1}) \"(.{1,30})\" GPS: (-?[0-9]{1,3}.?[0-9]{1,6}),(-?[0-9]{1,3}.?[0-9].{1,6});";
  120.  
  121.                                 Pattern patternAdd = Pattern.compile(REGEX_ADD);
  122.                                 Pattern patternEvent = Pattern.compile(REGEX_EVENT);
  123.                                 Pattern patternTemp = Pattern.compile(REGEX_TEMP);
  124.  
  125.                                 String cleanBody = body.replace("\n", "").replace("\r", "");
  126.  
  127.                                 Matcher mAdd = patternAdd.matcher(cleanBody);
  128.                                 Matcher mEvent = patternEvent.matcher(cleanBody);
  129.                                 Matcher mTemp = patternTemp.matcher(cleanBody);
  130.  
  131.                                 boolean statusAdd = mAdd.matches();
  132.                                 boolean statusEvent = mEvent.matches();//ovo radi
  133.                                 boolean statusTemp = mTemp.matches();
  134.                                
  135.                                 if (statusAdd) {
  136.                                     System.out.println("Dodan uređaj");
  137.                                     //TODO dodaj uređaj u bazu - ako postoji onda je greška
  138.                                     DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-mm-dd HH:mm:ss");
  139.                                     LocalDateTime now = LocalDateTime.now();
  140.                                     System.out.println(dtf.format(now));
  141.  
  142.                                     //db.insertUredaj(mAdd.group(2),mAdd.group(3),mAdd.group(4),mAdd.group(1), vrijeme_promjene, vrijeme_kreiranja);
  143.                                 } else if (statusEvent) {
  144.                                     System.out.println("Event");
  145.                                     //provjerava se u Uređaji za zadain IOT broj i ako postoji dodaje se zapisa u događaji
  146.                                     //inace greška ako ne postoji
  147.                                 } else if (statusTemp) {
  148.                                     System.out.println("Temp");
  149.                                     //provjerava se u UREĐAJI za zadani IOT broj i ako postoji dodaje se u tablicu temp
  150.                                     //inace je greska
  151.                                 }
  152.  
  153.                             }
  154.  
  155.                         } else {
  156.                             //ovdje ide ono ako ne valja predmet poruke
  157.                         }
  158.                     } catch (IOException ex) {
  159.                         Logger.getLogger(ObradaPoruka.class.getName()).log(Level.SEVERE, null, ex);
  160.                     }
  161.                 }
  162.  
  163.                 redniBrojCiklusa++;
  164.                 System.out.println("Obrada poruka u ciklusu: " + redniBrojCiklusa);
  165.  
  166.                 sleep(trajanjeCiklusa * 1000 - trajanjeObrade);
  167.  
  168.             } catch (NoSuchProviderException ex) {
  169.                 Logger.getLogger(ObradaPoruka.class.getName()).log(Level.SEVERE, null, ex);
  170.             } catch (MessagingException | InterruptedException ex) {
  171.                 Logger.getLogger(ObradaPoruka.class.getName()).log(Level.SEVERE, null, ex);
  172.             }
  173.         }
  174.     }
  175.  
  176.     @Override
  177.     public synchronized void start() {
  178.         super.start(); //To change body of generated methods, choose Tools | Templates.
  179.     }
  180.  
  181.     public void setSc(ServletContext sc) {
  182.         this.sc = sc;
  183.     }
  184. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement