From: <cs-...@li...> - 2012-02-22 14:58:52
|
details: http://cs-studio.hg.sourceforge.net/hgweb/cs-studio/cs-studio//hgroot/cs-studio/cs-studio/rev/1e8a1c58659c changeset: 14041:1e8a1c58659c user: Markus Moeller <mar...@de...> date: Wed Feb 22 15:49:34 2012 +0100 description: org.csstudio.ams.delivery: Added a listener for incoming device messages. details: http://cs-studio.hg.sourceforge.net/hgweb/cs-studio/cs-studio//hgroot/cs-studio/cs-studio/rev/cc41f10a62ca changeset: 14042:cc41f10a62ca user: Markus Moeller <mar...@de...> date: Wed Feb 22 15:50:52 2012 +0100 description: org.csstudio.ams.delivery.sms: Added the usage of the new listener. diffstat: applications/plugins/org.csstudio.ams.delivery.sms/src/org/csstudio/ams/delivery/sms/SmsDeliveryDevice.java | 43 +++++++- applications/plugins/org.csstudio.ams.delivery.sms/src/org/csstudio/ams/delivery/sms/SmsDeliveryWorker.java | 24 +--- applications/plugins/org.csstudio.ams.delivery/src/org/csstudio/ams/delivery/device/DeviceListener.java | 37 +++++++ applications/plugins/org.csstudio.ams.delivery/src/org/csstudio/ams/delivery/device/DeviceObject.java | 50 ++++++++++ 4 files changed, 129 insertions(+), 25 deletions(-) diffs (287 lines): diff -r 10b57f04227a -r cc41f10a62ca applications/plugins/org.csstudio.ams.delivery.sms/src/org/csstudio/ams/delivery/sms/SmsDeliveryDevice.java --- a/applications/plugins/org.csstudio.ams.delivery.sms/src/org/csstudio/ams/delivery/sms/SmsDeliveryDevice.java Wed Feb 22 15:08:52 2012 +0100 +++ b/applications/plugins/org.csstudio.ams.delivery.sms/src/org/csstudio/ams/delivery/sms/SmsDeliveryDevice.java Wed Feb 22 15:50:52 2012 +0100 @@ -30,11 +30,14 @@ import javax.jms.JMSException; import javax.jms.MapMessage; import org.csstudio.ams.AmsActivator; +import org.csstudio.ams.delivery.device.DeviceListener; +import org.csstudio.ams.delivery.device.DeviceObject; import org.csstudio.ams.delivery.device.IDeliveryDevice; import org.csstudio.ams.delivery.device.IReadableDevice; import org.csstudio.ams.delivery.jms.JmsProperties; import org.csstudio.ams.delivery.jms.JmsSender; import org.csstudio.ams.delivery.message.BaseAlarmMessage.State; +import org.csstudio.ams.delivery.message.BaseIncomingMessage; import org.csstudio.ams.delivery.service.Environment; import org.csstudio.ams.delivery.sms.internal.SmsConnectorPreferenceKey; import org.csstudio.ams.internal.AmsPreferenceKey; @@ -43,23 +46,24 @@ import org.eclipse.core.runtime.preferences.IPreferencesService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.smslib.AGateway; import org.smslib.IInboundMessageNotification; import org.smslib.InboundMessage; import org.smslib.InboundMessage.MessageClasses; import org.smslib.OutboundMessage; import org.smslib.Service; import org.smslib.Message.MessageEncodings; +import org.smslib.Message.MessageTypes; import org.smslib.modem.SerialModemGateway; /** - * TODO (mmoeller) : - * * @author mmoeller * @version 1.0 * @since 18.12.2011 */ public class SmsDeliveryDevice implements IDeliveryDevice<SmsAlarmMessage>, - IReadableDevice<InboundMessage> { + IReadableDevice<InboundMessage>, + IInboundMessageNotification { /** The static class logger */ private static final Logger LOG = LoggerFactory.getLogger(SmsDeliveryDevice.class); @@ -76,6 +80,8 @@ /** This class contains all modem ids (names) */ private ModemInfoContainer modemInfo; + private DeviceListener listener; + /** Reading period (in ms) for the modem */ private long readWaitingPeriod; @@ -86,6 +92,30 @@ initModem(); } + public void setDeviceListener(DeviceListener l) { + listener = l; + } + + public void removeDeviceListener() { + listener = null; + } + + @Override + public void process(final AGateway gateway, final MessageTypes msgType, final InboundMessage msg) { + final Object[] param = { msg.getText(), msg.getOriginator(), gateway.getGatewayId() }; + LOG.info("Incoming message: {} from phone number {} received by gateway {}", param); + final BaseIncomingMessage inMsg = new BaseIncomingMessage(msg); + if (listener != null) { + listener.onIncomingMessage(new DeviceObject(this, inMsg)); + } + + if (deleteMessage(msg)) { + LOG.info("Message has been deleted."); + } else { + LOG.warn("Message CANNOT be deleted."); + } + } + public void setInboundMessageNotification(IInboundMessageNotification notification) { modemService.setInboundMessageNotification(notification); } @@ -392,6 +422,7 @@ LOG.info("Modem(s) are initialized"); modemService.setGatewayStatusNotification(new GatewayStatusNotification(modemInfo.getModemNames())); + modemService.setInboundMessageNotification(this); if((result == true) && (modemCount > 0)) { LOG.info("Try to start service"); @@ -400,17 +431,15 @@ } } catch(Exception e) { LOG.error("Could not init modem: {}", e); - JmsSender sender = new JmsSender("SmsConnectorAlarmSender", prefs.getString(AmsActivator.PLUGIN_ID, AmsPreferenceKey.P_JMS_AMS_SENDER_PROVIDER_URL, "failover:(tcp://localhost:62616,tcp://localhost:64616)", null), "ALARM"); - if(sender.isConnected()) { if(sender.sendMessage("alarm", - "SmsConnectorWork: Cannot init modem [" + e.getMessage() + "]", + "SmsDeliveryWorker: Cannot init modem [" + e.getMessage() + "]", "MAJOR") == false) { LOG.error("Cannot send alarm message."); } else { @@ -419,10 +448,8 @@ } else { LOG.warn("Alarm message sender is NOT connected."); } - sender.closeAll(); sender = null; - result = false; } diff -r 10b57f04227a -r cc41f10a62ca applications/plugins/org.csstudio.ams.delivery.sms/src/org/csstudio/ams/delivery/sms/SmsDeliveryWorker.java --- a/applications/plugins/org.csstudio.ams.delivery.sms/src/org/csstudio/ams/delivery/sms/SmsDeliveryWorker.java Wed Feb 22 15:08:52 2012 +0100 +++ b/applications/plugins/org.csstudio.ams.delivery.sms/src/org/csstudio/ams/delivery/sms/SmsDeliveryWorker.java Wed Feb 22 15:50:52 2012 +0100 @@ -29,11 +29,12 @@ import javax.jms.MapMessage; import javax.jms.Message; import javax.jms.MessageListener; - import org.csstudio.ams.AmsActivator; import org.csstudio.ams.AmsConstants; import org.csstudio.ams.delivery.AbstractDeliveryWorker; import org.csstudio.ams.delivery.action.AmsUserAction; +import org.csstudio.ams.delivery.device.DeviceListener; +import org.csstudio.ams.delivery.device.DeviceObject; import org.csstudio.ams.delivery.jms.JmsAsyncConsumer; import org.csstudio.ams.delivery.jms.JmsProperties; import org.csstudio.ams.delivery.jms.JmsSender; @@ -47,11 +48,8 @@ import org.eclipse.core.runtime.preferences.IPreferencesService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.smslib.AGateway; -import org.smslib.IInboundMessageNotification; import org.smslib.InboundBinaryMessage; import org.smslib.InboundMessage; -import org.smslib.Message.MessageTypes; /** * @author mmoeller @@ -59,7 +57,7 @@ * @since 17.12.2011 */ public class SmsDeliveryWorker extends AbstractDeliveryWorker implements MessageListener, - IInboundMessageNotification { + DeviceListener { private static final Logger LOG = LoggerFactory.getLogger(SmsDeliveryWorker.class); @@ -117,8 +115,8 @@ null); smsDevice = new SmsDeliveryDevice(modemInfo, new JmsProperties(factoryClass, url, topic)); - smsDevice.setInboundMessageNotification(this); - + smsDevice.setDeviceListener(this); + readWaitingPeriod = prefs.getLong(SmsDeliveryActivator.PLUGIN_ID, SmsConnectorPreferenceKey.P_MODEM_READ_WAITING_PERIOD, 10000L, @@ -379,16 +377,8 @@ } @Override - public void process(final AGateway gateway, final MessageTypes msgType, final InboundMessage msg) { - final Object[] param = { msg.getText(), msg.getOriginator(), gateway.getGatewayId() }; - LOG.info("Incoming message: {} from phone number {} received by gateway {}", param); - final BaseIncomingMessage inMsg = new BaseIncomingMessage(msg); - incomingQueue.addMessage(inMsg); - if (smsDevice.deleteMessage(msg)) { - LOG.info("Message is deleted."); - } else { - LOG.warn("Message cannot be deleted."); - } + public void onIncomingMessage(DeviceObject event) { + incomingQueue.addMessage(event.getMessage()); synchronized (outgoingQueue) { outgoingQueue.notify(); } diff -r 10b57f04227a -r cc41f10a62ca applications/plugins/org.csstudio.ams.delivery/src/org/csstudio/ams/delivery/device/DeviceListener.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applications/plugins/org.csstudio.ams.delivery/src/org/csstudio/ams/delivery/device/DeviceListener.java Wed Feb 22 15:50:52 2012 +0100 @@ -0,0 +1,37 @@ + +/* + * Copyright (c) 2012 Stiftung Deutsches Elektronen-Synchrotron, + * Member of the Helmholtz Association, (DESY), HAMBURG, GERMANY. + * + * THIS SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "../AS IS" BASIS. + * WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED + * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR PARTICULAR PURPOSE AND + * NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE + * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. SHOULD THE SOFTWARE PROVE DEFECTIVE + * IN ANY RESPECT, THE USER ASSUMES THE COST OF ANY NECESSARY SERVICING, REPAIR OR + * CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. + * NO USE OF ANY SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + * DESY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, + * OR MODIFICATIONS. + * THE FULL LICENSE SPECIFYING FOR THE SOFTWARE THE REDISTRIBUTION, MODIFICATION, + * USAGE AND OTHER RIGHTS AND OBLIGATIONS IS INCLUDED WITH THE DISTRIBUTION OF THIS + * PROJECT IN THE FILE LICENSE.HTML. IF THE LICENSE IS NOT INCLUDED YOU MAY FIND A COPY + * AT HTTP://WWW.DESY.DE/LEGAL/LICENSE.HTM + * + * $Id: DesyKrykCodeTemplates.xml,v 1.7 2010/04/20 11:43:22 bknerr Exp $ + */ + +package org.csstudio.ams.delivery.device; + +import java.util.EventListener; + +/** + * @author mmoeller + * @version 1.0 + * @since 22.02.2012 + */ +public interface DeviceListener extends EventListener { + void onIncomingMessage(DeviceObject event); +} diff -r 10b57f04227a -r cc41f10a62ca applications/plugins/org.csstudio.ams.delivery/src/org/csstudio/ams/delivery/device/DeviceObject.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applications/plugins/org.csstudio.ams.delivery/src/org/csstudio/ams/delivery/device/DeviceObject.java Wed Feb 22 15:50:52 2012 +0100 @@ -0,0 +1,50 @@ + +/* + * Copyright (c) 2012 Stiftung Deutsches Elektronen-Synchrotron, + * Member of the Helmholtz Association, (DESY), HAMBURG, GERMANY. + * + * THIS SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN "../AS IS" BASIS. + * WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED + * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR PARTICULAR PURPOSE AND + * NON-INFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE + * FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR + * THE USE OR OTHER DEALINGS IN THE SOFTWARE. SHOULD THE SOFTWARE PROVE DEFECTIVE + * IN ANY RESPECT, THE USER ASSUMES THE COST OF ANY NECESSARY SERVICING, REPAIR OR + * CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. + * NO USE OF ANY SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + * DESY HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, + * OR MODIFICATIONS. + * THE FULL LICENSE SPECIFYING FOR THE SOFTWARE THE REDISTRIBUTION, MODIFICATION, + * USAGE AND OTHER RIGHTS AND OBLIGATIONS IS INCLUDED WITH THE DISTRIBUTION OF THIS + * PROJECT IN THE FILE LICENSE.HTML. IF THE LICENSE IS NOT INCLUDED YOU MAY FIND A COPY + * AT HTTP://WWW.DESY.DE/LEGAL/LICENSE.HTM + * + * $Id: DesyKrykCodeTemplates.xml,v 1.7 2010/04/20 11:43:22 bknerr Exp $ + */ + +package org.csstudio.ams.delivery.device; + +import java.util.EventObject; +import org.csstudio.ams.delivery.message.BaseIncomingMessage; + +/** + * @author mmoeller + * @version 1.0 + * @since 22.02.2012 + */ +public class DeviceObject extends EventObject { + + private static final long serialVersionUID = 1L; + + private BaseIncomingMessage inMsg; + + public DeviceObject(Object sourceObject, BaseIncomingMessage msg) { + super(sourceObject); + inMsg = msg; + } + + public BaseIncomingMessage getMessage() { + return inMsg; + } +} |