package org.csstudio.sds.internal.connection; import org.csstudio.dal.DalPlugin; import org.csstudio.dal.simple.AnyDataChannel; import org.csstudio.dal.simple.ChannelListener; import org.csstudio.dal.simple.ConnectionParameters; import org.csstudio.sds.eventhandling.AbstractBehavior; import org.csstudio.sds.model.AbstractWidgetModel; import org.csstudio.sds.model.DynamicsDescriptor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Connector that forwards channel events to a behavior strategy class. * * @author Sven Wende * */ public final class BehaviorConnector implements ChannelListener, org.csstudio.sds.model.IPropertyChangeListener { private AbstractWidgetModel widget; private ConnectionParameters connectionParameters; private AbstractBehavior<AbstractWidgetModel> behavior; private static final Logger LOG = LoggerFactory.getLogger(BehaviorConnector.class); /** * Constructs a connector. * * @param connectionParameters * the connection parameters (needed for the DAL connection) * @param behavior * the behavior (consumer for DAL events) */ public BehaviorConnector(AbstractWidgetModel widget, ConnectionParameters connectionParameters, AbstractBehavior<AbstractWidgetModel> behavior) { assert widget != null; assert connectionParameters != null; assert behavior != null; this.widget = widget; this.connectionParameters = connectionParameters; this.behavior = behavior; } /** *{@inheritDoc} */ @Override public void channelDataUpdate(AnyDataChannel channel) { behavior.processChannelDataUpdate(widget, channel); } /** *{@inheritDoc} */ @Override public void channelStateUpdate(AnyDataChannel channel) { behavior.processChannelStateUpdate(widget, channel); } public ConnectionParameters getConnectionParameters() { return connectionParameters; } /** *{@inheritDoc} */ @Override public void dynamicsDescriptorChanged(DynamicsDescriptor dynamicsDescriptor) { // ignore } /** *{@inheritDoc} */ @Override public void propertyManualValueChanged(String propertyId, Object manualValue) { Object value2set = behavior.convertOutgoingValue(widget, propertyId, manualValue); if (value2set != null) { try { LOG.info("About to apply: "+value2set + " to " + connectionParameters.toString()); DalPlugin.getDefault().getSimpleDALBroker().setValueAsync(this.connectionParameters, value2set, null); } catch (Exception e) { LOG.error(e.getMessage()); } } } /** *{@inheritDoc} */ @Override public void propertyValueChanged(Object oldValue, Object newValue) { // ignore } }