Class AbstractPollingBinding<P>
java.lang.Object
com.inductiveautomation.perspective.gateway.binding.AbstractPollingBinding<P>
- All Implemented Interfaces:
Binding
- Direct Known Subclasses:
HttpBinding
,QueryBinding
Abstract base class which takes care of executing bindings which have a polling option in a thread-safe manner.
Also has a debouncing feature built in.
-
Nested Class Summary
Nested Classes -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final BindingContext
protected AbstractPollingBinding.State
Fields inherited from interface com.inductiveautomation.perspective.gateway.api.Binding
BAD_CONFIG, BAD_REF, BIDIRECTIONAL_KEY, COALESCE_KEY, INITIAL_VALUE, MDC_BINDING_TARGET, NOT_FOUND
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotected
AbstractPollingBinding
(BindingContext bindingContext, String pollingRateExpression, Function<P, QualifiedValue> fetchFunction, boolean valueCacheEnabled) -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract P
This method will be called when it is time to fetch a new value.protected abstract boolean
isDirty()
If any dependencies of the implementation have changed, this method should return true, which will kick off another execution if dependencies have changed while the execution was running.protected abstract boolean
isReady()
Indicates whether or not the instance of the underlying implementation is ready for execution.void
Called to prompt the binding to produce a value as soon as possible.protected void
Schedule the next execution immediately.void
shutdown()
Shut down the binding.void
startup()
Start up the binding.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface com.inductiveautomation.perspective.gateway.api.Binding
isBidirectional, onTargetUpdated, shouldCoalesce
-
Field Details
-
context
-
state
-
-
Constructor Details
-
AbstractPollingBinding
protected AbstractPollingBinding(@Nonnull BindingContext bindingContext, @Nullable String pollingRateExpression, @Nonnull Function<P, QualifiedValue> fetchFunction, boolean valueCacheEnabled) throws ConfigurationException- Parameters:
fetchFunction
- A function to retrieve a new value. Must be a pure function of P - this function may not use anything but what is available through the parameter object, otherwise a memory leak will occur because the param object and the fetch function may outlive this binding instance in theValueCache
.- Throws:
ConfigurationException
-
-
Method Details
-
resolveReferences
- Specified by:
resolveReferences
in interfaceBinding
-
startup
public void startup()Description copied from interface:Binding
Start up the binding. Will be called on-queue -
shutdown
public void shutdown()Description copied from interface:Binding
Shut down the binding. Will be called on-queue -
isReady
protected abstract boolean isReady()Indicates whether or not the instance of the underlying implementation is ready for execution. -
isDirty
protected abstract boolean isDirty()If any dependencies of the implementation have changed, this method should return true, which will kick off another execution if dependencies have changed while the execution was running. -
buildFetchParameters
This method will be called when it is time to fetch a new value. The parameter object must implement hashcode and equals, and must contain everything needed to run this parameter's fetch function. The parameter object will be given to theValueCache
, which will then execute the fetch function if a new value is needed. This method will be called within a synchronized block holding this lock. -
scheduleNow
protected void scheduleNow()Schedule the next execution immediately. This method is debounced. -
onUserRefresh
public void onUserRefresh()Description copied from interface:Binding
Called to prompt the binding to produce a value as soon as possible. This _not_ the normal way that bindings work. Bindings are expected to produce a value un-prompted after startup, and then again whenever they feel is appropriate. This is there to allow the user to call component.refreshBinding(property) and prompt a non-polling binding to run.- Specified by:
onUserRefresh
in interfaceBinding
-