Subversion Repositories HomeAutomation

Rev

Go to most recent revision | Blame | Last modification | View Log | SVN | RSS feed

  1. /*
  2.  * File created by arune
  3.  * at 2005-jan-09 16:54:44
  4.  */
  5. package Macbeth.Modules.modMailcheck;
  6.  
  7. import Macbeth.System.*;
  8. import Macbeth.Utilities.*;
  9. import Macbeth.XML.XMLDataHandler;
  10. import Macbeth.Utilities.*;
  11.  
  12. import java.util.*;
  13. import javax.swing.Timer;
  14. import java.awt.event.*;
  15.  
  16. /**
  17.  *
  18.  *
  19.  * @author arune
  20.  */
  21. public class modMailcheck extends MbModule {
  22.  
  23.     //list of tv-channels and their variables
  24.     private HashMap accounts;           //a map of AccountObjects
  25.     private int timerInterval = 0;
  26.     private Timer requestDataTimer = null;
  27.     private String mailMode;
  28.     private String displayText;
  29.  
  30.     //todo: mer utförliga felmeddelanden
  31.  
  32.     /**
  33.      * Creates a new instance of modMailcheck.
  34.      */
  35.     public modMailcheck() {
  36.         //construct MbModule
  37.         super();
  38.         //initial values
  39.  
  40.         accounts = new HashMap(32);
  41.         //we depend on the RemoteControl-module
  42.         addDependency("ARNE");
  43.  
  44.         //register our packet data handler
  45.         setPacketDataHandler(new PacketDataHandler());
  46.     }
  47.  
  48.     public String name() {
  49.         return "Mailcheck";
  50.     }
  51.  
  52.     public String description() {
  53.         return "Module for mail, checks mail and prints a message on display";
  54.     }
  55.  
  56.     /**
  57.      * This method sets default values on all _required_ data
  58.      * fields in the data repository.
  59.      */
  60.     public void initDataFields() {
  61.         //set default values on all REQUIRED option fields before starting up subsystems
  62.         options.putField("mode", "simple");
  63.         options.putField("checkinterval", "5");
  64.         options.putField("displaytext", "New mail");
  65. //        options.putField("port", "2050");
  66.     }
  67.  
  68.     public void startup() throws MbStartupException {
  69.         //startup MbModule
  70.         super.startup();
  71.  
  72.         //get all accounts from the data repository
  73.         DataRepository.DataList list = dataRepository.getList("accounts");
  74.         if (list!=null) {
  75.             Iterator it = list.items();
  76.             while (it.hasNext()) {
  77.                 DataRepository.DataListItem item = (DataRepository.DataListItem)it.next();
  78.                 String server = item.getField("server");
  79.                 String accountname = item.getField("accountname");
  80.                 String password = item.getField("password");
  81.                 int port = Integer.parseInt(item.getField("port"));
  82.                 accounts.put(accountname + server, new AccountObject(server, port, accountname, password));
  83.             }
  84.         }
  85.  
  86.         mailMode = options.getField("mode");
  87.         displayText = options.getField("displaytext");
  88.  
  89.         timerInterval = Integer.parseInt(options.getField("checkinterval"));
  90.         if (timerInterval > 0) {
  91.             TimerListener lyssnare = new TimerListener();
  92.             requestDataTimer = new Timer(1000*60 * timerInterval, lyssnare);
  93.             requestDataTimer.start();
  94.         }
  95.  
  96.  
  97.     }
  98.  
  99.     /**
  100.      * Shuts down this module.
  101.      */
  102.     public void shutdown() {
  103.         //stop timer if it's running
  104.         if (requestDataTimer!=null) {
  105.             if (requestDataTimer.isRunning()) {
  106.                 requestDataTimer.stop();
  107.             }
  108.         }
  109.         //shut down MbModule
  110.         super.shutdown();
  111.     }
  112.  
  113.     private void simpleSendToDisplay() {
  114.         MbPacket p = new MbPacket();
  115.         p.setDestination(new MbLocation("self","SmallDisplays"));
  116.         //ARNE packet in XML-format
  117.         p.setContents("  <lcdpacket sender=\"" + name()
  118.                             + "\" type=\"textrow\" prio=\"1\" ttl=\"20\""
  119.                             + " id=\"" + 100559325 + "\""
  120.                             + " data=\"" + displayText + "\""
  121.                             + " />");
  122.         sendPacket(p);
  123.     }
  124.  
  125.     private void sendToDisplay(int nrOfNewMails) {
  126.         MbPacket p = new MbPacket();
  127.         p.setDestination(new MbLocation("self","SmallDisplays"));
  128.         //ARNE packet in XML-format
  129.         String displayTextReplaced = displayText.replaceAll("#", "" + nrOfNewMails);
  130.         p.setContents("  <lcdpacket sender=\"" + name()
  131.                             + "\" type=\"textrow\" prio=\"1\" ttl=\"20\""
  132.                             + " id=\"" + 100559325 + "\""
  133.                             + " data=\"" + displayTextReplaced + "\""
  134.                             + " />");
  135.         sendPacket(p);
  136.     }
  137.  
  138.  
  139.  
  140.     /**
  141.      * Takes care of XML-data found in incoming packets.
  142.      */
  143.     private class PacketDataHandler implements XMLDataHandler {
  144.         public void XMLstartElement(String element, HashMap attributes) {}
  145.         public void XMLendElement(String element) {}
  146.         public void XMLelementData(String data) {}
  147.         public void XMLdocumentStart() {}
  148.         public void XMLdocumentEnd() {}
  149.     }
  150.         //En lyssnare för timern
  151.     private class TimerListener implements ActionListener {
  152.  
  153.        public void actionPerformed(ActionEvent e) {
  154.            if (!accounts.isEmpty()) {
  155.                Iterator it = accounts.values().iterator();
  156.                boolean newMess = false;
  157.                int nrOfMess = 0;
  158.                while (it.hasNext()) {
  159.                     //_debug.println("timerevent, looping through sensorNodes");
  160.                     AccountObject o = (AccountObject)it.next();
  161.                     //String f = (String) it.next();
  162.                     //String f = (String) sensorNodes.get(key);
  163.                     if (o != null && !newMess) {
  164.                         try {
  165.  
  166.                             if (mailMode.equals("simple")) {
  167.                                 newMess = o.hasNewMessages();
  168.                             } else if (mailMode.equals("verbose")) {
  169.                                 nrOfMess = nrOfMess + o.nrOfMessages();
  170.                             }
  171.                            //_info.println("New mail: " + newMess);
  172.                        } catch (Exception e2) {
  173.                            _errors.println(e2);
  174.                        }
  175.                         //sleep(200);
  176.  
  177.                    }
  178.                }
  179.                if (newMess && mailMode.equals("simple")) {
  180.                    simpleSendToDisplay();
  181.                } else if (nrOfMess > 0 && mailMode.equals("verbose")) {
  182.                    sendToDisplay(nrOfMess);
  183.                }
  184.                //_info.println("nr of mails " + nrOfMess);
  185.            }
  186.         }
  187.     }
  188. }