=== modified file 'dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/outbound/OutboundSmsTransportService.java' --- dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/outbound/OutboundSmsTransportService.java 2012-03-09 09:40:27 +0000 +++ dhis-2/dhis-api/src/main/java/org/hisp/dhis/sms/outbound/OutboundSmsTransportService.java 2012-03-14 10:36:55 +0000 @@ -1,5 +1,7 @@ package org.hisp.dhis.sms.outbound; +import java.util.Map; + /* * Copyright (c) 2004-2011, University of Oslo * All rights reserved. @@ -34,4 +36,5 @@ public interface OutboundSmsTransportService extends OutboundSmsService { + Map getGatewayMap(); } === modified file 'dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/outbound/TestOutboundSmsService.java' --- dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/outbound/TestOutboundSmsService.java 2012-03-09 09:40:27 +0000 +++ dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/outbound/TestOutboundSmsService.java 2012-03-14 10:36:55 +0000 @@ -1,5 +1,8 @@ package org.hisp.dhis.sms.outbound; +import java.util.HashMap; +import java.util.Map; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hisp.dhis.sms.SmsServiceException; @@ -10,9 +13,12 @@ import org.hisp.dhis.sms.outbound.OutboundSmsTransportService; /** - * Simple {@link OutboundSmsService} just logging invocations, only to be used for test purposes + * Simple {@link OutboundSmsService} just logging invocations, only to be used + * for test purposes * - *

Has the property enabled, defaulting to true, which is configured using {@link TestOutboundSmsService#initialize(SmsConfiguration)} + *

+ * Has the property enabled, defaulting to true, which is configured using + * {@link TestOutboundSmsService#initialize(SmsConfiguration)} */ public class TestOutboundSmsService implements OutboundSmsTransportService @@ -25,14 +31,16 @@ public void sendMessage( OutboundSms sms, String gatewayId ) throws SmsServiceException { - if (!enabled) + if ( !enabled ) + { throw new SmsServiceNotEnabledException(); - + } + log.debug( "Send message: " + sms ); } @Override - public void initialize(SmsConfiguration config) + public void initialize( SmsConfiguration config ) throws SmsServiceException { this.enabled = config.isEnabled(); @@ -45,4 +53,9 @@ return this.enabled; } + @Override + public Map getGatewayMap() + { + return new HashMap(); + } } === 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-03-09 09:40:27 +0000 +++ dhis-2/dhis-services/dhis-service-sms/src/main/java/org/hisp/dhis/sms/smslib/SmsLibService.java 2012-03-14 10:36:55 +0000 @@ -28,11 +28,16 @@ */ import java.io.IOException; +import java.util.HashMap; +import java.util.Map; import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; 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.SmsConfiguration; import org.hisp.dhis.sms.config.SmsGatewayConfig; import org.hisp.dhis.sms.outbound.OutboundSms; @@ -50,10 +55,24 @@ { private static final Log log = LogFactory.getLog( SmsLibService.class ); + private Map gatewayMap = new HashMap(); + private GateWayFactory gatewayFactory = new GateWayFactory(); private SmsConfiguration config; + private final String BULK_GATEWAY = "bulk_gw"; + + private final String CLICKATELL_GATEWAY = "clickatell_gw"; + + private final String HTTP_GATEWAY = "generic_http_gw"; + + private final String MODEM_GATEWAY = "modem_gateway"; + + // ------------------------------------------------------------------------- + // Implementation methods + // ------------------------------------------------------------------------- + @Override public boolean isEnabled() { @@ -67,7 +86,7 @@ String recipient; Set recipients = sms.getRecipients(); - + if ( recipients.size() == 0 ) { log.warn( "Trying to send sms without recipients: " + sms ); @@ -252,12 +271,34 @@ service.getGateways().clear(); + AGateway gateway = null; + // Add gateways for ( SmsGatewayConfig gatewayConfig : config.getGateways() ) { try { - service.addGateway( gatewayFactory.create( gatewayConfig ) ); + gateway = gatewayFactory.create( gatewayConfig ); + + service.addGateway( gateway ); + + if ( gatewayConfig instanceof BulkSmsGatewayConfig ) + { + gatewayMap.put( BULK_GATEWAY, gateway.getGatewayId() ); + } + else if ( gatewayConfig instanceof ClickatellGatewayConfig ) + { + gatewayMap.put( CLICKATELL_GATEWAY, gateway.getGatewayId() ); + } + else if ( gatewayConfig instanceof GenericHttpGatewayConfig ) + { + gatewayMap.put( HTTP_GATEWAY, gateway.getGatewayId() ); + } + else + { + gatewayMap.put( MODEM_GATEWAY, gateway.getGatewayId() ); + } + log.debug( "Added gateway " + gatewayConfig.getName() ); } catch ( GatewayException e ) @@ -278,4 +319,15 @@ } } + @Override + public Map getGatewayMap() + { + if ( gatewayMap == null || gatewayMap.isEmpty() ) + { + reloadConfig(); + } + + return gatewayMap; + } + } === added file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/java/org/hisp/dhis/mobile/action/GetMobileConfigurationAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/java/org/hisp/dhis/mobile/action/GetMobileConfigurationAction.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/java/org/hisp/dhis/mobile/action/GetMobileConfigurationAction.java 2012-03-14 10:36:55 +0000 @@ -0,0 +1,78 @@ +package org.hisp.dhis.mobile.action; + +/* + * Copyright (c) 2004-2012, 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 org.hisp.dhis.sms.SmsConfigurationManager; +import org.hisp.dhis.sms.config.SmsConfiguration; +import org.springframework.beans.factory.annotation.Autowired; + +import com.opensymphony.xwork2.Action; + +/** + * @author + * @version $Id$ + */ + +public class GetMobileConfigurationAction + implements Action +{ + // ------------------------------------------------------------------------- + // Dependencies + // ------------------------------------------------------------------------- + + @Autowired + private SmsConfigurationManager smsConfigurationManager; + + // ------------------------------------------------------------------------- + // Output + // ------------------------------------------------------------------------- + + private SmsConfiguration smsConfig; + + public SmsConfiguration getSmsConfig() + { + return smsConfig; + } + + public boolean getSmsServiceStatus() + { + return this.smsConfig != null && this.smsConfig.isEnabled(); + } + + // ------------------------------------------------------------------------- + // Action implementation + // ------------------------------------------------------------------------- + + public String execute() + throws Exception + { + smsConfig = smsConfigurationManager.getSmsConfiguration(); + + return SUCCESS; + } +} === removed file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/java/org/hisp/dhis/mobile/action/MobileHomePageAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/java/org/hisp/dhis/mobile/action/MobileHomePageAction.java 2011-10-18 20:23:09 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/java/org/hisp/dhis/mobile/action/MobileHomePageAction.java 1970-01-01 00:00:00 +0000 @@ -1,41 +0,0 @@ -package org.hisp.dhis.mobile.action; - -/* - * Copyright (c) 2004-2007, 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 com.opensymphony.xwork2.Action; - -public class MobileHomePageAction - implements Action -{ - - @Override - public String execute() throws Exception - { - return SUCCESS; - } -} === removed file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/java/org/hisp/dhis/mobile/action/ShowMobileConfigurationFormAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/java/org/hisp/dhis/mobile/action/ShowMobileConfigurationFormAction.java 2012-03-09 09:40:27 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/java/org/hisp/dhis/mobile/action/ShowMobileConfigurationFormAction.java 1970-01-01 00:00:00 +0000 @@ -1,82 +0,0 @@ -package org.hisp.dhis.mobile.action; - -/* - * Copyright (c) 2004-2012, 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 org.hisp.dhis.sms.SmsConfigurationManager; -import org.hisp.dhis.sms.config.SmsConfiguration; -import org.springframework.beans.factory.annotation.Autowired; - -import com.opensymphony.xwork2.Action; - -/** - * @author - * @version $Id$ - */ - -public class ShowMobileConfigurationFormAction - implements Action -{ - // ------------------------------------------------------------------------- - // Dependencies - // ------------------------------------------------------------------------- - - @Autowired - private SmsConfigurationManager smsConfigurationManager; - - // ------------------------------------------------------------------------- - // Output - // ------------------------------------------------------------------------- - - private SmsConfiguration smsConfig; - - public SmsConfiguration getSmsConfig() - { - return smsConfig; - } - - public void setSmsConfig( SmsConfiguration smsConfig ) - { - this.smsConfig = smsConfig; - } - - public boolean getSmsServiceStatus() - { - return this.smsConfig != null && this.smsConfig.isEnabled(); - } - - // ------------------------------------------------------------------------- - // Action implementation - // ------------------------------------------------------------------------- - - public String execute() - throws Exception - { - smsConfig = smsConfigurationManager.getSmsConfiguration(); - return SUCCESS; - } -} === added file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/java/org/hisp/dhis/mobile/action/ShowSendSMSFormAction.java' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/java/org/hisp/dhis/mobile/action/ShowSendSMSFormAction.java 1970-01-01 00:00:00 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/java/org/hisp/dhis/mobile/action/ShowSendSMSFormAction.java 2012-03-14 10:36:55 +0000 @@ -0,0 +1,70 @@ +package org.hisp.dhis.mobile.action; + +/* + * Copyright (c) 2004-2012, 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.Map; + +import org.hisp.dhis.sms.outbound.OutboundSmsTransportService; +import org.springframework.beans.factory.annotation.Autowired; + +import com.opensymphony.xwork2.Action; + +/** + * @author Dang Duy Hieu + * @version $Id$ + */ + +public class ShowSendSMSFormAction + implements Action +{ + // ------------------------------------------------------------------------- + // Dependencies + // ------------------------------------------------------------------------- + + @Autowired + private OutboundSmsTransportService transportService; + + // ------------------------------------------------------------------------- + // Output + // ------------------------------------------------------------------------- + + public Map getGatewayMap() + { + return transportService.getGatewayMap(); + } + + // ------------------------------------------------------------------------- + // Action implementation + // ------------------------------------------------------------------------- + + public String execute() + throws Exception + { + return SUCCESS; + } +} === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/resources/META-INF/dhis/beans.xml' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/resources/META-INF/dhis/beans.xml 2012-03-09 09:40:27 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/resources/META-INF/dhis/beans.xml 2012-03-14 10:36:55 +0000 @@ -6,7 +6,10 @@ - + + + @@ -41,7 +45,8 @@ - + + === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/resources/org/hisp/dhis/mobile/i18n_module.properties' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/resources/org/hisp/dhis/mobile/i18n_module.properties 2012-03-04 13:26:24 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/resources/org/hisp/dhis/mobile/i18n_module.properties 2012-03-14 10:36:55 +0000 @@ -41,4 +41,8 @@ outbound=Outbound api_id=API ID save_settings=Save Settings -show_send_sms_form=Show send SMS form \ No newline at end of file +show_send_sms_form=Show send SMS form +bulk_gw=BulkSMS Gateway +clickatell_gw=Clickatell Gateway +generic_http_gw=Generic HTTP Gateway +modem_gateway=Modem Gateway \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/resources/struts.xml' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/resources/struts.xml 2012-03-09 09:40:27 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/resources/struts.xml 2012-03-14 10:36:55 +0000 @@ -15,15 +15,15 @@ /dhis-web-maintenance-mobile/welcome.vm /dhis-web-maintenance-mobile/menu.vm - - + + /main.vm - /dhis-web-maintenance-mobile/sendSMSPage.vm + /dhis-web-maintenance-mobile/smsServiceConfiguration.vm /dhis-web-maintenance-mobile/menu.vm - F_MOBILE_SENDSMS + F_MOBILE_SETTINGS - + /main.vm /dhis-web-maintenance-mobile/sendSMSPage.vm /dhis-web-maintenance-mobile/menu.vm @@ -31,6 +31,11 @@ F_MOBILE_SENDSMS + + ../dhis-web-commons/ajax/jsonResponseSuccess.vm + plainTextError + + /main.vm /dhis-web-maintenance-mobile/smsSettings.vm === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/webapp/dhis-web-maintenance-mobile/menu.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/webapp/dhis-web-maintenance-mobile/menu.vm 2012-02-29 10:11:21 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/webapp/dhis-web-maintenance-mobile/menu.vm 2012-03-14 10:36:55 +0000 @@ -3,6 +3,6 @@

  • $i18n.getString( "patient_mobile_setting" )
  • $i18n.getString( "mobile_dataset" ) 
  • -
  • $i18n.getString( "show_send_sms_form" )
  • -
  • $i18n.getString( "sms_service_configuration" )
  • +
  • $i18n.getString( "sms_service_configuration" )
  • +
  • $i18n.getString( "show_send_sms_form" )
  • \ No newline at end of file === modified file 'dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/webapp/dhis-web-maintenance-mobile/sendSMSPage.vm' --- dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/webapp/dhis-web-maintenance-mobile/sendSMSPage.vm 2012-02-29 10:11:21 +0000 +++ dhis-2/dhis-web/dhis-web-maintenance/dhis-web-maintenance-mobile/src/main/webapp/dhis-web-maintenance-mobile/sendSMSPage.vm 2012-03-14 10:36:55 +0000 @@ -1,3 +1,14 @@ + + -

    $i18n.getString("sms_service_configuration")

    -#if($smsServiceStatus) +

    $i18n.getString( "sms_service_configuration" )

    +#if( $smsServiceStatus )
    ## Labels @@ -24,7 +24,7 @@ - + @@ -70,8 +70,8 @@ #end
    - #if($smsService.isRunning()) + #if( $smsService.isRunning() ) $i18n.getString("sms_service_is_runnning") #else $i18n.getString("sms_service_is_stopped") @@ -61,7 +61,7 @@
    $i18n.getString("gateways")$i18n.getString("operation")$i18n.getString( "operation" )
    $gateWay.name - Edit - Remove + $i18n.getString( 'edit' ) + $i18n.getString( 'remove' )