dhis2-devs team mailing list archive
-
dhis2-devs team
-
Mailing list archive
-
Message #20876
[Branch ~dhis2-devs-core/dhis2/trunk] Rev 9730: Added SMS support for: Org unit selection, Support for yes and no values and data set completion
------------------------------------------------------------
revno: 9730
committer: Magnus Korvald <korvald@xxxxxxxxxxx>
branch nick: trunk
timestamp: Tue 2013-02-05 13:21:54 +0100
message:
Added SMS support for: Org unit selection, Support for yes and no values and data set completion
modified:
dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/parse/ParserManager.java
dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/parse/DefaultParserManager.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/resources/META-INF/dhis/beans.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/parse/ParserManager.java'
--- dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/parse/ParserManager.java 2012-11-15 08:44:31 +0000
+++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/parse/ParserManager.java 2013-02-05 12:21:54 +0000
@@ -1,4 +1,4 @@
-package org.hisp.dhis.sms.parse;
+ package org.hisp.dhis.sms.parse;
import org.hisp.dhis.sms.incoming.IncomingSms;
=== modified file 'dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/parse/DefaultParserManager.java'
--- dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/parse/DefaultParserManager.java 2012-11-15 08:44:31 +0000
+++ dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/parse/DefaultParserManager.java 2013-02-05 12:21:54 +0000
@@ -1,19 +1,25 @@
package org.hisp.dhis.sms.parse;
-import java.text.ParseException;
import java.text.SimpleDateFormat;
+import java.util.ArrayList;
import java.util.Calendar;
+import java.util.Collection;
import java.util.Date;
-import java.util.LinkedHashMap;
+import java.util.Iterator;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.hisp.dhis.dataelement.DataElementCategoryOptionCombo;
import org.hisp.dhis.dataelement.DataElementCategoryService;
-import org.hisp.dhis.dataset.DataSetService;
+import org.hisp.dhis.dataset.CompleteDataSetRegistration;
+import org.hisp.dhis.dataset.CompleteDataSetRegistrationService;
+import org.hisp.dhis.dataset.DataSet;
import org.hisp.dhis.datavalue.DataValue;
import org.hisp.dhis.datavalue.DataValueService;
import org.hisp.dhis.organisationunit.OrganisationUnit;
+import org.hisp.dhis.organisationunit.OrganisationUnitService;
import org.hisp.dhis.period.CalendarPeriodType;
import org.hisp.dhis.period.Period;
import org.hisp.dhis.sms.incoming.IncomingSms;
@@ -25,7 +31,6 @@
import org.hisp.dhis.user.CurrentUserService;
import org.hisp.dhis.user.User;
import org.hisp.dhis.user.UserService;
-import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.transaction.annotation.Transactional;
@@ -34,10 +39,24 @@
*
* @author Christian and Magnus
*/
-public class DefaultParserManager implements ParserManager {
+public class DefaultParserManager
+ implements ParserManager
+{
+
+ private static final Log log = LogFactory.getLog( DefaultParserManager.class );
private CurrentUserService currentUserService;
+ @Autowired
+ private OrganisationUnitService organisationUnitService;
+
+ private CompleteDataSetRegistrationService registrationService;
+
+ public void setRegistrationService( CompleteDataSetRegistrationService registrationService )
+ {
+ this.registrationService = registrationService;
+ }
+
private DataValueService dataValueService;
private UserService userService;
@@ -50,233 +69,483 @@
private DataElementCategoryService dataElementCategoryService;
@Transactional
- public void parse(IncomingSms sms) {
- try {
- parse(sms.getOriginator(), sms.getText());
- } catch (SMSParserException e) {
- sendSMS(e.getMessage(), sms.getOriginator());
+ public void parse( IncomingSms sms )
+ {
+ try
+ {
+ parse( sms.getOriginator(), sms.getText() );
+ }
+ catch ( SMSParserException e )
+ {
+ sendSMS( e.getMessage(), sms.getOriginator() );
return;
}
- // sendSMS("Your data report has been received", sms.getOriginator());
+ sendSMS( "Your data report has been received", sms.getOriginator() );
}
- private void sendSMS(String message, String sender) {
- if (outboundSmsService != null) {
- outboundSmsService.sendMessage(new OutboundSms(message, sender), null);
- } else {
- // Just for testing
- System.out.println("\n\n\n SMS: " + message + "\n\n\n");
+ private void sendSMS( String message, String sender )
+ {
+ if ( outboundSmsService != null )
+ {
+ outboundSmsService.sendMessage( new OutboundSms( message, sender ), null );
}
}
@Transactional
- private void parse(String sender, String message) throws SMSParserException {
+ private void parse( String sender, String message )
+ throws SMSParserException
+ {
- if (StringUtils.isEmpty(sender)) {
+ if ( StringUtils.isEmpty( sender ) )
+ {
return;
}
- User user = getUser(sender);
-
- if (user == null) {
- throw new SMSParserException("No user associated with this phone number. Please contact your supervisor.");
- }
-
- if (StringUtils.isEmpty(message)) {
- throw new SMSParserException("No command in SMS");
- }
-
- String commandString = message.substring(0, message.indexOf(" "));
- message = message.substring(commandString.length());
+ Collection<OrganisationUnit> orgUnits = getOrganisationUnitsByPhoneNumber( sender );
+
+ if ( orgUnits == null || orgUnits.size() == 0 )
+ {
+ throw new SMSParserException( "No user associated with this phone number. Please contact your supervisor." );
+ }
+
+ if ( StringUtils.isEmpty( message ) )
+ {
+ throw new SMSParserException( "No command in SMS" );
+ }
+
+ String commandString = message.substring( 0, message.indexOf( " " ) );
+ message = message.substring( commandString.length() );
boolean foundCommand = false;
- for (SMSCommand command : smsCommandService.getSMSCommands()) {
- if (command.getName().equalsIgnoreCase(commandString)) {
+ for ( SMSCommand command : smsCommandService.getSMSCommands() )
+ {
+ if ( command.getName().equalsIgnoreCase( commandString ) )
+ {
foundCommand = true;
- if (ParserType.KEY_VALUE_PARSER.equals(command.getParserType())) {
- runKeyValueParser(sender, message, user, command);
+ if ( ParserType.KEY_VALUE_PARSER.equals( command.getParserType() ) )
+ {
+ runKeyValueParser( sender, message, orgUnits, command );
break;
}
}
}
- if (!foundCommand) {
- throw new SMSParserException("Command '" + commandString + "' does not exist");
- }
- }
-
- private void runKeyValueParser(String sender, String message, User user, SMSCommand command) {
+ if ( !foundCommand )
+ {
+ throw new SMSParserException( "Command '" + commandString + "' does not exist" );
+ }
+ }
+
+ protected Collection<OrganisationUnit> getOrganisationUnitsByPhoneNumber( String sender )
+ {
+ Collection<OrganisationUnit> orgUnits = new ArrayList<OrganisationUnit>();
+ Collection<User> users = userService.getUsersByPhoneNumber( sender );
+
+ for ( User u : users )
+ {
+ if ( u.getOrganisationUnits() != null )
+ {
+ orgUnits.addAll( u.getOrganisationUnits() );
+ }
+ }
+
+ return orgUnits;
+ }
+
+ private void runKeyValueParser( String sender, String message, Collection<OrganisationUnit> orgUnits,
+ SMSCommand command )
+ {
IParser p = new SMSParserKeyValue();
- if (!StringUtils.isBlank(command.getSeparator())) {
- p.setSeparator(command.getSeparator());
+ if ( !StringUtils.isBlank( command.getSeparator() ) )
+ {
+ p.setSeparator( command.getSeparator() );
}
- Map<String, String> parsedMessage = p.parse(message);
+ Map<String, String> parsedMessage = p.parse( message );
- Date date = lookForDate(message);
+ Date date = lookForDate( message );
boolean valueStored = false;
- for (SMSCode code : command.getCodes()) {
- if (parsedMessage.containsKey(code.getCode().toUpperCase())) {
- storeDataValue(sender, user.getOrganisationUnit(), parsedMessage, code, date);
+ OrganisationUnit orgUnit = selectOrganisationUnit( orgUnits, parsedMessage );
+
+ for ( SMSCode code : command.getCodes() )
+ {
+ if ( parsedMessage.containsKey( code.getCode().toUpperCase() ) )
+ {
+ storeDataValue( sender, orgUnit, parsedMessage, code, date, command.getDataset(),
+ completeForm( command, parsedMessage ) );
valueStored = true;
}
}
- if (parsedMessage.isEmpty() || !valueStored) {
- if (StringUtils.isEmpty(command.getDefaultMessage())) {
- throw new SMSParserException("No values reported for command '" + command.getName() + "'");
- } else {
- throw new SMSParserException(command.getDefaultMessage());
- }
- }
-
- sendSuccessFeedback(sender, command, parsedMessage);
-
- }
-
- protected void sendSuccessFeedback(String sender, SMSCommand command, Map<String, String> parsedMessage) {
- String reportBack = "Your report included the following values: ";
- String notInReport = "Your report did not include values for: ";
+ if ( parsedMessage.isEmpty() || !valueStored )
+ {
+ if ( StringUtils.isEmpty( command.getDefaultMessage() ) )
+ {
+ throw new SMSParserException( "No values reported for command '" + command.getName() + "'" );
+ }
+ else
+ {
+ throw new SMSParserException( command.getDefaultMessage() );
+ }
+ }
+
+ markCompleteDataSet( sender, orgUnit, parsedMessage, command, date );
+
+ sendSuccessFeedback( sender, command, parsedMessage, date, orgUnit );
+
+ }
+
+ protected OrganisationUnit selectOrganisationUnit( Collection<OrganisationUnit> orgUnits,
+ Map<String, String> parsedMessage )
+ {
+ OrganisationUnit orgUnit = null;
+
+ for ( OrganisationUnit o : orgUnits )
+ {
+ if ( orgUnits.size() == 1 )
+ {
+ orgUnit = o;
+ }
+ if ( parsedMessage.containsKey( "ORG" ) && o.getCode().equals( parsedMessage.get( "ORG" ) ) )
+ {
+ orgUnit = o;
+ break;
+ }
+ }
+
+ if ( orgUnit == null && orgUnits.size() > 1 )
+ {
+ String messageListingOrgUnits = "Found more then one org unit for this number. Please specify one of the following:";
+ for ( Iterator<OrganisationUnit> i = orgUnits.iterator(); i.hasNext(); )
+ {
+ OrganisationUnit o = i.next();
+ messageListingOrgUnits += " " + o.getName() + ":" + o.getCode();
+ if ( i.hasNext() )
+ {
+ messageListingOrgUnits += ",";
+ }
+ }
+ throw new SMSParserException( messageListingOrgUnits );
+ }
+ return orgUnit;
+ }
+
+ protected void sendSuccessFeedback( String sender, SMSCommand command, Map<String, String> parsedMessage,
+ Date date, OrganisationUnit orgunit )
+ {
+ String reportBack = "Thank you! Values entered: ";
+ String notInReport = "Missing values for: ";
boolean missingElements = false;
- for (SMSCode code : command.getCodes()) {
- if (parsedMessage.containsKey(code.getCode().toUpperCase())) {
- reportBack += code.getCode() + "=" + parsedMessage.get(code.getCode().toUpperCase()) + " ";
- } else {
+
+ Period period = null;
+
+ for ( SMSCode code : command.getCodes() )
+ {
+
+ DataElementCategoryOptionCombo optionCombo = dataElementCategoryService
+ .getDataElementCategoryOptionCombo( code.getOptionId() );
+
+ period = code.getDataElement().getPeriodType().createPeriod();
+ CalendarPeriodType cpt = (CalendarPeriodType) period.getPeriodType();
+ period = cpt.getPreviousPeriod( period );
+
+ if ( date != null )
+ {
+ period = cpt.createPeriod( date );
+ }
+
+ DataValue dv = dataValueService.getDataValue( orgunit, code.getDataElement(), period, optionCombo );
+
+ if ( dv == null && !StringUtils.isEmpty( code.getCode() ) )
+ {
notInReport += code.getCode() + ",";
missingElements = true;
}
- }
-
- notInReport = notInReport.substring(0,notInReport.length() - 1);
-
- if (missingElements) {
- sendSMS(reportBack + notInReport, sender);
- } else {
- sendSMS(reportBack, sender);
+ else if ( dv != null )
+ {
+ String value = dv.getValue();
+ if ( "true".equals( value ) )
+ {
+ value = "Yes";
+ }
+ else if ( "false".equals( value ) )
+ {
+ value = "No";
+ }
+ reportBack += code.getCode() + "=" + value + " ";
+ }
+ }
+
+ notInReport = notInReport.substring( 0, notInReport.length() - 1 );
+
+ if ( missingElements )
+ {
+ sendSMS( reportBack + notInReport, sender );
+ }
+ else
+ {
+ sendSMS( reportBack, sender );
}
}
- private Date lookForDate(String message) {
- if (!message.contains(" ")) {
+ private Date lookForDate( String message )
+ {
+ if ( !message.contains( " " ) )
+ {
return null;
}
Date date = null;
- String dateString = message.trim().split(" ")[0];
- SimpleDateFormat format = new SimpleDateFormat("ddMM");
+ String dateString = message.trim().split( " " )[0];
+ SimpleDateFormat format = new SimpleDateFormat( "ddMM" );
- try {
+ try
+ {
Calendar cal = Calendar.getInstance();
- date = format.parse(dateString);
- cal.setTime(date);
- int year = Calendar.getInstance().get(Calendar.YEAR);
- int month = Calendar.getInstance().get(Calendar.MONTH);
- if (cal.get(Calendar.MONTH) < month) {
- cal.set(Calendar.YEAR, year);
- } else {
- cal.set(Calendar.YEAR, year - 1);
+ date = format.parse( dateString );
+ cal.setTime( date );
+ int year = Calendar.getInstance().get( Calendar.YEAR );
+ int month = Calendar.getInstance().get( Calendar.MONTH );
+ if ( cal.get( Calendar.MONTH ) < month )
+ {
+ cal.set( Calendar.YEAR, year );
+ }
+ else
+ {
+ cal.set( Calendar.YEAR, year - 1 );
}
date = cal.getTime();
- System.out.println("\nFound date in SMS:" + date.toString() + "\n");
- } catch (Exception e) {
+ System.out.println( "\nFound date in SMS:" + date.toString() + "\n" );
+ }
+ catch ( Exception e )
+ {
// no date found
- System.out.println("\nNo date found in SMS \n");
+ System.out.println( "\nNo date found in SMS \n" );
}
return date;
}
- private void storeDataValue(String sender, OrganisationUnit orgunit, Map<String, String> parsedMessage,
- SMSCode code, Date date) {
+ private void storeDataValue( String sender, OrganisationUnit orgunit, Map<String, String> parsedMessage,
+ SMSCode code, Date date, DataSet dataSet, boolean completeForm )
+ {
String upperCaseCode = code.getCode().toUpperCase();
- String storedBy = currentUserService.getCurrentUsername();
+ String storedBy = getUser( sender ).getUsername();
- if (StringUtils.isBlank(storedBy)) {
+ if ( StringUtils.isBlank( storedBy ) )
+ {
storedBy = "[unknown] from [" + sender + "]";
}
- DataElementCategoryOptionCombo optionCombo = null;
- optionCombo = dataElementCategoryService.getDataElementCategoryOptionCombo(code.getOptionId());
+ DataElementCategoryOptionCombo optionCombo = dataElementCategoryService.getDataElementCategoryOptionCombo( code
+ .getOptionId() );
Period period = code.getDataElement().getPeriodType().createPeriod();
CalendarPeriodType cpt = (CalendarPeriodType) period.getPeriodType();
- period = cpt.getPreviousPeriod(period);
-
- if (date != null) {
- period = cpt.createPeriod(date);
- }
-
- DataValue dv = dataValueService.getDataValue(orgunit, code.getDataElement(), period, optionCombo);
-
- if (dv == null) {
+ period = cpt.getPreviousPeriod( period );
+
+ if ( date != null )
+ {
+ period = cpt.createPeriod( date );
+ }
+
+ DataValue dv = dataValueService.getDataValue( orgunit, code.getDataElement(), period, optionCombo );
+
+ String value = parsedMessage.get( upperCaseCode );
+
+ if ( value != null )
+ {
+ if ( "Y".equals( value.toUpperCase() ) || "YES".equals( value.toUpperCase() ) )
+ {
+ value = "true";
+ }
+ else if ( "N".equals( value.toUpperCase() ) || "NO".equals( value.toUpperCase() ) )
+ {
+ value = "false";
+ }
+ }
+
+ if ( dv == null )
+ {
// New data element
DataValue dataVal = new DataValue();
- dataVal.setOptionCombo(optionCombo);
- dataVal.setSource(orgunit);
- dataVal.setDataElement(code.getDataElement());
- dataVal.setPeriod(period);
- dataVal.setComment("");
- dataVal.setTimestamp(new java.util.Date());
- dataVal.setStoredBy(storedBy);
- dataVal.setValue(parsedMessage.get(upperCaseCode));
- dataValueService.addDataValue(dataVal);
- } else {
+ dataVal.setOptionCombo( optionCombo );
+ dataVal.setSource( orgunit );
+ dataVal.setDataElement( code.getDataElement() );
+ dataVal.setPeriod( period );
+ dataVal.setComment( "" );
+ dataVal.setTimestamp( new java.util.Date() );
+ dataVal.setStoredBy( storedBy );
+ dataVal.setValue( value );
+ dataValueService.addDataValue( dataVal );
+ }
+ else
+ {
// Update data element
- dv.setValue(parsedMessage.get(upperCaseCode));
- dv.setOptionCombo(optionCombo);
- dataValueService.updateDataValue(dv);
- }
-
- }
-
- private User getUser(String sender) {
+ dv.setValue( value );
+ dv.setOptionCombo( optionCombo );
+ dataValueService.updateDataValue( dv );
+ }
+
+ }
+
+ /* Checks if all defined data codes have values in the database */
+ private void markCompleteDataSet( String sender, OrganisationUnit orgunit, Map<String, String> parsedMessage,
+ SMSCommand command, Date date )
+ {
+
+ Period period = null;
+
+ for ( SMSCode code : command.getCodes() )
+ {
+
+ DataElementCategoryOptionCombo optionCombo = dataElementCategoryService
+ .getDataElementCategoryOptionCombo( code.getOptionId() );
+
+ period = code.getDataElement().getPeriodType().createPeriod();
+ CalendarPeriodType cpt = (CalendarPeriodType) period.getPeriodType();
+ period = cpt.getPreviousPeriod( period );
+
+
+ if ( date != null )
+ {
+ period = cpt.createPeriod( date );
+ }
+
+ DataValue dv = dataValueService.getDataValue( orgunit, code.getDataElement(), period, optionCombo );
+
+ if ( dv == null && !StringUtils.isEmpty( code.getCode() ) )
+ {
+
+ return; // not marked as complete
+ }
+ }
+
+ String storedBy = getUser( sender ).getUsername();
+
+ if ( StringUtils.isBlank( storedBy ) )
+ {
+ storedBy = "[unknown] from [" + sender + "]";
+ }
+
+ // if new values are submitted re-register as complete
+ deregisterCompleteDataSet( command.getDataset(), period, orgunit );
+ registerCompleteDataSet( command.getDataset(), period, orgunit, storedBy );
+
+ }
+
+ private boolean completeForm( SMSCommand command, Map<String, String> parsedMessage )
+ {
+ for ( SMSCode code : command.getCodes() )
+ {
+ if ( !parsedMessage.containsKey( code.getCode().toUpperCase() ) )
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private void registerCompleteDataSet( DataSet dataSet, Period period, OrganisationUnit organisationUnit,
+ String storedBy )
+ {
+ CompleteDataSetRegistration registration = new CompleteDataSetRegistration();
+
+ if ( registrationService.getCompleteDataSetRegistration( dataSet, period, organisationUnit ) == null )
+ {
+ registration.setDataSet( dataSet );
+ registration.setPeriod( period );
+ registration.setSource( organisationUnit );
+ registration.setDate( new Date() );
+ registration.setStoredBy( storedBy );
+
+ registration.setPeriodName( registration.getPeriod().toString() );
+
+ registrationService.saveCompleteDataSetRegistration( registration, true );
+
+ log.info( "DataSet registered as complete: " + registration );
+ }
+ }
+
+ private void deregisterCompleteDataSet( DataSet dataSet, Period period, OrganisationUnit organisationUnit )
+ {
+ CompleteDataSetRegistration registration = registrationService.getCompleteDataSetRegistration( dataSet, period,
+ organisationUnit );
+
+ if ( registration != null )
+ {
+ registrationService.deleteCompleteDataSetRegistration( registration );
+
+ log.info( "DataSet un-registered as complete: " + registration );
+ }
+ }
+
+ private User getUser( String sender )
+ {
OrganisationUnit orgunit = null;
User user = null;
- for (User u : userService.getUsersByPhoneNumber(sender)) {
+ for ( User u : userService.getUsersByPhoneNumber( sender ) )
+ {
OrganisationUnit ou = u.getOrganisationUnit();
// Might be undefined if the user has more than one org.units
// "attached"
- if (orgunit == null) {
+ if ( orgunit == null )
+ {
orgunit = ou;
- } else if (orgunit.getId() == ou.getId()) {
+ }
+ else if ( orgunit.getId() == ou.getId() )
+ {
// same orgunit, no problem...
- } else {
+ }
+ else
+ {
throw new SMSParserException(
- "User is associated with more than one orgunit. Please contact your supervisor.");
+ "User is associated with more than one orgunit. Please contact your supervisor." );
}
user = u;
}
return user;
}
- public void setDataElementCategoryService(DataElementCategoryService dataElementCategoryService) {
+ public void setDataElementCategoryService( DataElementCategoryService dataElementCategoryService )
+ {
this.dataElementCategoryService = dataElementCategoryService;
}
@Required
- public void setSmsCommandService(SMSCommandService smsCommandService) {
+ public void setSmsCommandService( SMSCommandService smsCommandService )
+ {
this.smsCommandService = smsCommandService;
}
@Required
- public void setCurrentUserService(CurrentUserService currentUserService) {
+ public void setCurrentUserService( CurrentUserService currentUserService )
+ {
this.currentUserService = currentUserService;
}
@Required
- public void setDataValueService(DataValueService dataValueService) {
+ public void setDataValueService( DataValueService dataValueService )
+ {
this.dataValueService = dataValueService;
}
@Required
- public void setUserService(UserService userService) {
+ public void setUserService( UserService userService )
+ {
this.userService = userService;
}
- public void setOutboundSmsService(OutboundSmsService outboundSmsService) {
+ public void setOutboundSmsService( OutboundSmsService outboundSmsService )
+ {
this.outboundSmsService = outboundSmsService;
}
+ public void setOrganisationUnitService( OrganisationUnitService organisationUnitService )
+ {
+ this.organisationUnitService = organisationUnitService;
+ }
+
}
=== 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-20 13:34:03 +0000
+++ dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/parse/SMSConsumer.java 2013-02-05 12:21:54 +0000
@@ -11,11 +11,6 @@
private MessageQueue messageQueue;
- public void setMessageQueue( MessageQueue messageQueue )
- {
- this.messageQueue = messageQueue;
- }
-
SMSConsumerThread thread;
public void start()
@@ -28,11 +23,6 @@
}
}
- public void setParserManager( ParserManager parserManager )
- {
- this.parserManager = parserManager;
- }
-
public void stop()
{
thread.stopFetching();
@@ -70,10 +60,16 @@
private void fetchAndParseSMS()
{
IncomingSms message = messageQueue.get();
+ System.out.println("starter å spise meldinger..");
while ( message != null )
{
- parserManager.parse( message );
- messageQueue.remove( message );
+ try{
+ parserManager.parse( message );
+ }catch(Exception e){
+ System.out.println(e.getMessage());
+ }
+
+ messageQueue.remove( message );
message = messageQueue.get();
}
}
@@ -84,5 +80,16 @@
}
}
+
+ public void setMessageQueue( MessageQueue messageQueue )
+ {
+ this.messageQueue = messageQueue;
+ }
+
+ public void setParserManager( ParserManager parserManager )
+ {
+ this.parserManager = parserManager;
+ }
+
}
=== 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-12-14 13:46:47 +0000
+++ dhis-2/dhis-services/dhis-service-sms/src/main/resources/META-INF/dhis/beans.xml 2013-02-05 12:21:54 +0000
@@ -59,6 +59,7 @@
<property name="currentUserService" ref="org.hisp.dhis.user.CurrentUserService" />
<property name="dataValueService" ref="org.hisp.dhis.datavalue.DataValueService" />
<property name="outboundSmsService" ref="org.hisp.dhis.sms.outbound.OutboundSmsService" />
+ <property name="registrationService" ref="org.hisp.dhis.dataset.CompleteDataSetRegistrationService" />
</bean>
</beans>