This is an automated email from the ASF dual-hosted git repository. danhaywood pushed a commit to branch CAUSEWAY-3676 in repository https://gitbox.apache.org/repos/asf/causeway.git
commit 04c95da2a51ebc1f91c95e058d79f68590bc3de7 Author: danhaywood <[email protected]> AuthorDate: Mon Feb 12 21:27:28 2024 +0000 CAUSEWAY-3676: scenario given and name now works --- .../viewer/graphql/model/domain/GqlvScenario.java | 19 ++++---- .../graphql/model/domain/GqlvScenarioGiven.java | 9 +++- .../graphql/model/domain/GqlvScenarioName.java | 13 +++--- .../viewer/graphql/model/domain/Scenario.java | 51 ---------------------- .../graphql/model/toplevel/GqlvTopLevelQuery.java | 9 ++-- .../Calculator_IntegTest.concat.approved.json | 14 ++++++ .../test/e2e/scenario/Calculator_IntegTest.java | 1 - 7 files changed, 41 insertions(+), 75 deletions(-) diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenario.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenario.java index 1082112f15..e6191eb27a 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenario.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenario.java @@ -20,6 +20,7 @@ package org.apache.causeway.viewer.graphql.model.domain; import graphql.Scalars; import graphql.schema.DataFetcher; +import graphql.schema.DataFetchingEnvironment; import graphql.schema.GraphQLArgument; import graphql.schema.GraphQLFieldDefinition; @@ -35,7 +36,7 @@ import org.apache.causeway.viewer.graphql.model.context.Context; public class GqlvScenario extends GqlvAbstractCustom { - private final Scenario scenarioPojo; + public static final String KEY_SCENARIO_NAME = String.format("%s#%s", GqlvScenario.class.getName(), "name"); private final GqlvScenarioName scenarioName; private final GqlvScenarioGiven scenarioGiven; @@ -44,8 +45,6 @@ public class GqlvScenario final Context context) { super("Scenario", context); - this.scenarioPojo = context.serviceRegistry.lookupService(Scenario.class).orElseThrow(); - this.scenarioName = new GqlvScenarioName(context); addChildField(scenarioName.getField()); this.scenarioGiven = new GqlvScenarioGiven(context); @@ -68,16 +67,14 @@ public class GqlvScenario public void addDataFetchers(Parent parent) { context.codeRegistryBuilder.dataFetcher( parent.coordinatesFor(getField()), - (DataFetcher<Object>) environment -> scenarioPojo); + (DataFetcher<Object>) environment -> { + String scenarioName = environment.getArgument("name"); + environment.getGraphQlContext().put(KEY_SCENARIO_NAME, scenarioName); + return environment; + }); scenarioName.addDataFetchers(this); - scenarioGiven.addDataFetchers(); - } - - - @Override - public String toString() { - return scenarioPojo.toString(); + scenarioGiven.addDataFetchers(this); } } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioGiven.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioGiven.java index 099d547ea8..9a3bb732b7 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioGiven.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioGiven.java @@ -1,5 +1,8 @@ package org.apache.causeway.viewer.graphql.model.domain; +import graphql.schema.DataFetcher; +import graphql.schema.DataFetchingEnvironment; + import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -54,7 +57,11 @@ public class GqlvScenarioGiven } - public void addDataFetchers() { + public void addDataFetchers(Parent parent) { + context.codeRegistryBuilder.dataFetcher( + parent.coordinatesFor(getField()), + (DataFetcher<Object>) environment -> environment); + domainServices.forEach(domainService -> { boolean actionsAdded = domainService.hasActions(); if (actionsAdded) { diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioName.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioName.java index b571f7fe44..83a4e8c895 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioName.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvScenarioName.java @@ -1,10 +1,10 @@ package org.apache.causeway.viewer.graphql.model.domain; -import graphql.GraphQLContext; import graphql.Scalars; -import graphql.schema.DataFetcher; import graphql.schema.DataFetchingEnvironment; +import lombok.val; + import static graphql.schema.GraphQLFieldDefinition.*; import static graphql.schema.GraphQLObjectType.newObject; @@ -27,13 +27,12 @@ public class GqlvScenarioName extends GqlvAbstract { public void addDataFetchers(Parent parent) { context.codeRegistryBuilder.dataFetcher( parent.coordinatesFor(getField()), - (DataFetcher<Object>) environment -> name(environment)); + this::scenarioName); } - private String name(DataFetchingEnvironment environment) { - // TODO: use graphQlContext instead. - GraphQLContext graphQlContext = environment.getGraphQlContext(); - return context.serviceRegistry.lookupService(Scenario.class).map(Scenario::getName).orElseThrow(); + private String scenarioName(DataFetchingEnvironment environment) { + val graphQlContext = environment.getGraphQlContext(); + return graphQlContext.get(GqlvScenario.KEY_SCENARIO_NAME); } } diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/Scenario.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/Scenario.java deleted file mode 100644 index 1a868f1432..0000000000 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/Scenario.java +++ /dev/null @@ -1,51 +0,0 @@ -package org.apache.causeway.viewer.graphql.model.domain; - -import lombok.Getter; -import lombok.RequiredArgsConstructor; -import lombok.Setter; - -import java.util.HashMap; -import java.util.Map; - -import javax.inject.Inject; - -import org.apache.causeway.applib.annotation.Programmatic; -import org.apache.causeway.applib.services.bookmark.Bookmark; - -import org.apache.causeway.applib.services.bookmark.BookmarkService; - -import org.springframework.stereotype.Service; - -/** - * Holds the state of an executing scenario. - * - * <p> - * Note that although this is a singleton, it is <i>not</i> thread-safe. - * </p> - */ -@Service -@RequiredArgsConstructor(onConstructor_ = {@Inject}) -public class Scenario { - - private final BookmarkService bookmarkService; - - @Getter @Setter private String name; - - private final Map<String, Bookmark> references = new HashMap<>(); - - @Programmatic - public void putReference(String reference, final Object pojo) { - Bookmark bookmark = bookmarkService.bookmarkFor(pojo).orElseThrow(); - references.put(reference, bookmark); - } - - @Programmatic - public Object getReference(String reference) { - return bookmarkService.lookup(references.get(reference)).orElseThrow(); - } - - @Programmatic - public void clearReferences() { - references.clear(); - } -} diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQuery.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQuery.java index 1d5f7e7015..eff065063f 100644 --- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQuery.java +++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/toplevel/GqlvTopLevelQuery.java @@ -9,6 +9,7 @@ import org.apache.causeway.viewer.graphql.model.context.Context; import org.apache.causeway.viewer.graphql.model.domain.GqlvAbstractCustom; import org.apache.causeway.viewer.graphql.model.domain.GqlvDomainObject; import org.apache.causeway.viewer.graphql.model.domain.GqlvDomainService; +import org.apache.causeway.viewer.graphql.model.domain.GqlvScenario; import org.apache.causeway.viewer.graphql.model.domain.Parent; public class GqlvTopLevelQuery @@ -18,7 +19,7 @@ public class GqlvTopLevelQuery private final List<GqlvDomainService> domainServices = new ArrayList<>(); private final List<GqlvDomainObject> domainObjects = new ArrayList<>(); -// private final GqlvScenario scenario; + private final GqlvScenario scenario; public GqlvTopLevelQuery(final Context context) { super("Query", context); @@ -55,8 +56,8 @@ public class GqlvTopLevelQuery addChildField(domainObject.getLookupField()); } -// scenario = new GqlvScenario(context); -// addChildField(scenario.getField()); + scenario = new GqlvScenario(context); + addChildField(scenario.getField()); buildObjectType(); } @@ -78,6 +79,6 @@ public class GqlvTopLevelQuery domainObjects.forEach(domainObject -> domainObject.addDataFetchers(this)); -// scenario.addDataFetchers(this); + scenario.addDataFetchers(this); } } diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.concat.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.concat.approved.json new file mode 100644 index 0000000000..6aadf438a5 --- /dev/null +++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.concat.approved.json @@ -0,0 +1,14 @@ +{ + "data" : { + "Scenario" : { + "Name" : "Fizz buzz", + "Given" : { + "university_calc_Calculator" : { + "concat" : { + "invoke" : "FizzBuzz" + } + } + } + } + } +} \ No newline at end of file diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.java index a9f7f27763..561b2e61f2 100644 --- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.java +++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/scenario/Calculator_IntegTest.java @@ -39,7 +39,6 @@ public class Calculator_IntegTest extends Abstract_IntegTest { @Test - @Disabled @UseReporter(DiffReporter.class) void concat() throws Exception {
