From f837f4b287a172c4ebd9d1dfbe89a161b7ce6ac1 Mon Sep 17 00:00:00 2001 From: Asish Kumar Date: Sun, 24 May 2026 14:36:43 +0530 Subject: [PATCH] fix(workflow-operator): default boolean metadata fields --- .../scan/json/JSONLScanSourceOpDesc.scala | 2 +- .../dumbbellPlot/DumbbellPlotOpDesc.scala | 2 +- .../filledAreaPlot/FilledAreaPlotOpDesc.scala | 2 +- .../metadata/OperatorBooleanDefaultSpec.scala | 53 +++++++++++++++++++ 4 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 common/workflow-operator/src/test/scala/org/apache/texera/amber/operator/metadata/OperatorBooleanDefaultSpec.scala 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 2d86052fa58..5ca429f511c 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 0abed1b6e25..9d62310e85b 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 a4d262c050b..56aa041451b 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 00000000000..e1f16cd54c1 --- /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") + } +}