/* * 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.csstudio.dal.impl; import org.csstudio.dal.DynamicValueProperty; import org.csstudio.dal.context.AbstractApplicationContext; import org.csstudio.dal.context.DeviceFamily; import org.csstudio.dal.device.AbstractDevice; import org.csstudio.dal.device.DeviceCollectionMap; import org.csstudio.dal.group.GroupDataAccess; import org.csstudio.dal.group.PropertyGroupConstrain; import org.csstudio.dal.proxy.AbstractPlug; import org.csstudio.dal.proxy.Proxy; import org.csstudio.dal.spi.DeviceFactory; /** * Default device family implementation. This class is based on the * {@link DeviceCollectionMap} which means that all devices are stored * in a HashMap, which is not synchronized. Therefore, when adding * and removing devices one should be careful about the synchronization * because HashMap is not syncrhonized. * */ public class DeviceFamilyImpl<T extends AbstractDevice> extends DeviceCollectionMap<T> implements DeviceFamily<T>{ private DeviceFactory df; static final Class<? extends AbstractDevice> c = AbstractDevice.class; /** * Creates a new DeviceFamilyImpl object. * * @param df Device factory. */ public DeviceFamilyImpl(DeviceFactory df){ super((Class<T>) c); this.df = df; } /* * (non-Javadoc) * @see org.csstudio.dal.context.DeviceFamily#destroyAll() */ @Override public void destroyAll(){ Object[] devArray = devices.values().toArray(); this.devices.clear(); for (Object dev : devArray) destroy((T)dev); } /* * (non-Javadoc) * @see org.csstudio.dal.context.DeviceFamily#destroy(org.csstudio.dal.device.AbstractDevice) */ @Override public void destroy(T device){ remove(device); if (!device.isDestroyed()) { AbstractPlug plug = (AbstractPlug)df.getPlug(); Proxy[] proxy = ((AbstractDeviceImpl)device).releaseProxy(true); if (proxy != null && proxy[0]!=null) plug.releaseProxy(proxy[0]); if (proxy != null && proxy[1]!=null && proxy[1]!=proxy[0]) plug.releaseProxy(proxy[1]); } } /* * (non-Javadoc) * @see org.csstudio.dal.context.DeviceFamily#getApplicationContext() */ @Override public AbstractApplicationContext getApplicationContext() { return df.getApplicationContext(); } /* * (non-Javadoc) * @see org.csstudio.dal.group.GroupDataAccessProvider#getGroupDataAccess(java.lang.Class, java.lang.Class) */ @Override public <Tt, P extends DynamicValueProperty<?>> GroupDataAccess<Tt, P> getGroupDataAccess( Class<Tt> dataType, Class<P> propertyType) { // NOT TO BE DONE throw new UnsupportedOperationException(); } /* * (non-Javadoc) * @see org.csstudio.dal.group.GroupDataAccessProvider#getGroupDataAccess(java.lang.Class, java.lang.Class, org.csstudio.dal.group.PropertyGroupConstrain) */ @Override public <Tt, P extends DynamicValueProperty<Tt>> GroupDataAccess<Tt, P> getGroupDataAccess(Class<Tt> dataType, Class<P> propertyType, PropertyGroupConstrain constrain){ // NOT TO BE DONE throw new UnsupportedOperationException(); } /* * (non-Javadoc) * @see org.csstudio.dal.device.DeviceCollectionMap#add(null) */ @Override public void add(T object){ super.add(object); } }