Skip to content

Commit 150d58c

Browse files
authored
[NU-2149] End scenario without sink (#8004)
1 parent fa98628 commit 150d58c

File tree

51 files changed

+813
-354
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+813
-354
lines changed

benchmarks/src/test/scala/pl/touk/nussknacker/engine/benchmarks/interpreter/InterpreterSetup.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ class InterpreterSetup[T: ClassTag] {
8383
ComponentDefinitionExtractionMode.FinalDefinition
8484
),
8585
ModelDefinitionBuilder.emptyExpressionConfig,
86-
ClassExtractionSettings.Default
86+
ClassExtractionSettings.Default,
87+
allowEndingScenarioWithoutSink = false,
8788
)
8889
val definitionsWithTypes = ModelDefinitionWithClasses(definitions)
8990

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package pl.touk.nussknacker.engine
2+
3+
import com.typesafe.config.Config
4+
import net.ceedubs.ficus.Ficus.toFicusConfig
5+
import net.ceedubs.ficus.readers.AnyValReaders._
6+
import net.ceedubs.ficus.readers.OptionReader._
7+
8+
final case class ModelConfig(
9+
allowEndingScenarioWithoutSink: Boolean,
10+
// TODO: we should parse this underlying config as ModelConfig class fields instead of passing raw config
11+
underlyingConfig: Config,
12+
)
13+
14+
object ModelConfig {
15+
16+
def parse(modelConfig: Config): ModelConfig = {
17+
ModelConfig(
18+
allowEndingScenarioWithoutSink = modelConfig.getOrElse[Boolean]("allowEndingScenarioWithoutSink", false),
19+
underlyingConfig = modelConfig,
20+
)
21+
}
22+
23+
}
Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,23 @@
11
package pl.touk.nussknacker.engine.api.process
22

33
import com.typesafe.config.Config
4+
import pl.touk.nussknacker.engine.ModelConfig
45
import pl.touk.nussknacker.engine.api.namespaces.NamingStrategy
56

67
// TODO: Rename to ModelDependencies + rename config to modelConfig
7-
final case class ProcessObjectDependencies private (config: Config, namingStrategy: NamingStrategy) extends Serializable
8+
final case class ProcessObjectDependencies private (modelConfig: ModelConfig, namingStrategy: NamingStrategy)
9+
extends Serializable {
10+
def config: Config = modelConfig.underlyingConfig
11+
}
812

