------------------------------------------------------------ revno: 520 author: Saptarshi <[email protected]> committer: Administrator <administra...@sunbiz-lappy> branch nick: trunk timestamp: Sat 2009-08-29 20:39:28 +0530 message: SMSListener: Fixed bugs #421110 and #421111. Added about screen with license and branding info removed: local/in/SMSListener/src/org/hispindia/smslistener/phone.png added: local/in/SMSListener/src/org/hispindia/smslistener/AboutWindow.form local/in/SMSListener/src/org/hispindia/smslistener/AboutWindow.java local/in/SMSListener/src/org/hispindia/smslistener/images/ local/in/SMSListener/src/org/hispindia/smslistener/images/aboutLabel.png local/in/SMSListener/src/org/hispindia/smslistener/images/gplv3.png local/in/SMSListener/src/org/hispindia/smslistener/images/phone.png modified: local/in/SMSListener/nbproject/project.properties local/in/SMSListener/src/org/hispindia/smslistener/SMSListener.java local/in/SMSListener/src/org/hispindia/smslistener/SettingsWindow.form local/in/SMSListener/src/org/hispindia/smslistener/SettingsWindow.java local/in/SMSListener/src/org/hispindia/smslistener/XMLCreator.java
-- lp:dhis2 https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk Your team DHIS 2 developers is subscribed to branch lp:dhis2. To unsubscribe from this branch go to https://code.launchpad.net/~dhis2-devs-core/dhis2/trunk/+edit-subscription.
=== modified file 'local/in/SMSListener/nbproject/project.properties' --- local/in/SMSListener/nbproject/project.properties 2009-08-17 07:44:47 +0000 +++ local/in/SMSListener/nbproject/project.properties 2009-08-29 15:09:28 +0000 @@ -1,4 +1,5 @@ application.desc=The Application to receive SMS from SCDRT mobile application and convert to xml which can be imported by DHIS2 Mobile Importing module +application.homepage=http://dhismobile.info application.title=SMS Listener application.vendor=HISP India build.classes.dir=${build.dir}/classes === added file 'local/in/SMSListener/src/org/hispindia/smslistener/AboutWindow.form' --- local/in/SMSListener/src/org/hispindia/smslistener/AboutWindow.form 1970-01-01 00:00:00 +0000 +++ local/in/SMSListener/src/org/hispindia/smslistener/AboutWindow.form 2009-08-29 15:09:28 +0000 @@ -0,0 +1,89 @@ +<?xml version="1.0" encoding="UTF-8" ?> + +<Form version="1.3" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JFrameFormInfo"> + <Properties> + <Property name="defaultCloseOperation" type="int" value="2"/> + <Property name="title" type="java.lang.String" value="About SMS Listener"/> + <Property name="alwaysOnTop" type="boolean" value="true"/> + <Property name="bounds" type="java.awt.Rectangle" editor="org.netbeans.beaninfo.editors.RectangleEditor"> + <Rectangle value="[0, 0, 400, 300]"/> + </Property> + <Property name="name" type="java.lang.String" value="aboutFrame" noResource="true"/> + <Property name="resizable" type="boolean" value="false"/> + </Properties> + <AccessibilityProperties> + <Property name="AccessibleContext.accessibleDescription" type="java.lang.String" value="aboutFrame"/> + </AccessibilityProperties> + <SyntheticProperties> + <SyntheticProperty name="formSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,-77,0,0,1,-112"/> + <SyntheticProperty name="formSizePolicy" type="int" value="0"/> + <SyntheticProperty name="generateSize" type="boolean" value="true"/> + <SyntheticProperty name="generateCenter" type="boolean" value="true"/> + <SyntheticProperty name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,-113,0,0,1,-128"/> + </SyntheticProperties> + <AuxValues> + <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> + <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> + <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> + <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> + <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> + </AuxValues> + + <Layout> + <DimensionLayout dim="0"> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="logoLabel" alignment="0" max="32767" attributes="1"/> + <Group type="102" alignment="0" attributes="0"> + <EmptySpace max="-2" attributes="0"/> + <Group type="103" groupAlignment="0" attributes="0"> + <Component id="versionLabel" alignment="1" pref="370" max="32767" attributes="1"/> + <Component id="aboutLabel" alignment="0" min="-2" pref="370" max="-2" attributes="0"/> + </Group> + <EmptySpace pref="20" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + <DimensionLayout dim="1"> + <Group type="103" groupAlignment="0" attributes="0"> + <Group type="102" alignment="0" attributes="0"> + <Component id="logoLabel" min="-2" pref="50" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="aboutLabel" min="-2" max="-2" attributes="0"/> + <EmptySpace type="unrelated" max="-2" attributes="0"/> + <Component id="versionLabel" pref="159" max="32767" attributes="0"/> + </Group> + </Group> + </DimensionLayout> + </Layout> + <SubComponents> + <Component class="javax.swing.JLabel" name="logoLabel"> + <Properties> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/org/hispindia/smslistener/images/aboutLabel.png"/> + </Property> + </Properties> + </Component> + <Component class="javax.swing.JLabel" name="aboutLabel"> + <Properties> + <Property name="horizontalAlignment" type="int" value="11"/> + <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> + <Image iconType="3" name="/org/hispindia/smslistener/images/gplv3.png"/> + </Property> + <Property name="text" type="java.lang.String" value="<html><p>This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses. </style> </html>"/> + </Properties> + <AccessibilityProperties> + <Property name="AccessibleContext.accessibleName" type="java.lang.String" value="<html><p style="text-align:justify">This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <a href="http://www.gnu.org/licenses"> GPL3 License</a>. <br/><br/> Copyright 2009, HISP India. </style> </html>"/> + </AccessibilityProperties> + </Component> + <Component class="javax.swing.JLabel" name="versionLabel"> + <Properties> + <Property name="horizontalAlignment" type="int" value="2"/> + <Property name="text" type="java.lang.String" value="<html>
<p>Copyright 2009, HISP India. <br/></br>Distributed by: National Health Systems Resource Center,<br/> Ministry of Health & Family Welfare, <br/> Government of India</p><br/>
<p>Version: 0.9</p>
</html>"/> + </Properties> + </Component> + </SubComponents> +</Form> === added file 'local/in/SMSListener/src/org/hispindia/smslistener/AboutWindow.java' --- local/in/SMSListener/src/org/hispindia/smslistener/AboutWindow.java 1970-01-01 00:00:00 +0000 +++ local/in/SMSListener/src/org/hispindia/smslistener/AboutWindow.java 2009-08-29 15:09:28 +0000 @@ -0,0 +1,88 @@ +package org.hispindia.smslistener; + +import javax.swing.JFrame; + +public class AboutWindow extends javax.swing.JFrame { + + /** Creates new form AboutWindow */ + public AboutWindow() { + initComponents(); + } + + /** This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents + private void initComponents() { + + logoLabel = new javax.swing.JLabel(); + aboutLabel = new javax.swing.JLabel(); + versionLabel = new javax.swing.JLabel(); + + setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE); + setTitle("About SMS Listener"); + setAlwaysOnTop(true); + setBounds(new java.awt.Rectangle(0, 0, 400, 300)); + setName("aboutFrame"); // NOI18N + setResizable(false); + + logoLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/hispindia/smslistener/images/aboutLabel.png"))); // NOI18N + + aboutLabel.setHorizontalAlignment(javax.swing.SwingConstants.TRAILING); + aboutLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/hispindia/smslistener/images/gplv3.png"))); // NOI18N + aboutLabel.setText("<html><p>This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses. </style> </html>"); + + versionLabel.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); + versionLabel.setText("<html>\n<p>Copyright 2009, HISP India. <br/></br>Distributed by: National Health Systems Resource Center,<br/> Ministry of Health & Family Welfare, <br/> Government of India</p><br/>\n<p>Version: 0.9</p>\n</html>"); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); + getContentPane().setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(logoLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(versionLabel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 370, Short.MAX_VALUE) + .addComponent(aboutLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 370, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(20, Short.MAX_VALUE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(logoLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 50, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(aboutLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(versionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 159, Short.MAX_VALUE)) + ); + + aboutLabel.getAccessibleContext().setAccessibleName("<html><p style=\"text-align:justify\">This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <a href=\"http://www.gnu.org/licenses\"> GPL3 License</a>. <br/><br/> Copyright 2009, HISP India. </style> </html>"); + + getAccessibleContext().setAccessibleDescription("aboutFrame"); + + java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); + setBounds((screenSize.width-400)/2, (screenSize.height-435)/2, 400, 435); + }// </editor-fold>//GEN-END:initComponents + + /** + * @param args the command line arguments + */ + public static void main(String args[]) { + java.awt.EventQueue.invokeLater(new Runnable() { + public void run() { + new AboutWindow().setVisible(true); + } + }); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel aboutLabel; + private javax.swing.JLabel logoLabel; + private javax.swing.JLabel versionLabel; + // End of variables declaration//GEN-END:variables + +} === modified file 'local/in/SMSListener/src/org/hispindia/smslistener/SMSListener.java' --- local/in/SMSListener/src/org/hispindia/smslistener/SMSListener.java 2009-08-17 06:20:39 +0000 +++ local/in/SMSListener/src/org/hispindia/smslistener/SMSListener.java 2009-08-29 15:09:28 +0000 @@ -37,6 +37,7 @@ private InboundNotification inboundNotification; private int PORT = 8; //default port private File infFile = new File(System.getProperty("user.home") + "/.smslistener", "SMSListener.inf"); + SerialModemGateway gateway; public SMSListener() { } @@ -46,10 +47,10 @@ public void process(String gatewayId, MessageTypes msgType, InboundMessage msg) { if (msgType == MessageTypes.INBOUND) { System.out.println(">>> New Inbound message detected from Gateway: " + gatewayId); + processMessage(msg); } else if (msgType == MessageTypes.STATUSREPORT) { System.out.println(">>> New Inbound Status Report message detected from Gateway: " + gatewayId); } - processMessage(msg); try { service.deleteMessage(msg); } catch (Exception e) { @@ -101,11 +102,21 @@ }); //</editor-fold> + //<editor-fold defaultstate="collapsed" desc=" About Item "> + final MenuItem aboutItem = new MenuItem("About"); + aboutItem.addActionListener(new ActionListener() { + public void actionPerformed(ActionEvent evt) { + new AboutWindow().setVisible(true); + } + }); + //</editor-fold> + menu.add(serviceItem); menu.add(settingsItem); + menu.add(aboutItem); menu.add(exitItem); - Image img = new ImageIcon(getClass().getResource("phone.png")).getImage(); + Image img = new ImageIcon(getClass().getResource("images/phone.png")).getImage(); TrayIcon trayIcon = new TrayIcon(img, "DHIS SMS Listener"); trayIcon.setPopupMenu(menu); try { @@ -126,7 +137,7 @@ private void startSMSListener() { service = new Service(); inboundNotification = new InboundNotification(); - SerialModemGateway gateway = new SerialModemGateway("modem.com" + getPort(), "COM" + getPort(), 115200, "Generic USB", "generic-usb-modem"); + gateway = new SerialModemGateway("modem.com" + getPort(), "COM" + getPort(), 115200, "Generic USB", "generic-usb-modem"); gateway.setProtocol(Protocols.PDU); gateway.setInbound(true); gateway.setOutbound(false); @@ -149,6 +160,7 @@ private void stopSMSListener() { try { System.out.println("Stopping Service on Com:" + getPort()); + gateway.stopGateway(); service.stopService(); } catch (TimeoutException ex) { Logger.getLogger(SMSListener.class.getName()).log(Level.SEVERE, null, ex); @@ -175,6 +187,8 @@ return; } catch (ClassCastException ccex) { return; + } catch (ArithmeticException aex) { + return; } } @@ -242,4 +256,4 @@ } } } -} \ No newline at end of file +} === modified file 'local/in/SMSListener/src/org/hispindia/smslistener/SettingsWindow.form' --- local/in/SMSListener/src/org/hispindia/smslistener/SettingsWindow.form 2009-08-17 06:20:39 +0000 +++ local/in/SMSListener/src/org/hispindia/smslistener/SettingsWindow.form 2009-08-29 15:09:28 +0000 @@ -9,6 +9,7 @@ </Properties> <SyntheticProperties> <SyntheticProperty name="formSizePolicy" type="int" value="1"/> + <SyntheticProperty name="designerSize" type="java.awt.Dimension" value="-84,-19,0,5,115,114,0,18,106,97,118,97,46,97,119,116,46,68,105,109,101,110,115,105,111,110,65,-114,-39,-41,-84,95,68,20,2,0,2,73,0,6,104,101,105,103,104,116,73,0,5,119,105,100,116,104,120,112,0,0,1,36,0,0,0,-53"/> </SyntheticProperties> <AuxValues> <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="0"/> === modified file 'local/in/SMSListener/src/org/hispindia/smslistener/SettingsWindow.java' --- local/in/SMSListener/src/org/hispindia/smslistener/SettingsWindow.java 2009-08-17 06:20:39 +0000 +++ local/in/SMSListener/src/org/hispindia/smslistener/SettingsWindow.java 2009-08-29 15:09:28 +0000 @@ -73,7 +73,6 @@ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { - public void run() { new SettingsWindow().setVisible(true); } === modified file 'local/in/SMSListener/src/org/hispindia/smslistener/XMLCreator.java' --- local/in/SMSListener/src/org/hispindia/smslistener/XMLCreator.java 2009-08-17 06:20:39 +0000 +++ local/in/SMSListener/src/org/hispindia/smslistener/XMLCreator.java 2009-08-29 15:09:28 +0000 @@ -17,45 +17,48 @@ String actualData = formData[1]; String[] dataValues = actualData.split("\\|", 78); System.out.println("Total datavalues = " + dataValues.length); + for (int i = 0; i < dataValues.length; i++) { System.out.println("Values = " + dataValues[i]); } - - File file = new File(dhis2Home + "\\mi\\pending\\" + phoneNumber + sendTime.replace(":", "-") + ".xml"); - try { - System.out.println(file.getAbsolutePath()); - FileWriter writer = new FileWriter(file); - writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); - writer.write("<dxf>\n"); - writer.write("<source>" + phoneNumber + "</source>\n"); - if (period.length() == 1) { - writer.write("<period>2009-0" + period + "-01</period>\n"); - } else if (period.length() == 2) { - if (Integer.parseInt(period) > 12 && Integer.parseInt(period) < 22) { - writer.write("<period>2008-0" + (Integer.parseInt(period) - 12) + "-01</period>\n"); - } else if (Integer.parseInt(period) >= 22) { - writer.write("<period>2008-" + (Integer.parseInt(period) - 12) + "-01</period>\n"); + if (dataValues.length == 78) { + File file = new File(dhis2Home + "\\mi\\pending\\" + phoneNumber + sendTime.replace(":", "-") + ".xml"); + try { + System.out.println(file.getAbsolutePath()); + FileWriter writer = new FileWriter(file); + writer.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); + writer.write("<dxf>\n"); + writer.write("<source>" + phoneNumber + "</source>\n"); + if (period.length() == 1) { + writer.write("<period>2009-0" + period + "-01</period>\n"); + } else if (period.length() == 2) { + if (Integer.parseInt(period) > 12 && Integer.parseInt(period) < 22) { + writer.write("<period>2008-0" + (Integer.parseInt(period) - 12) + "-01</period>\n"); + } else if (Integer.parseInt(period) >= 22) { + writer.write("<period>2008-" + (Integer.parseInt(period) - 12) + "-01</period>\n"); + } else { + writer.write("<period>2009-" + period + "-01</period>\n"); + } } else { - writer.write("<period>2009-" + period + "-01</period>\n"); - } - } else { - writer.write("<period>" + period + "</period>\n"); - } - writer.write("<timeStamp>" + sendTime + "</timeStamp>\n"); - for (int i = 0; i < elementIds.length; i++) { - if (dataValues[i].isEmpty()) { - continue; - } - writer.write("<dataValue>\n"); - writer.write("<dataElement>" + elementIds[i] + "</dataElement>\n"); - writer.write("<value>" + dataValues[i] + "</value>\n"); - writer.write("</dataValue>\n"); - } - writer.write("<info>" + info + "</info>\n"); - writer.write("</dxf>\n"); - writer.close(); - } catch (IOException ex) { - Logger.getLogger(SMSListener.class.getName()).log(Level.SEVERE, null, ex); + writer.write("<period>" + period + "</period>\n"); + } + writer.write("<timeStamp>" + sendTime + "</timeStamp>\n"); + for (int i = 0; i < elementIds.length; i++) { + if (dataValues[i].isEmpty()) { + continue; + } + writer.write("<dataValue>\n"); + writer.write("<dataElement>" + elementIds[i] + "</dataElement>\n"); + writer.write("<value>" + dataValues[i] + "</value>\n"); + writer.write("</dataValue>\n"); + } + writer.write("<info>" + info + "</info>\n"); + writer.write("</dxf>\n"); + writer.close(); + } catch (IOException ex) { + Logger.getLogger(SMSListener.class.getName()).log(Level.SEVERE, null, ex); + return; + } } } } === added directory 'local/in/SMSListener/src/org/hispindia/smslistener/images' === added file 'local/in/SMSListener/src/org/hispindia/smslistener/images/aboutLabel.png' Binary files local/in/SMSListener/src/org/hispindia/smslistener/images/aboutLabel.png 1970-01-01 00:00:00 +0000 and local/in/SMSListener/src/org/hispindia/smslistener/images/aboutLabel.png 2009-08-29 15:09:28 +0000 differ === added file 'local/in/SMSListener/src/org/hispindia/smslistener/images/gplv3.png' Binary files local/in/SMSListener/src/org/hispindia/smslistener/images/gplv3.png 1970-01-01 00:00:00 +0000 and local/in/SMSListener/src/org/hispindia/smslistener/images/gplv3.png 2009-08-29 15:09:28 +0000 differ === added file 'local/in/SMSListener/src/org/hispindia/smslistener/images/phone.png' Binary files local/in/SMSListener/src/org/hispindia/smslistener/images/phone.png 1970-01-01 00:00:00 +0000 and local/in/SMSListener/src/org/hispindia/smslistener/images/phone.png 2009-08-29 15:09:28 +0000 differ === removed file 'local/in/SMSListener/src/org/hispindia/smslistener/phone.png' Binary files local/in/SMSListener/src/org/hispindia/smslistener/phone.png 2009-07-08 09:58:18 +0000 and local/in/SMSListener/src/org/hispindia/smslistener/phone.png 1970-01-01 00:00:00 +0000 differ
_______________________________________________ Mailing list: https://launchpad.net/~dhis2-devs Post to : [email protected] Unsubscribe : https://launchpad.net/~dhis2-devs More help : https://help.launchpad.net/ListHelp

