/* * 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; import java.util.EnumSet; /** * Enumeration <code>DynamicValue</code> describes avaliable states in which * dynamic value property might find itself. This state does not described * connection management status since this is done by ConnectionState. * By definition DynamicValueState * objects define data property from point when property is connected to remote * object till the point this connection is destroyed on local system. Dynamic * value property might be described at given moment with set of different * states. Interpretation of states is left to the particular implementation. * Also implementation migth find some states compatible and some not with * eachother. * * @author Igor Kriznar (igor.kriznarATcosylab.com) */ public enum DynamicValueState { /** * No value received from remote object up to this point. */ NO_VALUE, /** * Normal state, no errors or alarms, connection to remote object functions * without problems. */ NORMAL, /** * General warning, dynamic value my not be reliable. Corresponds to MINOR_ALARM severity in EPICS. */ WARNING, /** * More serious than warning, dynamic value my not be reliable. Corresponds to MAJOR_ALARM severity in EPICS. */ ALARM, /** * Error occured on remote object, dynamic value my not be reliable. Corresponds to INVALID_ALARM severity in EPICS. */ ERROR, /** * Dynamic value updated are not ariving for longer than timeout period. */ TIMEOUT, /** * Dynamic value updates are arriving but with delay larger than timelag * period. */ TIMELAG, /** * Remote object is not available, value is not reliable, timeout my occur as * well. */ LINK_NOT_AVAILABLE, /** * Dynamic value is has initialized basic set of meta-data characteristic. This means that * call for meta-data characteristic will return values. */ HAS_METADATA, /** * Dynamic value has received at least one live update. This means for example that proxy returns * non-null value for latestReceivedValueResponse. */ HAS_LIVE_DATA; /** * Return <code>true</code> if both sets has same states. * @param set1 first set * @param set2 second set * @return <code>true</code> if both sets has same states */ public static final boolean areSetsEqual(final EnumSet<DynamicValueState> set1, final EnumSet<DynamicValueState> set2) { if (set1 == null && set2 == null) { return true; } if (set1 == null && set2 !=null || set1 != null && set2 ==null) { return false; } if (set1.size()!=set2.size()) { return false; } // if sizes are equal, than all in A must be in B. for (DynamicValueState dvs : set2) { if (!set1.contains(dvs)) { return false; } } return true; } /** * Returns <code>true</code> if provided state set contains at least one of provided states. * * @param set set to be tested against * @param states the states to be checked for inclusion * @return <code>true</code> if at least one of provided states is inside this condition */ public static final boolean containsAnyOfStates(final EnumSet<DynamicValueState> set, final DynamicValueState... states) { for (DynamicValueState state : states) { if (set.contains(state)) { return true; } } return false; } /** * Returns <code>true</code> if provided state set contains at least one of provided states. * * @param states1 set to be tested against * @param states2 the states to be checked for inclusion * @return <code>true</code> if at least one of provided states is inside this condition */ public static final boolean containsAnyOfStates(final EnumSet<DynamicValueState> states1, final EnumSet<DynamicValueState> states2) { for (DynamicValueState state : states2) { if (states1.contains(state)) { return true; } } return false; } /** * Returns <code>true</code> only of all states are inside provided state set. * @param set the set to be tested against * @param states the states to be checked for inclusion * @return <code>true</code> only of all states are inside this condition */ public static final boolean containsAllStates( final EnumSet<DynamicValueState> set, final DynamicValueState... states) { for (DynamicValueState st: states) { if (!set.contains(st)) { return false; } } return true; } /** * Returns <code>true</code> only of all states are inside provided state set. * @param states1 the set to be tested against * @param states2 the states to be checked for inclusion * @return <code>true</code> only of all states are inside this condition */ public static final boolean containsAllStates(EnumSet<DynamicValueState> states1, EnumSet<DynamicValueState> states2) { for (DynamicValueState st: states2) { if (!states1.contains(st)) { return false; } } return true; } /** * Returns set, which is copy of provided state only without requested states. * @param set the set to be copied * @param states the states to be excluded in copy * @return set, which is copy of provided state only without requested states */ public static final EnumSet<DynamicValueState> deriveSetWithoutStates( final EnumSet<DynamicValueState> set, final DynamicValueState... states) { EnumSet<DynamicValueState> s = EnumSet.copyOf(set); for (DynamicValueState state : states) { s.remove(state); } return s; } /** * Returns set, which is copy of provided state only with included requested states. * @param set the set to be copied * @param states the states to be included in copy * @return set, which is copy of provided state only with included requested states */ public static final EnumSet<DynamicValueState> deriveSetWithStates( final EnumSet<DynamicValueState> set, final DynamicValueState... states) { EnumSet<DynamicValueState> s = EnumSet.copyOf(set); for (DynamicValueState state : states) { s.add(state); } return s; } } /* __oOo__ */