From ff375f324dc5541961676c56745046d1f40ad042 Mon Sep 17 00:00:00 2001 From: Paul Griffith Date: Tue, 18 Oct 2022 10:36:45 -0700 Subject: [PATCH] Add isAvailable expression function --- .../org/imdc/extensions/client/ClientHook.kt | 12 +++++++++ .../common/expressions/IsAvailableFunction.kt | 26 +++++++++++++++++++ .../imdc/extensions/designer/DesignerHook.kt | 12 +++++++++ .../imdc/extensions/gateway/GatewayHook.kt | 12 +++++++++ 4 files changed, 62 insertions(+) create mode 100644 common/src/main/kotlin/org/imdc/extensions/common/expressions/IsAvailableFunction.kt diff --git a/client/src/main/kotlin/org/imdc/extensions/client/ClientHook.kt b/client/src/main/kotlin/org/imdc/extensions/client/ClientHook.kt index 24bc3f6..6b9d2dc 100644 --- a/client/src/main/kotlin/org/imdc/extensions/client/ClientHook.kt +++ b/client/src/main/kotlin/org/imdc/extensions/client/ClientHook.kt @@ -2,6 +2,7 @@ package org.imdc.extensions.client import com.inductiveautomation.ignition.client.model.ClientContext import com.inductiveautomation.ignition.common.BundleUtil +import com.inductiveautomation.ignition.common.expressions.ExpressionFunctionManager import com.inductiveautomation.ignition.common.licensing.LicenseState import com.inductiveautomation.ignition.common.script.ScriptManager import com.inductiveautomation.vision.api.client.AbstractClientModuleHook @@ -9,6 +10,7 @@ import org.imdc.extensions.common.DatasetExtensions import org.imdc.extensions.common.ExtensionDocProvider import org.imdc.extensions.common.UtilitiesExtensions import org.imdc.extensions.common.addPropertyBundle +import org.imdc.extensions.common.expressions.IsAvailableFunction @Suppress("unused") class ClientHook : AbstractClientModuleHook() { @@ -31,4 +33,14 @@ class ClientHook : AbstractClientModuleHook() { addScriptModule("system.project", ClientProjectExtensions(context), ExtensionDocProvider) } } + + override fun configureFunctionFactory(factory: ExpressionFunctionManager) { + factory.apply { + addFunction( + IsAvailableFunction.NAME, + IsAvailableFunction.CATEGORY, + IsAvailableFunction(), + ) + } + } } diff --git a/common/src/main/kotlin/org/imdc/extensions/common/expressions/IsAvailableFunction.kt b/common/src/main/kotlin/org/imdc/extensions/common/expressions/IsAvailableFunction.kt new file mode 100644 index 0000000..effce9d --- /dev/null +++ b/common/src/main/kotlin/org/imdc/extensions/common/expressions/IsAvailableFunction.kt @@ -0,0 +1,26 @@ +package org.imdc.extensions.common.expressions + +import com.inductiveautomation.ignition.common.expressions.Expression +import com.inductiveautomation.ignition.common.expressions.functions.AbstractFunction +import com.inductiveautomation.ignition.common.model.values.BasicQualifiedValue +import com.inductiveautomation.ignition.common.model.values.QualifiedValue +import com.inductiveautomation.ignition.common.model.values.QualityCode + +class IsAvailableFunction : AbstractFunction() { + override fun validateNumArgs(num: Int): Boolean = num == 1 + override fun execute(expressions: Array): QualifiedValue { + val qualifiedValue = expressions[0].execute() + val value = + qualifiedValue.quality.isNot(QualityCode.Bad_NotFound) && qualifiedValue.quality.isNot(QualityCode.Bad_Disabled) + return BasicQualifiedValue(value) + } + + override fun getArgDocString(): String = "value" + override fun getFunctionDisplayName(): String = NAME + override fun getType(): Class<*> = Boolean::class.java + + companion object { + const val NAME = "isAvailable" + const val CATEGORY = "Logic" + } +} diff --git a/designer/src/main/kotlin/org/imdc/extensions/designer/DesignerHook.kt b/designer/src/main/kotlin/org/imdc/extensions/designer/DesignerHook.kt index a4e58e1..5fed403 100644 --- a/designer/src/main/kotlin/org/imdc/extensions/designer/DesignerHook.kt +++ b/designer/src/main/kotlin/org/imdc/extensions/designer/DesignerHook.kt @@ -1,6 +1,7 @@ package org.imdc.extensions.designer import com.inductiveautomation.ignition.common.BundleUtil +import com.inductiveautomation.ignition.common.expressions.ExpressionFunctionManager import com.inductiveautomation.ignition.common.licensing.LicenseState import com.inductiveautomation.ignition.common.script.ScriptManager import com.inductiveautomation.ignition.designer.model.AbstractDesignerModuleHook @@ -9,6 +10,7 @@ import org.imdc.extensions.common.DatasetExtensions import org.imdc.extensions.common.ExtensionDocProvider import org.imdc.extensions.common.UtilitiesExtensions import org.imdc.extensions.common.addPropertyBundle +import org.imdc.extensions.common.expressions.IsAvailableFunction @Suppress("unused") class DesignerHook : AbstractDesignerModuleHook() { @@ -31,4 +33,14 @@ class DesignerHook : AbstractDesignerModuleHook() { addScriptModule("system.project", DesignerProjectExtensions(context), ExtensionDocProvider) } } + + override fun configureFunctionFactory(factory: ExpressionFunctionManager) { + factory.apply { + addFunction( + IsAvailableFunction.NAME, + IsAvailableFunction.CATEGORY, + IsAvailableFunction(), + ) + } + } } diff --git a/gateway/src/main/kotlin/org/imdc/extensions/gateway/GatewayHook.kt b/gateway/src/main/kotlin/org/imdc/extensions/gateway/GatewayHook.kt index b4bc735..38af2ea 100644 --- a/gateway/src/main/kotlin/org/imdc/extensions/gateway/GatewayHook.kt +++ b/gateway/src/main/kotlin/org/imdc/extensions/gateway/GatewayHook.kt @@ -1,6 +1,7 @@ package org.imdc.extensions.gateway import com.inductiveautomation.ignition.common.BundleUtil +import com.inductiveautomation.ignition.common.expressions.ExpressionFunctionManager import com.inductiveautomation.ignition.common.licensing.LicenseState import com.inductiveautomation.ignition.common.script.ScriptManager import com.inductiveautomation.ignition.gateway.model.AbstractGatewayModuleHook @@ -9,6 +10,7 @@ import org.imdc.extensions.common.DatasetExtensions import org.imdc.extensions.common.ExtensionDocProvider import org.imdc.extensions.common.UtilitiesExtensions import org.imdc.extensions.common.addPropertyBundle +import org.imdc.extensions.common.expressions.IsAvailableFunction @Suppress("unused") class GatewayHook : AbstractGatewayModuleHook() { @@ -35,6 +37,16 @@ class GatewayHook : AbstractGatewayModuleHook() { } } + override fun configureFunctionFactory(factory: ExpressionFunctionManager) { + factory.apply { + addFunction( + IsAvailableFunction.NAME, + IsAvailableFunction.CATEGORY, + IsAvailableFunction(), + ) + } + } + override fun isFreeModule(): Boolean = true override fun isMakerEditionCompatible(): Boolean = true }