dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #20160
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 9085: Removed activemq from dhis-service-sms and added a simple queue implementation. Also moved Incomi...
------------------------------------------------------------
revno: 9085
committer: Magnus Korvald <korvald@xxxxxxxxxxx>
branch nick: trunk
timestamp: Tue 2012-11-20 14:34:03 +0100
message:
Removed activemq from dhis-service-sms and added a simple queue implementation. Also moved IncomingSmsService and IncomingSmsStore to dhis-service-sms.
removed:
dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/incoming/IncomingSmsService.java
dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/incoming/IncomingSmsStore.java
dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/incoming/SMPPInboundNotification.java
dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/parse/SMSPublisher.java
added:
dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/incoming/
dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/incoming/IncomingSmsService.java
dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/incoming/IncomingSmsStore.java
dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/incoming/SMPPInboundNotification.java
dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/queue/
dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/queue/DatabaseSupportedInternalMemoryMessageQueue.java
dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/queue/MessageQueue.java
modified:
dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/incoming/IncomingSms.java
dhis-2/dhis-services/dhis-service-sms/pom.xml
dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/inbound/DefaultInboundSmsService.java
dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/inbound/HibernateIncomingSmsStore.java
dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/parse/SMSConsumer.java
dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/smslib/SmsLibService.java
dhis-2/dhis-services/dhis-service-sms/src/main/resources/META-INF/dhis/beans.xml
dhis-2/dhis-services/dhis-service-sms/src/main/resources/org/hisp/dhis/sms/incoming/IncomingSms.hbm.xml
dhis-2/dhis-services/pom.xml
dhis-2/dhis-web/dhis-web-portal/pom.xml
dhis-2/dhis-web/dhis-web-sms/src/main/java/org/hisp/dhis/sms/input/SMSInput.java
dhis-2/dhis-web/dhis-web-sms/src/main/resources/META-INF/dhis/beans.xml
dhis-2/dhis-web/pom.xml
--
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 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/incoming/IncomingSms.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/incoming/IncomingSms.java 2012-03-12 20:25:54 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/incoming/IncomingSms.java 2012-11-20 13:34:03 +0000
@@ -60,6 +60,8 @@
private SmsMessageStatus status = SmsMessageStatus.INCOMING;
private String statusMessage;
+
+ private boolean parsed = false;
/**
* Incoming smses are one of two types, text or binary.
@@ -179,4 +181,14 @@
this.statusMessage = statusMessage;
}
+ public boolean isParsed()
+ {
+ return parsed;
+ }
+
+ public void setParsed( boolean parsed )
+ {
+ this.parsed = parsed;
+ }
+
}
\ No newline at end of file
=== removed file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/incoming/IncomingSmsService.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/incoming/IncomingSmsService.java 2012-07-30 16:38:32 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/incoming/IncomingSmsService.java 1970-01-01 00:00:00 +0000
@@ -1,64 +0,0 @@
-package org.hisp.dhis.sms.incoming;
-
-import java.util.List;
-
-import org.smslib.InboundMessage;
-
-/*
- * Copyright (c) 2011, University of Oslo
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * * Neither the name of the HISP project nor the names of its contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-
-/**
- * Service providing support for retrieving incoming SMSes.
- */
-public interface IncomingSmsService
-{
- String ID = IncomingSmsService.class.getName();
-
- /**
- * Get the next sms incoming for processing, if any.
- *
- * @return the oldest sms in the INCOMING state.
- */
- IncomingSms getNextUnprocessed();
-
- void update( IncomingSms sms );
-
- IncomingSms findBy ( Integer id );
-
- List<IncomingSms> listAllMessage();
-
- List<IncomingSms> listAllMessageFromModem();
-
- void deleteAllFromModem();
-
- void deleteById( Integer id );
-
- List<InboundMessage> getMsgList();
-
- void save ( IncomingSms sms );
-}
=== removed file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/incoming/IncomingSmsStore.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/incoming/IncomingSmsStore.java 2012-06-06 07:48:54 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/incoming/IncomingSmsStore.java 1970-01-01 00:00:00 +0000
@@ -1,60 +0,0 @@
-package org.hisp.dhis.sms.incoming;
-
-/*
- * Copyright (c) 2011, University of Oslo
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * * Neither the name of the HISP project nor the names of its contributors may
- * be used to endorse or promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-import java.util.Collection;
-
-/**
- * Store for incoming SMS messages.
- */
-public interface IncomingSmsStore
-{
- static final String ID = IncomingSmsStore.class.getName();
-
- int save( IncomingSms incomingSms );
-
- void update ( IncomingSms incomingSms );
-
- IncomingSms get( int id );
-
- Collection<IncomingSms> getSmsByStatus( SmsMessageStatus status );
-
- Collection<IncomingSms> getSmsByOriginator( String originator );
-
- long getSmsCount();
-
- Collection<IncomingSms> getAllSmses();
-
- void delete( IncomingSms incomingSms);
-
-// public Collection<IncomingSms> getSms( String originator, Date startDate, Date endDate);
-//
-// public Collection<IncomingSms> getSmsByDate( Date startDate, Date endDate );
-//
-
-}
=== removed file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/incoming/SMPPInboundNotification.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/incoming/SMPPInboundNotification.java 2012-08-30 12:47:05 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/incoming/SMPPInboundNotification.java 1970-01-01 00:00:00 +0000
@@ -1,47 +0,0 @@
-package org.hisp.dhis.sms.incoming;
-
-import org.smslib.AGateway;
-import org.smslib.IInboundMessageNotification;
-import org.smslib.InboundMessage;
-import org.smslib.Message.MessageTypes;
-
-public class SMPPInboundNotification
- implements IInboundMessageNotification
-{
-
- private IncomingSmsService incomingSmsService;
-
- @Override
- public void process( AGateway gateway, MessageTypes msgType, InboundMessage msg )
- {
-
- System.out.println( msg );
-
- IncomingSms incomingSms = new IncomingSms();
-
- incomingSms.setOriginator( msg.getOriginator() );
-
- incomingSms.setEncoding( SmsMessageEncoding.ENC7BIT );
-
- incomingSms.setSentDate( msg.getDate() );
-
- incomingSms.setReceivedDate( msg.getDate() );
-
- incomingSms.setText( msg.getText() );
-
- incomingSms.setGatewayId( msg.getGatewayId() );
-
- incomingSms.setStatus( SmsMessageStatus.PROCESSED );
-
- incomingSms.setStatusMessage( "imported" );
-
- incomingSmsService.save( incomingSms );
-
- }
-
- public void setIncomingSmsService( IncomingSmsService incomingSmsService )
- {
- this.incomingSmsService = incomingSmsService;
- }
-
-}
=== modified file 'dhis-2/dhis-services/dhis-service-sms/pom.xml'
--- dhis-2/dhis-services/dhis-service-sms/pom.xml 2012-11-15 08:44:31 +0000
+++ dhis-2/dhis-services/dhis-service-sms/pom.xml 2012-11-20 13:34:03 +0000
@@ -32,12 +32,6 @@
<!-- SMS -->
<dependency>
- <groupId>org.apache.activemq</groupId>
- <artifactId>activemq-core</artifactId>
- <version>5.7.0</version>
- </dependency>
-
- <dependency>
<groupId>org.smslib</groupId>
<artifactId>smslib</artifactId>
</dependency>
=== modified file 'dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/inbound/DefaultInboundSmsService.java'
--- dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/inbound/DefaultInboundSmsService.java 2012-08-30 12:47:05 +0000
+++ dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/inbound/DefaultInboundSmsService.java 2012-11-20 13:34:03 +0000
@@ -34,6 +34,7 @@
import org.hisp.dhis.sms.incoming.IncomingSmsStore;
import org.hisp.dhis.sms.incoming.SmsMessageEncoding;
import org.hisp.dhis.sms.incoming.SmsMessageStatus;
+import org.hisp.dhis.sms.queue.MessageQueue;
import org.smslib.InboundMessage;
import org.smslib.Service;
@@ -45,6 +46,13 @@
// -------------------------------------------------------------------------
private IncomingSmsStore incomingSmsStore;
+
+ private MessageQueue incomingSmsQueue;
+
+ public void setIncomingSmsQueue( MessageQueue incomingSmsQueue )
+ {
+ this.incomingSmsQueue = incomingSmsQueue;
+ }
public void setIncomingSmsStore( IncomingSmsStore incomingSmsStore )
{
@@ -119,8 +127,7 @@
public void save( IncomingSms incomingSms )
{
incomingSmsStore.save( incomingSms );
-
- //TODO: run parser ?
+ incomingSmsQueue.put( incomingSms );
}
@Override
=== modified file 'dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/inbound/HibernateIncomingSmsStore.java'
--- dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/inbound/HibernateIncomingSmsStore.java 2012-11-15 08:44:31 +0000
+++ dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/inbound/HibernateIncomingSmsStore.java 2012-11-20 13:34:03 +0000
@@ -29,8 +29,6 @@
import java.util.Collection;
-import javax.jms.JMSException;
-
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
@@ -40,7 +38,6 @@
import org.hisp.dhis.sms.incoming.IncomingSms;
import org.hisp.dhis.sms.incoming.IncomingSmsStore;
import org.hisp.dhis.sms.incoming.SmsMessageStatus;
-import org.hisp.dhis.sms.parse.SMSPublisher;
import org.springframework.transaction.annotation.Transactional;
@Transactional
@@ -53,7 +50,6 @@
private SessionFactory sessionFactory;
- private SMSPublisher smsPublisher;
public void setSessionFactory( SessionFactory sessionFactory )
{
@@ -67,14 +63,6 @@
@Override
public int save( IncomingSms sms )
{
- try
- {
- smsPublisher.putObject( sms );
- }
- catch ( JMSException e )
- {
- e.printStackTrace();
- }
return (Integer) sessionFactory.getCurrentSession().save( sms );
}
@@ -134,33 +122,13 @@
sessionFactory.getCurrentSession().update( incomingSms );
}
- // @Override
- // public Collection<IncomingSms> getSms( String originator, Date startDate,
- // Date endDate )
- // {
- // Criteria crit = sessionFactory.getCurrentSession().createCriteria(
- // IncomingSms.class );
- // if ( originator != null && !originator.equals( "" ) )
- // {
- // crit.add( Restrictions.eq( "originator", originator ) );
- // }
- // if ( startDate != null && endDate != null )
- // {
- // crit.add( Restrictions.between( "receiveDate", startDate, endDate ) );
- // }
- // return crit.list();
- // }
- //
- // @Override
- // public Collection<IncomingSms> getSmsByDate( Date startDate, Date endDate
- // )
- // {
- // return getSms( null, startDate, endDate );
- // }
-
- public void setSmsPublisher( SMSPublisher smsPublisher )
+ @SuppressWarnings( "unchecked" )
+ @Override
+ public Collection<IncomingSms> getAllUnparsedSmses()
{
- this.smsPublisher = smsPublisher;
+ Criteria criteria = sessionFactory.getCurrentSession().createCriteria( IncomingSms.class );
+ criteria.add( Restrictions.eq( "parsed", false ) );
+ return criteria.list();
}
}
=== added directory 'dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/incoming'
=== added file 'dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/incoming/IncomingSmsService.java'
--- dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/incoming/IncomingSmsService.java 1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/incoming/IncomingSmsService.java 2012-11-20 13:34:03 +0000
@@ -0,0 +1,67 @@
+package org.hisp.dhis.sms.incoming;
+
+import java.util.List;
+
+import org.hisp.dhis.sms.queue.MessageQueue;
+import org.smslib.InboundMessage;
+
+/*
+ * Copyright (c) 2011, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * * Neither the name of the HISP project nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+/**
+ * Service providing support for retrieving incoming SMSes.
+ */
+public interface IncomingSmsService
+{
+ String ID = IncomingSmsService.class.getName();
+
+ /**
+ * Get the next sms incoming for processing, if any.
+ *
+ * @return the oldest sms in the INCOMING state.
+ */
+ IncomingSms getNextUnprocessed();
+
+ void update( IncomingSms sms );
+
+ IncomingSms findBy ( Integer id );
+
+ List<IncomingSms> listAllMessage();
+
+ List<IncomingSms> listAllMessageFromModem();
+
+ void deleteAllFromModem();
+
+ void deleteById( Integer id );
+
+ List<InboundMessage> getMsgList();
+
+ void save ( IncomingSms sms );
+
+ public void setIncomingSmsQueue( MessageQueue incomingSmsQueue );
+}
=== added file 'dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/incoming/IncomingSmsStore.java'
--- dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/incoming/IncomingSmsStore.java 1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/incoming/IncomingSmsStore.java 2012-11-20 13:34:03 +0000
@@ -0,0 +1,57 @@
+package org.hisp.dhis.sms.incoming;
+
+/*
+ * Copyright (c) 2011, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * * Neither the name of the HISP project nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import java.util.Collection;
+
+/**
+ * Store for incoming SMS messages.
+ */
+public interface IncomingSmsStore
+{
+ static final String ID = IncomingSmsStore.class.getName();
+
+ int save( IncomingSms incomingSms );
+
+ void update ( IncomingSms incomingSms );
+
+ IncomingSms get( int id );
+
+ Collection<IncomingSms> getSmsByStatus( SmsMessageStatus status );
+
+ Collection<IncomingSms> getSmsByOriginator( String originator );
+
+ long getSmsCount();
+
+ Collection<IncomingSms> getAllSmses();
+
+ void delete( IncomingSms incomingSms);
+
+ Collection<IncomingSms> getAllUnparsedSmses();
+
+}
=== added file 'dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/incoming/SMPPInboundNotification.java'
--- dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/incoming/SMPPInboundNotification.java 1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/incoming/SMPPInboundNotification.java 2012-11-20 13:34:03 +0000
@@ -0,0 +1,47 @@
+package org.hisp.dhis.sms.incoming;
+
+import org.smslib.AGateway;
+import org.smslib.IInboundMessageNotification;
+import org.smslib.InboundMessage;
+import org.smslib.Message.MessageTypes;
+
+public class SMPPInboundNotification
+ implements IInboundMessageNotification
+{
+
+ private IncomingSmsService incomingSmsService;
+
+ @Override
+ public void process( AGateway gateway, MessageTypes msgType, InboundMessage msg )
+ {
+
+ System.out.println( msg );
+
+ IncomingSms incomingSms = new IncomingSms();
+
+ incomingSms.setOriginator( msg.getOriginator() );
+
+ incomingSms.setEncoding( SmsMessageEncoding.ENC7BIT );
+
+ incomingSms.setSentDate( msg.getDate() );
+
+ incomingSms.setReceivedDate( msg.getDate() );
+
+ incomingSms.setText( msg.getText() );
+
+ incomingSms.setGatewayId( msg.getGatewayId() );
+
+ incomingSms.setStatus( SmsMessageStatus.PROCESSED );
+
+ incomingSms.setStatusMessage( "imported" );
+
+ incomingSmsService.save( incomingSms );
+
+ }
+
+ public void setIncomingSmsService( IncomingSmsService incomingSmsService )
+ {
+ this.incomingSmsService = incomingSmsService;
+ }
+
+}
=== modified file 'dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/parse/SMSConsumer.java'
--- dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/parse/SMSConsumer.java 2012-11-15 08:44:31 +0000
+++ dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/parse/SMSConsumer.java 2012-11-20 13:34:03 +0000
@@ -1,122 +1,85 @@
package org.hisp.dhis.sms.parse;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.JMSException;
-import javax.jms.Message;
-import javax.jms.MessageConsumer;
-import javax.jms.MessageProducer;
-import javax.jms.ObjectMessage;
-import javax.jms.Queue;
-import javax.jms.Session;
-import javax.jms.TextMessage;
-
-import org.apache.activemq.broker.BrokerService;
import org.hisp.dhis.sms.incoming.IncomingSms;
-import org.springframework.beans.factory.InitializingBean;
+import org.hisp.dhis.sms.queue.MessageQueue;
// IEatSMS
-public class SMSConsumer implements InitializingBean {
+public class SMSConsumer
+{
private ParserManager parserManager;
- private ConnectionFactory factory;
-
- private String brokerURL;
-
- private String queue;
+ private MessageQueue messageQueue;
+
+ public void setMessageQueue( MessageQueue messageQueue )
+ {
+ this.messageQueue = messageQueue;
+ }
SMSConsumerThread thread;
- public void start() {
- if (thread == null) {
+ public void start()
+ {
+ messageQueue.initialize();
+ if ( thread == null )
+ {
thread = new SMSConsumerThread();
thread.start();
}
}
- public void setBrokerURL(String brokerURL) {
- this.brokerURL = brokerURL;
- }
-
- public void setQueue(String queue) {
- this.queue = queue;
- }
-
- public void setFactory(ConnectionFactory factory) {
- this.factory = factory;
- }
-
- public void setParserManager(ParserManager parserManager) {
+ public void setParserManager( ParserManager parserManager )
+ {
this.parserManager = parserManager;
}
- public void stop() {
+ public void stop()
+ {
thread.stopFetching();
thread = null;
}
- @Override
- public void afterPropertiesSet() throws Exception {
- BrokerService broker = new BrokerService();
- broker.setPersistent(true);
- broker.addConnector(brokerURL);
- broker.start();
- }
-
- private class SMSConsumerThread extends Thread {
+ private class SMSConsumerThread
+ extends Thread
+ {
private boolean stop;
- public void run() {
- while (!stop) {
- try{
+ public void run()
+ {
+ while ( !stop )
+ {
+ try
+ {
fetchAndParseSMS();
- }catch(Exception e){
- // ignore
- }
- try {
- // Maybe we should speed up on successful receive?
- Thread.sleep(3000);
- } catch (InterruptedException e) {
+ }
+ catch ( Exception e )
+ {
+ // ignore
+ }
+ try
+ {
+ Thread.sleep( 3000 );
+ }
+ catch ( InterruptedException e )
+ {
e.printStackTrace();
}
}
}
- /* Returns true when a message is found */
- private void fetchAndParseSMS() {
-
- try {
- Connection connection = factory.createConnection();
- connection.start();
- Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
- Queue destination = session.createQueue(queue);
- MessageConsumer c = session.createConsumer(destination);
-
- // Wait the maximum time of one second
- Message m = c.receive(1000);
- while (m != null) {
- if (m instanceof ObjectMessage) {
- ObjectMessage objMessage = (ObjectMessage) m;
- if (objMessage.getObject() instanceof IncomingSms) {
- IncomingSms sms = (IncomingSms) objMessage.getObject();
- parserManager.parse(sms);
- }
- }
- m = c.receive(1000);
- }
-
- connection.close();
- session.close();
-
-
- } catch (JMSException e) {
- e.printStackTrace();
-
+ private void fetchAndParseSMS()
+ {
+ IncomingSms message = messageQueue.get();
+ while ( message != null )
+ {
+ parserManager.parse( message );
+ messageQueue.remove( message );
+ message = messageQueue.get();
}
}
- public void stopFetching() {
+ public void stopFetching()
+ {
this.stop = true;
}
=== removed file 'dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/parse/SMSPublisher.java'
--- dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/parse/SMSPublisher.java 2012-11-15 08:44:31 +0000
+++ dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/parse/SMSPublisher.java 1970-01-01 00:00:00 +0000
@@ -1,44 +0,0 @@
-package org.hisp.dhis.sms.parse;
-
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.JMSException;
-import javax.jms.MessageProducer;
-import javax.jms.ObjectMessage;
-import javax.jms.Queue;
-import javax.jms.Session;
-import javax.jms.TextMessage;
-
-import org.hisp.dhis.sms.incoming.IncomingSms;
-
-public class SMSPublisher {
- private ConnectionFactory factory;
-
- private String queue;
-
- public void putObject(IncomingSms sms) throws JMSException {
- Connection connection = factory.createConnection();
- connection.start();
- Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
-
- ObjectMessage objMessage = session.createObjectMessage();
- objMessage.setObject(sms);
-
- Queue destination = session.createQueue(queue);
- MessageProducer producer = session.createProducer(destination);
-
- producer.send(objMessage);
-
- session.close();
- connection.close();
- }
-
- public void setFactory(ConnectionFactory factory) {
- this.factory = factory;
- }
-
- public void setQueue(String queue) {
- this.queue = queue;
- }
-
-}
=== added directory 'dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/queue'
=== added file 'dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/queue/DatabaseSupportedInternalMemoryMessageQueue.java'
--- dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/queue/DatabaseSupportedInternalMemoryMessageQueue.java 1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/queue/DatabaseSupportedInternalMemoryMessageQueue.java 2012-11-20 13:34:03 +0000
@@ -0,0 +1,53 @@
+package org.hisp.dhis.sms.queue;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.hisp.dhis.sms.incoming.IncomingSms;
+import org.hisp.dhis.sms.incoming.IncomingSmsStore;
+
+public class DatabaseSupportedInternalMemoryMessageQueue
+ implements MessageQueue
+{
+
+ List<IncomingSms> queue = new ArrayList<IncomingSms>();
+
+ private IncomingSmsStore smsStore;
+
+ @Override
+ public void put( IncomingSms message )
+ {
+ queue.add( message );
+ }
+
+ @Override
+ public IncomingSms get()
+ {
+ return queue.get( 0 );
+ }
+
+ @Override
+ public void remove( IncomingSms message )
+ {
+ message.setParsed( true );
+ smsStore.update( message );
+ queue.remove( message );
+ }
+
+ @Override
+ public void initialize()
+ {
+ Collection<IncomingSms> messages = smsStore.getAllUnparsedSmses();
+ if ( messages != null )
+ {
+ queue.addAll( messages );
+ }
+ }
+
+ public void setSmsStore( IncomingSmsStore smsStore )
+ {
+ this.smsStore = smsStore;
+ }
+
+}
=== added file 'dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/queue/MessageQueue.java'
--- dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/queue/MessageQueue.java 1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/queue/MessageQueue.java 2012-11-20 13:34:03 +0000
@@ -0,0 +1,16 @@
+package org.hisp.dhis.sms.queue;
+
+import org.hisp.dhis.sms.incoming.IncomingSms;
+
+public interface MessageQueue
+{
+
+ public void put( IncomingSms message );
+
+ public IncomingSms get();
+
+ public void remove( IncomingSms message );
+
+ public void initialize();
+
+}
=== modified file 'dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/smslib/SmsLibService.java'
--- dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/smslib/SmsLibService.java 2012-11-15 08:44:31 +0000
+++ dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/smslib/SmsLibService.java 2012-11-20 13:34:03 +0000
@@ -47,7 +47,6 @@
import org.hisp.dhis.sms.outbound.OutboundSmsStore;
import org.hisp.dhis.sms.outbound.OutboundSmsTransportService;
import org.hisp.dhis.sms.parse.SMSConsumer;
-import org.hisp.dhis.sms.parse.SMSPublisher;
import org.smslib.AGateway;
import org.smslib.GatewayException;
import org.smslib.IInboundMessageNotification;
@@ -344,7 +343,7 @@
}
try
- {
+ {
smsConsumer.start();
}
catch ( Exception e1 )
@@ -510,8 +509,8 @@
public void deleteById( Integer outboundSmsId )
{
OutboundSms sms = outboundSmsStore.get( outboundSmsId );
-
- outboundSmsStore.delete( sms );
+
+ outboundSmsStore.delete( sms );
}
}
=== modified file 'dhis-2/dhis-services/dhis-service-sms/src/main/resources/META-INF/dhis/beans.xml'
--- dhis-2/dhis-services/dhis-service-sms/src/main/resources/META-INF/dhis/beans.xml 2012-11-15 08:44:31 +0000
+++ dhis-2/dhis-services/dhis-service-sms/src/main/resources/META-INF/dhis/beans.xml 2012-11-20 13:34:03 +0000
@@ -5,46 +5,15 @@
<bean id="org.hisp.dhis.sms.outbound.SmsConfigurationManager" class="org.hisp.dhis.sms.SmsConfigurationManagerImpl" />
- <!-- Outbound SMS service -->
-
-<!--
- <bean id="fetchAndParseSMSJobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
- <property name="targetObject" ref="smsConsumer" />
- <property name="targetMethod" value="fetchAndParseSMS" />
- </bean>
-
- <bean id="fetchAndParseSMSTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerBean">
- <property name="jobDetail" ref="fetchAndParseSMSJobDetail" />
- <property name="repeatInterval" value="3000" />
- </bean>
-
- <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
- <property name="triggers">
- <list>
- <ref bean="fetchAndParseSMSTrigger" />
- </list>
- </property>
- </bean>
-
- -->
- <bean id="smsPublisher" class="org.hisp.dhis.sms.parse.SMSPublisher">
- <property name="factory" ref="jmsFactory" />
- <property name="queue" value="TEST.QUEUE" />
+
+ <bean id="incomingSmsQueue" class="org.hisp.dhis.sms.queue.DatabaseSupportedInternalMemoryMessageQueue">
+ <property name="smsStore" ref="org.hisp.dhis.sms.incoming.IncomingSmsStore" />
</bean>
<bean id="smsConsumer" class="org.hisp.dhis.sms.parse.SMSConsumer">
- <property name="factory" ref="jmsFactory" />
- <property name="queue" value="TEST.QUEUE" />
- <property name="brokerURL" value="vm://localhost:61616" />
- <property name="parserManager" ref="org.hisp.dhis.sms.parse.DefaultParserManager" />
- </bean>
-
- <bean id="jmsFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
- <property name="brokerURL">
- <value>vm://localhost:61616</value>
- </property>
- </bean>
-
+ <property name="parserManager" ref="org.hisp.dhis.sms.parse.DefaultParserManager" />
+ <property name="messageQueue" ref="incomingSmsQueue" />
+ </bean>
<bean id="outboundSmsStore" class="org.hisp.dhis.sms.outbound.HibernateOutboundSmsStore">
<property name="sessionFactory" ref="sessionFactory" />
@@ -78,11 +47,11 @@
<bean id="org.hisp.dhis.sms.incoming.IncomingSmsStore" class="org.hisp.dhis.sms.inbound.HibernateIncomingSmsStore">
<property name="sessionFactory" ref="sessionFactory" />
- <property name="smsPublisher" ref="smsPublisher" />
</bean>
<bean id="org.hisp.dhis.sms.incoming.IncomingSmsService" class="org.hisp.dhis.sms.inbound.DefaultInboundSmsService">
<property name="incomingSmsStore" ref="org.hisp.dhis.sms.incoming.IncomingSmsStore" />
+ <property name="incomingSmsQueue" ref="incomingSmsQueue" />
</bean>
<bean id="org.hisp.dhis.sms.parse.DefaultParserManager" class="org.hisp.dhis.sms.parse.DefaultParserManager"
=== modified file 'dhis-2/dhis-services/dhis-service-sms/src/main/resources/org/hisp/dhis/sms/incoming/IncomingSms.hbm.xml'
--- dhis-2/dhis-services/dhis-service-sms/src/main/resources/org/hisp/dhis/sms/incoming/IncomingSms.hbm.xml 2012-06-04 06:37:01 +0000
+++ dhis-2/dhis-services/dhis-service-sms/src/main/resources/org/hisp/dhis/sms/incoming/IncomingSms.hbm.xml 2012-11-20 13:34:03 +0000
@@ -32,6 +32,8 @@
</type>
</property>
+ <property name="parsed" />
+
<property name="statusMessage" />
</class>
=== modified file 'dhis-2/dhis-services/pom.xml'
--- dhis-2/dhis-services/pom.xml 2012-11-19 08:19:02 +0000
+++ dhis-2/dhis-services/pom.xml 2012-11-20 13:34:03 +0000
@@ -26,6 +26,7 @@
<module>dhis-service-patient</module>
<module>dhis-service-mobile</module>
<module>dhis-service-integration</module>
+ <module>dhis-service-sms</module>
</modules>
<dependencies>
=== modified file 'dhis-2/dhis-web/dhis-web-portal/pom.xml'
--- dhis-2/dhis-web/dhis-web-portal/pom.xml 2012-11-16 14:01:45 +0000
+++ dhis-2/dhis-web/dhis-web-portal/pom.xml 2012-11-20 13:34:03 +0000
@@ -41,14 +41,12 @@
</dependency>
<!-- Web maintenance modules -->
- <!--
<dependency>
<groupId>org.hisp.dhis</groupId>
<artifactId>dhis-web-sms</artifactId>
<version>${project.version}</version>
<type>war</type>
</dependency>
- -->
<dependency>
<groupId>org.hisp.dhis</groupId>
<artifactId>dhis-web-maintenance-datadictionary</artifactId>
=== modified file 'dhis-2/dhis-web/dhis-web-sms/src/main/java/org/hisp/dhis/sms/input/SMSInput.java'
--- dhis-2/dhis-web/dhis-web-sms/src/main/java/org/hisp/dhis/sms/input/SMSInput.java 2012-11-15 08:44:31 +0000
+++ dhis-2/dhis-web/dhis-web-sms/src/main/java/org/hisp/dhis/sms/input/SMSInput.java 2012-11-20 13:34:03 +0000
@@ -1,14 +1,9 @@
package org.hisp.dhis.sms.input;
-import java.text.ParseException;
-
-import org.exolab.castor.types.Date;
import org.hisp.dhis.sms.incoming.IncomingSms;
-import org.hisp.dhis.sms.incoming.IncomingSmsStore;
+import org.hisp.dhis.sms.incoming.IncomingSmsService;
import org.hisp.dhis.sms.incoming.SmsMessageEncoding;
import org.hisp.dhis.sms.incoming.SmsMessageStatus;
-import org.hisp.dhis.sms.outbound.OutboundSmsService;
-import org.hisp.dhis.sms.parse.ParserManager;
import com.opensymphony.xwork2.Action;
@@ -20,102 +15,39 @@
implements Action
{
- private String msisdn, sender, message, dca, reffering_batch, network_id, concat_reference, concat_num_segments,
- concat_seq_num, received_time;
-
- private String source_id; // Probably like message id and should be an int
-
- private int msg_id; // unique for each sms
-
- private IncomingSms sms;
-
- private IncomingSmsStore smsStore;
-
- public SMSInput()
- {
- }
+ private String sender, message;
+ private IncomingSmsService incomingSmsService;
@Override
public String execute()
throws Exception
{
+ if(sender == null || message == null ){
+ return ERROR;
+ }
+
System.out.println( "Sender: " + sender + ", Message: " + message );
IncomingSms sms = new IncomingSms();
sms.setText( message );
sms.setOriginator( sender );
- java.util.Date rec = null;
- try
- {
- Date received = Date.parseDate( received_time );
- rec = received.toDate();
- }
- catch ( ParseException pe )
- {
- System.out.println( "ERROR: No received_time input" );
- return ERROR;
- }
+ java.util.Date rec = new java.util.Date();
sms.setReceivedDate( rec );
- sms.setSentDate( rec ); // This should probably be removed from incoming
- // SMS entirely. Though other gateways may use
- // it?
+ sms.setSentDate( rec );
+
sms.setEncoding( SmsMessageEncoding.ENC7BIT );
sms.setStatus( SmsMessageStatus.INCOMING );
- sms.setId( msg_id );
sms.setGatewayId( "HARDCODEDTESTGATEWAY" );
- smsStore.save( sms );
+ incomingSmsService.save( sms );
+ sender = null;
+ message = null;
+
return SUCCESS;
}
- public void setSmsStore( IncomingSmsStore smsStore )
- {
- System.out.println( "Setting SMSStore: " + smsStore );
- this.smsStore = smsStore;
- }
-
- public String getConcat_num_segments()
- {
- return concat_num_segments;
- }
-
- public void setConcat_num_segments( String concat_num_segments )
- {
- this.concat_num_segments = concat_num_segments;
- }
-
- public String getConcat_reference()
- {
- return concat_reference;
- }
-
- public void setConcat_reference( String concat_reference )
- {
- this.concat_reference = concat_reference;
- }
-
- public String getConcat_seq_num()
- {
- return concat_seq_num;
- }
-
- public void setConcat_seq_num( String concat_seq_num )
- {
- this.concat_seq_num = concat_seq_num;
- }
-
- public String getDca()
- {
- return dca;
- }
-
- public void setDca( String dca )
- {
- this.dca = dca;
- }
-
public String getMessage()
{
return message;
@@ -126,56 +58,6 @@
this.message = message;
}
- public int getMsg_id()
- {
- return msg_id;
- }
-
- public void setMsg_id( int msg_id )
- {
- this.msg_id = msg_id;
- }
-
- public String getMsisdn()
- {
- return msisdn;
- }
-
- public void setMsisdn( String msisdn )
- {
- this.msisdn = msisdn;
- }
-
- public String getNetwork_id()
- {
- return network_id;
- }
-
- public void setNetwork_id( String network_id )
- {
- this.network_id = network_id;
- }
-
- public String getReceived_time()
- {
- return received_time;
- }
-
- public void setReceived_time( String received_time )
- {
- this.received_time = received_time;
- }
-
- public String getReffering_batch()
- {
- return reffering_batch;
- }
-
- public void setReffering_batch( String reffering_batch )
- {
- this.reffering_batch = reffering_batch;
- }
-
public String getSender()
{
return sender;
@@ -186,25 +68,8 @@
this.sender = sender;
}
- public IncomingSms getSms()
- {
- return sms;
- }
-
- public void setSms( IncomingSms sms )
- {
- this.sms = sms;
- }
-
- public String getSource_id()
- {
- return source_id;
- }
-
- public void setSource_id( String source_id )
- {
- this.source_id = source_id;
- }
-
-
+ public void setIncomingSmsService( IncomingSmsService incomingSmsService )
+ {
+ this.incomingSmsService = incomingSmsService;
+ }
}
=== modified file 'dhis-2/dhis-web/dhis-web-sms/src/main/resources/META-INF/dhis/beans.xml'
--- dhis-2/dhis-web/dhis-web-sms/src/main/resources/META-INF/dhis/beans.xml 2012-11-15 08:44:31 +0000
+++ dhis-2/dhis-web/dhis-web-sms/src/main/resources/META-INF/dhis/beans.xml 2012-11-20 13:34:03 +0000
@@ -5,7 +5,7 @@
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd">
<bean id="org.hisp.dhis.sms.input.SMSInput" class="org.hisp.dhis.sms.input.SMSInput">
- <property name="smsStore" ref="org.hisp.dhis.sms.incoming.IncomingSmsStore"/>
+ <property name="incomingSmsService" ref="org.hisp.dhis.sms.incoming.IncomingSmsService" />
</bean>
</beans>
=== modified file 'dhis-2/dhis-web/pom.xml'
--- dhis-2/dhis-web/pom.xml 2012-11-16 14:01:45 +0000
+++ dhis-2/dhis-web/pom.xml 2012-11-20 13:34:03 +0000
@@ -27,7 +27,8 @@
<module>dhis-web-api-mobile</module>
<module>dhis-web-light</module>
<module>dhis-web-mobile</module>
- <module>dhis-web-portal</module>
+ <module>dhis-web-portal</module>
+ <module>dhis-web-sms</module>
</modules>
<build>
<plugins>