/* * Copyright (c) 2006 Stiftung Deutsches Elektronen-Synchroton, * 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 */ package org.epics.css.dal.simulation.ps; import java.util.HashMap; import java.util.Map; import java.util.Timer; import java.util.TimerTask; import org.csstudio.dal.SimpleProperty; import org.csstudio.dal.context.ConnectionState; import org.csstudio.dal.proxy.DeviceProxy; import org.csstudio.dal.proxy.DirectoryProxy; import org.csstudio.dal.proxy.PropertyProxy; import org.epics.css.dal.simulation.CommandProxyImpl; import org.epics.css.dal.simulation.DeviceProxyImpl; import org.epics.css.dal.simulation.SimulatorPlug; import org.epics.css.dal.simulation.SimulatorUtilities; /** * * <code>PSDeviceProxy</code> simulation device proxy implementation * for the PowerSupply. * * @author <a href="mailto:jaka.bobnar@cosylab.com">Jaka Bobnar</a> * * @since VERSION */ public class PSDeviceProxy extends DeviceProxyImpl implements DeviceProxy<SimulatorPlug>, DirectoryProxy<SimulatorPlug> { private Map<String, Class<?extends PropertyProxy<?,SimulatorPlug>>> propertyProxyTypes; private long delay = 0; /** * Creates a new DeviceProxyImpl object. * * @param name Proxy name */ public PSDeviceProxy(String name, SimulatorPlug plug) { this(name, plug, (Long)SimulatorUtilities.getConfiguration(SimulatorUtilities.CONNECTION_DELAY)); } /** * Creates a new DeviceProxyImpl object. * * @param name Proxy name * @param connectionDelay */ public PSDeviceProxy(String name, SimulatorPlug plug, long connectionDelay) { super(name,plug); this.delay = connectionDelay; } public void initalizeCommands(CommandProxyImpl[] ifcComm) { for (CommandProxyImpl com : ifcComm) { commands.put(com.getName(), com); } } public void initalizeProperties(String[] propertyNames, Class<?extends SimpleProperty<?>>[] propTypes, Class<?extends PropertyProxy<?,SimulatorPlug>>[] propProxyTypes) { if (propertyProxies == null) { propertyProxies = new HashMap<String, PropertyProxy<?,SimulatorPlug>>(propertyNames.length + 1); } if (propertyProxyTypes == null) { propertyProxyTypes = new HashMap<String, Class<? extends PropertyProxy<?,SimulatorPlug>>>(propertyNames.length + 1); } if (directoryProxies == null) { directoryProxies = new HashMap<String, DirectoryProxy<SimulatorPlug>>(propertyNames.length + 1); } if (propProxyTypes == null) { for (int i = 0; i < propertyNames.length; i++) { String s = propertyNames[i]; propertyTypes.put(s, propTypes[i]); propertyProxies.put(s, null); directoryProxies.put(s, null); } } else { for (int i = 0; i < propertyNames.length; i++) { String s = propertyNames[i]; propertyTypes.put(s, propTypes[i]); propertyProxies.put(s, null); directoryProxies.put(s, null); propertyProxyTypes.put(s, propProxyTypes[i]); } } delayedConnect(delay); } public void delayedConnect(long timeout) { setConnectionState(ConnectionState.CONNECTING); if (timeout > 0) { Timer t = new Timer(); t.schedule(new TimerTask() { @Override public void run() { setConnectionState(ConnectionState.CONNECTED); } }, timeout); } else { setConnectionState(ConnectionState.CONNECTED); } } } /* __oOo__ */ /* __oOo__ */