913
object ProcessObjectDependencies {
1014

11-
def withConfig(modelConfig: Config): ProcessObjectDependencies = {
12-
ProcessObjectDependencies(modelConfig, NamingStrategy.fromConfig(modelConfig))
15+
def apply(underlyingConfig: Config, namingStrategy: NamingStrategy): ProcessObjectDependencies = {
16+
new ProcessObjectDependencies(ModelConfig.parse(underlyingConfig), namingStrategy)
17+
}
18+
19+
def withConfig(config: Config): ProcessObjectDependencies = {
20+
ProcessObjectDependencies(ModelConfig.parse(config), NamingStrategy.fromConfig(config))
1321
}
1422

1523
}

designer/server/src/main/scala/pl/touk/nussknacker/ui/additionalInfo/AdditionalInfoProviders.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,15 @@ class AdditionalInfoProviders(typeToConfig: ProcessingTypeDataProvider[ModelData
2323
ScalaServiceLoader
2424
.load[AdditionalInfoProvider](pt.modelClassLoader)
2525
.headOption
26-
.map(_.nodeAdditionalInfo(pt.modelConfig))
26+
.map(_.nodeAdditionalInfo(pt.modelConfig.underlyingConfig))
2727
)
2828

2929
private val propertiesProviders: ProcessingTypeDataProvider[Option[MetaData => Future[Option[AdditionalInfo]]], _] =
3030
typeToConfig.mapValues(pt =>
3131
ScalaServiceLoader
3232
.load[AdditionalInfoProvider](pt.modelClassLoader)
3333
.headOption
34-
.map(_.propertiesAdditionalInfo(pt.modelConfig))
34+
.map(_.propertiesAdditionalInfo(pt.modelConfig.underlyingConfig))
3535
)
3636

3737
def prepareAdditionalInfoForNode(nodeData: NodeData, processingType: ProcessingType)(

designer/server/src/main/scala/pl/touk/nussknacker/ui/definition/DefinitionsService.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ class DefinitionsService(
8484
}
8585

8686
import net.ceedubs.ficus.Ficus._
87-
val scenarioPropertiesDocsUrl = modelData.modelConfig.getAs[String]("scenarioPropertiesDocsUrl")
87+
val scenarioPropertiesDocsUrl = modelData.modelConfig.underlyingConfig.getAs[String]("scenarioPropertiesDocsUrl")
8888

8989
prepareUIDefinitions(
9090
withStaticDefinition,

designer/server/src/main/scala/pl/touk/nussknacker/ui/process/processingtype/ProcessingTypeData.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,12 @@ object ProcessingTypeData {
7676
componentDefinitionExtractionMode: ComponentDefinitionExtractionMode
7777
) = {
7878
// TODO: consider using ParameterName for property names instead of String (for scenario and fragment properties)
79-
val scenarioProperties = deploymentData.deploymentScenarioPropertiesConfig ++ modelData.modelConfig
79+
val scenarioProperties = deploymentData.deploymentScenarioPropertiesConfig ++ modelData.modelConfig.underlyingConfig
8080
.getOrElse[Map[String, ScenarioPropertyConfig]](
8181
"scenarioPropertiesConfig",
8282
Map.empty
8383
)
84-
val fragmentProperties = modelData.modelConfig
84+
val fragmentProperties = modelData.modelConfig.underlyingConfig
8585
.getOrElse[Map[String, ScenarioPropertyConfig]]("fragmentPropertiesConfig", Map.empty)
8686

8787
val staticDefinitionForDynamicComponents =

designer/server/src/test/scala/pl/touk/nussknacker/test/utils/domain/ProcessTestData.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ object ProcessTestData {
207207

208208
// TODO: merge with this below
209209
val sampleScenario: CanonicalProcess = {
210-
def endWithMessage(idSuffix: String, message: String): SubsequentNode = {
210+
def endWithMessage(idSuffix: String, message: String): Option[SubsequentNode] = {
211211
GraphBuilder
212212
.buildVariable("message" + idSuffix, "output", "message" -> s"'$message'".spel)
213213
.emptySink(
@@ -496,7 +496,7 @@ object ProcessTestData {
496496
.to(endWithMessage)
497497
}
498498

499-
private def endWithMessage: SubsequentNode = {
499+
private def endWithMessage: Option[SubsequentNode] = {
500500
val idSuffix = "suffix"
501501
val endMessage = "#test #{#input} #test \n#{\"abc\".toString + {1,2,3}.toString + \"abc\"}\n#test\n#{\"ab{}c\"}"
502502

designer/server/src/test/scala/pl/touk/nussknacker/ui/config/ConfigurationTest.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class ConfigurationTest extends AnyFunSuite with WithTestDeploymentManagerClassL
2828
)
2929
}
3030

31-
private lazy val modelDataConfig = modelData.modelConfig
31+
private lazy val modelDataConfig = modelData.modelConfig.underlyingConfig
3232

3333
private def classLoader = {
3434
getClass.getClassLoader

designer/server/src/test/scala/pl/touk/nussknacker/ui/definition/DefinitionsServiceSpec.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ class DefinitionsServiceSpec extends AnyFunSuite with Matchers with PatientScala
340340
val processingType = Streaming
341341

342342
val alignedComponentsDefinitionProvider = new AlignedComponentsDefinitionProvider(
343-
new BuiltInComponentsDefinitionsPreparer(ComponentsUiConfigParser.parse(model.modelConfig)),
343+
new BuiltInComponentsDefinitionsPreparer(ComponentsUiConfigParser.parse(model.modelConfig.underlyingConfig)),
344344
new FragmentComponentDefinitionExtractor(
345345
getClass.getClassLoader,
346346
model.modelDefinitionWithClasses.classDefinitions,

designer/server/src/test/scala/pl/touk/nussknacker/ui/definition/component/DefaultComponentServiceSpec.scala

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import pl.touk.nussknacker.engine.api.component._
1414
import pl.touk.nussknacker.engine.api.component.Component.AllowedProcessingModes
1515
import pl.touk.nussknacker.engine.api.component.ComponentType._
1616
import pl.touk.nussknacker.engine.api.graph.ScenarioGraph
17-
import pl.touk.nussknacker.engine.api.process.{ProcessObjectDependencies, ProcessingType}
17+
import pl.touk.nussknacker.engine.api.process.{ProcessingType, ProcessObjectDependencies}
1818
import pl.touk.nussknacker.engine.definition.component.Components.ComponentDefinitionExtractionMode
1919
import pl.touk.nussknacker.engine.definition.component.defaultconfig.DefaultsComponentGroupName._
2020
import pl.touk.nussknacker.engine.definition.component.defaultconfig.DefaultsComponentIcon
@@ -26,23 +26,33 @@ import pl.touk.nussknacker.engine.util.Implicits.RichScalaMap
2626
import pl.touk.nussknacker.restmodel.component.{ComponentLink, ComponentListElement, NodeUsageData}
2727
import pl.touk.nussknacker.restmodel.component.NodeUsageData.{FragmentUsageData, ScenarioUsageData}
2828
import pl.touk.nussknacker.security.Permission
29-
import pl.touk.nussknacker.test.config.ConfigWithScalaVersion
3029
import pl.touk.nussknacker.test.{EitherValuesDetailedMessage, PatientScalaFutures, ValidatedValuesDetailedMessage}
30+
import pl.touk.nussknacker.test.config.ConfigWithScalaVersion
3131
import pl.touk.nussknacker.test.mock.{MockDeploymentManager, MockFetchingProcessRepository}
3232
import pl.touk.nussknacker.test.utils.domain.{TestFactory, TestProcessingTypeDataProviderFactory}
3333
import pl.touk.nussknacker.test.utils.domain.TestProcessUtil.createFragmentEntity
3434
import pl.touk.nussknacker.ui.api.ScenarioStatusPresenter
3535
import pl.touk.nussknacker.ui.config.{ComponentLinkConfig, DesignerConfig}
3636
import pl.touk.nussknacker.ui.config.ComponentLinkConfig._
3737
import pl.touk.nussknacker.ui.definition.AlignedComponentsDefinitionProvider
38-
import pl.touk.nussknacker.ui.definition.component.ComponentListQueryOptions.{FetchAllWithUsages, FetchAllWithoutUsages, FetchNonFragmentsWithUsages, FetchNonFragmentsWithoutUsages}
38+
import pl.touk.nussknacker.ui.definition.component.ComponentListQueryOptions.{
39+
FetchAllWithoutUsages,
40+
FetchAllWithUsages,
41+
FetchNonFragmentsWithoutUsages,
42+
FetchNonFragmentsWithUsages
43+
}
3944
import pl.touk.nussknacker.ui.definition.component.ComponentModelData._
4045
import pl.touk.nussknacker.ui.definition.component.ComponentTestProcessData._
4146
import pl.touk.nussknacker.ui.definition.component.DynamicComponentProvider._
4247
import pl.touk.nussknacker.ui.process.DBProcessService
4348
import pl.touk.nussknacker.ui.process.deployment.scenariostatus.ScenarioStatusProvider
4449
import pl.touk.nussknacker.ui.process.fragment.DefaultFragmentRepository
45-
import pl.touk.nussknacker.ui.process.processingtype.{DeploymentData, ProcessingTypeData, ScenarioParametersService, ValueWithRestriction}
50+
import pl.touk.nussknacker.ui.process.processingtype.{
51+
DeploymentData,
52+
ProcessingTypeData,
53+
ScenarioParametersService,
54+
ValueWithRestriction
55+
}
4656
import pl.touk.nussknacker.ui.process.processingtype.provider.ProcessingTypeDataProvider
4757
import pl.touk.nussknacker.ui.process.repository.ScenarioWithDetailsEntity
4858
import pl.touk.nussknacker.ui.security.api._

0 commit comments

Comments
 (0)