diff --git a/designer/server/src/main/scala/pl/touk/nussknacker/ui/definition/DefinitionsService.scala b/designer/server/src/main/scala/pl/touk/nussknacker/ui/definition/DefinitionsService.scala index 92c5d4b8b4b..2f8d59055ab 100644 --- a/designer/server/src/main/scala/pl/touk/nussknacker/ui/definition/DefinitionsService.scala +++ b/designer/server/src/main/scala/pl/touk/nussknacker/ui/definition/DefinitionsService.scala @@ -10,7 +10,7 @@ import pl.touk.nussknacker.engine.definition.component.{ComponentStaticDefinitio import pl.touk.nussknacker.engine.util.Implicits.RichScalaMap import pl.touk.nussknacker.engine.ModelData import pl.touk.nussknacker.engine.api.TemplateEvaluationResult -import pl.touk.nussknacker.engine.api.typed.typing.{Typed, TypingResult} +import pl.touk.nussknacker.engine.api.typed.typing.{Typed, TypedClass, TypingResult} import pl.touk.nussknacker.restmodel.definition._ import pl.touk.nussknacker.ui.definition.DefinitionsService.{ ComponentUiConfigMode, @@ -106,7 +106,13 @@ class DefinitionsService( UIDefinitions( componentGroups = ComponentGroupsPreparer.prepareComponentGroups(components), components = components.map(component => component.component.id -> createUIComponentDefinition(component)).toMap, - classes = modelData.modelDefinitionWithClasses.classDefinitions.all.toList.map(_.clazzName), + classes = modelData.modelDefinitionWithClasses.classDefinitions.all.toList + .map(_.clazzName) + .filter { + case t: TypedClass if t.klass.isArray => false + case _ => true + } + .sortBy(_.display.toLowerCase), scenarioProperties = { if (forFragment) { createUIProperties(FragmentPropertiesConfig.properties ++ fragmentPropertiesConfig, fragmentPropertiesDocsUrl) diff --git a/designer/server/src/test/scala/pl/touk/nussknacker/ui/api/DefinitionResourcesSpec.scala b/designer/server/src/test/scala/pl/touk/nussknacker/ui/api/DefinitionResourcesSpec.scala index e79e236834e..d62d72a92db 100644 --- a/designer/server/src/test/scala/pl/touk/nussknacker/ui/api/DefinitionResourcesSpec.scala +++ b/designer/server/src/test/scala/pl/touk/nussknacker/ui/api/DefinitionResourcesSpec.scala @@ -10,6 +10,7 @@ import org.scalatest.{BeforeAndAfterAll, BeforeAndAfterEach, OptionValues} import pl.touk.nussknacker.engine.api.CirceUtil.RichACursor import pl.touk.nussknacker.engine.api.definition.FixedExpressionValue import pl.touk.nussknacker.engine.api.parameter.{ParameterName, ValueInputWithFixedValuesProvided} +import pl.touk.nussknacker.engine.api.typed.typing.{Typed, TypingResult, Unknown} import pl.touk.nussknacker.engine.api.{FragmentSpecificData, MetaData} import pl.touk.nussknacker.engine.canonicalgraph.canonicalnode.FlatNode import pl.touk.nussknacker.engine.canonicalgraph.{CanonicalProcess, canonicalnode} @@ -103,6 +104,20 @@ class DefinitionResourcesSpec } } + it("should return definition sorted data for allowed classes - skipping array because list should be uses instead") { + getProcessDefinitionData() ~> check { + status shouldBe StatusCodes.OK + + val allowedClasses = responseAs[Json].hcursor.downField("classes").focus.value.asArray.value + val allowedClassesRefClazzNames = allowedClasses.flatMap(_.hcursor.downField("refClazzName").focus.value.asString) + val allowedClassesDisplay = allowedClasses.flatMap(_.hcursor.downField("display").focus.value.asString) + + allowedClassesRefClazzNames should contain("java.util.List") + allowedClassesRefClazzNames should not contain (Array().getClass.getName) + allowedClassesDisplay shouldBe allowedClassesDisplay.sortBy(_.toLowerCase) + } + } + it("should return info about editor based on fragment parameter definition") { val fragmentWithFixedValuesEditor = { CanonicalProcess(