package org.csstudio.sds.internal.connection;
import org.csstudio.dal.ResponseEvent;
import org.csstudio.dal.ResponseListener;
import org.csstudio.dal.simple.ConnectionParameters;
import org.csstudio.dal.simple.RemoteInfo;
import org.csstudio.dal.simple.SimpleDALBroker;
import org.csstudio.platform.model.pvs.ControlSystemEnum;
import org.csstudio.platform.model.pvs.IProcessVariableAddress;
import org.csstudio.platform.model.pvs.ValueType;
import org.csstudio.sds.model.DynamicsDescriptor;
import org.csstudio.sds.model.IPropertyChangeListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class SinglePropertyWriteConnector implements IPropertyChangeListener {
private IProcessVariableAddress pv;
private SimpleDALBroker broker;
private static final Logger LOG = LoggerFactory.getLogger(SinglePropertyWriteConnector.class);
public SinglePropertyWriteConnector(IProcessVariableAddress pv, ValueType valueType, SimpleDALBroker broker) {
assert pv != null;
assert valueType != null;
this.pv = pv;
this.broker = broker;
}
@Override
public void propertyManualValueChanged(String propertyId, Object manualValue) {
ControlSystemEnum controlSystem = pv.getControlSystem();
String responsibleDalPlugId = controlSystem.getResponsibleDalPlugId();
String cs = "";
if(responsibleDalPlugId!=null)
cs = RemoteInfo.DAL_TYPE_PREFIX + responsibleDalPlugId;
String property = pv.getProperty();
RemoteInfo rinfo = new RemoteInfo(cs, property, null, null);
try {
ConnectionParameters connectionParameters = null;
if(manualValue instanceof java.lang.String){
connectionParameters = new ConnectionParameters(rinfo, java.lang.String.class);
//setBrokerValue(connectionParameters, "dummy");
setBrokerValue(connectionParameters, manualValue);
Thread.sleep(1000);
}
else
connectionParameters = new ConnectionParameters(rinfo);
setBrokerValue(connectionParameters, manualValue);
} catch (Exception e) {
e.printStackTrace();
}
}
private void setBrokerValue(ConnectionParameters connectionParameters, Object manualValue) throws Exception{
broker.setValueAsync(connectionParameters, manualValue, new ResponseListener<Object>() {
@Override
public void responseError(ResponseEvent event) {
LOG.error("Could not set value for ["+pv.toString()+"].");
}
@Override
public void responseReceived(ResponseEvent event) {
LOG.info("Value for ["+pv.toString()+"] was set.");
}
});
}
@Override
public void dynamicsDescriptorChanged(DynamicsDescriptor dynamicsDescriptor) {
}
@Override
public void propertyValueChanged(Object oldValue, Object newValue) {
}
}