=== added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/adapter/Parameter.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/adapter/Parameter.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/adapter/Parameter.java 2011-12-20 12:46:37 +0000 @@ -0,0 +1,46 @@ +package org.hisp.dhis.common.adapter; + +import javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlType; + +@XmlType(propOrder={"value", "key"}) +public class Parameter +{ + + private String key; + + private String value; + + public Parameter() + { + } + + public Parameter( String key, String value ) + { + this.key = key; + this.value = value; + } + + @XmlAttribute + public String getKey() + { + return key; + } + + @XmlAttribute + public String getValue() + { + return value; + } + + public void setKey( String key ) + { + this.key = key; + } + + public void setValue( String value ) + { + this.value = value; + } + +} === added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/adapter/Parameters.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/adapter/Parameters.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/adapter/Parameters.java 2011-12-20 12:46:37 +0000 @@ -0,0 +1,33 @@ +package org.hisp.dhis.common.adapter; + +import java.util.List; + +import javax.xml.bind.annotation.XmlElement; + +public class Parameters +{ + + List parameters; + + public Parameters() + { + } + + public Parameters( List parameters ) + { + this.parameters = parameters; + } + + @XmlElement( name = "parameter" ) + public List getParameters() + { + return parameters; + } + + public void setParameters( List parameters ) + { + this.parameters = parameters; + } + + +} === added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/adapter/ParametersMapXmlAdapter.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/adapter/ParametersMapXmlAdapter.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/adapter/ParametersMapXmlAdapter.java 2011-12-20 12:46:37 +0000 @@ -0,0 +1,36 @@ +package org.hisp.dhis.common.adapter; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import javax.xml.bind.annotation.adapters.XmlAdapter; + + +public class ParametersMapXmlAdapter extends XmlAdapter> { + + @Override + public Parameters marshal( Map v ) + throws Exception + { + ArrayList list = new ArrayList(); + + for ( Map.Entry e : v.entrySet() ) { + + list.add( new Parameter(e.getKey(), e.getValue()) ); + } + return new Parameters(list); + } + + @Override + public Map unmarshal( Parameters v) + throws Exception + { + Map map = new HashMap(); + for ( Parameter p : v.getParameters() ) { + map.put(p.getKey(), p.getValue()); + } + return map; + } + +} \ No newline at end of file === added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/adapter/package-info.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/adapter/package-info.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/common/adapter/package-info.java 2011-12-20 12:46:37 +0000 @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2004-2010, 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. + */ + +/** + * @author bobj + */ + +@XmlSchema( + namespace = "http://dhis2.org/schema/dxf/2.0", + xmlns = { + @XmlNs(namespaceURI = "http://dhis2.org/schema/dxf/2.0", prefix = "d") + }, + elementFormDefault = XmlNsForm.QUALIFIED) + +package org.hisp.dhis.common.adapter; + +import javax.xml.bind.annotation.XmlSchema; +import javax.xml.bind.annotation.XmlNs; +import javax.xml.bind.annotation.XmlNsForm; === added file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/config/GenericHttpGatewayConfig.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/config/GenericHttpGatewayConfig.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/config/GenericHttpGatewayConfig.java 2011-12-20 12:46:37 +0000 @@ -0,0 +1,89 @@ +package org.hisp.dhis.sms.config; + +import java.util.Map; + +import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; + +import org.hisp.dhis.common.adapter.ParametersMapXmlAdapter; + +/* + * 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. + */ + +public class GenericHttpGatewayConfig + extends SmsGatewayConfig +{ + + private static final long serialVersionUID = 6340853488475760213L; + + private String urlTemplate; + + Map parameters; + + public GenericHttpGatewayConfig() + { + } + + public GenericHttpGatewayConfig( String urlTemplate, Map parameters ) + { + this.urlTemplate = urlTemplate; + this.parameters = parameters; + } + + public String getUrlTemplate() + { + return urlTemplate; + } + + public void setUrlTemplate( String urlTemplate ) + { + this.urlTemplate = urlTemplate; + } + + @XmlJavaTypeAdapter( ParametersMapXmlAdapter.class ) + public Map getParameters() + { + return parameters; + } + + public void setParameters( Map parameters ) + { + this.parameters = parameters; + } + + @Override + public boolean isInbound() + { + return false; + } + + @Override + public boolean isOutbound() + { + return true; + } + +} === modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/config/SmsConfiguration.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/config/SmsConfiguration.java 2011-12-15 11:41:17 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/config/SmsConfiguration.java 2011-12-20 12:46:37 +0000 @@ -39,20 +39,21 @@ * Serializable configuration object for Sms. */ @XmlRootElement( name = "smsConfiguration" ) -public class SmsConfiguration implements Serializable +public class SmsConfiguration + implements Serializable { private static final long serialVersionUID = 7460688383539123303L; private String longNumber; - + private List gateways; - + private Integer pollingInterval; private boolean enabled = false; - public SmsConfiguration( ) + public SmsConfiguration() { } @@ -70,7 +71,7 @@ { this.enabled = enabled; } - + public String getLongNumber() { return longNumber; @@ -81,11 +82,11 @@ this.longNumber = longNumber; } - @XmlElementWrapper(name="gateways") - @XmlElements({ - @XmlElement(name = "bulksms", type = BulkSmsGatewayConfig.class), - @XmlElement(name = "clickatell", type = ClickatellGatewayConfig.class), - @XmlElement(name = "modem", type = ModemGatewayConfig.class)}) + @XmlElementWrapper( name = "gateways" ) + @XmlElements( { @XmlElement( name = "bulksms", type = BulkSmsGatewayConfig.class ), + @XmlElement( name = "clickatell", type = ClickatellGatewayConfig.class ), + @XmlElement( name = "http", type = GenericHttpGatewayConfig.class ), + @XmlElement( name = "modem", type = ModemGatewayConfig.class ) } ) public List getGateways() { return gateways; === added directory 'dhis-2/dhis-api/src/test/java/org/hisp/dhis/sms' === added directory 'dhis-2/dhis-api/src/test/java/org/hisp/dhis/sms/config' === added file 'dhis-2/dhis-api/src/test/java/org/hisp/dhis/sms/config/GenericHttpGatewayConfigTest.java' --- dhis-2/dhis-api/src/test/java/org/hisp/dhis/sms/config/GenericHttpGatewayConfigTest.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-api/src/test/java/org/hisp/dhis/sms/config/GenericHttpGatewayConfigTest.java 2011-12-20 12:46:37 +0000 @@ -0,0 +1,115 @@ +package org.hisp.dhis.sms.config; + +import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; +import java.io.StringReader; +import java.io.StringWriter; +import java.io.Writer; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; +import javax.xml.bind.Unmarshaller; + +import org.junit.Before; +import org.junit.Test; + +/* + * 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. + */ + +public class GenericHttpGatewayConfigTest +{ + + private String urlTemplate = "http://bulksms.vsms.net:5567/eapi/submission/send_sms/2/2.0?username={username}&password={password}&source_id={sender}&message={message}&msisdn={recipient}"; + + private String bulk = "bulkusernamepassword"; + + private String click = "clickstorsetdust20013304014"; + + private JAXBContext context; + + private String urlString = "http://bulksms.vsms.net:5567/eapi/submission/send_sms/2/2.0?username={username}&password={password}&source_id={sender}&message={message}&msisdn={recipient}"; + + private String http = "http" + urlString + "" + + "" + + "" + ""; + + @Before + public void setup() + throws JAXBException + { + context = JAXBContext.newInstance( SmsConfiguration.class ); + } + + @Test + public void testMarshalling() + throws IOException, JAXBException + { + + Writer writer = new StringWriter(); + Map parameters = new HashMap(); + parameters.put( "username", "u1" ); + parameters.put( "password", "p1" ); + parameters.put( "sender", "s1" ); + + SmsGatewayConfig config = new GenericHttpGatewayConfig( urlTemplate, parameters ); + SmsConfiguration smsConfiguration = new SmsConfiguration(); + smsConfiguration.setGateways( Collections.singletonList( config ) ); + Marshaller marshaller = context.createMarshaller(); + marshaller.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, true ); + marshaller.marshal( smsConfiguration, writer ); + + writer.flush(); + + assertTrue(writer.toString().contains( "trueDHIS2"; + xml += "" + bulk + click + http + ""; + + Unmarshaller unmarshaller = context.createUnmarshaller(); + + SmsConfiguration config = (SmsConfiguration) unmarshaller.unmarshal( new StringReader( xml ) ); + + assertNotNull( config ); + List gateways = config.getGateways(); + assertNotNull( gateways ); + assertEquals( 3, gateways.size() ); + assertTrue( ((GenericHttpGatewayConfig)gateways.get( 2 )).getUrlTemplate().contains( "http://bulksms.vsms.net:5567/eapi/submission/send_sms/2/2.0" ) ); + } +} === modified file 'dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/outbound/SmsMessageSender.java' --- dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/outbound/SmsMessageSender.java 2011-12-15 08:46:42 +0000 +++ dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/outbound/SmsMessageSender.java 2011-12-20 12:46:37 +0000 @@ -38,11 +38,8 @@ import org.apache.commons.logging.LogFactory; import org.hisp.dhis.message.MessageSender; import org.hisp.dhis.sms.SmsServiceException; -import org.hisp.dhis.sms.outbound.OutboundSms; -import org.hisp.dhis.sms.outbound.OutboundSmsService; import org.hisp.dhis.user.User; import org.hisp.dhis.user.UserService; -import org.springframework.beans.factory.annotation.Autowired; public class SmsMessageSender implements MessageSender @@ -124,7 +121,7 @@ if ( sender != null ) name = sender.getUsername(); - text = "From " + name + ", " + subject + ": " + text; + text = "From " + name + " - " + subject + ": " + text; // Simplistic cutoff 160 characters.. int length = text.length(); === modified file 'dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/smslib/GateWayFactory.java' --- dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/smslib/GateWayFactory.java 2011-12-15 20:51:45 +0000 +++ dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/smslib/GateWayFactory.java 2011-12-20 12:46:37 +0000 @@ -3,6 +3,7 @@ import org.hisp.dhis.sms.SmsServiceException; import org.hisp.dhis.sms.config.BulkSmsGatewayConfig; import org.hisp.dhis.sms.config.ClickatellGatewayConfig; +import org.hisp.dhis.sms.config.GenericHttpGatewayConfig; import org.hisp.dhis.sms.config.ModemGatewayConfig; import org.hisp.dhis.sms.config.SmsGatewayConfig; import org.smslib.AGateway; @@ -18,6 +19,8 @@ { if ( config instanceof BulkSmsGatewayConfig ) return createBulkSmsGateway( (BulkSmsGatewayConfig) config ); + else if ( config instanceof GenericHttpGatewayConfig ) + return createSimplisticHttpGetGateway( (GenericHttpGatewayConfig) config ); else if ( config instanceof ClickatellGatewayConfig ) return createClickatellGateway( (ClickatellGatewayConfig) config ); else if ( config instanceof ModemGatewayConfig ) @@ -69,5 +72,12 @@ return gateway; } + public AGateway createSimplisticHttpGetGateway( GenericHttpGatewayConfig c ) + { + SimplisticHttpGetGateWay gateway = new SimplisticHttpGetGateWay( c.getName(), c.getUrlTemplate(), c.getParameters() ); + gateway.setOutbound( true ); + gateway.setInbound( false ); + return gateway; + } } === added file 'dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/smslib/SimplisticHttpGetGateWay.java' --- dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/smslib/SimplisticHttpGetGateWay.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/smslib/SimplisticHttpGetGateWay.java 2011-12-20 12:46:37 +0000 @@ -0,0 +1,123 @@ +package org.hisp.dhis.sms.smslib; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import org.smslib.AGateway; +import org.smslib.GatewayException; +import org.smslib.OutboundMessage; +import org.smslib.TimeoutException; +import org.smslib.helper.Logger; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.RestClientException; +import org.springframework.web.client.RestTemplate; + +/** + * Simplistic http gateway sending smses through a get to a url constructed from the provided + * urlTemplate and map of static parameters. + *

This gateway is simplistic in that it can't evaluate the response from the provider, being most suitable as an + * example gateway. For production use a more robust gateway should be used implemented for the specific provider. + * + *

The gateway adds the following keys to the parameters: + *

    + *
  • recipient + *
  • message + *
  • sender - if available in the message + *
+ * + * An example usage with bulksms.com would be this template:
+ * http://bulksms.vsms.net:5567/eapi/submission/send_sms/2/2.0?username={username}&password={password}&message={message}&msisdn={recipient}
+ * With the following parameters provided: + *
    + *
  • username + *
  • password + *
+ * + */ +public class SimplisticHttpGetGateWay + extends AGateway +{ + + private static final String SENDER = "sender"; + + private static final String RECIPIENT = "recipient"; + + private static final String MESSAGE = "message"; + + RestTemplate restTemplate = new RestTemplate(); + + private Map parameters; + + private String urlTemplate; + + public SimplisticHttpGetGateWay( String id, String urlTemplate, Map parameters) + { + super( id ); + this.urlTemplate = urlTemplate; + this.parameters = parameters; + + setAttributes( AGateway.GatewayAttributes.SEND | AGateway.GatewayAttributes.CUSTOMFROM + | AGateway.GatewayAttributes.BIGMESSAGES | AGateway.GatewayAttributes.FLASHSMS ); + } + + @Override + public void startGateway() + throws TimeoutException, GatewayException, IOException, InterruptedException + { + Logger.getInstance().logInfo( "Starting gateway.", null, getGatewayId() ); + super.startGateway(); + } + + @Override + public void stopGateway() + throws TimeoutException, GatewayException, IOException, InterruptedException + { + Logger.getInstance().logInfo( "Stopping gateway.", null, getGatewayId() ); + super.stopGateway(); + } + + @Override + public boolean sendMessage( OutboundMessage msg ) + throws TimeoutException, GatewayException, IOException, InterruptedException + { + Logger.getInstance().logDebug( "Sending message " + msg, null, getGatewayId() ); + + Map requestParameters = new HashMap(parameters); + + requestParameters.put( MESSAGE, msg.getText() ); + requestParameters.put( RECIPIENT, msg.getRecipient() ); + String sender = msg.getFrom(); + if (sender != null) { + Logger.getInstance().logDebug( "Adding sender " + sender, null, getGatewayId() ); + requestParameters.put( SENDER, sender ); + } + try + { + ResponseEntity response = restTemplate.getForEntity( urlTemplate, String.class, requestParameters ); + + if (response.getStatusCode().series() != HttpStatus.Series.SUCCESSFUL) { + Logger.getInstance().logWarn( "Couldn't send message, got response " + response, null, getGatewayId() ); + return false; + } + + } + catch ( RestClientException e ) + { + Logger.getInstance().logWarn( "Couldn't send message " + msg, e, getGatewayId() ); + return false; + } + + return true; + + } + + @Override + public int getQueueSchedulingInterval() + { + // FIXME: ? + return 500; + } + +} === 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 2011-12-15 20:41:45 +0000 +++ dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/smslib/SmsLibService.java 2011-12-20 12:46:37 +0000 @@ -63,10 +63,12 @@ message.setFrom( longNumber ); } + boolean sent = false; + try { log.debug( "Sending message " + sms ); - getService().sendMessage( message ); + sent = getService().sendMessage( message ); } catch ( SMSLibException e ) { @@ -92,6 +94,11 @@ } } + if ( !sent ) + { + + } + } @Override @@ -118,10 +125,12 @@ log.info( "Loading configuration" ); reloadConfig(); - if (config.isEnabled()) { - log.info( "Starting SmsLib" ); - startService(); - } else + if ( config.isEnabled() ) + { + log.info( "Starting SmsLib" ); + startService(); + } + else { log.info( "Sms not enabled, won't start service" ); } @@ -201,7 +210,7 @@ Service service = Service.getInstance(); service.setOutboundMessageNotification( new OutboundNotification() ); - + service.getGateways().clear(); // Add gateways @@ -227,7 +236,7 @@ @Override public void process( AGateway gateway, OutboundMessage msg ) { - log.info( "Sent message through gateway " + gateway.getGatewayId() + ": " + msg); + log.info( "Sent message through gateway " + gateway.getGatewayId() + ": " + msg ); } } === modified file 'dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/SmsConfigurationController.java' --- dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/SmsConfigurationController.java 2011-12-16 21:52:08 +0000 +++ dhis-2/dhis-web/dhis-web-api/src/main/java/org/hisp/dhis/api/controller/SmsConfigurationController.java 2011-12-20 12:46:37 +0000 @@ -28,13 +28,17 @@ */ import java.io.IOException; +import java.util.Collections; +import java.util.HashMap; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hisp.dhis.sms.SmsConfigurationManager; +import org.hisp.dhis.sms.config.GenericHttpGatewayConfig; import org.hisp.dhis.sms.config.SmsConfiguration; +import org.hisp.dhis.sms.config.SmsGatewayConfig; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; @@ -69,6 +73,21 @@ return "smsConfiguration"; } + @RequestMapping( value="test", method = RequestMethod.GET ) + public String getTest( Model model ) + { + + SmsConfiguration smsConfiguration = new SmsConfiguration(); + + SmsGatewayConfig gatewayConfig = new GenericHttpGatewayConfig("http://storset.org/", new HashMap()); + smsConfiguration.setGateways( Collections.singletonList( gatewayConfig ) ); + + model.addAttribute( "model", smsConfiguration ); + + return "smsConfiguration"; + } + + //------------------------------------------------------------------------------------------------------- // POST //-------------------------------------------------------------------------------------------------------