This is an automated email from the ASF dual-hosted git repository.
github-merge-queue[bot] pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/texera.git
The following commit(s) were added to refs/heads/main by this push:
new c435aa7343 fix(workflow-operator): default boolean metadata fields
(#5177)
c435aa7343 is described below
commit c435aa73434f64fbffe82d5242ded17b56952aab
Author: Asish Kumar <[email protected]>
AuthorDate: Mon May 25 11:42:30 2026 +0530
fix(workflow-operator): default boolean metadata fields (#5177)
### What changes were proposed in this PR?
Some operator boolean properties initialized to `false` did not declare
a JSON-schema default value, so the frontend form could render them as
neutral checkboxes instead of unchecked checkboxes.
This PR adds explicit `defaultValue = "false"` metadata for:
- `FilledAreaPlotOpDesc.facetColumn`
- `DumbbellPlotOpDesc.showLegends`
- `JSONLScanSourceOpDesc.flatten`
It also adds a focused metadata-generation spec that asserts these
boolean schemas include a `false` default.
### Any related issues, documentation, discussions?
Closes #4015.
### How was this PR tested?
Validated locally with a temporary Postgres container loaded with the
same DDL files used by CI for JOOQ generation.
```
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
COURSIER_CACHE=/tmp/texera-coursier-cache
/usr/lib/jvm/java-17-openjdk-amd64/bin/java
-Dsbt.ivy.home=/tmp/texera-ivy-cache -Dsbt.boot.directory=/tmp/texera-sbt-boot
-Dsbt.global.base=/tmp/texera-sbt-global -jar /tmp/sbt-launch-1.12.9.jar
"WorkflowOperator/testOnly
org.apache.texera.amber.operator.metadata.OperatorBooleanDefaultSpec"
```
Result: 2 passed.
```
JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
COURSIER_CACHE=/tmp/texera-coursier-cache
/usr/lib/jvm/java-17-openjdk-amd64/bin/java
-Dsbt.ivy.home=/tmp/texera-ivy-cache -Dsbt.boot.directory=/tmp/texera-sbt-boot
-Dsbt.global.base=/tmp/texera-sbt-global -jar /tmp/sbt-launch-1.12.9.jar
scalafmtCheckAll
```
Result: passed.
### Was this PR authored or co-authored using generative AI tooling?
Generated-by: OpenAI Codex (GPT-5)
---
.../source/scan/json/JSONLScanSourceOpDesc.scala | 2 +-
.../dumbbellPlot/DumbbellPlotOpDesc.scala | 2 +-
.../filledAreaPlot/FilledAreaPlotOpDesc.scala | 2 +-
.../metadata/OperatorBooleanDefaultSpec.scala | 53 ++++++++++++++++++++++
4 files changed, 56 insertions(+), 3 deletions(-)
diff --git
a/common/workflow-operator/src/main/scala/org/apache/texera/amber/operator/source/scan/json/JSONLScanSourceOpDesc.scala
b/common/workflow-operator/src/main/scala/org/apache/texera/amber/operator/source/scan/json/JSONLScanSourceOpDesc.scala
index 2d86052fa5..5ca429f511 100644
---
a/common/workflow-operator/src/main/scala/org/apache/texera/amber/operator/source/scan/json/JSONLScanSourceOpDesc.scala
+++
b/common/workflow-operator/src/main/scala/org/apache/texera/amber/operator/source/scan/json/JSONLScanSourceOpDesc.scala
@@ -37,7 +37,7 @@ import scala.jdk.CollectionConverters.IteratorHasAsScala
class JSONLScanSourceOpDesc extends ScanSourceOpDesc {
- @JsonProperty(required = true)
+ @JsonProperty(required = true, defaultValue = "false")
@JsonPropertyDescription("flatten nested objects and arrays")
var flatten: Boolean = false
diff --git
a/common/workflow-operator/src/main/scala/org/apache/texera/amber/operator/visualization/dumbbellPlot/DumbbellPlotOpDesc.scala
b/common/workflow-operator/src/main/scala/org/apache/texera/amber/operator/visualization/dumbbellPlot/DumbbellPlotOpDesc.scala
index 0abed1b6e2..9d62310e85 100644
---
a/common/workflow-operator/src/main/scala/org/apache/texera/amber/operator/visualization/dumbbellPlot/DumbbellPlotOpDesc.scala
+++
b/common/workflow-operator/src/main/scala/org/apache/texera/amber/operator/visualization/dumbbellPlot/DumbbellPlotOpDesc.scala
@@ -81,7 +81,7 @@ class DumbbellPlotOpDesc extends PythonOperatorDescriptor {
@JsonProperty(value = "dots", required = false)
var dots: util.List[DumbbellDotConfig] = _
- @JsonProperty(value = "showLegends", required = false)
+ @JsonProperty(value = "showLegends", required = false, defaultValue =
"false")
@JsonSchemaTitle("Show Legends?")
@JsonPropertyDescription("whether to show legends in the graph")
var showLegends: Boolean = false
diff --git
a/common/workflow-operator/src/main/scala/org/apache/texera/amber/operator/visualization/filledAreaPlot/FilledAreaPlotOpDesc.scala
b/common/workflow-operator/src/main/scala/org/apache/texera/amber/operator/visualization/filledAreaPlot/FilledAreaPlotOpDesc.scala
index a4d262c050..56aa041451 100644
---
a/common/workflow-operator/src/main/scala/org/apache/texera/amber/operator/visualization/filledAreaPlot/FilledAreaPlotOpDesc.scala
+++
b/common/workflow-operator/src/main/scala/org/apache/texera/amber/operator/visualization/filledAreaPlot/FilledAreaPlotOpDesc.scala
@@ -60,7 +60,7 @@ class FilledAreaPlotOpDesc extends PythonOperatorDescriptor {
@AutofillAttributeName
var color: EncodableString = ""
- @JsonProperty(required = true)
+ @JsonProperty(required = true, defaultValue = "false")
@JsonSchemaTitle("Split Plot by Line Group")
@JsonPropertyDescription("Do you want to split the graph")
var facetColumn: Boolean = false
diff --git
a/common/workflow-operator/src/test/scala/org/apache/texera/amber/operator/metadata/OperatorBooleanDefaultSpec.scala
b/common/workflow-operator/src/test/scala/org/apache/texera/amber/operator/metadata/OperatorBooleanDefaultSpec.scala
new file mode 100644
index 0000000000..e1f16cd54c
--- /dev/null
+++
b/common/workflow-operator/src/test/scala/org/apache/texera/amber/operator/metadata/OperatorBooleanDefaultSpec.scala
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.texera.amber.operator.metadata
+
+import org.apache.texera.amber.operator.LogicalOp
+import org.apache.texera.amber.operator.source.scan.json.JSONLScanSourceOpDesc
+import
org.apache.texera.amber.operator.visualization.dumbbellPlot.DumbbellPlotOpDesc
+import
org.apache.texera.amber.operator.visualization.filledAreaPlot.FilledAreaPlotOpDesc
+import org.scalatest.flatspec.AnyFlatSpec
+
+class OperatorBooleanDefaultSpec extends AnyFlatSpec {
+
+ private def assertFalseDefault(
+ opDescClass: Class[_ <: LogicalOp],
+ propertyName: String
+ ): Unit = {
+ val propertySchema =
+ OperatorMetadataGenerator
+ .generateOperatorJsonSchema(opDescClass)
+ .path("properties")
+ .path(propertyName)
+
+ assert(propertySchema.path("type").asText() == "boolean")
+ assert(propertySchema.has("default"))
+ assert(!propertySchema.path("default").asBoolean())
+ }
+
+ "Operator metadata generation" should "emit false defaults for visualization
checkbox fields" in {
+ assertFalseDefault(classOf[FilledAreaPlotOpDesc], "facetColumn")
+ assertFalseDefault(classOf[DumbbellPlotOpDesc], "showLegends")
+ }
+
+ it should "emit a false default for JSONL flattening" in {
+ assertFalseDefault(classOf[JSONLScanSourceOpDesc], "flatten")
+ }
+}