From 5c41866e97c570cc130b43d209f8909e45146498 Mon Sep 17 00:00:00 2001 From: Robert Csakany Date: Tue, 23 Jul 2024 18:14:57 +0200 Subject: [PATCH 1/2] JNG-5866 Add handling UI subtypes of Transfer field, relation --- .../epsilon/operations/jsl/_importAll.eol | 1 + .../operations/jsl/data/_importData.eol | 2 + .../jsl/data/actorAccessDeclaration.eol | 15 ++++ .../jsl/data/actorGroupDeclaration.eol | 17 +++++ .../jsl/data/actorLinkDeclaration.eol | 17 +++++ .../jsl/data/transferDeclaration.eol | 3 +- .../jsl/data/transferFieldDeclaration.eol | 5 ++ .../jsl/data/transferRelationDeclaration.eol | 8 ++- .../epsilon/operations/jsl/ui/_importUi.eol | 6 ++ .../operations/jsl/ui/viewDeclaration.eol | 9 +++ .../jsl/ui/viewFieldDeclaration.eol | 18 +++++ .../jsl/ui/viewGroupDeclaration.eol | 18 +++++ .../jsl/ui/viewPanelDeclaration.eol | 15 ++++ .../operations/jsl/ui/viewTabsDeclaration.eol | 18 +++++ .../operations/jsl/ui/visibleDeclaration.eol | 9 +++ .../psm/modules/actor/access.etl | 4 +- .../psm/modules/actor/actorType.etl | 1 + .../transferDeclarationQueryCustomizer.etl | 8 +-- .../transferDeclarationTransferAttribute.etl | 30 ++++---- .../transferDeclarationTransferRelation.etl | 40 +++++------ .../jsl2psm/ui/BasicWidgetsTestModelTest.java | 69 +++++++++++++++++++ .../resources/ui/BasicWidgetsTestModel.jsl | 61 ++++++++++++++++ 22 files changed, 330 insertions(+), 44 deletions(-) create mode 100644 judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/actorGroupDeclaration.eol create mode 100644 judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/actorLinkDeclaration.eol create mode 100644 judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/_importUi.eol create mode 100644 judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/viewDeclaration.eol create mode 100644 judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/viewFieldDeclaration.eol create mode 100644 judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/viewGroupDeclaration.eol create mode 100644 judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/viewPanelDeclaration.eol create mode 100644 judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/viewTabsDeclaration.eol create mode 100644 judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/visibleDeclaration.eol create mode 100644 judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/ui/BasicWidgetsTestModelTest.java create mode 100644 judo-tatami-jsl-jsl2psm/src/test/resources/ui/BasicWidgetsTestModel.jsl diff --git a/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/_importAll.eol b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/_importAll.eol index f69b66ae..b6796c97 100644 --- a/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/_importAll.eol +++ b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/_importAll.eol @@ -2,3 +2,4 @@ import "data/_importData.eol"; import "type/_importType.eol"; import "action/_importAction.eol"; import "namespace/_importNamespace.eol"; +import "ui/_importUi.eol"; diff --git a/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/_importData.eol b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/_importData.eol index c5cc047f..a17a4b95 100644 --- a/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/_importData.eol +++ b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/_importData.eol @@ -27,3 +27,5 @@ import "transferUpdateDeclaration.eol"; import "transferDeleteDeclaration.eol"; import "actorDeclaration.eol"; import "actorAccessDeclaration.eol"; +import "actorGroupDeclaration.eol"; +import "actorLinkDeclaration.eol"; \ No newline at end of file diff --git a/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/actorAccessDeclaration.eol b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/actorAccessDeclaration.eol index 8e806472..0d7c83af 100644 --- a/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/actorAccessDeclaration.eol +++ b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/actorAccessDeclaration.eol @@ -3,6 +3,21 @@ operation JSL!ActorAccessDeclaration getId(): String { return (self.eContainer.getId() + "/" + self.name); } +@cached +operation JSL!ActorAccessDeclaration getActorDeclaration(): JSL!ActorDeclaration { + if (self.eContainer.isTypeOf(JSL!ActorGroupDeclaration)) { + return self.eContainer.getActorDeclaration(); + } else if (self.eContainer.isTypeOf(JSL!ActorDeclaration)) { + return self.eContainer; + } + return null; +} + +@cached +operation JSL!ActorAccessDeclaration getTransferContainer(): JSL!TransferDeclaration { + return self.eContainer; +} + /* @cached diff --git a/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/actorGroupDeclaration.eol b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/actorGroupDeclaration.eol new file mode 100644 index 00000000..e31577d5 --- /dev/null +++ b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/actorGroupDeclaration.eol @@ -0,0 +1,17 @@ +@cached +operation JSL!ActorGroupDeclaration getFqName(): String { + if (self.eContainer.isTypeOf(JSL!ActorGroupDeclaration) or self.eContainer.isTypeOf(JSL!ActorDeclaration)) { + return self.eContainer.getFqName() + "::MenuItemGroup::" + self.name; + } + return self.tag; +} + +@cached +operation JSL!ActorGroupDeclaration getActorDeclaration(): JSL!ActorDeclaration { + if (self.eContainer.isTypeOf(JSL!ActorGroupDeclaration)) { + return self.eContainer.getActorDeclaration(); + } else if (self.eContainer.isTypeOf(JSL!ActorDeclaration)) { + return self.eContainer; + } + return null; +} diff --git a/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/actorLinkDeclaration.eol b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/actorLinkDeclaration.eol new file mode 100644 index 00000000..6fcaf114 --- /dev/null +++ b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/actorLinkDeclaration.eol @@ -0,0 +1,17 @@ +@cached +operation JSL!ActorLinkDeclaration getFqName(): String { + if (self.eContainer.isTypeOf(JSL!ActorGroupDeclaration) or self.eContainer.isTypeOf(JSL!ActorDeclaration)) { + return self.eContainer.getFqName() + "::" + self.name; + } + return self.name; +} + +@cached +operation JSL!ActorLinkDeclaration getActorDeclaration(): JSL!ActorDeclaration { + if (self.eContainer.isTypeOf(JSL!ActorGroupDeclaration)) { + return self.eContainer.getActorDeclaration(); + } else if (self.eContainer.isTypeOf(JSL!ActorDeclaration)) { + return self.eContainer; + } + return null; +} diff --git a/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/transferDeclaration.eol b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/transferDeclaration.eol index d1f04627..1134c8c1 100644 --- a/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/transferDeclaration.eol +++ b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/transferDeclaration.eol @@ -14,10 +14,9 @@ operation JSL!TransferDeclaration getId(): String { @cached operation JSL!TransferDeclaration getModelRoot(): JUDOPSM!Package { - return self.getTransferDeclarationEquivalent().eContainer().getModelRoot(); + return self.eContainer().getModelRoot(); } - @cached operation JSL!TransferDeclaration isDeleteSupported(): Boolean { if (self.map.isDefined()) { diff --git a/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/transferFieldDeclaration.eol b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/transferFieldDeclaration.eol index 16192a2f..3b517a32 100644 --- a/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/transferFieldDeclaration.eol +++ b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/transferFieldDeclaration.eol @@ -92,3 +92,8 @@ operation JSL!TransferFieldDeclaration isFilterable() : Boolean { ); } +@cached +operation JSL!TransferFieldDeclaration getTransferContainer(): JSL!TransferDeclaration { + return self.eContainer; +} + diff --git a/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/transferRelationDeclaration.eol b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/transferRelationDeclaration.eol index cf94f7b4..4e507514 100644 --- a/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/transferRelationDeclaration.eol +++ b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/data/transferRelationDeclaration.eol @@ -114,6 +114,12 @@ operation JSL!TransferRelationDeclaration getMappedTransferRelationEquivalent() @cached operation JSL!TransferRelationDeclaration isActorRelated(): Boolean { - return self.isKindOf(JSL!ActorAccessDeclaration); + return self.isKindOf(JSL!ActorAccessDeclaration) or self.isKindOf(JSL!ActorLinkDeclaration); } +@cached +operation JSL!TransferRelationDeclaration getTransferContainer(): JSL!TransferDeclaration { + return self.eContainer; +} + + diff --git a/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/_importUi.eol b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/_importUi.eol new file mode 100644 index 00000000..87d5f39d --- /dev/null +++ b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/_importUi.eol @@ -0,0 +1,6 @@ +import "viewDeclaration.eol"; +import "viewFieldDeclaration.eol"; +import "viewGroupDeclaration.eol"; +import "viewPanelDeclaration.eol"; +import "viewTabsDeclaration.eol"; +import "visibleDeclaration.eol"; diff --git a/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/viewDeclaration.eol b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/viewDeclaration.eol new file mode 100644 index 00000000..387b8ada --- /dev/null +++ b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/viewDeclaration.eol @@ -0,0 +1,9 @@ +@cached +operation JSL!ViewDeclaration getId(): String { + return (self.eContainer.getId() + "/" + self.name); +} + +@cached +operation JSL!ViewDeclaration getFqName(): String { + return self.eContainer.getFqName() + "::" + self.name; +} diff --git a/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/viewFieldDeclaration.eol b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/viewFieldDeclaration.eol new file mode 100644 index 00000000..682779aa --- /dev/null +++ b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/viewFieldDeclaration.eol @@ -0,0 +1,18 @@ +@cached +operation JSL!ViewFieldDeclaration getId(): String { + return (self.eContainer.getId() + "/" + self.name); +} + +@cached +operation JSL!ViewFieldDeclaration getFqName(): String { + return self.eContainer.getFqName() + "::" + self.name; +} + +@cached +operation JSL!ViewFieldDeclaration getTransferContainer(): JSL!TransferDeclaration { + var to = self.eContainer; + while (to.isDefined() and not to.isKindOf(JSL!TransferDeclaration)) { + to = to.eContainer; + } + return to; +} diff --git a/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/viewGroupDeclaration.eol b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/viewGroupDeclaration.eol new file mode 100644 index 00000000..c476b32e --- /dev/null +++ b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/viewGroupDeclaration.eol @@ -0,0 +1,18 @@ +@cached +operation JSL!ViewGroupDeclaration getId(): String { + return (self.eContainer.getId() + "/" + self.name); +} + +@cached +operation JSL!ViewGroupDeclaration getFqName(): String { + return self.eContainer.getFqName() + "::" + self.name; +} + +@cached +operation JSL!ViewGroupDeclaration getTransferContainer(): JSL!TransferDeclaration { + var to = self.eContainer; + while (to.isDefined() and not to.isKindOf(JSL!TransferDeclaration)) { + to = to.eContainer; + } + return to; +} diff --git a/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/viewPanelDeclaration.eol b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/viewPanelDeclaration.eol new file mode 100644 index 00000000..f30218af --- /dev/null +++ b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/viewPanelDeclaration.eol @@ -0,0 +1,15 @@ +@cached +operation JSL!ViewPanelDeclaration getModelRoot(): JUDOPSM!Package { + return self.eContainer().getModelRoot(); +} + +@cached +operation JSL!ViewPanelDeclaration getTransferContainer(): JSL!TransferDeclaration { + if (self.eContainer.isKindOf(JSL!TransferDeclaration)) { + return self.eContainer; + } else if (self.eContainer.isKindOf(JSL!ViewPanelDeclaration)) { + return self.eContainer.getTransferContainer(); + } + + return null; +} diff --git a/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/viewTabsDeclaration.eol b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/viewTabsDeclaration.eol new file mode 100644 index 00000000..973fcac7 --- /dev/null +++ b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/viewTabsDeclaration.eol @@ -0,0 +1,18 @@ +@cached +operation JSL!ViewTabsDeclaration getId(): String { + return (self.eContainer.getId() + "/" + self.name); +} + +@cached +operation JSL!ViewTabsDeclaration getFqName(): String { + return self.eContainer.getFqName() + "::" + self.name; +} + +@cached +operation JSL!ViewTabsDeclaration getTransferContainer(): JSL!TransferDeclaration { + var to = self.eContainer; + while (to.isDefined() and not to.isKindOf(JSL!TransferDeclaration)) { + to = to.eContainer; + } + return to; +} diff --git a/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/visibleDeclaration.eol b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/visibleDeclaration.eol new file mode 100644 index 00000000..0ff12f51 --- /dev/null +++ b/judo-tatami-jsl-jsl2psm/src/main/epsilon/operations/jsl/ui/visibleDeclaration.eol @@ -0,0 +1,9 @@ +@cached +operation JSL!VisibleDeclaration getId(): String { + return (self.eContainer.getId() + "/" + self.name); +} + +@cached +operation JSL!VisibleDeclaration getFqName(): String { + return self.eContainer.getFqName() + "::" + self.name; +} diff --git a/judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/modules/actor/access.etl b/judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/modules/actor/access.etl index f610a64b..80ffcf07 100644 --- a/judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/modules/actor/access.etl +++ b/judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/modules/actor/access.etl @@ -25,13 +25,13 @@ rule CreateTransientTransferObjectRelationForActorAccessDeclaration if (s.getDefault().isDefined()) { t.defaultValue = s.getDefault().equivalent("CreateDefaultStaticNavigationForUnmappedTransferObjectConstructor"); } - if (s.eContainer.map.isDefined()) { + if (s.getActorDeclaration().map.isDefined()) { t.binding = s.getterExpr.equivalent("CreateReadsNavigationPropertyForMappedTransferObjectTransferRelationDeclaration"); } else { t.binding = s.getterExpr.equivalent("CreateReadsReferenceExpressionForUnmappedTransferObjectTransferRelationDeclaration"); } - s.eContainer.getActorDeclarationEquivalent().relations.add(t); + s.getActorDeclaration().getActorDeclarationEquivalent().relations.add(t); log.debug("Created TransferObjectRelation for ActorAccessDeclaration: [" + t.name + "] into [" + t.eContainer.name + "]"); } diff --git a/judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/modules/actor/actorType.etl b/judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/modules/actor/actorType.etl index 8ff812aa..1046a13c 100644 --- a/judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/modules/actor/actorType.etl +++ b/judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/modules/actor/actorType.etl @@ -46,6 +46,7 @@ rule CreateActorTypeWithoutPrincipal guard: s.getPrincipal().isUndefined() t.setId("(jsl/" + s.getId() + ")/CreateActorTypeWithoutPrincipal"); + t.name = s.name; if (s.getGuard().isDefined()) { t.filter = s.equivalent("CreateFilterExpressionForMappedActorType"); diff --git a/judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/modules/structure/transferDeclarationQueryCustomizer.etl b/judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/modules/structure/transferDeclarationQueryCustomizer.etl index f1dc1180..5e15aac6 100644 --- a/judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/modules/structure/transferDeclarationQueryCustomizer.etl +++ b/judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/modules/structure/transferDeclarationQueryCustomizer.etl @@ -172,11 +172,11 @@ rule CreateQueryCustomizerOrderingEnumeration rule CreateQueryCustomizerOrderingEnumerationMember transform s : JSL!TransferFieldDeclaration to t : JUDOPSM!EnumerationMember { - guard: generateBehaviours and s.eContainer.map.isDefined() and s.isSortable() + guard: generateBehaviours and s.getTransferContainer().map.isDefined() and s.isSortable() t.setId("(jsl/" + s.getId() + ")/CreateQueryCustomizerOrderingEnumerationDerivedTransferAttribute"); t.name = s.name; t.ordinal = -1; // will be calculated by post operation - s.eContainer.equivalent("CreateQueryCustomizerOrderingEnumeration").members.add(t); + s.getTransferContainer().equivalent("CreateQueryCustomizerOrderingEnumeration").members.add(t); log.debug("CreateQueryCustomizerOrderingEnumerationDerivedTransferAttribute: " + t.name); } @@ -197,12 +197,12 @@ rule CreateQueryCustomizerSeekLastItem rule CreateQueryCustomizerSeekLastItemAttribute transform s : JSL!TransferFieldDeclaration to t : JUDOPSM!TransferAttribute { - guard: generateBehaviours and s.eContainer.map.isDefined() and (s.isFilterable() or s.isSortable()) + guard: generateBehaviours and s.getTransferContainer().map.isDefined() and (s.isFilterable() or s.isSortable()) t.setId("(jsl/" + s.getId() + ")/CreateQueryCustomizerSeekLastItemAttribute"); t.name = s.name; t.dataType = s.referenceType.getPrimitiveDeclarationEquivalent(); t.required = false; - s.eContainer.equivalent("CreateQueryCustomizerSeekLastItem").attributes.add(t); + s.getTransferContainer().equivalent("CreateQueryCustomizerSeekLastItem").attributes.add(t); log.debug("CreateQueryCustomizerSeekLastItemAttribute: " + t.name); } diff --git a/judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/modules/structure/transferDeclarationTransferAttribute.etl b/judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/modules/structure/transferDeclarationTransferAttribute.etl index 549c9e88..6c5d9298 100644 --- a/judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/modules/structure/transferDeclarationTransferAttribute.etl +++ b/judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/modules/structure/transferDeclarationTransferAttribute.etl @@ -25,14 +25,14 @@ rule CreateTransientTransferAttribute var def = s.getDefault(); if (def.isDefined()) { - if (s.eContainer.map.isUndefined()) { + if (s.getTransferContainer().map.isUndefined()) { t.defaultValue = def.equivalent("CreateDefaultStaticDataForUnmappedTransferObjectConstructor"); } else { t.defaultValue = def.equivalent("CreateDefaultDataPropertyForMappedTransferObjectConstructor"); } } - s.eContainer.getTransferDeclarationEquivalent().attributes.add(t); + s.getTransferContainer().getTransferDeclarationEquivalent().attributes.add(t); log.debug("Created TransferAttribute (Field) for TransferFieldDeclaration: [" + t.name + "] into [" + t.eContainer.name + "]"); } @@ -44,13 +44,13 @@ rule CreateDerivedTransferAttribute guard: s.reads() t.setId("(jsl/" + s.getId() + ")/CreateDerivedTransferAttribute"); - if (s.eContainer.map.isDefined()) { + if (s.getTransferContainer().map.isDefined()) { t.binding = s.getterExpr.equivalent("CreateReadsDataPropertyForMappedTransferObjectTransferFieldDeclaration"); } else { t.binding = s.getterExpr.equivalent("CreateReadsStaticDataForUnmappedTransferObjectTransferFieldDeclaration"); } - s.eContainer.getTransferDeclarationEquivalent().attributes.add(t); + s.getTransferContainer().getTransferDeclarationEquivalent().attributes.add(t); log.debug("Created TransferAttribute (Derived) for TransferFieldDeclaration: [" + t.name + "] into [" + t.eContainer.name + "]"); } @@ -73,7 +73,7 @@ rule CreateMappedTransferAttribute } else if (s.getterExpr.features.first.member.getDefault().isDefined()) { t.defaultValue = s.getterExpr.features.first.member.getDefault().equivalent("CreateDefaultValueForPrimitiveEntityMember"); } - s.eContainer.getTransferDeclarationEquivalent().attributes.add(t); + s.getTransferContainer().getTransferDeclarationEquivalent().attributes.add(t); log.debug("Created TransferAttribute (Field) for TransferFieldDeclaration: [" + t.name + "] into [" + t.eContainer.name + "]"); } @@ -85,12 +85,12 @@ rule CreateMappedTransferAttributeEntityDefault transform s : JSL!TransferFieldDeclaration to t : JUDOPSM!TransferAttribute { guard: s.maps() and s.getterExpr.features.first.member.getDefault().isDefined() and s.getDefault().isUndefined() - t.name = defaultDefaultNamePrefix + s.name + defaultDefaultNameMidfix + s.eContainer.eContainer.name + defaultDefaultNamePostfix; + t.name = defaultDefaultNamePrefix + s.name + defaultDefaultNameMidfix + s.getTransferContainer().eContainer.name + defaultDefaultNamePostfix; t.setId("(jsl/" + s.getId() + ")/CreateMappedTransferAttributeEntityDefault"); t.binding = s.getterExpr.features.first.member.getDefault().equivalent("CreateDefaultValueForPrimitiveEntityMember"); t.dataType = s.referenceType.getPrimitiveDeclarationEquivalent(); t.required = false; - s.eContainer.getTransferDeclarationEquivalent().attributes.add(t); + s.getTransferContainer().getTransferDeclarationEquivalent().attributes.add(t); log.debug("Created TransferAttribute DefaultValue (Field) for EntityDefault: [" + t.name + "] into [" + t.eContainer.name + "]"); } @@ -99,12 +99,12 @@ rule CreateMappedTransferAttributeEntityDefault rule CreateTransferEntityDefaultValueAttributeForMappedTransferObjectConstructor transform s: JSL!DefaultModifier to t: JUDOPSM!TransferAttribute { - guard: s.eContainer.isKindOf(JSL!TransferFieldDeclaration) and s.eContainer.eContainer.map.isDefined() - t.name = defaultDefaultNamePrefix + s.eContainer.name + defaultDefaultNameMidfix + s.eContainer.eContainer.name + defaultDefaultNamePostfix; + guard: s.eContainer.isKindOf(JSL!TransferFieldDeclaration) and s.eContainer.getTransferContainer().map.isDefined() + t.name = defaultDefaultNamePrefix + s.eContainer.name + defaultDefaultNameMidfix + s.eContainer.getTransferContainer().name + defaultDefaultNamePostfix; t.binding = s.equivalent("CreateDefaultDataPropertyForMappedTransferObjectConstructor"); t.dataType = s.eContainer.referenceType.getPrimitiveDeclarationEquivalent(); t.setId("(jsl/" + s.eContainer.getId() + ")/CreateTransferEntityDefaultValueAttributeForMappedTransferObjectConstructor"); - s.eContainer.eContainer.getTransferDeclarationEquivalent().attributes.add(t); + s.eContainer.getTransferContainer().getTransferDeclarationEquivalent().attributes.add(t); log.debug("Created TransferAttribute DefaultValue (Field) for MappedTransferObjectConstructor: [" + t.name + "] into [" + t.eContainer.name + "]"); } @@ -112,13 +112,13 @@ rule CreateTransferEntityDefaultValueAttributeForMappedTransferObjectConstructor rule CreateTransferEntityDefaultValueAttributeForUnmappedTransferObjectConstructor transform s: JSL!DefaultModifier to t: JUDOPSM!TransferAttribute { - guard: s.eContainer.isKindOf(JSL!TransferFieldDeclaration) and s.eContainer.eContainer.map.isUndefined() - t.name = defaultDefaultNamePrefix + s.eContainer.name + defaultDefaultNameMidfix + s.eContainer.eContainer.name + defaultDefaultNamePostfix; + guard: s.eContainer.isKindOf(JSL!TransferFieldDeclaration) and s.eContainer.getTransferContainer().map.isUndefined() + t.name = defaultDefaultNamePrefix + s.eContainer.name + defaultDefaultNameMidfix + s.eContainer.getTransferContainer().name + defaultDefaultNamePostfix; t.binding = s.equivalent("CreateDefaultStaticDataForUnmappedTransferObjectConstructor"); t.dataType = s.eContainer.referenceType.getPrimitiveDeclarationEquivalent(); t.setId("(jsl/" + s.eContainer.getId() + ")/CreateTransferEntityDefaultValueAttributeForUnmappedTransferObjectConstructor"); - s.eContainer.eContainer.getTransferDeclarationEquivalent().attributes.add(t); + s.eContainer.getTransferContainer().getTransferDeclarationEquivalent().attributes.add(t); log.debug("Created TransferAttribute DefaultValue (Field) for UnmappedTransferObjectConstructor: [" + t.name + "] into [" + t.eContainer.name + "]"); } @@ -126,7 +126,7 @@ rule CreateTransferEntityDefaultValueAttributeForUnmappedTransferObjectConstruct rule CreateAnnotationForTransferEntityDefaultValueAttributeForMappedTransferObjectConstructor transform s : JSL!DefaultModifier to t : JUDOPSM!Annotation { - guard: s.eContainer.isKindOf(JSL!TransferFieldDeclaration) and s.eContainer.eContainer.map.isDefined() + guard: s.eContainer.isKindOf(JSL!TransferFieldDeclaration) and s.eContainer.getTransferContainer().map.isDefined() t.name = "TransferObjectAttributeWithDefaultValue"; t.setId("(jsl/" + s.eContainer.getId() + ")/CreateAnnotationForTransferEntityDefaultValueAttributeForMappedTransferObjectConstructor"); @@ -137,7 +137,7 @@ rule CreateAnnotationForTransferEntityDefaultValueAttributeForMappedTransferObje rule CreateAnnotationForTransferEntityDefaultValueAttributeForUnmappedTransferObjectConstructor transform s : JSL!DefaultModifier to t : JUDOPSM!Annotation { - guard: s.eContainer.isKindOf(JSL!TransferFieldDeclaration) and s.eContainer.eContainer.map.isUndefined() + guard: s.eContainer.isKindOf(JSL!TransferFieldDeclaration) and s.eContainer.getTransferContainer().map.isUndefined() t.name = "TransferObjectAttributeWithDefaultValue"; t.setId("(jsl/" + s.eContainer.getId() + ")/CreateAnnotationForTransferEntityDefaultValueAttributeForUnmappedTransferObjectConstructor"); diff --git a/judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/modules/structure/transferDeclarationTransferRelation.etl b/judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/modules/structure/transferDeclarationTransferRelation.etl index 66166a4a..1c40f2b6 100644 --- a/judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/modules/structure/transferDeclarationTransferRelation.etl +++ b/judo-tatami-jsl-jsl2psm/src/main/epsilon/transformations/psm/modules/structure/transferDeclarationTransferRelation.etl @@ -38,14 +38,14 @@ rule CreateTransientTransferObjectRelationForTransferRelationDeclaration t.cardinality = s.equivalentDiscriminated("CreateCardinalityForTransferRelationDeclaration", t.getId()); if (s.getDefault().isDefined()) { - if (s.eContainer.map.isUndefined()) { + if (s.getTransferContainer().map.isUndefined()) { t.defaultValue = s.getDefault().equivalent("CreateDefaultStaticNavigationForUnmappedTransferObjectConstructor"); } else { t.defaultValue = s.getDefault().equivalent("CreateDefaultNavigationPropertyForMappedTransferObjectConstructor"); } } - s.eContainer.getTransferDeclarationEquivalent().relations.add(t); + s.getTransferContainer().getTransferDeclarationEquivalent().relations.add(t); log.debug("Created TransferObjectRelation for TransferRelationDeclaration: [" + t.name + "] into [" + t.eContainer.name + "]"); } @@ -60,13 +60,13 @@ rule CreateDerivedTransferObjectEmbeddedRelationForTransferRelationDeclaration t.setId("(jsl/" + s.getId() + ")/CreateDerivedTransferObjectEmbeddedRelationForTransferRelationDeclaration"); t.cardinality = s.equivalentDiscriminated("CreateCardinalityForTransferRelationDeclaration", t.getId()); - if (s.eContainer.map.isDefined()) { + if (s.getTransferContainer().map.isDefined()) { t.binding = s.getterExpr.equivalent("CreateReadsNavigationPropertyForMappedTransferObjectTransferRelationDeclaration"); } else { t.binding = s.getterExpr.equivalent("CreateReadsReferenceExpressionForUnmappedTransferObjectTransferRelationDeclaration"); } - s.eContainer.getTransferDeclarationEquivalent().relations.add(t); + s.getTransferContainer().getTransferDeclarationEquivalent().relations.add(t); log.debug("Created TransferObjectRelation for TransferRelationDeclaration: [" + t.name + "] into [" + t.eContainer.name + "]"); } @@ -89,14 +89,14 @@ rule CreateMappedTransferObjectEmbeddedRelationForTransferRelationDeclaration } else if (entityMember.isKindOf(JSL!EntityRelationOppositeInjected)) { t.binding = entityMember.equivalent("CreateNamedOppositeAssociationEnd"); } else { - throw "Invalid member type - " + s.eContainer.name + "." + s.name + " " + entityMember; + throw "Invalid member type - " + s.getTransferContainer().name + "." + s.name + " " + entityMember; } if (s.getDefault().isDefined()) { t.defaultValue = s.getDefault().equivalent("CreateDefaultNavigationPropertyForMappedTransferObjectConstructor"); } - s.eContainer.getTransferDeclarationEquivalent().relations.add(t); + s.getTransferContainer().getTransferDeclarationEquivalent().relations.add(t); log.debug("Created TransferObjectRelation for TransferRelationDeclaration: [" + t.name + "] into [" + t.eContainer.name + "]"); } @@ -108,14 +108,14 @@ rule CreateMappedTransferObjectEmbeddedRelationForTransferRelationDeclaration rule CreateTransferEntityDefaultValueRelationForMappedTransferObjectConstructor transform s: JSL!DefaultModifier to t: JUDOPSM!TransferObjectRelation { - guard: s.eContainer.isKindOf(JSL!TransferRelationDeclaration) and s.eContainer.eContainer.map.isDefined() + guard: s.eContainer.isKindOf(JSL!TransferRelationDeclaration) and s.eContainer.getTransferContainer().map.isDefined() t.setId("(jsl/" + s.getId() + ")/CreateTransferEntityDefaultValueRelationForMappedTransferObjectConstructor"); - t.name = defaultDefaultNamePrefix + s.eContainer.name + defaultDefaultNameMidfix + s.eContainer.eContainer.name + defaultDefaultNamePostfix; + t.name = defaultDefaultNamePrefix + s.eContainer.name + defaultDefaultNameMidfix + s.eContainer.getTransferContainer().name + defaultDefaultNamePostfix; t.binding = s.equivalent("CreateDefaultNavigationPropertyForMappedTransferObjectConstructor"); t.target = s.eContainer.getReferenceType().getTransferDeclarationEquivalent(); t.cardinality = s.eContainer.equivalentDiscriminated("CreateCardinalityForTransferRelationDeclaration", t.getId()); - s.eContainer.eContainer.getTransferDeclarationEquivalent().relations.add(t); + s.eContainer.getTransferContainer().getTransferDeclarationEquivalent().relations.add(t); } @@ -124,13 +124,13 @@ rule CreateTransferEntityDefaultValueRelationForUnmappedTransferObjectConstructo transform s: JSL!DefaultModifier to t: JUDOPSM!TransferObjectRelation { // guard: s.leftValue.declaration.getReferenceType().isKindOf(JSL!TransferDeclaration) and s.leftValue.declaration.eContainer.map.isUndefined() - guard: s.eContainer.isKindOf(JSL!TransferRelationDeclaration) and s.eContainer.eContainer.map.isUndefined() + guard: s.eContainer.isKindOf(JSL!TransferRelationDeclaration) and s.eContainer.getTransferContainer().map.isUndefined() t.setId("(jsl/" + s.getId() + ")/CreateTransferEntityDefaultValueRelationForUnmappedTransferObjectConstructor"); - t.name = defaultDefaultNamePrefix + s.eContainer.name + defaultDefaultNameMidfix + s.eContainer.eContainer.name + defaultDefaultNamePostfix; + t.name = defaultDefaultNamePrefix + s.eContainer.name + defaultDefaultNameMidfix + s.eContainer.getTransferContainer().name + defaultDefaultNamePostfix; t.binding = s.equivalent("CreateDefaultStaticNavigationForUnmappedTransferObjectConstructor"); t.target = s.eContainer.getReferenceType().getPrimitiveDeclarationEquivalent(); t.cardinality = s.eContainer.equivalentDiscriminated("CreateCardinalityForTransferRelationDeclaration", t.getId()); - s.eContainer.eContainer.getTransferDeclarationEquivalent().relations.add(t); + s.eContainer.getTransferContainer().getTransferDeclarationEquivalent().relations.add(t); } @@ -141,7 +141,7 @@ rule CreateTransferEntityDefaultValueRelationForUnmappedTransferObjectConstructo rule CreateRelationRangeReferenceExpressionTypeForMappedTransferObjectRelation transform s : JSL!ChoiceModifier to t: JUDOPSM!ReferenceExpressionType { - guard: s.eContainer.isKindOf(JSL!TransferRelationDeclaration) and s.eContainer.eContainer.map.isDefined() + guard: s.eContainer.isKindOf(JSL!TransferRelationDeclaration) and s.eContainer.getTransferContainer().map.isDefined() t.setId("(jsl/" + s.eContainer.getId() + ")/CreateRelationRangeReferenceExpressionTypeForMappedTransferObjectRelation"); t.expression = expressionUtils.getJqlForExpression(s.expression, entityNamePrefix, entityNamePostfix); @@ -154,13 +154,13 @@ rule CreateRelationRangeReferenceExpressionTypeForMappedTransferObjectRelation rule CreateRelationRangeNavigationPropertyForMappedTransferObjectRelation transform s : JSL!ChoiceModifier to t: JUDOPSM!NavigationProperty { - guard: s.eContainer.isKindOf(JSL!TransferRelationDeclaration) and s.eContainer.eContainer.map.isDefined() + guard: s.eContainer.isKindOf(JSL!TransferRelationDeclaration) and s.eContainer.getTransferContainer().map.isDefined() t.setId("(jsl/" + s.eContainer.getId() + ")/CreateRelationRangeNavigationPropertyForMappedTransferObjectRelation"); - t.name = defaultRelationRangeNamePrefix + s.eContainer.name + defaultRelationRangeNameMidfix + s.eContainer.eContainer.name + defaultRelationRangeNamePostfix; + t.name = defaultRelationRangeNamePrefix + s.eContainer.name + defaultRelationRangeNameMidfix + s.eContainer.getTransferContainer().name + defaultRelationRangeNamePostfix; t.target = s.eContainer.getReferenceType().getTransferDeclarationEquivalent().entityType; t.cardinality = s.eContainer.equivalentDiscriminated("CreateCardinalityForGetRelationRangeEntityRelation", t.getId()); - s.eContainer.eContainer.map.entity.getEntityDeclarationEquivalent().navigationProperties.add(t); + s.eContainer.getTransferContainer().map.entity.getEntityDeclarationEquivalent().navigationProperties.add(t); log.debug("Created NavigationProperty for Transfer Object Default Value: " + s); } @@ -169,7 +169,7 @@ rule CreateRelationRangeNavigationPropertyForMappedTransferObjectRelation rule CreateRelationRangeReferenceExpressionTypeForUnmappedTransferObjectRelation transform s : JSL!ChoiceModifier to t: JUDOPSM!ReferenceExpressionType { - guard: s.eContainer.isKindOf(JSL!TransferRelationDeclaration) and s.eContainer.eContainer.map.isUndefined() + guard: s.eContainer.isKindOf(JSL!TransferRelationDeclaration) and s.eContainer.getTransferContainer().map.isUndefined() t.setId("(jsl/" + s.eContainer.getId() + ")/CreateRelationRangeReferenceExpressionTypeForUnmappedTransferObjectRelation"); t.expression = expressionUtils.getJqlForExpression(s.expression, entityNamePrefix, entityNamePostfix); @@ -182,14 +182,14 @@ rule CreateRelationRangeReferenceExpressionTypeForUnmappedTransferObjectRelation rule CreateRelationRangStaticNavigationForUnmappedTransferObjectRelation transform s : JSL!ChoiceModifier to t: JUDOPSM!StaticNavigation { - guard: s.eContainer.isKindOf(JSL!TransferRelationDeclaration) and s.eContainer.eContainer.map.isUndefined() + guard: s.eContainer.isKindOf(JSL!TransferRelationDeclaration) and s.eContainer.getTransferContainer().map.isUndefined() t.setId("(jsl/" + s.eContainer.getId() + ")/CreateRelationRangStaticNavigationForUnmappedTransferObjectRelation"); - t.name = defaultRelationRangeNamePrefix + s.eContainer.name + defaultRelationRangeNameMidfix + s.eContainer.eContainer.name + defaultRelationRangeNamePostfix; + t.name = defaultRelationRangeNamePrefix + s.eContainer.name + defaultRelationRangeNameMidfix + s.eContainer.getTransferContainer().name + defaultRelationRangeNamePostfix; t.target = s.eContainer.getReferenceType().getTransferDeclarationEquivalent().entityType; t.cardinality = s.eContainer.equivalentDiscriminated("CreateCardinalityForGetRelationRangeEntityRelation", t.getId()); - s.eContainer.eContainer.eContainer.getModelRoot().elements.add(t); + s.eContainer.getTransferContainer().eContainer.getModelRoot().elements.add(t); log.debug("Created StaticNavigation for Transfer Object Default Value: " + s); } diff --git a/judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/ui/BasicWidgetsTestModelTest.java b/judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/ui/BasicWidgetsTestModelTest.java new file mode 100644 index 00000000..c6f208a8 --- /dev/null +++ b/judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/ui/BasicWidgetsTestModelTest.java @@ -0,0 +1,69 @@ +package hu.blackbelt.judo.tatami.jsl.jsl2psm.ui; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.List; + +import org.hamcrest.core.IsEqual; +import org.hamcrest.core.IsNull; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; + +import hu.blackbelt.judo.meta.jsl.runtime.JslParser; +import hu.blackbelt.judo.meta.psm.derived.StaticData; +import hu.blackbelt.judo.meta.psm.service.TransferAttribute; +import hu.blackbelt.judo.meta.psm.service.TransferObjectRelation; +import hu.blackbelt.judo.tatami.jsl.jsl2psm.AbstractTest; +import hu.blackbelt.judo.tatami.jsl.jsl2psm.BufferedSlf4jLogger; +import hu.blackbelt.judo.tatami.jsl.jsl2psm.ui.BasicWidgetsTestModelTest; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +public class BasicWidgetsTestModelTest extends AbstractTest { + private static final String TARGET_TEST_CLASSES = "target/test-classes/ui"; + + @Override + protected String getTargetTestClasses() { + return TARGET_TEST_CLASSES; + } + + @Override + protected String getTest() { + return this.getClass().getSimpleName(); + } + + @Override + protected Logger createLog() { + return log; //new BufferedSlf4jLogger(log); + } + + @BeforeAll + static void prepareTestFolders() throws IOException { + if (!Files.exists(Paths.get(TARGET_TEST_CLASSES))) { + Files.createDirectories(Paths.get(TARGET_TEST_CLASSES)); + } + } + + @Test + void testBasicWidgetsTestModel() throws Exception { + testName = "BasicWidgetsTestModel"; + + + jslModel = JslParser.getModelFromFiles( + "BasicWidgetsTestModel", + List.of(new File("src/test/resources/ui/BasicWidgetsTestModel.jsl")) + ); + + transform(); + assertTrue(true); + } + +} diff --git a/judo-tatami-jsl-jsl2psm/src/test/resources/ui/BasicWidgetsTestModel.jsl b/judo-tatami-jsl-jsl2psm/src/test/resources/ui/BasicWidgetsTestModel.jsl new file mode 100644 index 00000000..d1fd090e --- /dev/null +++ b/judo-tatami-jsl-jsl2psm/src/test/resources/ui/BasicWidgetsTestModel.jsl @@ -0,0 +1,61 @@ +model BasicWidgetsTestModel; + +type binary Binary max-file-size: 1MB mime-type: ["image/*"]; +type boolean Boolean; +type date Date; +type numeric Numeric scale: 0 precision: 9; +type string String min-size: 0 max-size: 255; +type time Time; +type timestamp Timestamp; + +enum MyEnum { + Atomic = 0; + Bombastic = 1; + Crazy = 2; +} + +entity User { + identifier String email required; + field Binary binary; + field String string; + field Boolean boolean; + field Date date; + field Numeric numeric; + field Time time; + field Timestamp timestamp; + field MyEnum `enum` default:MyEnum#Bombastic; + field Boolean isActive; +} + +view UserView(User u) { + group level1 label:"Yo" icon:"text" { + group level2 width:12 frame:true icon:"unicorn" label:"Level 2" stretch:true { + field String email <= u.email bind required icon:"text" label: "My Email"; + field Binary binaryDerived <= u.binary icon:"binary" label:"Binary Derived"; + field String stringDerived <= u.string icon:"string" label:"String Derived"; + } + + group level22 width:6 frame:true icon:"dog" label:"Level 2 - 2" orientation:horizontal { + field Boolean booleanDerived <= u.boolean icon:"boolean" label:"Boolean Derived"; + field Date dateDerived <= u.date icon:"date" label:"Date Derived"; + field Numeric numericDerived <= u.numeric icon:"numeric" label:"Numeric Derived"; + } + + tabs tabs0 orientation:horizontal width:6 { + group tab1 label:"Tab1" icon:"numbers" h-align:left { + field Time timeDerived <= u.time icon:"time" label:"Time Derived"; + } + + group tab2 label:"Tab2" icon:"numbers" h-align:right { + field Timestamp timestampDerived <= u.timestamp icon:"timestamp" label:"Timestamp Derived"; + field MyEnum mappedEnum <= u.`enum` bind default:MyEnum#Crazy icon:"enum" label:"Mapped Enum"; + } + } + } +} + +actor WidgetsActor + human +{ + link UserView user <= User.any() label:"User" icon:"tools"; +} \ No newline at end of file From 3f2240972febb9d71087b5659356d0e34c2394b7 Mon Sep 17 00:00:00 2001 From: Robert Csakany Date: Tue, 23 Jul 2024 18:27:19 +0200 Subject: [PATCH 2/2] Fix typo --- .../judo/tatami/jsl/jsl2psm/ui/BasicWidgetsTestModelTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/ui/BasicWidgetsTestModelTest.java b/judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/ui/BasicWidgetsTestModelTest.java index c6f208a8..78e1222d 100644 --- a/judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/ui/BasicWidgetsTestModelTest.java +++ b/judo-tatami-jsl-jsl2psm/src/test/java/hu/blackbelt/judo/tatami/jsl/jsl2psm/ui/BasicWidgetsTestModelTest.java @@ -22,7 +22,6 @@ import hu.blackbelt.judo.meta.psm.service.TransferAttribute; import hu.blackbelt.judo.meta.psm.service.TransferObjectRelation; import hu.blackbelt.judo.tatami.jsl.jsl2psm.AbstractTest; -import hu.blackbelt.judo.tatami.jsl.jsl2psm.BufferedSlf4jLogger; import hu.blackbelt.judo.tatami.jsl.jsl2psm.ui.BasicWidgetsTestModelTest; import lombok.extern.slf4j.Slf4j;