protected Collection<StateVariableValue> getCurrentState(String[] variableNames) throws Exception { lock(); try { Collection<StateVariableValue> values = new ArrayList<StateVariableValue>(); for (String variableName : variableNames) { variableName = variableName.trim(); StateVariable stateVariable = getService().getStateVariable(variableName); if (stateVariable == null || !stateVariable.getEventDetails().isSendEvents()) { log.fine("Ignoring unknown or non-evented state variable: " + variableName); continue; } StateVariableAccessor accessor = getService().getAccessor(stateVariable); if (accessor == null) { log.warning("Ignoring evented state variable without accessor: " + variableName); continue; } values.add(accessor.read(stateVariable, getImplementation())); } return values; } finally { unlock(); } }
@Override public Collection<StateVariableValue> getCurrentState() throws Exception { lock(); try { Collection<StateVariableValue> values = readInitialEventedStateVariableValues(); if (values != null) { log.fine( "Obtained initial state variable values for event, skipping individual state variable accessors"); return values; } values = new ArrayList(); for (StateVariable stateVariable : getService().getStateVariables()) { if (stateVariable.getEventDetails().isSendEvents()) { StateVariableAccessor accessor = getService().getAccessor(stateVariable); if (accessor == null) throw new IllegalStateException("No accessor for evented state variable"); values.add(accessor.read(stateVariable, getImplementation())); } } return values; } finally { unlock(); } }
private void generateStateVariable( StateVariable stateVariable, Document descriptor, Element serviveStateTableElement) { Element stateVariableElement = appendNewElement(descriptor, serviveStateTableElement, ELEMENT.stateVariable); appendNewElementIfNotNull( descriptor, stateVariableElement, ELEMENT.name, stateVariable.getName()); if (stateVariable.getTypeDetails().getDatatype() instanceof CustomDatatype) { appendNewElementIfNotNull( descriptor, stateVariableElement, ELEMENT.dataType, ((CustomDatatype) stateVariable.getTypeDetails().getDatatype()).getName()); } else { appendNewElementIfNotNull( descriptor, stateVariableElement, ELEMENT.dataType, stateVariable.getTypeDetails().getDatatype().getBuiltin().getDescriptorName()); } appendNewElementIfNotNull( descriptor, stateVariableElement, ELEMENT.defaultValue, stateVariable.getTypeDetails().getDefaultValue()); // The default is 'yes' but we generate it anyway just to be sure if (stateVariable.getEventDetails().isSendEvents()) { stateVariableElement.setAttribute(ATTRIBUTE.sendEvents.toString(), "yes"); } else { stateVariableElement.setAttribute(ATTRIBUTE.sendEvents.toString(), "no"); } if (stateVariable.getTypeDetails().getAllowedValues() != null) { Element allowedValueListElement = appendNewElement(descriptor, stateVariableElement, ELEMENT.allowedValueList); for (String allowedValue : stateVariable.getTypeDetails().getAllowedValues()) { appendNewElementIfNotNull( descriptor, allowedValueListElement, ELEMENT.allowedValue, allowedValue); } } if (stateVariable.getTypeDetails().getAllowedValueRange() != null) { Element allowedValueRangeElement = appendNewElement(descriptor, stateVariableElement, ELEMENT.allowedValueRange); appendNewElementIfNotNull( descriptor, allowedValueRangeElement, ELEMENT.minimum, stateVariable.getTypeDetails().getAllowedValueRange().getMinimum()); appendNewElementIfNotNull( descriptor, allowedValueRangeElement, ELEMENT.maximum, stateVariable.getTypeDetails().getAllowedValueRange().getMaximum()); if (stateVariable.getTypeDetails().getAllowedValueRange().getStep() >= 1l) { appendNewElementIfNotNull( descriptor, allowedValueRangeElement, ELEMENT.step, stateVariable.getTypeDetails().getAllowedValueRange().getStep()); } } }