This is an automated email from the ASF dual-hosted git repository. billblough pushed a commit to branch transport in repository https://gitbox.apache.org/repos/asf/axis-axis2-java-transports.git
commit e5e6b6ba2fd86db7127aa3409ffd7972207725fb Author: Amila Chinthaka Suriarachchi <ami...@apache.org> AuthorDate: Fri Dec 4 08:22:51 2009 +0000 applying the patch for WSCOMMONS-508 --- .../axis2/transport/sms/gsm/GSMImplManager.java | 22 +++++- .../transport/sms/gsm/GSMServiceRepository.java | 87 ++++++++++++++++++++++ 2 files changed, 106 insertions(+), 3 deletions(-) diff --git a/1.0.0/modules/sms/src/main/java/org/apache/axis2/transport/sms/gsm/GSMImplManager.java b/1.0.0/modules/sms/src/main/java/org/apache/axis2/transport/sms/gsm/GSMImplManager.java index 2af43b7..fa5cf6c 100644 --- a/1.0.0/modules/sms/src/main/java/org/apache/axis2/transport/sms/gsm/GSMImplManager.java +++ b/1.0.0/modules/sms/src/main/java/org/apache/axis2/transport/sms/gsm/GSMImplManager.java @@ -55,11 +55,16 @@ public class GSMImplManager implements SMSImplManager { private GSMDispatcher dispatcher; private Service service = null; private SerialModemGateway gateway; - + private GSMServiceRepository serviceRepo = GSMServiceRepository.getInstence(); private SMSManager smsInManeger; public void start() { - + + if(serviceRepo.gatewayInUse(gsmTransportInDetails.getGatewayId())) { + service = serviceRepo.getService(gsmTransportInDetails.getGatewayId()); + return; + } service = new Service(); + gateway= new SerialModemGateway(gsmTransportInDetails.getGatewayId(), gsmTransportInDetails.getComPort(), gsmTransportInDetails.getBaudRate(),gsmTransportInDetails.getManufacturer(), gsmTransportInDetails.getModel()); @@ -84,6 +89,7 @@ public class GSMImplManager implements SMSImplManager { // Start! (i.e. connect to all defined Gateways) this.service.startService(); + serviceRepo.addService(gsmTransportInDetails.getGatewayId(), service); dispatcher = new GSMDispatcher(service , smsInManeger); dispatcher.setPollInterval(gsmTransportInDetails.getModemPollInterval()); Thread thread = new Thread(dispatcher); @@ -99,6 +105,14 @@ public class GSMImplManager implements SMSImplManager { try { dispatcher.stopPolling(); service.stopService(); + if(serviceRepo.gatewayInUse(gsmTransportInDetails.getGatewayId())) { + serviceRepo.removeService(gsmTransportInDetails.getGatewayId()); + } + + if(serviceRepo.gatewayInUse(gsmTransportOutDetails.getGatewayId())) { + serviceRepo.removeService(gsmTransportOutDetails.getGatewayId()); + } + } catch (Exception e) { log.error(e); } @@ -186,7 +200,7 @@ public class GSMImplManager implements SMSImplManager { } public void sendSMS(SMSMessage sm) { - if (service == null) { + if (service == null && !serviceRepo.gatewayInUse(gsmTransportOutDetails.getGatewayId())) { //Operating in the Out Only mode service = new Service(); gateway = new SerialModemGateway(gsmTransportOutDetails.getGatewayId(), gsmTransportOutDetails.getComPort(), @@ -216,6 +230,8 @@ public class GSMImplManager implements SMSImplManager { log.error(e); } + } else if(serviceRepo.gatewayInUse(gsmTransportOutDetails.getGatewayId())) { + service = serviceRepo.getService(gsmTransportOutDetails.getGatewayId()); } OutboundMessage msg = new OutboundMessage(sm.getReceiver(), sm.getContent()); diff --git a/1.0.0/modules/sms/src/main/java/org/apache/axis2/transport/sms/gsm/GSMServiceRepository.java b/1.0.0/modules/sms/src/main/java/org/apache/axis2/transport/sms/gsm/GSMServiceRepository.java new file mode 100644 index 0000000..2d36f19 --- /dev/null +++ b/1.0.0/modules/sms/src/main/java/org/apache/axis2/transport/sms/gsm/GSMServiceRepository.java @@ -0,0 +1,87 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.axis2.transport.sms.gsm; + +import org.smslib.Service; + +import java.util.Map; +import java.util.HashMap; + +/** + * The Repository of started GSM Services + * Allow to share and reuse the GSM services + */ +class GSMServiceRepository { + + private Map<String, Service> serviceRepo = new HashMap<String,Service>(); + + private static GSMServiceRepository me; + + private GSMServiceRepository() { + + } + + public static GSMServiceRepository getInstence() { + if(me == null) { + me = new GSMServiceRepository(); + } + + return me; + } + + /** + * add a service with a given gateway + * @param gateway + * @param service + */ + public void addService(String gateway , Service service) { + if(!gatewayInUse(gateway)) { + serviceRepo.put(gateway,service); + } + } + + /** + * remove the service given the gateway id + * @param gateway + */ + public void removeService(String gateway) { + serviceRepo.remove(gateway); + } + + + /** + * get the service given the gateway id + * @param gateway + * @return + */ + public Service getService(String gateway) { + return serviceRepo.get(gateway); + } + + /** + * to know whether the gateway inuse + * @param gateway + * @return + */ + public boolean gatewayInUse(String gateway) { + return serviceRepo.containsKey(gateway); + } + + +}