You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@causeway.apache.org by da...@apache.org on 2024/01/30 16:46:13 UTC
(causeway) branch CAUSEWAY-3676 updated (71ceb9d267 -> 1657422d0f)
This is an automated email from the ASF dual-hosted git repository.
danhaywood pushed a change to branch CAUSEWAY-3676
in repository https://gitbox.apache.org/repos/asf/causeway.git
discard 71ceb9d267 CAUSEWAY-3676: sketching out introducing mutations (3)
discard 8485320dd0 CAUSEWAY-3676: sketching out introducing mutations (3)
discard 07e8fb8c06 CAUSEWAY-3676: sketching out introducing mutations (2)
discard d79b19ed50 CAUSEWAY-3676: sketching out introducing mutations
add 8875bcd1d3 CAUSEWAY-3685: Tree Rendering: allow for nodes to be marked (as selected)
add 04393e9f31 CAUSEWAY-3685: minor: java-doc typo
new 92127e50a5 CAUSEWAY-3676: sketching out introducing mutations
new 46098c161f CAUSEWAY-3676: sketching out introducing mutations (2)
new a0b2d0767e CAUSEWAY-3676: sketching out introducing mutations (3)
new 9924cc0574 CAUSEWAY-3676: sketching out introducing mutations (3)
new 9cfbd49bcf CAUSEWAY-3676: adds mutation support for actions
new 7c4cf78488 CAUSEWAY-3676: mutation support for actions now works
new 4daf1b8b91 CAUSEWAY-3676: renames class is all
new 1657422d0f CAUSEWAY-3676: updates docs
This update added new revisions after undoing existing revisions.
That is to say, some revisions that were in the old version of the
branch are not in the new version. This situation occurs
when a user --force pushes a change and generates a repository
containing something like this:
* -- * -- B -- O -- O -- O (71ceb9d267)
\
N -- N -- N refs/heads/CAUSEWAY-3676 (1657422d0f)
You should already have received notification emails for all of the O
revisions, and so the following emails describe only the N revisions
from the common base, B.
Any revisions marked "omit" are not gone; other references still
refer to them. Any revisions marked "discard" are gone forever.
The 8 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
.../causeway/applib/graph/tree/TreeNode.java | 39 +
.../causeway/applib/graph/tree/TreeState.java | 1 +
.../applib/graph/tree/TreeState_Default.java | 9 +
.../core/config/CausewayConfiguration.java | 38 +-
viewers/graphql/adoc/modules/ROOT/pages/about.adoc | 162 +-
.../viewer/graphql/applib/types/TypeMapper.java | 2 +-
.../viewer/graphql/model/context/Context.java | 2 +
.../viewer/graphql/model/domain/GqlvAction.java | 11 +-
...okeMutating.java => GqlvMutationForAction.java} | 150 +-
.../model/domain/GqlvMutationForProperty.java | 165 ++
.../graphql/model/domain/GqlvPropertySet.java | 1 -
.../graphql/model/types/TypeMapperDefault.java | 2 +-
viewers/graphql/test/pom.xml | 33 +
...ayViewerGraphqlTestModuleIntegTestAbstract.java | 5 +-
.../viewer/test/e2e/Abstract_IntegTest.java | 16 +-
...g_IntegTest.find_depthead_and_change_name._.gql | 7 -
...est.find_depthead_and_change_name.approved.json | 0
...dmin_IntegTest.action_with_disabled_param._.gql | 0
...egTest.action_with_disabled_param.approved.json | 0
.../Admin_IntegTest.action_with_hidden_param._.gql | 0
...ntegTest.action_with_hidden_param.approved.json | 0
.../{ => query}/Admin_IntegTest.admin_action._.gql | 0
.../Admin_IntegTest.admin_action.approved.json | 0
.../test/e2e/{ => query}/Admin_IntegTest.java | 4 +-
.../Admin_IntegTest.other_admin_action._.gql | 0
...dmin_IntegTest.other_admin_action.approved.json | 0
.../Calculator_IntegTest.add_big_decimals._.gql | 0
...ulator_IntegTest.add_big_decimals.approved.json | 0
.../Calculator_IntegTest.add_big_integers._.gql | 0
...ulator_IntegTest.add_big_integers.approved.json | 0
.../Calculator_IntegTest.add_double_wrappers._.gql | 0
...tor_IntegTest.add_double_wrappers.approved.json | 0
.../Calculator_IntegTest.add_doubles._.gql | 0
.../Calculator_IntegTest.add_doubles.approved.json | 0
.../Calculator_IntegTest.add_float_wrappers._.gql | 0
...ator_IntegTest.add_float_wrappers.approved.json | 0
.../Calculator_IntegTest.add_floats._.gql | 0
.../Calculator_IntegTest.add_floats.approved.json | 0
...Calculator_IntegTest.add_integer_wrappers._.gql | 0
...or_IntegTest.add_integer_wrappers.approved.json | 0
.../Calculator_IntegTest.add_integers._.gql | 0
...Calculator_IntegTest.add_integers.approved.json | 0
.../Calculator_IntegTest.boolean_and_1._.gql | 0
...alculator_IntegTest.boolean_and_1.approved.json | 0
.../Calculator_IntegTest.boolean_and_2._.gql | 0
...alculator_IntegTest.boolean_and_2.approved.json | 0
.../Calculator_IntegTest.boolean_not._.gql | 0
.../Calculator_IntegTest.boolean_not.approved.json | 0
.../Calculator_IntegTest.boolean_or_1._.gql | 0
...Calculator_IntegTest.boolean_or_1.approved.json | 0
.../Calculator_IntegTest.boolean_or_2._.gql | 0
...Calculator_IntegTest.boolean_or_2.approved.json | 0
.../{ => query}/Calculator_IntegTest.concat._.gql | 0
.../Calculator_IntegTest.concat.approved.json | 0
.../test/e2e/{ => query}/Calculator_IntegTest.java | 4 +-
.../Calculator_IntegTest.next_month._.gql | 0
.../Calculator_IntegTest.next_month.approved.json | 0
.../Calculator_IntegTest.plus_days._.gql | 0
.../Calculator_IntegTest.plus_days.approved.json | 0
.../Calculator_IntegTest.plus_joda_days._.gql | 0
...lculator_IntegTest.plus_joda_days.approved.json | 0
.../Department_IntegTest.create_department._.gql | 0
...tment_IntegTest.create_department.approved.json | 0
...est.create_department_name_param_disabled._.gql | 0
...te_department_name_param_disabled.approved.json | 0
...Department_IntegTest.find_all_departments._.gql | 0
...nt_IntegTest.find_all_departments.approved.json | 0
..._department_and_add_staff_members._.choices.gql | 0
...d_department_and_add_staff_members._.invoke.gql | 0
..._department_and_add_staff_members.approved.json | 0
...d_department_and_change_head_autocomplete._.gql | 0
...ment_and_change_head_autocomplete.approved.json | 0
...t.find_department_and_change_head_default._.gql | 0
...epartment_and_change_head_default.approved.json | 0
...t.find_department_and_change_name_invalid._.gql | 0
...epartment_and_change_name_invalid.approved.json | 0
...ind_department_and_edit_head_autocomplete._.gql | 0
...rtment_and_edit_head_autocomplete.approved.json | 0
..._and_edit_head_autocomplete_none_matching._.gql | 0
...t_head_autocomplete_none_matching.approved.json | 0
...epartment_and_remove_staff_member_choices._.gql | 0
...t_and_remove_staff_member_choices.approved.json | 0
...artment_IntegTest.find_department_by_name._.gql | 0
...IntegTest.find_department_by_name.approved.json | 0
.../test/e2e/{ => query}/Department_IntegTest.java | 4 +-
...d_IntegTest.find_depthead_and_change_name._.gql | 0
...est.find_depthead_and_change_name.approved.json | 0
...est.find_depthead_and_change_name_invalid._.gql | 0
..._depthead_and_change_name_invalid.approved.json | 0
...d_depthead_and_change_name_invoke_invalid._.gql | 0
...ad_and_change_name_invoke_invalid.approved.json | 0
.../DeptHead_IntegTest.find_depthead_by_name._.gql | 0
...d_IntegTest.find_depthead_by_name.approved.json | 0
.../test/e2e/{ => query}/DeptHead_IntegTest.java | 4 +-
...gTest.create_staff_member_with_department._.gql | 0
...eate_staff_member_with_department.approved.json | 0
...egTest.find_staff_member_by_name_and_edit._.gql | 0
...ind_staff_member_by_name_and_edit.approved.json | 0
...aff_member_by_name_and_edit_grade_choices._.gql | 0
...er_by_name_and_edit_grade_choices.approved.json | 0
.../test/e2e/{ => query}/Staff_IntegTest.java | 4 +-
.../Staff_IntegTest.list_all_staff_members._.gql | 0
..._IntegTest.list_all_staff_members.approved.json | 0
..._IntegTest.staff_member_name_edit_invalid._.gql | 0
...st.staff_member_name_edit_invalid.approved.json | 0
...taff_IntegTest.staff_member_name_validate._.gql | 0
...egTest.staff_member_name_validate.approved.json | 0
...Mutating_IntegTest.change_department_name._.gql | 10 +
..._IntegTest.change_department_name.approved.json | 9 +
...tHeadMutating_IntegTest.create_department._.gql | 10 +
...ating_IntegTest.create_department.approved.json | 9 +
.../DeptHeadMutating_IntegTest.java | 36 +-
.../StaffMutating_IntegTest.java} | 39 +-
...Mutating_IntegTest.staff_member_edit_name._.gql | 10 +
..._IntegTest.staff_member_edit_name.approved.json | 9 +
...java => AbstractGqlSchema_print_IntegTest.java} | 12 +-
.../GqlSchemaQuery_print_IntegTest.java} | 46 +-
...qlSchemaQueryAndMutations_print_IntegTest.java} | 51 +-
.../src/test/resources/application-test.properties | 25 +
viewers/graphql/test/src/test/resources/schema.gql | 1686 +++-----------------
.../integration/GraphQlSourceForCauseway.java | 11 +-
.../viewer/toplevel/GqlvTopLevelMutation.java | 149 +-
.../tree/CausewayToWicketTreeAdapter.java | 11 +-
.../ui/components/tree/_TreeExpansionModel.java | 37 +-
.../ui/components/tree/_TreeModelTreeAdapter.java | 6 +-
.../ui/components/tree/_TreeNodeMemento.java | 4 +-
.../tree/themes/bootstrap/wkt-tree-theme.css | 4 +
127 files changed, 1048 insertions(+), 1789 deletions(-)
rename viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/{GqlvActionInvokeMutating.java => GqlvMutationForAction.java} (53%)
create mode 100644 viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForProperty.java
delete mode 100644 viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHeadMutating_IntegTest.find_depthead_and_change_name._.gql
delete mode 100644 viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHeadMutating_IntegTest.find_depthead_and_change_name.approved.json
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Admin_IntegTest.action_with_disabled_param._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Admin_IntegTest.action_with_disabled_param.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Admin_IntegTest.action_with_hidden_param._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Admin_IntegTest.action_with_hidden_param.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Admin_IntegTest.admin_action._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Admin_IntegTest.admin_action.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Admin_IntegTest.java (93%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Admin_IntegTest.other_admin_action._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Admin_IntegTest.other_admin_action.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.add_big_decimals._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.add_big_decimals.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.add_big_integers._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.add_big_integers.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.add_double_wrappers._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.add_double_wrappers.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.add_doubles._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.add_doubles.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.add_float_wrappers._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.add_float_wrappers.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.add_floats._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.add_floats.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.add_integer_wrappers._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.add_integer_wrappers.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.add_integers._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.add_integers.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.boolean_and_1._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.boolean_and_1.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.boolean_and_2._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.boolean_and_2.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.boolean_not._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.boolean_not.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.boolean_or_1._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.boolean_or_1.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.boolean_or_2._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.boolean_or_2.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.concat._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.concat.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.java (96%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.next_month._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.next_month.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.plus_days._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.plus_days.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.plus_joda_days._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Calculator_IntegTest.plus_joda_days.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.create_department._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.create_department.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.create_department_name_param_disabled._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.create_department_name_param_disabled.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.find_all_departments._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.find_all_departments.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.find_department_and_add_staff_members._.choices.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.find_department_and_add_staff_members._.invoke.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.find_department_and_add_staff_members.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.find_department_and_change_head_autocomplete._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.find_department_and_change_head_autocomplete.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.find_department_and_change_head_default._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.find_department_and_change_head_default.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.find_department_and_change_name_invalid._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.find_department_and_change_name_invalid.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.find_department_and_edit_head_autocomplete._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.find_department_and_edit_head_autocomplete.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.find_department_and_edit_head_autocomplete_none_matching._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.find_department_and_edit_head_autocomplete_none_matching.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.find_department_and_remove_staff_member_choices._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.find_department_and_remove_staff_member_choices.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.find_department_by_name._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.find_department_by_name.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Department_IntegTest.java (97%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/DeptHead_IntegTest.find_depthead_and_change_name._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/DeptHead_IntegTest.find_depthead_and_change_name.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/DeptHead_IntegTest.find_depthead_and_change_name_invalid._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/DeptHead_IntegTest.find_depthead_and_change_name_invalid.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/DeptHead_IntegTest.find_depthead_and_change_name_invoke_invalid._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/DeptHead_IntegTest.find_depthead_and_change_name_invoke_invalid.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/DeptHead_IntegTest.find_depthead_by_name._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/DeptHead_IntegTest.find_depthead_by_name.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/DeptHead_IntegTest.java (94%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Staff_IntegTest.create_staff_member_with_department._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Staff_IntegTest.create_staff_member_with_department.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Staff_IntegTest.find_staff_member_by_name_and_edit._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Staff_IntegTest.find_staff_member_by_name_and_edit.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Staff_IntegTest.find_staff_member_by_name_and_edit_grade_choices._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Staff_IntegTest.find_staff_member_by_name_and_edit_grade_choices.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Staff_IntegTest.java (96%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Staff_IntegTest.list_all_staff_members._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Staff_IntegTest.list_all_staff_members.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Staff_IntegTest.staff_member_name_edit_invalid._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Staff_IntegTest.staff_member_name_edit_invalid.approved.json (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Staff_IntegTest.staff_member_name_validate._.gql (100%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query}/Staff_IntegTest.staff_member_name_validate.approved.json (100%)
create mode 100644 viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.change_department_name._.gql
create mode 100644 viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.change_department_name.approved.json
create mode 100644 viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.create_department._.gql
create mode 100644 viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.create_department.approved.json
copy viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{ => query_and_mutations}/DeptHeadMutating_IntegTest.java (65%)
copy viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/{DeptHeadMutating_IntegTest.java => query_and_mutations/StaffMutating_IntegTest.java} (61%)
create mode 100644 viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/StaffMutating_IntegTest.staff_member_edit_name._.gql
create mode 100644 viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/StaffMutating_IntegTest.staff_member_edit_name.approved.json
copy viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/{GqlSchema_print_IntegTest.java => AbstractGqlSchema_print_IntegTest.java} (93%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/{GqlSchema_print_IntegTest.java => query/GqlSchemaQuery_print_IntegTest.java} (56%)
rename viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/{e2e/DeptHeadMutating_IntegTest.java => schema/query_and_mutations/GqlSchemaQueryAndMutations_print_IntegTest.java} (56%)
(causeway) 06/08: CAUSEWAY-3676: mutation support for actions now works
Posted by da...@apache.org.
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 7c4cf784887ed368c94015446f992e23952bb0a7
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 30 15:26:28 2024 +0000
CAUSEWAY-3676: mutation support for actions now works
---
.../viewer/graphql/model/domain/GqlvMutation.java | 125 +++++++++++++++------
viewers/graphql/test/src/test/resources/schema.gql | 22 ++--
.../viewer/toplevel/GqlvTopLevelMutation.java | 125 +--------------------
3 files changed, 104 insertions(+), 168 deletions(-)
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutation.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutation.java
index d6f5298cef..d07693e89b 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutation.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutation.java
@@ -18,62 +18,74 @@
*/
package org.apache.causeway.viewer.graphql.model.domain;
-import graphql.schema.*;
+import java.util.ArrayList;
-import lombok.extern.log4j.Log4j2;
-import lombok.val;
+import graphql.schema.DataFetchingEnvironment;
+import graphql.schema.GraphQLArgument;
+import graphql.schema.GraphQLFieldDefinition;
+import graphql.schema.GraphQLList;
+import graphql.schema.GraphQLOutputType;
+import graphql.schema.GraphQLType;
+
+import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
+
+import org.springframework.lang.Nullable;
import org.apache.causeway.applib.annotation.Where;
-import org.apache.causeway.applib.services.bookmark.BookmarkService;
import org.apache.causeway.commons.collections.Can;
import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
import org.apache.causeway.core.metamodel.object.ManagedObject;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter;
+import org.apache.causeway.core.metamodel.spec.feature.OneToManyActionParameter;
+import org.apache.causeway.core.metamodel.spec.feature.OneToOneActionParameter;
import org.apache.causeway.viewer.graphql.applib.types.TypeMapper;
import org.apache.causeway.viewer.graphql.model.context.Context;
import org.apache.causeway.viewer.graphql.model.exceptions.DisabledException;
import org.apache.causeway.viewer.graphql.model.exceptions.HiddenException;
-import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
-import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
-
-import org.springframework.lang.Nullable;
-import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
+import lombok.val;
+import lombok.extern.log4j.Log4j2;
@Log4j2
public class GqlvMutation {
private final Holder holder;
+ private final ObjectSpecification objectSpec;
+ private final ObjectAction objectAction;
private final Context context;
private final GraphQLFieldDefinition field;
private String argumentName;
public GqlvMutation(
final Holder holder,
- final Context context) {
+ final ObjectSpecification objectSpec,
+ final ObjectAction objectAction,
+ final Context context) {
this.holder = holder;
+ this.objectSpec = objectSpec;
+ this.objectAction = objectAction;
this.context = context;
this.argumentName = context.causewayConfiguration.getViewer().getGraphql().getMutation().getTargetArgName();
- val objectSpec = holder.getObjectSpecification();
- val objectAction = holder.getObjectAction();
-
GraphQLOutputType type = typeFor(objectAction);
if (type != null) {
val fieldBuilder = newFieldDefinition()
.name(fieldName(objectSpec, objectAction))
.type(type);
- holder.addGqlArguments(fieldBuilder, TypeMapper.InputContext.INVOKE);
+ addGqlArguments(fieldBuilder);
this.field = holder.addField(fieldBuilder.build());
} else {
this.field = null;
}
}
- private static String fieldName(ObjectSpecification objectSpecification, ObjectAction objectAction) {
+ private static String fieldName(
+ final ObjectSpecification objectSpecification,
+ final ObjectAction objectAction) {
return TypeNames.objectTypeNameFor(objectSpecification) + "__" + objectAction.getId();
}
@@ -117,21 +129,18 @@ public class GqlvMutation {
private Object invoke(final DataFetchingEnvironment dataFetchingEnvironment) {
- val objectSpecification = holder.getObjectSpecification();
- val objectAction = holder.getObjectAction();
-
- val isService = objectSpecification.getBeanSort().isManagedBeanContributing();
+ val isService = objectSpec.getBeanSort().isManagedBeanContributing();
Object sourcePojo;
if (isService) {
- sourcePojo = context.serviceRegistry.lookupServiceElseFail(objectSpecification.getCorrespondingClass());
+ sourcePojo = context.serviceRegistry.lookupServiceElseFail(objectSpec.getCorrespondingClass());
} else {
Object target = dataFetchingEnvironment.getArgument(argumentName);
- sourcePojo = GqlvAction.asPojo(objectSpecification, target, context.bookmarkService)
+ sourcePojo = GqlvAction.asPojo(objectSpec, target, context.bookmarkService)
.orElseThrow(); // TODO: better error handling if no such object found.
}
- ManagedObject managedObject = ManagedObject.adaptSingular(objectSpecification, sourcePojo);
+ ManagedObject managedObject = ManagedObject.adaptSingular(objectSpec, sourcePojo);
val visibleConsent = objectAction.isVisible(managedObject, InteractionInitiatedBy.USER, Where.ANYWHERE);
if (visibleConsent.isVetoed()) {
@@ -144,7 +153,7 @@ public class GqlvMutation {
}
val head = objectAction.interactionHead(managedObject);
- val argumentManagedObjects = holder.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, context.bookmarkService);
+ val argumentManagedObjects = argumentManagedObjectsFor(dataFetchingEnvironment, objectAction);
val validityConsent = objectAction.isArgumentSetValid(head, argumentManagedObjects, InteractionInitiatedBy.USER);
if (validityConsent.isVetoed()) {
@@ -155,18 +164,64 @@ public class GqlvMutation {
return resultManagedObject.getPojo();
}
+
+ // TODO: adapted from GqlvAction - rationalize?
+ private void addGqlArguments(final GraphQLFieldDefinition.Builder fieldBuilder) {
+
+ val arguments = new ArrayList<GraphQLArgument>();
+ val argName = context.causewayConfiguration.getViewer().getGraphql().getMutation().getTargetArgName();
+
+ // add target (if not a service)
+ if (! objectSpec.getBeanSort().isManagedBeanContributing()) {
+ arguments.add(
+ GraphQLArgument.newArgument()
+ .name(argName)
+ .type(context.typeMapper.inputTypeFor(objectSpec))
+ .build()
+ );
+ }
+
+ val parameters = objectAction.getParameters();
+ parameters.stream()
+ .map(this::gqlArgumentFor)
+ .forEach(arguments::add);
+
+ if (!arguments.isEmpty()) {
+ fieldBuilder.arguments(arguments);
+ }
+ }
+
+ // adapted from GqlvAction
+ GraphQLArgument gqlArgumentFor(final ObjectActionParameter objectActionParameter) {
+ return objectActionParameter.isPlural()
+ ? gqlArgumentFor((OneToManyActionParameter) objectActionParameter)
+ : gqlArgumentFor((OneToOneActionParameter) objectActionParameter);
+ }
+
+ // adapted from GqlvAction
+ GraphQLArgument gqlArgumentFor(final OneToOneActionParameter oneToOneActionParameter) {
+ return GraphQLArgument.newArgument()
+ .name(oneToOneActionParameter.getId())
+ .type(context.typeMapper.inputTypeFor(oneToOneActionParameter, TypeMapper.InputContext.INVOKE))
+ .build();
+ }
+
+ // adapted from GqlvAction
+ GraphQLArgument gqlArgumentFor(final OneToManyActionParameter oneToManyActionParameter) {
+ return GraphQLArgument.newArgument()
+ .name(oneToManyActionParameter.getId())
+ .type(context.typeMapper.inputTypeFor(oneToManyActionParameter))
+ .build();
+ }
+
+ private Can<ManagedObject> argumentManagedObjectsFor(
+ final DataFetchingEnvironment dataFetchingEnvironment,
+ final ObjectAction objectAction) {
+ return GqlvAction.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, context);
+ }
+
public interface Holder
- extends GqlvHolder,
- ObjectSpecificationProvider,
- ObjectActionProvider {
-
- void addGqlArguments(
- final GraphQLFieldDefinition.Builder fieldBuilder,
- final TypeMapper.InputContext inputContext);
-
- Can<ManagedObject> argumentManagedObjectsFor(
- final DataFetchingEnvironment dataFetchingEnvironment,
- final ObjectAction objectAction,
- final BookmarkService bookmarkService);
+ extends GqlvHolder {
}
+
}
diff --git a/viewers/graphql/test/src/test/resources/schema.gql b/viewers/graphql/test/src/test/resources/schema.gql
index 94ac2ae9d2..5f6c0fe828 100644
--- a/viewers/graphql/test/src/test/resources/schema.gql
+++ b/viewers/graphql/test/src/test/resources/schema.gql
@@ -23,22 +23,22 @@ directive @specifiedBy(
) on SCALAR
type Mutation {
- causeway_applib_PropertyNode__streamChildNodes(target: causeway_applib_PropertyNode__gqlv_input): java_util_stream_Stream
- causeway_applib_node_ActionNode__streamChildNodes(target: causeway_applib_node_ActionNode__gqlv_input): java_util_stream_Stream
- causeway_applib_node_CollectionNode__streamChildNodes(target: causeway_applib_node_CollectionNode__gqlv_input): java_util_stream_Stream
- org_apache_causeway_core_metamodel_inspect_model_MemberNode__streamChildNodes(target: org_apache_causeway_core_metamodel_inspect_model_MemberNode__gqlv_input): java_util_stream_Stream
+ causeway_applib_PropertyNode__streamChildNodes(_gqlv_target: causeway_applib_PropertyNode__gqlv_input): java_util_stream_Stream
+ causeway_applib_node_ActionNode__streamChildNodes(_gqlv_target: causeway_applib_node_ActionNode__gqlv_input): java_util_stream_Stream
+ causeway_applib_node_CollectionNode__streamChildNodes(_gqlv_target: causeway_applib_node_CollectionNode__gqlv_input): java_util_stream_Stream
+ org_apache_causeway_core_metamodel_inspect_model_MemberNode__streamChildNodes(_gqlv_target: org_apache_causeway_core_metamodel_inspect_model_MemberNode__gqlv_input): java_util_stream_Stream
university_admin_AdminMenu__actionWithDisabledParam(firstParam: String!, secondParam: String!, thirdParameter: String!): String
university_admin_AdminMenu__actionWithHiddenParam(firstParam: String!, secondParam: String!): String
university_admin_AdminMenu__adminAction: String
university_admin_AdminMenu__otherAdminAction: String
- university_dept_Department__addStaffMember(staffMember: university_dept_StaffMember__gqlv_input!, target: university_dept_Department__gqlv_input): university_dept_Department
- university_dept_Department__addStaffMembers(staffMembers: [university_dept_StaffMember__gqlv_input], target: university_dept_Department__gqlv_input): university_dept_Department
- university_dept_Department__changeDeptHead(newDeptHead: university_dept_DeptHead__gqlv_input!, target: university_dept_Department__gqlv_input): university_dept_Department
- university_dept_Department__changeName(newName: String!, target: university_dept_Department__gqlv_input): university_dept_Department
- university_dept_Department__removeStaffMember(staffMember: university_dept_StaffMember__gqlv_input!, target: university_dept_Department__gqlv_input): university_dept_Department
+ university_dept_Department__addStaffMember(_gqlv_target: university_dept_Department__gqlv_input, staffMember: university_dept_StaffMember__gqlv_input!): university_dept_Department
+ university_dept_Department__addStaffMembers(_gqlv_target: university_dept_Department__gqlv_input, staffMembers: [university_dept_StaffMember__gqlv_input]): university_dept_Department
+ university_dept_Department__changeDeptHead(_gqlv_target: university_dept_Department__gqlv_input, newDeptHead: university_dept_DeptHead__gqlv_input!): university_dept_Department
+ university_dept_Department__changeName(_gqlv_target: university_dept_Department__gqlv_input, newName: String!): university_dept_Department
+ university_dept_Department__removeStaffMember(_gqlv_target: university_dept_Department__gqlv_input, staffMember: university_dept_StaffMember__gqlv_input!): university_dept_Department
university_dept_Departments__createDepartment(deptHead: university_dept_DeptHead__gqlv_input, name: String!): university_dept_Department
- university_dept_DeptHead__changeDepartment(department: university_dept_Department__gqlv_input!, target: university_dept_DeptHead__gqlv_input): university_dept_DeptHead
- university_dept_DeptHead__changeName(newName: String!, target: university_dept_DeptHead__gqlv_input): university_dept_DeptHead
+ university_dept_DeptHead__changeDepartment(_gqlv_target: university_dept_DeptHead__gqlv_input, department: university_dept_Department__gqlv_input!): university_dept_DeptHead
+ university_dept_DeptHead__changeName(_gqlv_target: university_dept_DeptHead__gqlv_input, newName: String!): university_dept_DeptHead
university_dept_Staff__createStaffMember(department: university_dept_Department__gqlv_input!, name: String!): university_dept_StaffMember
}
diff --git a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java
index 00db413aee..3d4a792f53 100644
--- a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java
+++ b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java
@@ -3,32 +3,20 @@ package org.apache.causeway.viewer.graphql.viewer.toplevel;
import java.util.ArrayList;
import java.util.List;
-import graphql.schema.DataFetchingEnvironment;
import graphql.schema.FieldCoordinates;
-import graphql.schema.GraphQLArgument;
import graphql.schema.GraphQLFieldDefinition;
import graphql.schema.GraphQLObjectType;
import static graphql.schema.GraphQLObjectType.newObject;
-import org.apache.causeway.applib.services.bookmark.BookmarkService;
-import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
-import org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter;
-import org.apache.causeway.core.metamodel.spec.feature.OneToManyActionParameter;
-import org.apache.causeway.core.metamodel.spec.feature.OneToOneActionParameter;
-import org.apache.causeway.viewer.graphql.applib.types.TypeMapper;
import org.apache.causeway.viewer.graphql.model.context.Context;
-import org.apache.causeway.viewer.graphql.model.domain.GqlvAction;
import org.apache.causeway.viewer.graphql.model.domain.GqlvMutation;
-import org.apache.causeway.viewer.graphql.model.domain.GqlvHolder;
import lombok.Getter;
-import lombok.val;
-public class GqlvTopLevelMutation implements GqlvHolder {
+public class GqlvTopLevelMutation implements GqlvMutation.Holder {
private final Context context;
@@ -68,25 +56,9 @@ public class GqlvTopLevelMutation implements GqlvHolder {
return gqlObjectType;
}
-// public void addFieldFor(
-// final GqlvDomainService domainService,
-// final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
-//
-// GraphQLFieldDefinition topLevelQueryField = domainService.createTopLevelQueryField();
-// gqlObjectBuilder.field(topLevelQueryField);
-//
-// codeRegistryBuilder.dataFetcher(
-// // TODO: it would be nice to make these typesafe...
-// FieldCoordinates.coordinates("Mutation", topLevelQueryField.getName()),
-// (DataFetcher<Object>) environment -> domainService.getServicePojo());
-//
-// }
-
public void addAction(ObjectSpecification objectSpec, final ObjectAction objectAction) {
- // TODO: kinda ugly the responsibilities here
- val holder = new GqlvMutationHolder(this, objectSpec, objectAction, context);
- actions.add(new GqlvMutation(holder, context));
+ actions.add(new GqlvMutation(this, objectSpec, objectAction, context));
}
@Override
@@ -103,98 +75,7 @@ public class GqlvTopLevelMutation implements GqlvHolder {
public void addDataFetchers() {
actions.forEach(GqlvMutation::addDataFetcher);
}
-}
-
-class GqlvMutationHolder implements GqlvMutation.Holder {
-
- private final GqlvTopLevelMutation gqlvTopLevelMutation;
- private final ObjectSpecification objectSpec;
- private final ObjectAction objectAction;
- private final Context context;
-
- public GqlvMutationHolder(
- final GqlvTopLevelMutation gqlvTopLevelMutation,
- final ObjectSpecification objectSpec,
- final ObjectAction objectAction,
- final Context context) {
- this.objectSpec = objectSpec;
- this.objectAction = objectAction;
- this.gqlvTopLevelMutation = gqlvTopLevelMutation;
- this.context = context;
- }
-
- @Override public ObjectAction getObjectAction() {return objectAction;}
- @Override public ObjectAction getObjectMember() {return objectAction;}
- @Override public ObjectSpecification getObjectSpecification() {return objectSpec;}
-
- // TODO: adapted from GqlvAction
- @Override
- public void addGqlArguments(
- final GraphQLFieldDefinition.Builder fieldBuilder,
- final TypeMapper.InputContext inputContext) {
-
- val arguments = new ArrayList<GraphQLArgument>();
- val argName = context.causewayConfiguration.getViewer().getGraphql().getMutation().getTargetArgName();
-
- // add target (if not a service)
- if (! objectSpec.getBeanSort().isManagedBeanContributing()) {
- arguments.add(
- GraphQLArgument.newArgument()
- .name(argName)
- .type(context.typeMapper.inputTypeFor(objectSpec))
- .build()
- );
- }
-
- val parameters = objectAction.getParameters();
- parameters.stream()
- .map(this::gqlArgumentFor)
- .forEach(arguments::add);
-
- if (!arguments.isEmpty()) {
- fieldBuilder.arguments(arguments);
- }
- }
- // adapted from GqlvAction
- GraphQLArgument gqlArgumentFor(final ObjectActionParameter objectActionParameter) {
- return objectActionParameter.isPlural()
- ? gqlArgumentFor((OneToManyActionParameter) objectActionParameter)
- : gqlArgumentFor((OneToOneActionParameter) objectActionParameter);
- }
-
- // adapted from GqlvAction
- GraphQLArgument gqlArgumentFor(final OneToOneActionParameter oneToOneActionParameter) {
- return GraphQLArgument.newArgument()
- .name(oneToOneActionParameter.getId())
- .type(context.typeMapper.inputTypeFor(oneToOneActionParameter, TypeMapper.InputContext.INVOKE))
- .build();
- }
-
- // TODO: copied from GqlvAction
- GraphQLArgument gqlArgumentFor(final OneToManyActionParameter oneToManyActionParameter) {
- return GraphQLArgument.newArgument()
- .name(oneToManyActionParameter.getId())
- .type(context.typeMapper.inputTypeFor(oneToManyActionParameter))
- .build();
- }
-
- @Override
- public Can<ManagedObject> argumentManagedObjectsFor(
- final DataFetchingEnvironment dataFetchingEnvironment,
- final ObjectAction objectAction,
- final BookmarkService bookmarkService) {
- return GqlvAction.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, context);
- }
-
- @Override
- public GraphQLFieldDefinition addField(GraphQLFieldDefinition fieldDefinition) {
- return gqlvTopLevelMutation.addField(fieldDefinition);
- }
-
- @Override
- public FieldCoordinates coordinatesFor(GraphQLFieldDefinition fieldDefinition) {
- return gqlvTopLevelMutation.coordinatesFor(fieldDefinition);
- }
}
+
(causeway) 07/08: CAUSEWAY-3676: renames class is all
Posted by da...@apache.org.
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 4daf1b8b9116d41b579e6df6a7bed4e9c8b50de1
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 30 15:27:10 2024 +0000
CAUSEWAY-3676: renames class is all
---
.../domain/{GqlvMutation.java => GqlvMutationForAction.java} | 4 ++--
.../viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java | 10 +++++-----
2 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutation.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForAction.java
similarity index 99%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutation.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForAction.java
index d07693e89b..6b80e3c30b 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutation.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForAction.java
@@ -50,7 +50,7 @@ import lombok.val;
import lombok.extern.log4j.Log4j2;
@Log4j2
-public class GqlvMutation {
+public class GqlvMutationForAction {
private final Holder holder;
private final ObjectSpecification objectSpec;
@@ -59,7 +59,7 @@ public class GqlvMutation {
private final GraphQLFieldDefinition field;
private String argumentName;
- public GqlvMutation(
+ public GqlvMutationForAction(
final Holder holder,
final ObjectSpecification objectSpec,
final ObjectAction objectAction,
diff --git a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java
index 3d4a792f53..feb16fd775 100644
--- a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java
+++ b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java
@@ -12,11 +12,11 @@ import static graphql.schema.GraphQLObjectType.newObject;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
import org.apache.causeway.viewer.graphql.model.context.Context;
-import org.apache.causeway.viewer.graphql.model.domain.GqlvMutation;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvMutationForAction;
import lombok.Getter;
-public class GqlvTopLevelMutation implements GqlvMutation.Holder {
+public class GqlvTopLevelMutation implements GqlvMutationForAction.Holder {
private final Context context;
@@ -28,7 +28,7 @@ public class GqlvTopLevelMutation implements GqlvMutation.Holder {
*/
private GraphQLObjectType gqlObjectType;
- private final List<GqlvMutation> actions = new ArrayList<>();
+ private final List<GqlvMutationForAction> actions = new ArrayList<>();
public GqlvTopLevelMutation(final Context context) {
this.context = context;
@@ -58,7 +58,7 @@ public class GqlvTopLevelMutation implements GqlvMutation.Holder {
public void addAction(ObjectSpecification objectSpec, final ObjectAction objectAction) {
- actions.add(new GqlvMutation(this, objectSpec, objectAction, context));
+ actions.add(new GqlvMutationForAction(this, objectSpec, objectAction, context));
}
@Override
@@ -73,7 +73,7 @@ public class GqlvTopLevelMutation implements GqlvMutation.Holder {
}
public void addDataFetchers() {
- actions.forEach(GqlvMutation::addDataFetcher);
+ actions.forEach(GqlvMutationForAction::addDataFetcher);
}
(causeway) 02/08: CAUSEWAY-3676: sketching out introducing mutations (2)
Posted by da...@apache.org.
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 46098c161f3a0d7392432d4409af17f3bd939245
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 30 06:45:43 2024 +0000
CAUSEWAY-3676: sketching out introducing mutations (2)
---
.../integration/GraphQlSourceForCauseway.java | 24 ++++++++--------------
1 file changed, 9 insertions(+), 15 deletions(-)
diff --git a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
index 6ae877b43b..84350f0d16 100644
--- a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
+++ b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
@@ -121,16 +121,16 @@ public class GraphQlSourceForCauseway implements GraphQlSource {
objectSpecifications.forEach(objectSpec -> {
switch (objectSpec.getBeanSort()) {
-
case MANAGED_BEAN_CONTRIBUTING: // @DomainService
-
serviceRegistry.lookupBeanById(objectSpec.getLogicalTypeName())
- .ifPresent(servicePojo ->
- {
- topLevelQuery.addDomainServiceTo(objectSpec, servicePojo, context);
-
- });
+ .ifPresent(servicePojo -> topLevelQuery.addDomainServiceTo(objectSpec, servicePojo, context));
break;
+ }
+ });
+ topLevelQuery.buildQueryType();
+
+ objectSpecifications.forEach(objectSpec -> {
+ switch (objectSpec.getBeanSort()) {
case ABSTRACT:
case VIEW_MODEL: // @DomainObject(nature=VIEW_MODEL)
@@ -142,19 +142,13 @@ public class GraphQlSourceForCauseway implements GraphQlSource {
break;
- case MANAGED_BEAN_NOT_CONTRIBUTING: // a @Service or @Component ... ignore
- case MIXIN:
- case VALUE:
- case COLLECTION:
- case VETOED:
- case UNKNOWN:
- break;
}
});
- topLevelQuery.buildQueryType();
if (topLevelMutation != null) {
+ objectSpecifications.forEach(objectSpec -> {
+ });
topLevelMutation.buildMutationType();
topLevelMutation.addFetchers();
}
(causeway) 01/08: CAUSEWAY-3676: sketching out introducing mutations
Posted by da...@apache.org.
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 92127e50a5584abd307ae5f94dc686857b8e5730
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 30 06:41:55 2024 +0000
CAUSEWAY-3676: sketching out introducing mutations
---
.../graphql/model/domain/GqlvDomainObject.java | 7 +-
viewers/graphql/test/src/test/resources/schema.gql | 1 -
.../integration/GraphQlSourceForCauseway.java | 123 +++++++++------------
...opLevelQuery.java => GqlvTopLevelMutation.java} | 70 ++++++------
.../graphql/viewer/toplevel/GqlvTopLevelQuery.java | 22 ++--
5 files changed, 101 insertions(+), 122 deletions(-)
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
index a4349b4434..1416c7326c 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
@@ -89,14 +89,13 @@ public class GqlvDomainObject implements GqlvAction.Holder, GqlvProperty.Holder,
gqlInputObjectType = inputTypeBuilder.build();
addMembers();
+ }
- // register types
+ public void addTypesInto(GraphQLTypeRegistry graphQLTypeRegistry) {
gqlObjectType = gqlObjectTypeBuilder.build();
graphQLTypeRegistry.addTypeIfNotAlreadyPresent(gqlObjectType);
meta.registerTypesInto(graphQLTypeRegistry);
graphQLTypeRegistry.addTypeIfNotAlreadyPresent(gqlInputObjectType);
-
- addDataFetchers();
}
@@ -141,7 +140,7 @@ public class GqlvDomainObject implements GqlvAction.Holder, GqlvProperty.Holder,
}
- private void addDataFetchers() {
+ public void addDataFetchers() {
meta.addDataFetchers();
properties.forEach((id, property) -> property.addDataFetcher());
collections.forEach((id, collection) -> collection.addDataFetcher());
diff --git a/viewers/graphql/test/src/test/resources/schema.gql b/viewers/graphql/test/src/test/resources/schema.gql
index f59319134e..363755e40d 100644
--- a/viewers/graphql/test/src/test/resources/schema.gql
+++ b/viewers/graphql/test/src/test/resources/schema.gql
@@ -26,7 +26,6 @@ type Query {
causeway_applib_UserMenu: causeway_applib_UserMenu
causeway_conf_ConfigurationMenu: causeway_conf_ConfigurationMenu
causeway_security_LogoutMenu: causeway_security_LogoutMenu
- numServices: Int
university_admin_AdminMenu: university_admin_AdminMenu
university_calc_Calculator: university_calc_Calculator
university_dept_Departments: university_dept_Departments
diff --git a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
index e0403c37e3..6ae877b43b 100644
--- a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
+++ b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
@@ -19,12 +19,12 @@
package org.apache.causeway.viewer.graphql.viewer.integration;
import java.util.Comparator;
-import java.util.List;
-import java.util.Set;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
+import org.apache.causeway.viewer.graphql.viewer.toplevel.GqlvTopLevelMutation;
+
import org.springframework.graphql.execution.GraphQlSource;
import org.springframework.stereotype.Service;
@@ -35,12 +35,10 @@ import org.apache.causeway.core.config.CausewayConfiguration;
import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
import org.apache.causeway.core.config.metamodel.specloader.IntrospectionMode;
import org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
-import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
import org.apache.causeway.viewer.graphql.applib.types.TypeMapper;
import org.apache.causeway.viewer.graphql.model.context.Context;
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.registry.GraphQLTypeRegistry;
import org.apache.causeway.viewer.graphql.viewer.toplevel.GqlvTopLevelQuery;
@@ -53,7 +51,6 @@ import graphql.execution.DataFetcherExceptionHandlerParameters;
import graphql.execution.DataFetcherExceptionHandlerResult;
import graphql.schema.GraphQLCodeRegistry;
import graphql.schema.GraphQLSchema;
-import graphql.schema.GraphQLType;
@Service()
@RequiredArgsConstructor(onConstructor_ = {@Inject})
@@ -83,7 +80,6 @@ public class GraphQlSourceForCauseway implements GraphQlSource {
public GraphQL graphQl() {
if (graphQL == null) {
graphQL = GraphQL.newGraphQL(schema())
-// .instrumentation(new TracingInstrumentation())
.defaultDataFetcherExceptionHandler(new DataFetcherExceptionHandler() {
@Override
public DataFetcherExceptionHandlerResult onException(DataFetcherExceptionHandlerParameters handlerParameters) {
@@ -91,6 +87,7 @@ public class GraphQlSourceForCauseway implements GraphQlSource {
}
})
.queryExecutionStrategy(executionStrategy)
+ .mutationExecutionStrategy(executionStrategy)
.build();
}
return graphQL;
@@ -104,94 +101,78 @@ public class GraphQlSourceForCauseway implements GraphQlSource {
throw new IllegalStateException("Metamodel is not fully introspected");
}
- final GraphQLCodeRegistry.Builder codeRegistryBuilder = GraphQLCodeRegistry.newCodeRegistry();
+ val codeRegistryBuilder = GraphQLCodeRegistry.newCodeRegistry();
- // add to the top-level query
- // (and also add behaviour to the child types)
+ // add to the top-level query type and (dependent on configuration) the top-level mutation type also
val topLevelQuery = new GqlvTopLevelQuery(serviceRegistry, codeRegistryBuilder);
+ val topLevelMutation =
+ causewayConfiguration.getViewer().getGraphql().getApiVariant() == CausewayConfiguration.Viewer.Graphql.ApiVariant.QUERY_AND_MUTATIONS ?
+ new GqlvTopLevelMutation(serviceRegistry, codeRegistryBuilder)
+ : null;
- List<ObjectSpecification> objectSpecifications = specificationLoader.snapshotSpecifications()
+ val objectSpecifications = specificationLoader.snapshotSpecifications()
.distinct((a, b) -> a.getLogicalTypeName().equals(b.getLogicalTypeName()))
.filter(x -> x.isEntityOrViewModelOrAbstract() || x.getBeanSort().isManagedBeanContributing())
.sorted(Comparator.comparing(HasLogicalType::getLogicalTypeName))
.toList();
- objectSpecifications.forEach(objectSpec -> addToSchema(objectSpec, topLevelQuery, codeRegistryBuilder));
-
- topLevelQuery.buildQueryType();
-
-
- topLevelQuery.addFetchers();
-
- // finalize the fetcher/mutator code that's been registered
- val codeRegistry = codeRegistryBuilder.build();
+ // add to top-level query
+ val context = new Context(codeRegistryBuilder, bookmarkService, specificationLoader, typeMapper, causewayConfiguration, causewaySystemEnvironment);
- // build the schema
- Set<GraphQLType> graphQLTypes = graphQLTypeRegistry.getGraphQLTypes();
- return GraphQLSchema.newSchema()
- .query(topLevelQuery.getQueryType())
- .additionalTypes(graphQLTypes)
- .codeRegistry(codeRegistry)
- .build();
- }
+ objectSpecifications.forEach(objectSpec -> {
+ switch (objectSpec.getBeanSort()) {
- private void addToSchema(
- final ObjectSpecification objectSpec,
- final GqlvTopLevelQuery gqlvTopLevelQuery,
- final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
+ case MANAGED_BEAN_CONTRIBUTING: // @DomainService
- Context context = new Context(codeRegistryBuilder, bookmarkService, specificationLoader, typeMapper, causewayConfiguration, causewaySystemEnvironment);
+ serviceRegistry.lookupBeanById(objectSpec.getLogicalTypeName())
+ .ifPresent(servicePojo ->
+ {
+ topLevelQuery.addDomainServiceTo(objectSpec, servicePojo, context);
- switch (objectSpec.getBeanSort()) {
+ });
+ break;
- case MANAGED_BEAN_CONTRIBUTING: // @DomainService
+ case ABSTRACT:
+ case VIEW_MODEL: // @DomainObject(nature=VIEW_MODEL)
+ case ENTITY: // @DomainObject(nature=ENTITY)
- addDomainServiceToTopLevelQuery(objectSpec, gqlvTopLevelQuery, context);
- break;
+ val gqlvDomainObject = new GqlvDomainObject(objectSpec, context, objectManager, graphQLTypeRegistry);
+ gqlvDomainObject.addTypesInto(graphQLTypeRegistry);
+ gqlvDomainObject.addDataFetchers();
- case ABSTRACT:
- // TODO: App interface should map to gql interfaces?
- case VIEW_MODEL: // @DomainObject(nature=VIEW_MODEL)
- case ENTITY: // @DomainObject(nature=ENTITY)
+ break;
- new GqlvDomainObject(objectSpec, context, objectManager, graphQLTypeRegistry);
+ case MANAGED_BEAN_NOT_CONTRIBUTING: // a @Service or @Component ... ignore
+ case MIXIN:
+ case VALUE:
+ case COLLECTION:
+ case VETOED:
+ case UNKNOWN:
+ break;
+ }
+ });
+ topLevelQuery.buildQueryType();
- break;
+ if (topLevelMutation != null) {
- case MANAGED_BEAN_NOT_CONTRIBUTING: // a @Service or @Component ... ignore
- case MIXIN:
- case VALUE:
- case COLLECTION:
- case VETOED:
- case UNKNOWN:
- break;
+ topLevelMutation.buildMutationType();
+ topLevelMutation.addFetchers();
}
- }
-
- public void addDomainServiceToTopLevelQuery(
- final ObjectSpecification objectSpec,
- final GqlvTopLevelQuery topLevelQueryStructure,
- final Context context) {
- serviceRegistry.lookupBeanById(objectSpec.getLogicalTypeName())
- .ifPresent(servicePojo ->
- addDomainServiceToTopLevelQuery(servicePojo, objectSpec, topLevelQueryStructure, context));
- }
-
- private void addDomainServiceToTopLevelQuery(
- final Object servicePojo,
- final ObjectSpecification objectSpec,
- final GqlvTopLevelQuery topLevelQuery,
- final Context context) {
- val domainService = new GqlvDomainService(objectSpec, servicePojo, context);
+ // finalize the fetcher/mutator code that's been registered
+ val codeRegistry = codeRegistryBuilder.build();
- boolean actionsAdded = domainService.hasActions();
- if (actionsAdded) {
- topLevelQuery.addFieldFor(domainService, context.codeRegistryBuilder);
+ // build the schema
+ val schemaBuilder = GraphQLSchema.newSchema()
+ .query(topLevelQuery.getQueryType())
+ .additionalTypes(graphQLTypeRegistry.getGraphQLTypes())
+ .codeRegistry(codeRegistry);
+ if (topLevelMutation != null) {
+ schemaBuilder.mutation(topLevelMutation.getObjectType());
}
-
-
+ return schemaBuilder
+ .build();
}
diff --git a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelQuery.java b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java
similarity index 50%
copy from viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelQuery.java
copy to viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java
index 36b6f983dc..c04fa400b2 100644
--- a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelQuery.java
+++ b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java
@@ -1,10 +1,5 @@
package org.apache.causeway.viewer.graphql.viewer.toplevel;
-import org.apache.causeway.applib.services.registry.ServiceRegistry;
-import org.apache.causeway.viewer.graphql.model.domain.GqlvDomainService;
-
-import lombok.Getter;
-
import graphql.Scalars;
import graphql.schema.DataFetcher;
import graphql.schema.FieldCoordinates;
@@ -16,73 +11,78 @@ import static graphql.schema.FieldCoordinates.coordinates;
import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
import static graphql.schema.GraphQLObjectType.newObject;
-public class GqlvTopLevelQuery {
+import org.apache.causeway.applib.services.registry.ServiceRegistry;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvDomainService;
+
+import lombok.Getter;
+
+public class GqlvTopLevelMutation {
private final ServiceRegistry serviceRegistry;
private final GraphQLCodeRegistry.Builder codeRegistryBuilder;
- @Getter final GraphQLObjectType.Builder queryBuilder;
+ @Getter final GraphQLObjectType.Builder gqlObjectBuilder;
@Getter private GraphQLFieldDefinition numServicesField;
/**
- * Built using {@link #buildQueryType()}
+ * Built using {@link #buildMutationType()}
*/
- private GraphQLObjectType queryType;
+ private GraphQLObjectType objectType;
- public GqlvTopLevelQuery(
+ public GqlvTopLevelMutation(
final ServiceRegistry serviceRegistry,
final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
this.serviceRegistry = serviceRegistry;
this.codeRegistryBuilder = codeRegistryBuilder;
- queryBuilder = newObject().name("Query");
+ gqlObjectBuilder = newObject().name("Mutation");
numServicesField = newFieldDefinition()
.name("numServices")
.type(Scalars.GraphQLInt)
.build();
- queryBuilder.field(numServicesField);
+ gqlObjectBuilder.field(numServicesField);
}
- public GraphQLObjectType buildQueryType() {
- if (queryType != null) {
- throw new IllegalStateException("QueryType has already been built");
+ public GraphQLObjectType buildMutationType() {
+ if (objectType != null) {
+ throw new IllegalStateException("Mutation type has already been built");
}
- return queryType = queryBuilder.build();
+ return objectType = gqlObjectBuilder.build();
}
/**
*
- * @see #buildQueryType()
+ * @see #buildMutationType()
*/
- public GraphQLObjectType getQueryType() {
- if (queryType == null) {
- throw new IllegalStateException("QueryType has not yet been built");
+ public GraphQLObjectType getObjectType() {
+ if (objectType == null) {
+ throw new IllegalStateException("Mutation type has not yet been built");
}
- return queryType;
+ return objectType;
}
- public void addFieldFor(
- final GqlvDomainService domainService,
- final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
-
- GraphQLFieldDefinition topLevelQueryField = domainService.createTopLevelQueryField();
- queryBuilder.field(topLevelQueryField);
-
- codeRegistryBuilder.dataFetcher(
- // TODO: it would be nice to make these typesafe...
- FieldCoordinates.coordinates("Query", topLevelQueryField.getName()),
- (DataFetcher<Object>) environment -> domainService.getServicePojo());
-
- }
+// public void addFieldFor(
+// final GqlvDomainService domainService,
+// final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
+//
+// GraphQLFieldDefinition topLevelQueryField = domainService.createTopLevelQueryField();
+// gqlObjectBuilder.field(topLevelQueryField);
+//
+// codeRegistryBuilder.dataFetcher(
+// // TODO: it would be nice to make these typesafe...
+// FieldCoordinates.coordinates("Mutation", topLevelQueryField.getName()),
+// (DataFetcher<Object>) environment -> domainService.getServicePojo());
+//
+// }
public void addFetchers() {
codeRegistryBuilder
.dataFetcher(
- coordinates(getQueryType(), getNumServicesField()),
+ coordinates(getObjectType(), getNumServicesField()),
(DataFetcher<Object>) environment -> this.serviceRegistry.streamRegisteredBeans().count());
}
diff --git a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelQuery.java b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelQuery.java
index 36b6f983dc..71eb279b5d 100644
--- a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelQuery.java
+++ b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelQuery.java
@@ -1,6 +1,8 @@
package org.apache.causeway.viewer.graphql.viewer.toplevel;
import org.apache.causeway.applib.services.registry.ServiceRegistry;
+import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
+import org.apache.causeway.viewer.graphql.model.context.Context;
import org.apache.causeway.viewer.graphql.model.domain.GqlvDomainService;
import lombok.Getter;
@@ -12,6 +14,8 @@ import graphql.schema.GraphQLCodeRegistry;
import graphql.schema.GraphQLFieldDefinition;
import graphql.schema.GraphQLObjectType;
+import lombok.val;
+
import static graphql.schema.FieldCoordinates.coordinates;
import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
import static graphql.schema.GraphQLObjectType.newObject;
@@ -23,7 +27,6 @@ public class GqlvTopLevelQuery {
@Getter final GraphQLObjectType.Builder queryBuilder;
- @Getter private GraphQLFieldDefinition numServicesField;
/**
* Built using {@link #buildQueryType()}
@@ -38,11 +41,6 @@ public class GqlvTopLevelQuery {
this.codeRegistryBuilder = codeRegistryBuilder;
queryBuilder = newObject().name("Query");
- numServicesField = newFieldDefinition()
- .name("numServices")
- .type(Scalars.GraphQLInt)
- .build();
- queryBuilder.field(numServicesField);
}
@@ -79,11 +77,13 @@ public class GqlvTopLevelQuery {
}
- public void addFetchers() {
- codeRegistryBuilder
- .dataFetcher(
- coordinates(getQueryType(), getNumServicesField()),
- (DataFetcher<Object>) environment -> this.serviceRegistry.streamRegisteredBeans().count());
+ public void addDomainServiceTo(ObjectSpecification objectSpec, Object servicePojo, Context context) {
+ val domainService = new GqlvDomainService(objectSpec, servicePojo, context);
+
+ boolean actionsAdded = domainService.hasActions();
+ if (actionsAdded) {
+ addFieldFor(domainService, context.codeRegistryBuilder);
+ }
}
}
(causeway) 03/08: CAUSEWAY-3676: sketching out introducing mutations (3)
Posted by da...@apache.org.
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 a0b2d0767ece32caf5cdb0bb7a8e40bc52ef9bb3
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 30 08:36:39 2024 +0000
CAUSEWAY-3676: sketching out introducing mutations (3)
---
.../viewer/graphql/applib/types/TypeMapper.java | 2 +
.../viewer/graphql/model/domain/GqlvAction.java | 35 ++--
.../model/domain/GqlvActionInvokeMutating.java | 175 ++++++++++++++++++++
.../graphql/model/types/TypeMapperDefault.java | 13 +-
.../integration/GraphQlSourceForCauseway.java | 30 ++--
.../viewer/toplevel/GqlvTopLevelMutation.java | 180 +++++++++++++++++----
6 files changed, 367 insertions(+), 68 deletions(-)
diff --git a/viewers/graphql/applib/src/main/java/org/apache/causeway/viewer/graphql/applib/types/TypeMapper.java b/viewers/graphql/applib/src/main/java/org/apache/causeway/viewer/graphql/applib/types/TypeMapper.java
index ccea137f8e..7cd932cd6e 100644
--- a/viewers/graphql/applib/src/main/java/org/apache/causeway/viewer/graphql/applib/types/TypeMapper.java
+++ b/viewers/graphql/applib/src/main/java/org/apache/causeway/viewer/graphql/applib/types/TypeMapper.java
@@ -66,6 +66,8 @@ public interface TypeMapper {
GraphQLList inputTypeFor(final OneToManyActionParameter oneToManyActionParameter, final InputContext inputContextUnused);
+ GraphQLInputType inputTypeFor(final ObjectSpecification elementType);
+
Object adaptPojo(
final Object argumentValue,
final ObjectSpecification elementType);
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
index bc784914d3..42b026c4cc 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
@@ -97,6 +97,13 @@ public class GqlvAction
final ObjectAction objectAction,
final BookmarkService bookmarkService) {
+ return argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, context);
+ }
+
+ public static Can<ManagedObject> argumentManagedObjectsFor(
+ final DataFetchingEnvironment dataFetchingEnvironment,
+ final ObjectAction objectAction,
+ final Context context) {
Map<String, Object> argumentPojos = dataFetchingEnvironment.getArguments();
Can<ObjectActionParameter> parameters = objectAction.getParameters();
return parameters
@@ -106,7 +113,7 @@ public class GqlvAction
switch (elementType.getBeanSort()) {
case VALUE:
- return adaptValue(oap, argumentValue);
+ return adaptValue(oap, argumentValue, context);
case ENTITY:
case VIEW_MODEL:
@@ -117,12 +124,12 @@ public class GqlvAction
if (argumentValue instanceof List) {
val argumentValueList = (List<Object>) argumentValue;
pojoOrPojoList = argumentValueList.stream()
- .map(value -> asPojo(oap.getElementType(), value, bookmarkService))
+ .map(value -> asPojo(oap.getElementType(), value, context.bookmarkService))
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList());
} else {
- pojoOrPojoList = asPojo(oap.getElementType(), argumentValue, bookmarkService).orElse(null);
+ pojoOrPojoList = asPojo(oap.getElementType(), argumentValue, context.bookmarkService).orElse(null);
}
return ManagedObject.adaptParameter(oap, pojoOrPojoList);
@@ -140,16 +147,17 @@ public class GqlvAction
});
}
- private ManagedObject adaptValue(
+ private static ManagedObject adaptValue(
final ObjectActionParameter oap,
- final Object argumentValue) {
+ final Object argumentValue,
+ final Context context1) {
val elementType = oap.getElementType();
if (argumentValue == null) {
return ManagedObject.empty(elementType);
}
- val argPojo = context.typeMapper.adaptPojo(argumentValue, elementType);
+ val argPojo = context1.typeMapper.adaptPojo(argumentValue, elementType);
return ManagedObject.adaptParameter(oap, argPojo);
}
@@ -185,21 +193,6 @@ public class GqlvAction
}
}
- public void addGqlArgument(
- final ObjectAction objectAction,
- final GraphQLFieldDefinition.Builder builder,
- final TypeMapper.InputContext inputContext,
- final int paramNum) {
-
- val parameters = objectAction.getParameters();
- val arguments = parameters.get(paramNum).stream()
- .map(objectActionParameter -> gqlArgumentFor(objectActionParameter, inputContext))
- .collect(Collectors.toList());
- if (!arguments.isEmpty()) {
- builder.arguments(arguments);
- }
- }
-
GraphQLArgument gqlArgumentFor(
final ObjectActionParameter objectActionParameter,
final TypeMapper.InputContext inputContext) {
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvokeMutating.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvokeMutating.java
new file mode 100644
index 0000000000..bac4dc7b77
--- /dev/null
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvokeMutating.java
@@ -0,0 +1,175 @@
+/*
+ * 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.causeway.viewer.graphql.model.domain;
+
+import graphql.schema.*;
+
+import lombok.extern.log4j.Log4j2;
+import lombok.val;
+
+import org.apache.causeway.applib.annotation.Where;
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
+import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+import org.apache.causeway.viewer.graphql.applib.types.TypeMapper;
+import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.exceptions.DisabledException;
+import org.apache.causeway.viewer.graphql.model.exceptions.HiddenException;
+import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
+import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
+import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
+
+import org.springframework.lang.Nullable;
+
+import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
+
+@Log4j2
+public class GqlvActionInvokeMutating {
+
+ private final Holder holder;
+ private final Context context;
+ private final GraphQLFieldDefinition field;
+
+ public GqlvActionInvokeMutating(
+ final Holder holder,
+ final Context context) {
+ this.holder = holder;
+ this.context = context;
+
+ val objectAction = holder.getObjectAction();
+
+ GraphQLOutputType type = typeFor(objectAction);
+ if (type != null) {
+ val fieldBuilder = newFieldDefinition()
+ .name(fieldNameForSemanticsOf(objectAction))
+ .type(type);
+ holder.addGqlArguments(fieldBuilder, TypeMapper.InputContext.INVOKE);
+ this.field = holder.addField(fieldBuilder.build());
+ } else {
+ this.field = null;
+ }
+ }
+
+ private static String fieldNameForSemanticsOf(ObjectAction objectAction) {
+ switch (objectAction.getSemantics()) {
+ case SAFE_AND_REQUEST_CACHEABLE:
+ case SAFE:
+ return "invoke";
+ case IDEMPOTENT:
+ case IDEMPOTENT_ARE_YOU_SURE:
+ return "invokeIdempotent";
+ case NON_IDEMPOTENT:
+ case NON_IDEMPOTENT_ARE_YOU_SURE:
+ case NOT_SPECIFIED:
+ default:
+ return "invokeNonIdempotent";
+ }
+ }
+
+ @Nullable
+ private GraphQLOutputType typeFor(final ObjectAction objectAction){
+ ObjectSpecification objectSpecification = objectAction.getReturnType();
+ switch (objectSpecification.getBeanSort()){
+
+ case COLLECTION:
+
+ TypeOfFacet facet = objectAction.getFacet(TypeOfFacet.class);
+ if (facet == null) {
+ log.warn("Unable to locate TypeOfFacet for {}", objectAction.getFeatureIdentifier().getFullIdentityString());
+ return null;
+ }
+ val objectSpecificationOfCollectionElement = facet.elementSpec();
+ GraphQLType wrappedType = context.typeMapper.outputTypeFor(objectSpecificationOfCollectionElement);
+ if (wrappedType == null) {
+ log.warn("Unable to create wrapped type of for {} for action {}",
+ objectSpecificationOfCollectionElement.getFullIdentifier(),
+ objectAction.getFeatureIdentifier().getFullIdentityString());
+ return null;
+ }
+ return GraphQLList.list(wrappedType);
+
+ case VALUE:
+ case ENTITY:
+ case VIEW_MODEL:
+ default:
+ return context.typeMapper.outputTypeFor(objectSpecification);
+
+ }
+ }
+
+ public void addDataFetcher() {
+ context.codeRegistryBuilder.dataFetcher(
+ holder.coordinatesFor(field),
+ this::invoke
+ );
+ }
+
+ private Object invoke(final DataFetchingEnvironment dataFetchingEnvironment) {
+
+ val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment);
+
+ val objectSpecification = context.specificationLoader.loadSpecification(sourcePojo.getClass());
+ if (objectSpecification == null) {
+ return null;
+ }
+
+ val objectAction = holder.getObjectAction();
+ val managedObject = ManagedObject.adaptSingular(objectSpecification, sourcePojo);
+
+ val visibleConsent = objectAction.isVisible(managedObject, InteractionInitiatedBy.USER, Where.ANYWHERE);
+ if (visibleConsent.isVetoed()) {
+ throw new HiddenException(objectAction.getFeatureIdentifier());
+ }
+
+ val usableConsent = objectAction.isUsable(managedObject, InteractionInitiatedBy.USER, Where.ANYWHERE);
+ if (usableConsent.isVetoed()) {
+ throw new DisabledException(objectAction.getFeatureIdentifier());
+ }
+
+ val head = objectAction.interactionHead(managedObject);
+ val argumentManagedObjects = holder.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, context.bookmarkService);
+
+ val validityConsent = objectAction.isArgumentSetValid(head, argumentManagedObjects, InteractionInitiatedBy.USER);
+ if (validityConsent.isVetoed()) {
+ throw new IllegalArgumentException(validityConsent.getReasonAsString().orElse("Invalid"));
+ }
+
+ val resultManagedObject = objectAction.execute(head, argumentManagedObjects, InteractionInitiatedBy.USER);
+ return resultManagedObject.getPojo();
+ }
+
+ public interface Holder
+ extends GqlvHolder,
+ ObjectSpecificationProvider,
+ ObjectActionProvider {
+
+ void addGqlArguments(
+ final GraphQLFieldDefinition.Builder fieldBuilder,
+ final TypeMapper.InputContext inputContext);
+
+ Can<ManagedObject> argumentManagedObjectsFor(
+ DataFetchingEnvironment dataFetchingEnvironment,
+ ObjectAction objectAction,
+ BookmarkService bookmarkService);
+ }
+}
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/types/TypeMapperDefault.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/types/TypeMapperDefault.java
index 7251e3713a..c102b1cb51 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/types/TypeMapperDefault.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/types/TypeMapperDefault.java
@@ -100,10 +100,12 @@ public class TypeMapperDefault implements TypeMapper {
pair(Boolean.class, Scalars.GraphQLBoolean)
);
+ @Override
public GraphQLScalarType scalarTypeFor(final Class<?> c){
return SCALAR_BY_CLASS.getOrDefault(c, Scalars.GraphQLString);
}
+ @Override
public GraphQLOutputType outputTypeFor(final OneToOneFeature oneToOneFeature) {
ObjectSpecification otoaObjectSpec = oneToOneFeature.getElementType();
switch (otoaObjectSpec.getBeanSort()) {
@@ -127,6 +129,7 @@ public class TypeMapperDefault implements TypeMapper {
return null;
}
+ @Override
@Nullable
public GraphQLOutputType outputTypeFor(final ObjectSpecification objectSpecification){
@@ -149,11 +152,13 @@ public class TypeMapperDefault implements TypeMapper {
}
}
+ @Override
@Nullable public GraphQLList listTypeForElementTypeOf(OneToManyAssociation oneToManyAssociation) {
ObjectSpecification elementType = oneToManyAssociation.getElementType();
return listTypeFor(elementType);
}
+ @Override
@Nullable public GraphQLList listTypeFor(ObjectSpecification elementType) {
switch (elementType.getBeanSort()) {
case VIEW_MODEL:
@@ -165,6 +170,7 @@ public class TypeMapperDefault implements TypeMapper {
return null;
}
+ @Override
public GraphQLInputType inputTypeFor(
final OneToOneFeature oneToOneFeature,
final InputContext inputContext) {
@@ -192,12 +198,14 @@ public class TypeMapperDefault implements TypeMapper {
}
}
+ @Override
public GraphQLList inputTypeFor(final OneToManyActionParameter oneToManyActionParameter, final InputContext inputContextUnused){
ObjectSpecification elementType = oneToManyActionParameter.getElementType();
- return GraphQLList.list(inputTypeFor_(elementType));
+ return GraphQLList.list(inputTypeFor(elementType));
}
- private GraphQLInputType inputTypeFor_(final ObjectSpecification elementType){
+ @Override
+ public GraphQLInputType inputTypeFor(final ObjectSpecification elementType){
switch (elementType.getBeanSort()) {
case ABSTRACT:
case ENTITY:
@@ -216,6 +224,7 @@ public class TypeMapperDefault implements TypeMapper {
}
}
+ @Override
public Object adaptPojo(
final Object argumentValue,
final ObjectSpecification elementType) {
diff --git a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
index 84350f0d16..62a00b5273 100644
--- a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
+++ b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
@@ -23,6 +23,7 @@ import java.util.Comparator;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
+import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
import org.apache.causeway.viewer.graphql.viewer.toplevel.GqlvTopLevelMutation;
import org.springframework.graphql.execution.GraphQlSource;
@@ -102,14 +103,16 @@ public class GraphQlSourceForCauseway implements GraphQlSource {
}
val codeRegistryBuilder = GraphQLCodeRegistry.newCodeRegistry();
+ val context = new Context(codeRegistryBuilder, bookmarkService, specificationLoader, typeMapper, causewayConfiguration, causewaySystemEnvironment);
// add to the top-level query type and (dependent on configuration) the top-level mutation type also
val topLevelQuery = new GqlvTopLevelQuery(serviceRegistry, codeRegistryBuilder);
val topLevelMutation =
causewayConfiguration.getViewer().getGraphql().getApiVariant() == CausewayConfiguration.Viewer.Graphql.ApiVariant.QUERY_AND_MUTATIONS ?
- new GqlvTopLevelMutation(serviceRegistry, codeRegistryBuilder)
+ new GqlvTopLevelMutation(context)
: null;
+
val objectSpecifications = specificationLoader.snapshotSpecifications()
.distinct((a, b) -> a.getLogicalTypeName().equals(b.getLogicalTypeName()))
.filter(x -> x.isEntityOrViewModelOrAbstract() || x.getBeanSort().isManagedBeanContributing())
@@ -117,8 +120,6 @@ public class GraphQlSourceForCauseway implements GraphQlSource {
.toList();
// add to top-level query
- val context = new Context(codeRegistryBuilder, bookmarkService, specificationLoader, typeMapper, causewayConfiguration, causewaySystemEnvironment);
-
objectSpecifications.forEach(objectSpec -> {
switch (objectSpec.getBeanSort()) {
case MANAGED_BEAN_CONTRIBUTING: // @DomainService
@@ -129,6 +130,19 @@ public class GraphQlSourceForCauseway implements GraphQlSource {
});
topLevelQuery.buildQueryType();
+ // add top-level mutation (if application configuration requires it)
+ if (topLevelMutation != null) {
+ objectSpecifications.forEach(objectSpec -> {
+ objectSpec.streamActions(context.getActionScope(), MixedIn.INCLUDED)
+ .filter(x -> ! x.getSemantics().isSafeInNature())
+ .forEach(objectAction -> topLevelMutation.addAction(objectSpec, objectAction));
+
+ });
+ topLevelMutation.buildMutationType();
+ topLevelMutation.addFetchers();
+ }
+
+ // add remaining domain objects
objectSpecifications.forEach(objectSpec -> {
switch (objectSpec.getBeanSort()) {
@@ -141,17 +155,9 @@ public class GraphQlSourceForCauseway implements GraphQlSource {
gqlvDomainObject.addDataFetchers();
break;
-
}
});
- if (topLevelMutation != null) {
- objectSpecifications.forEach(objectSpec -> {
-
- });
- topLevelMutation.buildMutationType();
- topLevelMutation.addFetchers();
- }
// finalize the fetcher/mutator code that's been registered
@@ -163,7 +169,7 @@ public class GraphQlSourceForCauseway implements GraphQlSource {
.additionalTypes(graphQLTypeRegistry.getGraphQLTypes())
.codeRegistry(codeRegistry);
if (topLevelMutation != null) {
- schemaBuilder.mutation(topLevelMutation.getObjectType());
+ schemaBuilder.mutation(topLevelMutation.getGqlObjectType());
}
return schemaBuilder
.build();
diff --git a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java
index c04fa400b2..9442da2755 100644
--- a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java
+++ b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java
@@ -1,68 +1,73 @@
package org.apache.causeway.viewer.graphql.viewer.toplevel;
-import graphql.Scalars;
-import graphql.schema.DataFetcher;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+import graphql.schema.DataFetchingEnvironment;
import graphql.schema.FieldCoordinates;
-import graphql.schema.GraphQLCodeRegistry;
+import graphql.schema.GraphQLArgument;
import graphql.schema.GraphQLFieldDefinition;
+import graphql.schema.GraphQLInputType;
import graphql.schema.GraphQLObjectType;
-import static graphql.schema.FieldCoordinates.coordinates;
-import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
import static graphql.schema.GraphQLObjectType.newObject;
-import org.apache.causeway.applib.services.registry.ServiceRegistry;
-import org.apache.causeway.viewer.graphql.model.domain.GqlvDomainService;
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.commons.collections.Can;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
+import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter;
+import org.apache.causeway.core.metamodel.spec.feature.OneToManyActionParameter;
+import org.apache.causeway.core.metamodel.spec.feature.OneToOneActionParameter;
+import org.apache.causeway.viewer.graphql.applib.types.TypeMapper;
+import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvAction;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvActionInvokeMutating;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvHolder;
import lombok.Getter;
+import lombok.val;
-public class GqlvTopLevelMutation {
+public class GqlvTopLevelMutation implements GqlvHolder {
- private final ServiceRegistry serviceRegistry;
- private final GraphQLCodeRegistry.Builder codeRegistryBuilder;
+ private final Context context;
- @Getter final GraphQLObjectType.Builder gqlObjectBuilder;
+ @Getter final GraphQLObjectType.Builder gqlObjectTypeBuilder;
- @Getter private GraphQLFieldDefinition numServicesField;
/**
* Built using {@link #buildMutationType()}
*/
- private GraphQLObjectType objectType;
+ private GraphQLObjectType gqlObjectType;
+ private final Map<String, GqlvActionInvokeMutating> actions = new LinkedHashMap<String, GqlvActionInvokeMutating>();
- public GqlvTopLevelMutation(
- final ServiceRegistry serviceRegistry,
- final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
- this.serviceRegistry = serviceRegistry;
- this.codeRegistryBuilder = codeRegistryBuilder;
- gqlObjectBuilder = newObject().name("Mutation");
+ public GqlvTopLevelMutation(final Context context) {
+ this.context = context;
+ gqlObjectTypeBuilder = newObject().name("Mutation");
- numServicesField = newFieldDefinition()
- .name("numServices")
- .type(Scalars.GraphQLInt)
- .build();
- gqlObjectBuilder.field(numServicesField);
}
public GraphQLObjectType buildMutationType() {
- if (objectType != null) {
+ if (gqlObjectType != null) {
throw new IllegalStateException("Mutation type has already been built");
}
- return objectType = gqlObjectBuilder.build();
+ return gqlObjectType = gqlObjectTypeBuilder.build();
}
/**
*
* @see #buildMutationType()
*/
- public GraphQLObjectType getObjectType() {
- if (objectType == null) {
+ public GraphQLObjectType getGqlObjectType() {
+ if (gqlObjectType == null) {
throw new IllegalStateException("Mutation type has not yet been built");
}
- return objectType;
+ return gqlObjectType;
}
// public void addFieldFor(
@@ -79,11 +84,120 @@ public class GqlvTopLevelMutation {
//
// }
+
+ public void addAction(ObjectSpecification objectSpec, final ObjectAction objectAction) {
+ // TODO: kinda ugly the responsibilities here
+ val holder = new GqlvActionInvokeMutatingHolder(this, objectSpec, objectAction, context);
+ actions.put(objectAction.getId(), new GqlvActionInvokeMutating(holder, context));
+ }
+
+ @Override
+ public GraphQLFieldDefinition addField(GraphQLFieldDefinition field) {
+ gqlObjectTypeBuilder.field(field);
+ return field;
+ }
+
+ @Override
+ public FieldCoordinates coordinatesFor(GraphQLFieldDefinition fieldDefinition) {
+ return FieldCoordinates.coordinates(gqlObjectType, fieldDefinition);
+ }
+
public void addFetchers() {
- codeRegistryBuilder
- .dataFetcher(
- coordinates(getObjectType(), getNumServicesField()),
- (DataFetcher<Object>) environment -> this.serviceRegistry.streamRegisteredBeans().count());
+
+ }
+}
+
+class GqlvActionInvokeMutatingHolder implements GqlvActionInvokeMutating.Holder {
+
+ private final GqlvTopLevelMutation gqlvTopLevelMutation;
+ private final ObjectSpecification objectSpec;
+ private final ObjectAction objectAction;
+ private final Context context;
+
+ public GqlvActionInvokeMutatingHolder(
+ final GqlvTopLevelMutation gqlvTopLevelMutation,
+ final ObjectSpecification objectSpec,
+ final ObjectAction objectAction,
+ final Context context) {
+ this.objectSpec = objectSpec;
+ this.objectAction = objectAction;
+ this.gqlvTopLevelMutation = gqlvTopLevelMutation;
+ this.context = context;
+ }
+
+ @Override public ObjectAction getObjectAction() {return objectAction;}
+ @Override public ObjectAction getObjectMember() {return objectAction;}
+ @Override public ObjectSpecification getObjectSpecification() {return objectSpec;}
+
+ // TODO: adapted from GqlvAction
+ @Override
+ public void addGqlArguments(
+ final GraphQLFieldDefinition.Builder fieldBuilder,
+ final TypeMapper.InputContext inputContext) {
+
+ // add target (if not a service)
+ if (!objectSpec.getBeanSort().isManagedBeanContributing()) {
+ GraphQLInputType graphQLInputType = context.typeMapper.inputTypeFor(objectSpec);
+ fieldBuilder.argument(GraphQLArgument.newArgument()
+ .name("target")
+ .type(graphQLInputType)
+ .build());
+ }
+
+ val parameters = objectAction.getParameters();
+ val arguments = parameters.stream()
+ .map(objectActionParameter -> gqlArgumentFor(objectActionParameter, inputContext))
+ .collect(Collectors.toList());
+ if (!arguments.isEmpty()) {
+ fieldBuilder.arguments(arguments);
+ }
+ }
+
+ // TODO: copied from GqlvAction
+ GraphQLArgument gqlArgumentFor(
+ final ObjectActionParameter objectActionParameter,
+ final TypeMapper.InputContext inputContext) {
+ return objectActionParameter.isPlural()
+ ? gqlArgumentFor((OneToManyActionParameter) objectActionParameter, inputContext)
+ : gqlArgumentFor((OneToOneActionParameter) objectActionParameter, inputContext);
+ }
+
+ // TODO: copied from GqlvAction
+ GraphQLArgument gqlArgumentFor(
+ final OneToOneActionParameter oneToOneActionParameter,
+ final TypeMapper.InputContext inputContext) {
+ return GraphQLArgument.newArgument()
+ .name(oneToOneActionParameter.getId())
+ .type(context.typeMapper.inputTypeFor(oneToOneActionParameter, inputContext))
+ .build();
+ }
+
+ // TODO: copied from GqlvAction
+ GraphQLArgument gqlArgumentFor(
+ final OneToManyActionParameter oneToManyActionParameter,
+ final TypeMapper.InputContext inputContext) {
+ return GraphQLArgument.newArgument()
+ .name(oneToManyActionParameter.getId())
+ .type(context.typeMapper.inputTypeFor(oneToManyActionParameter, inputContext))
+ .build();
+ }
+
+ @Override
+ public Can<ManagedObject> argumentManagedObjectsFor(
+ final DataFetchingEnvironment dataFetchingEnvironment,
+ final ObjectAction objectAction,
+ final BookmarkService bookmarkService) {
+ return GqlvAction.argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, context);
+ }
+
+ @Override
+ public GraphQLFieldDefinition addField(GraphQLFieldDefinition fieldDefinition) {
+ return gqlvTopLevelMutation.addField(fieldDefinition);
+ }
+
+ @Override
+ public FieldCoordinates coordinatesFor(GraphQLFieldDefinition fieldDefinition) {
+ return gqlvTopLevelMutation.coordinatesFor(fieldDefinition);
}
}
(causeway) 05/08: CAUSEWAY-3676: adds mutation support for actions
Posted by da...@apache.org.
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 9cfbd49bcf31b038483de07ddd517deb26acaa87
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 30 15:15:40 2024 +0000
CAUSEWAY-3676: adds mutation support for actions
---
.../core/config/CausewayConfiguration.java | 9 +
.../viewer/graphql/applib/types/TypeMapper.java | 2 +-
.../viewer/graphql/model/context/Context.java | 2 +
.../viewer/graphql/model/domain/GqlvAction.java | 11 +-
...ActionInvokeMutating.java => GqlvMutation.java} | 51 +-
.../graphql/model/types/TypeMapperDefault.java | 2 +-
viewers/graphql/test/pom.xml | 33 +
.../viewer/test/e2e/Abstract_IntegTest.java | 16 +-
...g_IntegTest.find_depthead_and_change_name._.gql | 7 -
...est.find_depthead_and_change_name.approved.json | 0
...dmin_IntegTest.action_with_disabled_param._.gql | 0
...egTest.action_with_disabled_param.approved.json | 0
.../Admin_IntegTest.action_with_hidden_param._.gql | 0
...ntegTest.action_with_hidden_param.approved.json | 0
.../{ => query}/Admin_IntegTest.admin_action._.gql | 0
.../Admin_IntegTest.admin_action.approved.json | 0
.../test/e2e/{ => query}/Admin_IntegTest.java | 4 +-
.../Admin_IntegTest.other_admin_action._.gql | 0
...dmin_IntegTest.other_admin_action.approved.json | 0
.../Calculator_IntegTest.add_big_decimals._.gql | 0
...ulator_IntegTest.add_big_decimals.approved.json | 0
.../Calculator_IntegTest.add_big_integers._.gql | 0
...ulator_IntegTest.add_big_integers.approved.json | 0
.../Calculator_IntegTest.add_double_wrappers._.gql | 0
...tor_IntegTest.add_double_wrappers.approved.json | 0
.../Calculator_IntegTest.add_doubles._.gql | 0
.../Calculator_IntegTest.add_doubles.approved.json | 0
.../Calculator_IntegTest.add_float_wrappers._.gql | 0
...ator_IntegTest.add_float_wrappers.approved.json | 0
.../Calculator_IntegTest.add_floats._.gql | 0
.../Calculator_IntegTest.add_floats.approved.json | 0
...Calculator_IntegTest.add_integer_wrappers._.gql | 0
...or_IntegTest.add_integer_wrappers.approved.json | 0
.../Calculator_IntegTest.add_integers._.gql | 0
...Calculator_IntegTest.add_integers.approved.json | 0
.../Calculator_IntegTest.boolean_and_1._.gql | 0
...alculator_IntegTest.boolean_and_1.approved.json | 0
.../Calculator_IntegTest.boolean_and_2._.gql | 0
...alculator_IntegTest.boolean_and_2.approved.json | 0
.../Calculator_IntegTest.boolean_not._.gql | 0
.../Calculator_IntegTest.boolean_not.approved.json | 0
.../Calculator_IntegTest.boolean_or_1._.gql | 0
...Calculator_IntegTest.boolean_or_1.approved.json | 0
.../Calculator_IntegTest.boolean_or_2._.gql | 0
...Calculator_IntegTest.boolean_or_2.approved.json | 0
.../{ => query}/Calculator_IntegTest.concat._.gql | 0
.../Calculator_IntegTest.concat.approved.json | 0
.../test/e2e/{ => query}/Calculator_IntegTest.java | 4 +-
.../Calculator_IntegTest.next_month._.gql | 0
.../Calculator_IntegTest.next_month.approved.json | 0
.../Calculator_IntegTest.plus_days._.gql | 0
.../Calculator_IntegTest.plus_days.approved.json | 0
.../Calculator_IntegTest.plus_joda_days._.gql | 0
...lculator_IntegTest.plus_joda_days.approved.json | 0
.../Department_IntegTest.create_department._.gql | 0
...tment_IntegTest.create_department.approved.json | 0
...est.create_department_name_param_disabled._.gql | 0
...te_department_name_param_disabled.approved.json | 0
...Department_IntegTest.find_all_departments._.gql | 0
...nt_IntegTest.find_all_departments.approved.json | 0
..._department_and_add_staff_members._.choices.gql | 0
...d_department_and_add_staff_members._.invoke.gql | 0
..._department_and_add_staff_members.approved.json | 0
...d_department_and_change_head_autocomplete._.gql | 0
...ment_and_change_head_autocomplete.approved.json | 0
...t.find_department_and_change_head_default._.gql | 0
...epartment_and_change_head_default.approved.json | 0
...t.find_department_and_change_name_invalid._.gql | 0
...epartment_and_change_name_invalid.approved.json | 0
...ind_department_and_edit_head_autocomplete._.gql | 0
...rtment_and_edit_head_autocomplete.approved.json | 0
..._and_edit_head_autocomplete_none_matching._.gql | 0
...t_head_autocomplete_none_matching.approved.json | 0
...epartment_and_remove_staff_member_choices._.gql | 0
...t_and_remove_staff_member_choices.approved.json | 0
...artment_IntegTest.find_department_by_name._.gql | 0
...IntegTest.find_department_by_name.approved.json | 0
.../test/e2e/{ => query}/Department_IntegTest.java | 4 +-
...d_IntegTest.find_depthead_and_change_name._.gql | 0
...est.find_depthead_and_change_name.approved.json | 0
...est.find_depthead_and_change_name_invalid._.gql | 0
..._depthead_and_change_name_invalid.approved.json | 0
...d_depthead_and_change_name_invoke_invalid._.gql | 0
...ad_and_change_name_invoke_invalid.approved.json | 0
.../DeptHead_IntegTest.find_depthead_by_name._.gql | 0
...d_IntegTest.find_depthead_by_name.approved.json | 0
.../test/e2e/{ => query}/DeptHead_IntegTest.java | 4 +-
...gTest.create_staff_member_with_department._.gql | 0
...eate_staff_member_with_department.approved.json | 0
...egTest.find_staff_member_by_name_and_edit._.gql | 0
...ind_staff_member_by_name_and_edit.approved.json | 0
...aff_member_by_name_and_edit_grade_choices._.gql | 0
...er_by_name_and_edit_grade_choices.approved.json | 0
.../test/e2e/{ => query}/Staff_IntegTest.java | 4 +-
.../Staff_IntegTest.list_all_staff_members._.gql | 0
..._IntegTest.list_all_staff_members.approved.json | 0
..._IntegTest.staff_member_name_edit_invalid._.gql | 0
...st.staff_member_name_edit_invalid.approved.json | 0
...taff_IntegTest.staff_member_name_validate._.gql | 0
...egTest.staff_member_name_validate.approved.json | 0
...Mutating_IntegTest.change_department_name._.gql | 7 +
..._IntegTest.change_department_name.approved.json | 9 +
...tHeadMutating_IntegTest.create_department._.gql | 7 +
...ating_IntegTest.create_department.approved.json | 9 +
.../DeptHeadMutating_IntegTest.java | 36 +-
...java => AbstractGqlSchema_print_IntegTest.java} | 12 +-
.../GqlSchemaQuery_print_IntegTest.java} | 46 +-
...qlSchemaQueryAndMutations_print_IntegTest.java} | 51 +-
.../src/test/resources/application-test.properties | 25 +
viewers/graphql/test/src/test/resources/schema.gql | 1658 +++-----------------
.../integration/GraphQlSourceForCauseway.java | 6 +-
.../viewer/toplevel/GqlvTopLevelMutation.java | 69 +-
112 files changed, 486 insertions(+), 1602 deletions(-)
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java b/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
index ed0964ce86..f10e28c091 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
+++ b/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
@@ -2399,6 +2399,15 @@ public class CausewayConfiguration {
private String fieldName = "_gqlv_meta";
}
+ private final Mutation mutation = new Mutation();
+ @Data
+ public static class Mutation {
+ /**
+ * The name of the synthetic argument of mutators representing the target domain object.
+ */
+ private String targetArgName = "_gqlv_target";
+ }
+
private final TypeMapper typeMapper = new TypeMapper();
@Data
public static class TypeMapper {
diff --git a/viewers/graphql/applib/src/main/java/org/apache/causeway/viewer/graphql/applib/types/TypeMapper.java b/viewers/graphql/applib/src/main/java/org/apache/causeway/viewer/graphql/applib/types/TypeMapper.java
index 7cd932cd6e..895e2edd19 100644
--- a/viewers/graphql/applib/src/main/java/org/apache/causeway/viewer/graphql/applib/types/TypeMapper.java
+++ b/viewers/graphql/applib/src/main/java/org/apache/causeway/viewer/graphql/applib/types/TypeMapper.java
@@ -64,7 +64,7 @@ public interface TypeMapper {
final OneToOneFeature oneToOneFeature,
final InputContext inputContext);
- GraphQLList inputTypeFor(final OneToManyActionParameter oneToManyActionParameter, final InputContext inputContextUnused);
+ GraphQLList inputTypeFor(final OneToManyActionParameter oneToManyActionParameter);
GraphQLInputType inputTypeFor(final ObjectSpecification elementType);
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/context/Context.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/context/Context.java
index 14c4c1089d..785f245984 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/context/Context.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/context/Context.java
@@ -21,6 +21,7 @@ package org.apache.causeway.viewer.graphql.model.context;
import graphql.schema.GraphQLCodeRegistry;
import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.applib.services.registry.ServiceRegistry;
import org.apache.causeway.commons.collections.ImmutableEnumSet;
import org.apache.causeway.core.config.CausewayConfiguration;
import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
@@ -36,6 +37,7 @@ public class Context {
public final BookmarkService bookmarkService;
public final SpecificationLoader specificationLoader;
public final TypeMapper typeMapper;
+ public final ServiceRegistry serviceRegistry;
public final CausewayConfiguration causewayConfiguration;
public final CausewaySystemEnvironment causewaySystemEnvironment;
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
index 42b026c4cc..8308b47c55 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
@@ -100,6 +100,13 @@ public class GqlvAction
return argumentManagedObjectsFor(dataFetchingEnvironment, objectAction, context);
}
+ /**
+ *
+ * @param dataFetchingEnvironment
+ * @param objectAction
+ * @param context
+ * @return
+ */
public static Can<ManagedObject> argumentManagedObjectsFor(
final DataFetchingEnvironment dataFetchingEnvironment,
final ObjectAction objectAction,
@@ -162,7 +169,7 @@ public class GqlvAction
}
- private static Optional<Object> asPojo(
+ static Optional<Object> asPojo(
final ObjectSpecification elementType,
final Object argumentValueObj,
final BookmarkService bookmarkService) {
@@ -215,7 +222,7 @@ public class GqlvAction
final TypeMapper.InputContext inputContext) {
return GraphQLArgument.newArgument()
.name(oneToManyActionParameter.getId())
- .type(context.typeMapper.inputTypeFor(oneToManyActionParameter, inputContext))
+ .type(context.typeMapper.inputTypeFor(oneToManyActionParameter))
.build();
}
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvokeMutating.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutation.java
similarity index 80%
rename from viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvokeMutating.java
rename to viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutation.java
index bac4dc7b77..d6f5298cef 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionInvokeMutating.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutation.java
@@ -35,7 +35,6 @@ import org.apache.causeway.viewer.graphql.applib.types.TypeMapper;
import org.apache.causeway.viewer.graphql.model.context.Context;
import org.apache.causeway.viewer.graphql.model.exceptions.DisabledException;
import org.apache.causeway.viewer.graphql.model.exceptions.HiddenException;
-import org.apache.causeway.viewer.graphql.model.fetcher.BookmarkedPojo;
import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectActionProvider;
import org.apache.causeway.viewer.graphql.model.mmproviders.ObjectSpecificationProvider;
@@ -44,24 +43,28 @@ import org.springframework.lang.Nullable;
import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
@Log4j2
-public class GqlvActionInvokeMutating {
+public class GqlvMutation {
private final Holder holder;
private final Context context;
private final GraphQLFieldDefinition field;
+ private String argumentName;
- public GqlvActionInvokeMutating(
+ public GqlvMutation(
final Holder holder,
final Context context) {
this.holder = holder;
this.context = context;
+ this.argumentName = context.causewayConfiguration.getViewer().getGraphql().getMutation().getTargetArgName();
+
+ val objectSpec = holder.getObjectSpecification();
val objectAction = holder.getObjectAction();
GraphQLOutputType type = typeFor(objectAction);
if (type != null) {
val fieldBuilder = newFieldDefinition()
- .name(fieldNameForSemanticsOf(objectAction))
+ .name(fieldName(objectSpec, objectAction))
.type(type);
holder.addGqlArguments(fieldBuilder, TypeMapper.InputContext.INVOKE);
this.field = holder.addField(fieldBuilder.build());
@@ -70,20 +73,8 @@ public class GqlvActionInvokeMutating {
}
}
- private static String fieldNameForSemanticsOf(ObjectAction objectAction) {
- switch (objectAction.getSemantics()) {
- case SAFE_AND_REQUEST_CACHEABLE:
- case SAFE:
- return "invoke";
- case IDEMPOTENT:
- case IDEMPOTENT_ARE_YOU_SURE:
- return "invokeIdempotent";
- case NON_IDEMPOTENT:
- case NON_IDEMPOTENT_ARE_YOU_SURE:
- case NOT_SPECIFIED:
- default:
- return "invokeNonIdempotent";
- }
+ private static String fieldName(ObjectSpecification objectSpecification, ObjectAction objectAction) {
+ return TypeNames.objectTypeNameFor(objectSpecification) + "__" + objectAction.getId();
}
@Nullable
@@ -126,15 +117,21 @@ public class GqlvActionInvokeMutating {
private Object invoke(final DataFetchingEnvironment dataFetchingEnvironment) {
- val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment);
+ val objectSpecification = holder.getObjectSpecification();
+ val objectAction = holder.getObjectAction();
- val objectSpecification = context.specificationLoader.loadSpecification(sourcePojo.getClass());
- if (objectSpecification == null) {
- return null;
+ val isService = objectSpecification.getBeanSort().isManagedBeanContributing();
+
+ Object sourcePojo;
+ if (isService) {
+ sourcePojo = context.serviceRegistry.lookupServiceElseFail(objectSpecification.getCorrespondingClass());
+ } else {
+ Object target = dataFetchingEnvironment.getArgument(argumentName);
+ sourcePojo = GqlvAction.asPojo(objectSpecification, target, context.bookmarkService)
+ .orElseThrow(); // TODO: better error handling if no such object found.
}
- val objectAction = holder.getObjectAction();
- val managedObject = ManagedObject.adaptSingular(objectSpecification, sourcePojo);
+ ManagedObject managedObject = ManagedObject.adaptSingular(objectSpecification, sourcePojo);
val visibleConsent = objectAction.isVisible(managedObject, InteractionInitiatedBy.USER, Where.ANYWHERE);
if (visibleConsent.isVetoed()) {
@@ -168,8 +165,8 @@ public class GqlvActionInvokeMutating {
final TypeMapper.InputContext inputContext);
Can<ManagedObject> argumentManagedObjectsFor(
- DataFetchingEnvironment dataFetchingEnvironment,
- ObjectAction objectAction,
- BookmarkService bookmarkService);
+ final DataFetchingEnvironment dataFetchingEnvironment,
+ final ObjectAction objectAction,
+ final BookmarkService bookmarkService);
}
}
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/types/TypeMapperDefault.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/types/TypeMapperDefault.java
index c102b1cb51..c4339f3047 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/types/TypeMapperDefault.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/types/TypeMapperDefault.java
@@ -199,7 +199,7 @@ public class TypeMapperDefault implements TypeMapper {
}
@Override
- public GraphQLList inputTypeFor(final OneToManyActionParameter oneToManyActionParameter, final InputContext inputContextUnused){
+ public GraphQLList inputTypeFor(final OneToManyActionParameter oneToManyActionParameter){
ObjectSpecification elementType = oneToManyActionParameter.getElementType();
return GraphQLList.list(inputTypeFor(elementType));
}
diff --git a/viewers/graphql/test/pom.xml b/viewers/graphql/test/pom.xml
index 5aa6099832..7efc32f6da 100644
--- a/viewers/graphql/test/pom.xml
+++ b/viewers/graphql/test/pom.xml
@@ -39,8 +39,28 @@
<maven.deploy.skip>true</maven.deploy.skip>
<java.version>17</java.version>
+
+ <datasource-proxy-spring-boot-starter.version>1.8.1</datasource-proxy-spring-boot-starter.version>
+ <sql-formatter.version>2.0.4</sql-formatter.version>
+
</properties>
+ <dependencyManagement>
+ <dependencies>
+
+ <dependency>
+ <groupId>com.github.gavlyukovskiy</groupId>
+ <artifactId>datasource-proxy-spring-boot-starter</artifactId>
+ <version>${datasource-proxy-spring-boot-starter.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.github.vertical-blank</groupId>
+ <artifactId>sql-formatter</artifactId>
+ <version>${sql-formatter.version}</version>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+
<build>
<testResources>
<testResource>
@@ -133,6 +153,7 @@
</dependency>
+
<dependency>
<groupId>org.springframework.graphql</groupId>
<artifactId>spring-graphql-test</artifactId>
@@ -140,6 +161,18 @@
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>com.github.gavlyukovskiy</groupId>
+ <artifactId>datasource-proxy-spring-boot-starter</artifactId>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>com.github.vertical-blank</groupId>
+ <artifactId>sql-formatter</artifactId>
+ <scope>test</scope>
+ </dependency>
+
</dependencies>
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Abstract_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Abstract_IntegTest.java
index ec9c934083..a6e2548cdf 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Abstract_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Abstract_IntegTest.java
@@ -43,13 +43,13 @@ import lombok.val;
public abstract class Abstract_IntegTest extends CausewayViewerGraphqlTestModuleIntegTestAbstract {
- @Inject DepartmentRepository departmentRepository;
- @Inject DeptHeadRepository deptHeadRepository;
- @Inject StaffMemberRepository staffMemberRepository;
- @Inject BookmarkService bookmarkService;
+ @Inject protected DepartmentRepository departmentRepository;
+ @Inject protected DeptHeadRepository deptHeadRepository;
+ @Inject protected StaffMemberRepository staffMemberRepository;
+ @Inject protected BookmarkService bookmarkService;
@BeforeEach
- void beforeEach(){
+ protected void beforeEach(){
transactionService.runTransactional(Propagation.REQUIRED, () -> {
// departments
@@ -77,13 +77,13 @@ public abstract class Abstract_IntegTest extends CausewayViewerGraphqlTestModule
});
}
- private Blob asBlob(String fileName) {
+ protected Blob asBlob(String fileName) {
val bytes = toBytes(fileName);
return new Blob(fileName, "application/pdf", bytes);
}
@AfterEach
- void afterEach(){
+ protected void afterEach(){
transactionService.runTransactional(Propagation.REQUIRED, () -> {
staffMemberRepository.removeAll();
deptHeadRepository.findAll().forEach(x -> x.setDepartment(null));
@@ -95,7 +95,7 @@ public abstract class Abstract_IntegTest extends CausewayViewerGraphqlTestModule
@SneakyThrows
private byte[] toBytes(String fileName){
- InputStream inputStream = new ClassPathResource(fileName, getClass()).getInputStream();
+ InputStream inputStream = new ClassPathResource(fileName, Abstract_IntegTest.class).getInputStream();
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHeadMutating_IntegTest.find_depthead_and_change_name._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHeadMutating_IntegTest.find_depthead_and_change_name._.gql
deleted file mode 100644
index 1c79eb6819..0000000000
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHeadMutating_IntegTest.find_depthead_and_change_name._.gql
+++ /dev/null
@@ -1,7 +0,0 @@
-mutation {
- invokeIdempotent(newName: "Foo", target: {id: 123}) {
- name {
- get
- }
- }
-}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHeadMutating_IntegTest.find_depthead_and_change_name.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHeadMutating_IntegTest.find_depthead_and_change_name.approved.json
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.action_with_disabled_param._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Admin_IntegTest.action_with_disabled_param._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.action_with_disabled_param._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Admin_IntegTest.action_with_disabled_param._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.action_with_disabled_param.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Admin_IntegTest.action_with_disabled_param.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.action_with_disabled_param.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Admin_IntegTest.action_with_disabled_param.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.action_with_hidden_param._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Admin_IntegTest.action_with_hidden_param._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.action_with_hidden_param._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Admin_IntegTest.action_with_hidden_param._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.action_with_hidden_param.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Admin_IntegTest.action_with_hidden_param.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.action_with_hidden_param.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Admin_IntegTest.action_with_hidden_param.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.admin_action._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Admin_IntegTest.admin_action._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.admin_action._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Admin_IntegTest.admin_action._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.admin_action.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Admin_IntegTest.admin_action.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.admin_action.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Admin_IntegTest.admin_action.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Admin_IntegTest.java
similarity index 93%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.java
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Admin_IntegTest.java
index 20ca803741..f36d4afdef 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Admin_IntegTest.java
@@ -16,7 +16,9 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.causeway.viewer.graphql.viewer.test.e2e;
+package org.apache.causeway.viewer.graphql.viewer.test.e2e.query;
+
+import org.apache.causeway.viewer.graphql.viewer.test.e2e.Abstract_IntegTest;
import org.approvaltests.Approvals;
import org.approvaltests.reporters.DiffReporter;
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.other_admin_action._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Admin_IntegTest.other_admin_action._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.other_admin_action._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Admin_IntegTest.other_admin_action._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.other_admin_action.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Admin_IntegTest.other_admin_action.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.other_admin_action.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Admin_IntegTest.other_admin_action.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_big_decimals._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_big_decimals._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_big_decimals._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_big_decimals._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_big_decimals.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_big_decimals.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_big_decimals.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_big_decimals.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_big_integers._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_big_integers._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_big_integers._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_big_integers._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_big_integers.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_big_integers.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_big_integers.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_big_integers.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_double_wrappers._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_double_wrappers._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_double_wrappers._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_double_wrappers._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_double_wrappers.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_double_wrappers.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_double_wrappers.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_double_wrappers.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_doubles._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_doubles._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_doubles._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_doubles._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_doubles.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_doubles.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_doubles.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_doubles.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_float_wrappers._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_float_wrappers._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_float_wrappers._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_float_wrappers._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_float_wrappers.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_float_wrappers.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_float_wrappers.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_float_wrappers.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_floats._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_floats._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_floats._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_floats._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_floats.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_floats.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_floats.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_floats.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_integer_wrappers._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_integer_wrappers._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_integer_wrappers._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_integer_wrappers._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_integer_wrappers.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_integer_wrappers.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_integer_wrappers.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_integer_wrappers.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_integers._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_integers._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_integers._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_integers._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_integers.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_integers.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.add_integers.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.add_integers.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.boolean_and_1._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.boolean_and_1._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.boolean_and_1._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.boolean_and_1._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.boolean_and_1.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.boolean_and_1.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.boolean_and_1.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.boolean_and_1.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.boolean_and_2._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.boolean_and_2._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.boolean_and_2._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.boolean_and_2._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.boolean_and_2.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.boolean_and_2.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.boolean_and_2.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.boolean_and_2.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.boolean_not._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.boolean_not._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.boolean_not._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.boolean_not._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.boolean_not.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.boolean_not.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.boolean_not.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.boolean_not.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.boolean_or_1._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.boolean_or_1._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.boolean_or_1._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.boolean_or_1._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.boolean_or_1.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.boolean_or_1.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.boolean_or_1.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.boolean_or_1.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.boolean_or_2._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.boolean_or_2._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.boolean_or_2._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.boolean_or_2._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.boolean_or_2.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.boolean_or_2.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.boolean_or_2.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.boolean_or_2.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.concat._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.concat._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.concat._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.concat._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.concat.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.concat.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.concat.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.concat.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.java
similarity index 96%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.java
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.java
index 90a5456d77..621f691416 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.java
@@ -16,7 +16,9 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.causeway.viewer.graphql.viewer.test.e2e;
+package org.apache.causeway.viewer.graphql.viewer.test.e2e.query;
+
+import org.apache.causeway.viewer.graphql.viewer.test.e2e.Abstract_IntegTest;
import org.approvaltests.Approvals;
import org.approvaltests.reporters.DiffReporter;
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.next_month._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.next_month._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.next_month._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.next_month._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.next_month.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.next_month.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.next_month.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.next_month.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.plus_days._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.plus_days._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.plus_days._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.plus_days._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.plus_days.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.plus_days.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.plus_days.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.plus_days.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.plus_joda_days._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.plus_joda_days._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.plus_joda_days._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.plus_joda_days._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.plus_joda_days.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.plus_joda_days.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.plus_joda_days.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Calculator_IntegTest.plus_joda_days.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.create_department._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.create_department._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.create_department._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.create_department._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.create_department.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.create_department.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.create_department.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.create_department.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.create_department_name_param_disabled._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.create_department_name_param_disabled._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.create_department_name_param_disabled._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.create_department_name_param_disabled._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.create_department_name_param_disabled.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.create_department_name_param_disabled.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.create_department_name_param_disabled.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.create_department_name_param_disabled.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_all_departments._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_all_departments._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_all_departments._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_all_departments._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_all_departments.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_all_departments.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_all_departments.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_all_departments.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_add_staff_members._.choices.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_add_staff_members._.choices.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_add_staff_members._.choices.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_add_staff_members._.choices.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_add_staff_members._.invoke.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_add_staff_members._.invoke.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_add_staff_members._.invoke.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_add_staff_members._.invoke.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_add_staff_members.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_add_staff_members.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_add_staff_members.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_add_staff_members.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_change_head_autocomplete._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_change_head_autocomplete._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_change_head_autocomplete._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_change_head_autocomplete._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_change_head_autocomplete.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_change_head_autocomplete.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_change_head_autocomplete.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_change_head_autocomplete.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_change_head_default._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_change_head_default._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_change_head_default._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_change_head_default._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_change_head_default.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_change_head_default.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_change_head_default.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_change_head_default.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_change_name_invalid._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_change_name_invalid._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_change_name_invalid._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_change_name_invalid._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_change_name_invalid.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_change_name_invalid.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_change_name_invalid.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_change_name_invalid.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_edit_head_autocomplete._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_edit_head_autocomplete._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_edit_head_autocomplete._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_edit_head_autocomplete._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_edit_head_autocomplete.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_edit_head_autocomplete.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_edit_head_autocomplete.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_edit_head_autocomplete.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_edit_head_autocomplete_none_matching._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_edit_head_autocomplete_none_matching._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_edit_head_autocomplete_none_matching._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_edit_head_autocomplete_none_matching._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_edit_head_autocomplete_none_matching.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_edit_head_autocomplete_none_matching.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_edit_head_autocomplete_none_matching.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_edit_head_autocomplete_none_matching.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_remove_staff_member_choices._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_remove_staff_member_choices._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_remove_staff_member_choices._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_remove_staff_member_choices._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_remove_staff_member_choices.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_remove_staff_member_choices.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_and_remove_staff_member_choices.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_and_remove_staff_member_choices.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_by_name._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_by_name._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_by_name._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_by_name._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_by_name.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_by_name.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.find_department_by_name.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.find_department_by_name.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.java
similarity index 97%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.java
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.java
index b24e66a06d..e98ad612a1 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Department_IntegTest.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.causeway.viewer.graphql.viewer.test.e2e;
+package org.apache.causeway.viewer.graphql.viewer.test.e2e.query;
import java.util.ArrayList;
import java.util.List;
@@ -24,6 +24,8 @@ import java.util.List;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.causeway.viewer.graphql.viewer.test.e2e.Abstract_IntegTest;
+
import org.approvaltests.Approvals;
import org.approvaltests.reporters.DiffReporter;
import org.approvaltests.reporters.UseReporter;
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.find_depthead_and_change_name._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/DeptHead_IntegTest.find_depthead_and_change_name._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.find_depthead_and_change_name._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/DeptHead_IntegTest.find_depthead_and_change_name._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.find_depthead_and_change_name.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/DeptHead_IntegTest.find_depthead_and_change_name.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.find_depthead_and_change_name.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/DeptHead_IntegTest.find_depthead_and_change_name.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.find_depthead_and_change_name_invalid._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/DeptHead_IntegTest.find_depthead_and_change_name_invalid._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.find_depthead_and_change_name_invalid._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/DeptHead_IntegTest.find_depthead_and_change_name_invalid._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.find_depthead_and_change_name_invalid.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/DeptHead_IntegTest.find_depthead_and_change_name_invalid.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.find_depthead_and_change_name_invalid.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/DeptHead_IntegTest.find_depthead_and_change_name_invalid.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.find_depthead_and_change_name_invoke_invalid._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/DeptHead_IntegTest.find_depthead_and_change_name_invoke_invalid._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.find_depthead_and_change_name_invoke_invalid._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/DeptHead_IntegTest.find_depthead_and_change_name_invoke_invalid._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.find_depthead_and_change_name_invoke_invalid.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/DeptHead_IntegTest.find_depthead_and_change_name_invoke_invalid.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.find_depthead_and_change_name_invoke_invalid.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/DeptHead_IntegTest.find_depthead_and_change_name_invoke_invalid.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.find_depthead_by_name._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/DeptHead_IntegTest.find_depthead_by_name._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.find_depthead_by_name._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/DeptHead_IntegTest.find_depthead_by_name._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.find_depthead_by_name.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/DeptHead_IntegTest.find_depthead_by_name.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.find_depthead_by_name.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/DeptHead_IntegTest.find_depthead_by_name.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/DeptHead_IntegTest.java
similarity index 94%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.java
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/DeptHead_IntegTest.java
index 1ee91e96e9..862cb24480 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/DeptHead_IntegTest.java
@@ -16,7 +16,9 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.causeway.viewer.graphql.viewer.test.e2e;
+package org.apache.causeway.viewer.graphql.viewer.test.e2e.query;
+
+import org.apache.causeway.viewer.graphql.viewer.test.e2e.Abstract_IntegTest;
import org.approvaltests.Approvals;
import org.approvaltests.reporters.DiffReporter;
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.create_staff_member_with_department._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.create_staff_member_with_department._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.create_staff_member_with_department._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.create_staff_member_with_department._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.create_staff_member_with_department.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.create_staff_member_with_department.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.create_staff_member_with_department.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.create_staff_member_with_department.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.find_staff_member_by_name_and_edit._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.find_staff_member_by_name_and_edit._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.find_staff_member_by_name_and_edit._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.find_staff_member_by_name_and_edit._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.find_staff_member_by_name_and_edit.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.find_staff_member_by_name_and_edit.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.find_staff_member_by_name_and_edit.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.find_staff_member_by_name_and_edit.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.find_staff_member_by_name_and_edit_grade_choices._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.find_staff_member_by_name_and_edit_grade_choices._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.find_staff_member_by_name_and_edit_grade_choices._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.find_staff_member_by_name_and_edit_grade_choices._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.find_staff_member_by_name_and_edit_grade_choices.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.find_staff_member_by_name_and_edit_grade_choices.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.find_staff_member_by_name_and_edit_grade_choices.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.find_staff_member_by_name_and_edit_grade_choices.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.java
similarity index 96%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.java
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.java
index 3eb3f513c0..e4b1838681 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.java
@@ -16,10 +16,12 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.causeway.viewer.graphql.viewer.test.e2e;
+package org.apache.causeway.viewer.graphql.viewer.test.e2e.query;
import java.util.Optional;
+import org.apache.causeway.viewer.graphql.viewer.test.e2e.Abstract_IntegTest;
+
import org.approvaltests.Approvals;
import org.approvaltests.reporters.DiffReporter;
import org.approvaltests.reporters.UseReporter;
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.list_all_staff_members._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.list_all_staff_members._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.list_all_staff_members._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.list_all_staff_members._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.list_all_staff_members.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.list_all_staff_members.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.list_all_staff_members.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.list_all_staff_members.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.staff_member_name_edit_invalid._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.staff_member_name_edit_invalid._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.staff_member_name_edit_invalid._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.staff_member_name_edit_invalid._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.staff_member_name_edit_invalid.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.staff_member_name_edit_invalid.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.staff_member_name_edit_invalid.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.staff_member_name_edit_invalid.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.staff_member_name_validate._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.staff_member_name_validate._.gql
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.staff_member_name_validate._.gql
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.staff_member_name_validate._.gql
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.staff_member_name_validate.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.staff_member_name_validate.approved.json
similarity index 100%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.staff_member_name_validate.approved.json
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query/Staff_IntegTest.staff_member_name_validate.approved.json
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.change_department_name._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.change_department_name._.gql
new file mode 100644
index 0000000000..45e4992450
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.change_department_name._.gql
@@ -0,0 +1,7 @@
+mutation {
+ university_dept_Department__changeName(_gqlv_target: {id : "$departmentId"}, newName: "Classics and Ancient History") {
+ name {
+ get
+ }
+ }
+}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.change_department_name.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.change_department_name.approved.json
new file mode 100644
index 0000000000..7011f581a0
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.change_department_name.approved.json
@@ -0,0 +1,9 @@
+{
+ "data" : {
+ "university_dept_Department__changeName" : {
+ "name" : {
+ "get" : "Classics and Ancient History"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.create_department._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.create_department._.gql
new file mode 100644
index 0000000000..a2dc6052c2
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.create_department._.gql
@@ -0,0 +1,7 @@
+mutation {
+ university_dept_Departments__createDepartment(name: "Geophysics", deptHead: null) {
+ name {
+ get
+ }
+ }
+}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.create_department.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.create_department.approved.json
new file mode 100644
index 0000000000..038ac243e2
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.create_department.approved.json
@@ -0,0 +1,9 @@
+{
+ "data" : {
+ "university_dept_Departments__createDepartment" : {
+ "name" : {
+ "get" : "Geophysics"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHeadMutating_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.java
similarity index 65%
copy from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHeadMutating_IntegTest.java
copy to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.java
index 4715c571c3..195dca869b 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHeadMutating_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.java
@@ -16,11 +16,9 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.causeway.viewer.graphql.viewer.test.e2e;
+package org.apache.causeway.viewer.graphql.viewer.test.e2e.query_and_mutations;
-import org.apache.causeway.viewer.graphql.viewer.test.CausewayViewerGraphqlTestModuleIntegTestAbstract;
-
-import org.apache.causeway.viewer.graphql.viewer.test.domain.dept.DeptHead;
+import java.util.Optional;
import org.approvaltests.Approvals;
import org.approvaltests.reporters.DiffReporter;
@@ -32,9 +30,13 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.transaction.annotation.Propagation;
-import lombok.val;
+import org.apache.causeway.applib.services.bookmark.Bookmark;
+import org.apache.causeway.commons.internal.collections._Maps;
+import org.apache.causeway.viewer.graphql.viewer.test.CausewayViewerGraphqlTestModuleIntegTestAbstract;
+import org.apache.causeway.viewer.graphql.viewer.test.domain.dept.Department;
+import org.apache.causeway.viewer.graphql.viewer.test.e2e.Abstract_IntegTest;
-import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
+import lombok.val;
//NOT USING @Transactional since we are running server within same transaction otherwise
@@ -53,7 +55,7 @@ public class DeptHeadMutating_IntegTest extends Abstract_IntegTest {
@Test
@UseReporter(DiffReporter.class)
- void find_depthead_and_change_name() throws Exception {
+ void create_department() throws Exception {
// when lookup 'Prof. Dicky Horwich' and change it to 'Prof. Richard Horwich'
String response = submit();
@@ -63,4 +65,24 @@ public class DeptHeadMutating_IntegTest extends Abstract_IntegTest {
}
+ @Test
+ @UseReporter(DiffReporter.class)
+ void change_department_name() throws Exception {
+
+ final Bookmark bookmark =
+ transactionService.callTransactional(
+ Propagation.REQUIRED,
+ () -> {
+ Department department = departmentRepository.findByName("Classics");
+ Optional<Bookmark> bookmark1 = bookmarkService.bookmarkFor(department);
+ return bookmark1.orElseThrow();
+ }
+ ).valueAsNonNullElseFail();
+
+ val response = submit(_Maps.unmodifiable("$departmentId", bookmark.getIdentifier()));
+
+ // then payload
+ Approvals.verify(response, jsonOptions());
+ }
+
}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/GqlSchema_print_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/AbstractGqlSchema_print_IntegTest.java
similarity index 93%
copy from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/GqlSchema_print_IntegTest.java
copy to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/AbstractGqlSchema_print_IntegTest.java
index e2b5db13c8..dbcca757cc 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/GqlSchema_print_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/AbstractGqlSchema_print_IntegTest.java
@@ -25,9 +25,10 @@ import java.util.stream.Collectors;
import javax.inject.Inject;
+import graphql.schema.idl.SchemaPrinter;
+
import org.approvaltests.core.Options;
import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.springframework.transaction.annotation.Transactional;
@@ -42,25 +43,22 @@ import static org.apache.causeway.commons.internal.assertions._Assert.assertNotN
import lombok.val;
-import graphql.schema.idl.SchemaPrinter;
-
-@Order(10)
@Transactional
-public class GqlSchema_print_IntegTest extends CausewayViewerGraphqlTestModuleIntegTestAbstract {
+public abstract class AbstractGqlSchema_print_IntegTest extends CausewayViewerGraphqlTestModuleIntegTestAbstract {
@Inject private CausewaySystemEnvironment causewaySystemEnvironment;
@Inject private SpecificationLoader specificationLoader;
@Inject private GraphQlSourceForCauseway graphQlSourceForCauseway;
@BeforeEach
- void beforeEach() {
+ protected void beforeEach() {
assertNotNull(causewaySystemEnvironment);
assertNotNull(specificationLoader);
assertNotNull(graphQlSourceForCauseway);
}
@Test
- void schema() throws Exception {
+ protected void schema() throws Exception {
val graphQL = graphQlSourceForCauseway.graphQl();
val graphQLSchema = graphQL.getGraphQLSchema();
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/GqlSchema_print_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/query/GqlSchemaQuery_print_IntegTest.java
similarity index 56%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/GqlSchema_print_IntegTest.java
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/query/GqlSchemaQuery_print_IntegTest.java
index e2b5db13c8..dca930ede3 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/GqlSchema_print_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/query/GqlSchemaQuery_print_IntegTest.java
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.causeway.viewer.graphql.viewer.test.schema;
+package org.apache.causeway.viewer.graphql.viewer.test.schema.query;
import java.io.File;
import java.nio.file.Files;
@@ -25,6 +25,8 @@ import java.util.stream.Collectors;
import javax.inject.Inject;
+import org.apache.causeway.viewer.graphql.viewer.test.schema.AbstractGqlSchema_print_IntegTest;
+
import org.approvaltests.core.Options;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Order;
@@ -44,46 +46,8 @@ import lombok.val;
import graphql.schema.idl.SchemaPrinter;
-@Order(10)
+@Order(0)
@Transactional
-public class GqlSchema_print_IntegTest extends CausewayViewerGraphqlTestModuleIntegTestAbstract {
-
- @Inject private CausewaySystemEnvironment causewaySystemEnvironment;
- @Inject private SpecificationLoader specificationLoader;
- @Inject private GraphQlSourceForCauseway graphQlSourceForCauseway;
-
- @BeforeEach
- void beforeEach() {
- assertNotNull(causewaySystemEnvironment);
- assertNotNull(specificationLoader);
- assertNotNull(graphQlSourceForCauseway);
- }
-
- @Test
- void schema() throws Exception {
-
- val graphQL = graphQlSourceForCauseway.graphQl();
- val graphQLSchema = graphQL.getGraphQLSchema();
-
- val printer = new SchemaPrinter();
-
- val submit = printer.print(graphQLSchema);
-
- File targetFile1 = new File("src/test/resources/schema.gql");
-
- Files.write(Paths.get(targetFile1.getPath()), submit.getBytes());
- }
-
- @SuppressWarnings("unused")
- private Options gqlSchemaOptions() {
- return new Options()
- .withScrubber(this::unixLineEndings)
- .forFile().withExtension(".gql");
- }
-
- private String unixLineEndings(final String input) {
- return TextUtils.streamLines(input)
- .collect(Collectors.joining("\n"));
- }
+public class GqlSchemaQuery_print_IntegTest extends AbstractGqlSchema_print_IntegTest {
}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHeadMutating_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/query_and_mutations/GqlSchemaQueryAndMutations_print_IntegTest.java
similarity index 56%
rename from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHeadMutating_IntegTest.java
rename to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/query_and_mutations/GqlSchemaQueryAndMutations_print_IntegTest.java
index 4715c571c3..f0100e49d1 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHeadMutating_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/query_and_mutations/GqlSchemaQueryAndMutations_print_IntegTest.java
@@ -16,28 +16,38 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.causeway.viewer.graphql.viewer.test.e2e;
+package org.apache.causeway.viewer.graphql.viewer.test.schema.query_and_mutations;
-import org.apache.causeway.viewer.graphql.viewer.test.CausewayViewerGraphqlTestModuleIntegTestAbstract;
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.stream.Collectors;
+
+import javax.inject.Inject;
+
+import graphql.schema.idl.SchemaPrinter;
-import org.apache.causeway.viewer.graphql.viewer.test.domain.dept.DeptHead;
+import org.apache.causeway.viewer.graphql.viewer.test.schema.AbstractGqlSchema_print_IntegTest;
-import org.approvaltests.Approvals;
-import org.approvaltests.reporters.DiffReporter;
-import org.approvaltests.reporters.UseReporter;
+import org.approvaltests.core.Options;
+import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.ActiveProfiles;
-import org.springframework.transaction.annotation.Propagation;
+import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.transaction.annotation.Transactional;
-import lombok.val;
+import org.apache.causeway.commons.io.TextUtils;
+import org.apache.causeway.core.config.environment.CausewaySystemEnvironment;
+import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
+import org.apache.causeway.viewer.graphql.viewer.integration.GraphQlSourceForCauseway;
+import org.apache.causeway.viewer.graphql.viewer.test.CausewayViewerGraphqlTestModuleIntegTestAbstract;
-import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
+import static org.apache.causeway.commons.internal.assertions._Assert.assertNotNull;
+import lombok.val;
-//NOT USING @Transactional since we are running server within same transaction otherwise
@SpringBootTest(
classes = {
CausewayViewerGraphqlTestModuleIntegTestAbstract.TestApp.class
@@ -47,20 +57,9 @@ import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
"causeway.viewer.graphql.api-variant=QUERY_AND_MUTATIONS"
}
)
-@Order(110)
-@ActiveProfiles("test")
-public class DeptHeadMutating_IntegTest extends Abstract_IntegTest {
-
- @Test
- @UseReporter(DiffReporter.class)
- void find_depthead_and_change_name() throws Exception {
-
- // when lookup 'Prof. Dicky Horwich' and change it to 'Prof. Richard Horwich'
- String response = submit();
-
- // then payload
- Approvals.verify(response, jsonOptions());
-
- }
+@Order(100)
+@Transactional
+@DirtiesContext
+public class GqlSchemaQueryAndMutations_print_IntegTest extends AbstractGqlSchema_print_IntegTest {
}
diff --git a/viewers/graphql/test/src/test/resources/application-test.properties b/viewers/graphql/test/src/test/resources/application-test.properties
index e78ec972d3..cbfd204edd 100644
--- a/viewers/graphql/test/src/test/resources/application-test.properties
+++ b/viewers/graphql/test/src/test/resources/application-test.properties
@@ -2,3 +2,28 @@
#logging.level.graphql=DEBUG
+
+
+# One of logging libraries (slf4j, jul, common, sysout)
+decorator.datasource.datasource-proxy.logging=slf4j
+
+decorator.datasource.datasource-proxy.query.enable-logging=true
+decorator.datasource.datasource-proxy.query.log-level=debug
+# Logger name to log all queries, default depends on chosen logging, e.g. net.ttddyy.dsproxy.listener.logging.SLF4JQueryLoggingListener
+decorator.datasource.datasource-proxy.query.logger-name=
+
+decorator.datasource.datasource-proxy.slow-query.enable-logging=true
+decorator.datasource.datasource-proxy.slow-query.log-level=warn
+decorator.datasource.datasource-proxy.slow-query.logger-name=
+# Number of seconds to consider query as slow and log it
+decorator.datasource.datasource-proxy.slow-query.threshold=300
+
+decorator.datasource.datasource-proxy.multiline=true
+
+# Formats the SQL for better readability. Uses Hibernate's formatter if present on the class path. If you opted in for a different JPA provider you need to add https://github.com/vertical-blank/sql-formatter as a runtime dependency to your app to enable this.
+# Mutually exclusive with json-format=true
+decorator.datasource.datasource-proxy.format-sql=false
+decorator.datasource.datasource-proxy.json-format=false
+
+# Enable Query Metrics
+decorator.datasource.datasource-proxy.count-query=false
\ No newline at end of file
diff --git a/viewers/graphql/test/src/test/resources/schema.gql b/viewers/graphql/test/src/test/resources/schema.gql
index 363755e40d..94ac2ae9d2 100644
--- a/viewers/graphql/test/src/test/resources/schema.gql
+++ b/viewers/graphql/test/src/test/resources/schema.gql
@@ -22,11 +22,30 @@ directive @specifiedBy(
url: String!
) on SCALAR
+type Mutation {
+ causeway_applib_PropertyNode__streamChildNodes(target: causeway_applib_PropertyNode__gqlv_input): java_util_stream_Stream
+ causeway_applib_node_ActionNode__streamChildNodes(target: causeway_applib_node_ActionNode__gqlv_input): java_util_stream_Stream
+ causeway_applib_node_CollectionNode__streamChildNodes(target: causeway_applib_node_CollectionNode__gqlv_input): java_util_stream_Stream
+ org_apache_causeway_core_metamodel_inspect_model_MemberNode__streamChildNodes(target: org_apache_causeway_core_metamodel_inspect_model_MemberNode__gqlv_input): java_util_stream_Stream
+ university_admin_AdminMenu__actionWithDisabledParam(firstParam: String!, secondParam: String!, thirdParameter: String!): String
+ university_admin_AdminMenu__actionWithHiddenParam(firstParam: String!, secondParam: String!): String
+ university_admin_AdminMenu__adminAction: String
+ university_admin_AdminMenu__otherAdminAction: String
+ university_dept_Department__addStaffMember(staffMember: university_dept_StaffMember__gqlv_input!, target: university_dept_Department__gqlv_input): university_dept_Department
+ university_dept_Department__addStaffMembers(staffMembers: [university_dept_StaffMember__gqlv_input], target: university_dept_Department__gqlv_input): university_dept_Department
+ university_dept_Department__changeDeptHead(newDeptHead: university_dept_DeptHead__gqlv_input!, target: university_dept_Department__gqlv_input): university_dept_Department
+ university_dept_Department__changeName(newName: String!, target: university_dept_Department__gqlv_input): university_dept_Department
+ university_dept_Department__removeStaffMember(staffMember: university_dept_StaffMember__gqlv_input!, target: university_dept_Department__gqlv_input): university_dept_Department
+ university_dept_Departments__createDepartment(deptHead: university_dept_DeptHead__gqlv_input, name: String!): university_dept_Department
+ university_dept_DeptHead__changeDepartment(department: university_dept_Department__gqlv_input!, target: university_dept_DeptHead__gqlv_input): university_dept_DeptHead
+ university_dept_DeptHead__changeName(newName: String!, target: university_dept_DeptHead__gqlv_input): university_dept_DeptHead
+ university_dept_Staff__createStaffMember(department: university_dept_Department__gqlv_input!, name: String!): university_dept_StaffMember
+}
+
type Query {
causeway_applib_UserMenu: causeway_applib_UserMenu
causeway_conf_ConfigurationMenu: causeway_conf_ConfigurationMenu
causeway_security_LogoutMenu: causeway_security_LogoutMenu
- university_admin_AdminMenu: university_admin_AdminMenu
university_calc_Calculator: university_calc_Calculator
university_dept_Departments: university_dept_Departments
university_dept_DeptHeads: university_dept_DeptHeads
@@ -47,7 +66,6 @@ type causeway_applib_DomainObjectList__actionArguments__gqlv_property {
disabled: String
get: String
hidden: Boolean
- set(actionArguments: String): causeway_applib_DomainObjectList
validate(actionArguments: String): String
}
@@ -55,7 +73,6 @@ type causeway_applib_DomainObjectList__actionId__gqlv_property {
disabled: String
get: String
hidden: Boolean
- set(actionId: String): causeway_applib_DomainObjectList
validate(actionId: String): String
}
@@ -63,7 +80,6 @@ type causeway_applib_DomainObjectList__actionOwningFqcn__gqlv_property {
disabled: String
get: String
hidden: Boolean
- set(actionOwningFqcn: String): causeway_applib_DomainObjectList
validate(actionOwningFqcn: String): String
}
@@ -71,7 +87,6 @@ type causeway_applib_DomainObjectList__elementTypeFqcn__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(elementTypeFqcn: String!): causeway_applib_DomainObjectList
validate(elementTypeFqcn: String): String
}
@@ -89,7 +104,6 @@ type causeway_applib_DomainObjectList__title__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(title: String!): causeway_applib_DomainObjectList
validate(title: String): String
}
@@ -109,7 +123,6 @@ type causeway_applib_FacetGroupNode__facets__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(facets: String!): causeway_applib_FacetGroupNode
validate(facets: String): String
}
@@ -121,7 +134,6 @@ type causeway_applib_FacetGroupNode__gqlv_meta {
type causeway_applib_FacetGroupNode__parentNode__gqlv_property {
disabled: String
hidden: Boolean
- set(parentNode: org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input!): causeway_applib_FacetGroupNode
validate(parentNode: org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input): String
}
@@ -146,7 +158,6 @@ type causeway_applib_ParameterNode__parameter__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(parameter: String!): causeway_applib_ParameterNode
validate(parameter: String): String
}
@@ -154,7 +165,6 @@ type causeway_applib_ParameterNode__parentNode__gqlv_property {
disabled: String
get: causeway_applib_node_ActionNode!
hidden: Boolean
- set(parentNode: causeway_applib_node_ActionNode__gqlv_input!): causeway_applib_ParameterNode
validate(parentNode: causeway_applib_node_ActionNode__gqlv_input): String
}
@@ -164,7 +174,6 @@ type causeway_applib_PropertyNode {
mixedIn: causeway_applib_PropertyNode__mixedIn__gqlv_property
parentNode: causeway_applib_PropertyNode__parentNode__gqlv_property
property: causeway_applib_PropertyNode__property__gqlv_property
- streamChildNodes: causeway_applib_PropertyNode__streamChildNodes__gqlv_action
}
type causeway_applib_PropertyNode__childNodes__gqlv_collection {
@@ -181,7 +190,6 @@ type causeway_applib_PropertyNode__mixedIn__gqlv_property {
disabled: String
get: Boolean!
hidden: Boolean
- set(mixedIn: Boolean!): causeway_applib_PropertyNode
validate(mixedIn: Boolean): String
}
@@ -189,7 +197,6 @@ type causeway_applib_PropertyNode__parentNode__gqlv_property {
disabled: String
get: causeway_applib_TypeNode!
hidden: Boolean
- set(parentNode: causeway_applib_TypeNode__gqlv_input!): causeway_applib_PropertyNode
validate(parentNode: causeway_applib_TypeNode__gqlv_input): String
}
@@ -197,17 +204,9 @@ type causeway_applib_PropertyNode__property__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(property: String!): causeway_applib_PropertyNode
validate(property: String): String
}
-type causeway_applib_PropertyNode__streamChildNodes__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent: java_util_stream_Stream
- validate: String
-}
-
type causeway_applib_RoleMemento {
_gqlv_meta: causeway_applib_RoleMemento__gqlv_meta
description: causeway_applib_RoleMemento__description__gqlv_property
@@ -218,7 +217,6 @@ type causeway_applib_RoleMemento__description__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(description: String!): causeway_applib_RoleMemento
validate(description: String): String
}
@@ -231,7 +229,6 @@ type causeway_applib_RoleMemento__name__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(name: String!): causeway_applib_RoleMemento
validate(name: String): String
}
@@ -251,7 +248,6 @@ type causeway_applib_TypeNode__domainClassDto__gqlv_property {
disabled: String
get: causeway_schema_metamodel_v2_DomainClassDto!
hidden: Boolean
- set(domainClassDto: causeway_schema_metamodel_v2_DomainClassDto__gqlv_input!): causeway_applib_TypeNode
validate(domainClassDto: causeway_schema_metamodel_v2_DomainClassDto__gqlv_input): String
}
@@ -263,7 +259,6 @@ type causeway_applib_TypeNode__gqlv_meta {
type causeway_applib_TypeNode__parentNode__gqlv_property {
disabled: String
hidden: Boolean
- set(parentNode: org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input!): causeway_applib_TypeNode
validate(parentNode: org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input): String
}
@@ -286,7 +281,6 @@ type causeway_applib_UserMemento__authenticationCode__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(authenticationCode: String!): causeway_applib_UserMemento
validate(authenticationCode: String): String
}
@@ -295,7 +289,6 @@ type causeway_applib_UserMemento__authenticationSource__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(authenticationSource: String!): causeway_applib_UserMemento
validate(authenticationSource: String): String
}
@@ -303,7 +296,6 @@ type causeway_applib_UserMemento__avatarUrl__gqlv_property {
disabled: String
get: String
hidden: Boolean
- set(avatarUrl: String): causeway_applib_UserMemento
validate(avatarUrl: String): String
}
@@ -316,7 +308,6 @@ type causeway_applib_UserMemento__impersonating__gqlv_property {
disabled: String
get: Boolean!
hidden: Boolean
- set(impersonating: Boolean!): causeway_applib_UserMemento
validate(impersonating: Boolean): String
}
@@ -324,7 +315,6 @@ type causeway_applib_UserMemento__languageLocale__gqlv_property {
disabled: String
get: String
hidden: Boolean
- set(languageLocale: String): causeway_applib_UserMemento
validate(languageLocale: String): String
}
@@ -332,7 +322,6 @@ type causeway_applib_UserMemento__multiTenancyToken__gqlv_property {
disabled: String
get: String
hidden: Boolean
- set(multiTenancyToken: String): causeway_applib_UserMemento
validate(multiTenancyToken: String): String
}
@@ -340,7 +329,6 @@ type causeway_applib_UserMemento__name__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(name: String!): causeway_applib_UserMemento
validate(name: String): String
}
@@ -348,7 +336,6 @@ type causeway_applib_UserMemento__numberFormatLocale__gqlv_property {
disabled: String
get: String
hidden: Boolean
- set(numberFormatLocale: String): causeway_applib_UserMemento
validate(numberFormatLocale: String): String
}
@@ -356,7 +343,6 @@ type causeway_applib_UserMemento__realName__gqlv_property {
disabled: String
get: String
hidden: Boolean
- set(realName: String): causeway_applib_UserMemento
validate(realName: String): String
}
@@ -370,7 +356,6 @@ type causeway_applib_UserMemento__timeFormatLocale__gqlv_property {
disabled: String
get: String
hidden: Boolean
- set(timeFormatLocale: String): causeway_applib_UserMemento
validate(timeFormatLocale: String): String
}
@@ -391,14 +376,12 @@ type causeway_applib_node_ActionNode {
childNodes: causeway_applib_node_ActionNode__childNodes__gqlv_collection
mixedIn: causeway_applib_node_ActionNode__mixedIn__gqlv_property
parentNode: causeway_applib_node_ActionNode__parentNode__gqlv_property
- streamChildNodes: causeway_applib_node_ActionNode__streamChildNodes__gqlv_action
}
type causeway_applib_node_ActionNode__action__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(action: String!): causeway_applib_node_ActionNode
validate(action: String): String
}
@@ -416,7 +399,6 @@ type causeway_applib_node_ActionNode__mixedIn__gqlv_property {
disabled: String
get: Boolean!
hidden: Boolean
- set(mixedIn: Boolean!): causeway_applib_node_ActionNode
validate(mixedIn: Boolean): String
}
@@ -424,24 +406,15 @@ type causeway_applib_node_ActionNode__parentNode__gqlv_property {
disabled: String
get: causeway_applib_TypeNode!
hidden: Boolean
- set(parentNode: causeway_applib_TypeNode__gqlv_input!): causeway_applib_node_ActionNode
validate(parentNode: causeway_applib_TypeNode__gqlv_input): String
}
-type causeway_applib_node_ActionNode__streamChildNodes__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent: java_util_stream_Stream
- validate: String
-}
-
type causeway_applib_node_CollectionNode {
_gqlv_meta: causeway_applib_node_CollectionNode__gqlv_meta
childNodes: causeway_applib_node_CollectionNode__childNodes__gqlv_collection
collection: causeway_applib_node_CollectionNode__collection__gqlv_property
mixedIn: causeway_applib_node_CollectionNode__mixedIn__gqlv_property
parentNode: causeway_applib_node_CollectionNode__parentNode__gqlv_property
- streamChildNodes: causeway_applib_node_CollectionNode__streamChildNodes__gqlv_action
}
type causeway_applib_node_CollectionNode__childNodes__gqlv_collection {
@@ -453,7 +426,6 @@ type causeway_applib_node_CollectionNode__collection__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(collection: String!): causeway_applib_node_CollectionNode
validate(collection: String): String
}
@@ -466,7 +438,6 @@ type causeway_applib_node_CollectionNode__mixedIn__gqlv_property {
disabled: String
get: Boolean!
hidden: Boolean
- set(mixedIn: Boolean!): causeway_applib_node_CollectionNode
validate(mixedIn: Boolean): String
}
@@ -474,17 +445,9 @@ type causeway_applib_node_CollectionNode__parentNode__gqlv_property {
disabled: String
get: causeway_applib_TypeNode!
hidden: Boolean
- set(parentNode: causeway_applib_TypeNode__gqlv_input!): causeway_applib_node_CollectionNode
validate(parentNode: causeway_applib_TypeNode__gqlv_input): String
}
-type causeway_applib_node_CollectionNode__streamChildNodes__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent: java_util_stream_Stream
- validate: String
-}
-
type causeway_applib_node_FacetAttrNode {
_gqlv_meta: causeway_applib_node_FacetAttrNode__gqlv_meta
childNodes: causeway_applib_node_FacetAttrNode__childNodes__gqlv_collection
@@ -501,7 +464,6 @@ type causeway_applib_node_FacetAttrNode__facetAttr__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(facetAttr: String!): causeway_applib_node_FacetAttrNode
validate(facetAttr: String): String
}
@@ -514,7 +476,6 @@ type causeway_applib_node_FacetAttrNode__parentNode__gqlv_property {
disabled: String
get: causeway_applib_node_FacetNode!
hidden: Boolean
- set(parentNode: causeway_applib_node_FacetNode__gqlv_input!): causeway_applib_node_FacetAttrNode
validate(parentNode: causeway_applib_node_FacetNode__gqlv_input): String
}
@@ -535,7 +496,6 @@ type causeway_applib_node_FacetNode__facet__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(facet: String!): causeway_applib_node_FacetNode
validate(facet: String): String
}
@@ -547,7 +507,6 @@ type causeway_applib_node_FacetNode__gqlv_meta {
type causeway_applib_node_FacetNode__parentNode__gqlv_property {
disabled: String
hidden: Boolean
- set(parentNode: org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input!): causeway_applib_node_FacetNode
validate(parentNode: org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input): String
}
@@ -555,7 +514,6 @@ type causeway_applib_node_FacetNode__shadowed__gqlv_property {
disabled: String
get: Boolean!
hidden: Boolean
- set(shadowed: Boolean!): causeway_applib_node_FacetNode
validate(shadowed: Boolean): String
}
@@ -585,7 +543,6 @@ type causeway_conf_ConfigurationProperty__key__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(key: String!): causeway_conf_ConfigurationProperty
validate(key: String): String
}
@@ -593,7 +550,6 @@ type causeway_conf_ConfigurationProperty__value__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(value: String!): causeway_conf_ConfigurationProperty
validate(value: String): String
}
@@ -644,7 +600,6 @@ type causeway_feat_ApplicationFeatureViewModel__memberName__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(memberName: String!): causeway_feat_ApplicationFeatureViewModel
validate(memberName: String): String
}
@@ -652,14 +607,12 @@ type causeway_feat_ApplicationFeatureViewModel__namespaceName__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(namespaceName: String!): causeway_feat_ApplicationFeatureViewModel
validate(namespaceName: String): String
}
type causeway_feat_ApplicationFeatureViewModel__parent__gqlv_property {
disabled: String
hidden: Boolean
- set(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input!): causeway_feat_ApplicationFeatureViewModel
validate(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input): String
}
@@ -667,7 +620,6 @@ type causeway_feat_ApplicationFeatureViewModel__typeSimpleName__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(typeSimpleName: String!): causeway_feat_ApplicationFeatureViewModel
validate(typeSimpleName: String): String
}
@@ -694,7 +646,6 @@ type causeway_feat_ApplicationNamespace__memberName__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(memberName: String!): causeway_feat_ApplicationNamespace
validate(memberName: String): String
}
@@ -702,14 +653,12 @@ type causeway_feat_ApplicationNamespace__namespaceName__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(namespaceName: String!): causeway_feat_ApplicationNamespace
validate(namespaceName: String): String
}
type causeway_feat_ApplicationNamespace__parent__gqlv_property {
disabled: String
hidden: Boolean
- set(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input!): causeway_feat_ApplicationNamespace
validate(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input): String
}
@@ -717,7 +666,6 @@ type causeway_feat_ApplicationNamespace__typeSimpleName__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(typeSimpleName: String!): causeway_feat_ApplicationNamespace
validate(typeSimpleName: String): String
}
@@ -747,7 +695,6 @@ type causeway_feat_ApplicationTypeAction__actionSemantics__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(actionSemantics: String!): causeway_feat_ApplicationTypeAction
validate(actionSemantics: String): String
}
@@ -760,7 +707,6 @@ type causeway_feat_ApplicationTypeAction__memberName__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(memberName: String!): causeway_feat_ApplicationTypeAction
validate(memberName: String): String
}
@@ -768,14 +714,12 @@ type causeway_feat_ApplicationTypeAction__namespaceName__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(namespaceName: String!): causeway_feat_ApplicationTypeAction
validate(namespaceName: String): String
}
type causeway_feat_ApplicationTypeAction__parent__gqlv_property {
disabled: String
hidden: Boolean
- set(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input!): causeway_feat_ApplicationTypeAction
validate(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input): String
}
@@ -783,7 +727,6 @@ type causeway_feat_ApplicationTypeAction__returnType__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(returnType: String!): causeway_feat_ApplicationTypeAction
validate(returnType: String): String
}
@@ -791,7 +734,6 @@ type causeway_feat_ApplicationTypeAction__typeSimpleName__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(typeSimpleName: String!): causeway_feat_ApplicationTypeAction
validate(typeSimpleName: String): String
}
@@ -809,7 +751,6 @@ type causeway_feat_ApplicationTypeCollection__derived__gqlv_property {
disabled: String
get: Boolean!
hidden: Boolean
- set(derived: Boolean!): causeway_feat_ApplicationTypeCollection
validate(derived: Boolean): String
}
@@ -817,7 +758,6 @@ type causeway_feat_ApplicationTypeCollection__elementType__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(elementType: String!): causeway_feat_ApplicationTypeCollection
validate(elementType: String): String
}
@@ -830,7 +770,6 @@ type causeway_feat_ApplicationTypeCollection__memberName__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(memberName: String!): causeway_feat_ApplicationTypeCollection
validate(memberName: String): String
}
@@ -838,14 +777,12 @@ type causeway_feat_ApplicationTypeCollection__namespaceName__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(namespaceName: String!): causeway_feat_ApplicationTypeCollection
validate(namespaceName: String): String
}
type causeway_feat_ApplicationTypeCollection__parent__gqlv_property {
disabled: String
hidden: Boolean
- set(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input!): causeway_feat_ApplicationTypeCollection
validate(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input): String
}
@@ -853,7 +790,6 @@ type causeway_feat_ApplicationTypeCollection__typeSimpleName__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(typeSimpleName: String!): causeway_feat_ApplicationTypeCollection
validate(typeSimpleName: String): String
}
@@ -874,7 +810,6 @@ type causeway_feat_ApplicationTypeMember__memberName__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(memberName: String!): causeway_feat_ApplicationTypeMember
validate(memberName: String): String
}
@@ -882,14 +817,12 @@ type causeway_feat_ApplicationTypeMember__namespaceName__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(namespaceName: String!): causeway_feat_ApplicationTypeMember
validate(namespaceName: String): String
}
type causeway_feat_ApplicationTypeMember__parent__gqlv_property {
disabled: String
hidden: Boolean
- set(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input!): causeway_feat_ApplicationTypeMember
validate(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input): String
}
@@ -897,7 +830,6 @@ type causeway_feat_ApplicationTypeMember__typeSimpleName__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(typeSimpleName: String!): causeway_feat_ApplicationTypeMember
validate(typeSimpleName: String): String
}
@@ -917,7 +849,6 @@ type causeway_feat_ApplicationTypeProperty__derived__gqlv_property {
disabled: String
get: Boolean!
hidden: Boolean
- set(derived: Boolean!): causeway_feat_ApplicationTypeProperty
validate(derived: Boolean): String
}
@@ -930,7 +861,6 @@ type causeway_feat_ApplicationTypeProperty__maxLength__gqlv_property {
disabled: String
get: Int
hidden: Boolean
- set(maxLength: Int): causeway_feat_ApplicationTypeProperty
validate(maxLength: Int): String
}
@@ -938,7 +868,6 @@ type causeway_feat_ApplicationTypeProperty__memberName__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(memberName: String!): causeway_feat_ApplicationTypeProperty
validate(memberName: String): String
}
@@ -946,14 +875,12 @@ type causeway_feat_ApplicationTypeProperty__namespaceName__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(namespaceName: String!): causeway_feat_ApplicationTypeProperty
validate(namespaceName: String): String
}
type causeway_feat_ApplicationTypeProperty__parent__gqlv_property {
disabled: String
hidden: Boolean
- set(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input!): causeway_feat_ApplicationTypeProperty
validate(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input): String
}
@@ -961,7 +888,6 @@ type causeway_feat_ApplicationTypeProperty__returnType__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(returnType: String!): causeway_feat_ApplicationTypeProperty
validate(returnType: String): String
}
@@ -969,7 +895,6 @@ type causeway_feat_ApplicationTypeProperty__typeSimpleName__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(typeSimpleName: String!): causeway_feat_ApplicationTypeProperty
validate(typeSimpleName: String): String
}
@@ -977,7 +902,6 @@ type causeway_feat_ApplicationTypeProperty__typicalLength__gqlv_property {
disabled: String
get: Int
hidden: Boolean
- set(typicalLength: Int): causeway_feat_ApplicationTypeProperty
validate(typicalLength: Int): String
}
@@ -1002,7 +926,6 @@ type causeway_feat_ApplicationType__memberName__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(memberName: String!): causeway_feat_ApplicationType
validate(memberName: String): String
}
@@ -1010,14 +933,12 @@ type causeway_feat_ApplicationType__namespaceName__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(namespaceName: String!): causeway_feat_ApplicationType
validate(namespaceName: String): String
}
type causeway_feat_ApplicationType__parent__gqlv_property {
disabled: String
hidden: Boolean
- set(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input!): causeway_feat_ApplicationType
validate(parent: causeway_feat_ApplicationFeatureViewModel__gqlv_input): String
}
@@ -1031,7 +952,6 @@ type causeway_feat_ApplicationType__typeSimpleName__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(typeSimpleName: String!): causeway_feat_ApplicationType
validate(typeSimpleName: String): String
}
@@ -1052,7 +972,6 @@ type causeway_schema_metamodel_v2_DomainClassDto__actions__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(actions: String!): causeway_schema_metamodel_v2_DomainClassDto
validate(actions: String): String
}
@@ -1060,7 +979,6 @@ type causeway_schema_metamodel_v2_DomainClassDto__annotations__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(annotations: String!): causeway_schema_metamodel_v2_DomainClassDto
validate(annotations: String): String
}
@@ -1068,7 +986,6 @@ type causeway_schema_metamodel_v2_DomainClassDto__collections__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(collections: String!): causeway_schema_metamodel_v2_DomainClassDto
validate(collections: String): String
}
@@ -1076,7 +993,6 @@ type causeway_schema_metamodel_v2_DomainClassDto__facets__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(facets: String!): causeway_schema_metamodel_v2_DomainClassDto
validate(facets: String): String
}
@@ -1089,7 +1005,6 @@ type causeway_schema_metamodel_v2_DomainClassDto__id__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(id: String!): causeway_schema_metamodel_v2_DomainClassDto
validate(id: String): String
}
@@ -1097,7 +1012,6 @@ type causeway_schema_metamodel_v2_DomainClassDto__majorVersion__gqlv_property {
disabled: String
get: String
hidden: Boolean
- set(majorVersion: String): causeway_schema_metamodel_v2_DomainClassDto
validate(majorVersion: String): String
}
@@ -1105,7 +1019,6 @@ type causeway_schema_metamodel_v2_DomainClassDto__minorVersion__gqlv_property {
disabled: String
get: String
hidden: Boolean
- set(minorVersion: String): causeway_schema_metamodel_v2_DomainClassDto
validate(minorVersion: String): String
}
@@ -1113,7 +1026,6 @@ type causeway_schema_metamodel_v2_DomainClassDto__properties__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(properties: String!): causeway_schema_metamodel_v2_DomainClassDto
validate(properties: String): String
}
@@ -1121,7 +1033,6 @@ type causeway_schema_metamodel_v2_DomainClassDto__service__gqlv_property {
disabled: String
get: Boolean!
hidden: Boolean
- set(service: Boolean!): causeway_schema_metamodel_v2_DomainClassDto
validate(service: Boolean): String
}
@@ -1157,7 +1068,6 @@ type causeway_testing_fixtures_FixtureResult__className__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(className: String!): causeway_testing_fixtures_FixtureResult
validate(className: String): String
}
@@ -1165,7 +1075,6 @@ type causeway_testing_fixtures_FixtureResult__fixtureScriptClassName__gqlv_prope
disabled: String
get: String
hidden: Boolean
- set(fixtureScriptClassName: String): causeway_testing_fixtures_FixtureResult
validate(fixtureScriptClassName: String): String
}
@@ -1178,14 +1087,12 @@ type causeway_testing_fixtures_FixtureResult__key__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(key: String!): causeway_testing_fixtures_FixtureResult
validate(key: String): String
}
type causeway_testing_fixtures_FixtureResult__object__gqlv_property {
disabled: String
hidden: Boolean
- set(object: String!): causeway_testing_fixtures_FixtureResult
validate(object: String): String
}
@@ -1261,1253 +1168,367 @@ type java_util_stream_Stream__gqlv_meta {
logicalTypeName: String!
}
-type org_apache_causeway_commons_functional_Either {
- _gqlv_meta: org_apache_causeway_commons_functional_Either__gqlv_meta
- accept: org_apache_causeway_commons_functional_Either__accept__gqlv_action
- left: org_apache_causeway_commons_functional_Either__left__gqlv_action
- map: org_apache_causeway_commons_functional_Either__map__gqlv_action
- mapLeft: org_apache_causeway_commons_functional_Either__mapLeft__gqlv_action
- mapRight: org_apache_causeway_commons_functional_Either__mapRight__gqlv_action
- right: org_apache_causeway_commons_functional_Either__right__gqlv_action
+type org_apache_causeway_core_metamodel_inspect_model_MMNode {
+ _gqlv_meta: org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_meta
+ childNodes: org_apache_causeway_core_metamodel_inspect_model_MMNode__childNodes__gqlv_collection
+ parentNode: org_apache_causeway_core_metamodel_inspect_model_MMNode__parentNode__gqlv_property
}
-type org_apache_causeway_commons_functional_Either__accept__gqlv_action {
+type org_apache_causeway_core_metamodel_inspect_model_MMNode__childNodes__gqlv_collection {
disabled: String
hidden: Boolean
- invokeNonIdempotent(leftConsumer: java_util_function_Consumer__gqlv_input!, rightConsumer: java_util_function_Consumer__gqlv_input!): String
- params: org_apache_causeway_commons_functional_Either__accept__gqlv_action_params
- validate(leftConsumer: java_util_function_Consumer__gqlv_input, rightConsumer: java_util_function_Consumer__gqlv_input): String
}
-type org_apache_causeway_commons_functional_Either__accept__gqlv_action_params {
- leftConsumer: org_apache_causeway_commons_functional_Either__accept__leftConsumer__gqlv_action_parameter
- rightConsumer: org_apache_causeway_commons_functional_Either__accept__rightConsumer__gqlv_action_parameter
+type org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_meta {
+ id: String!
+ logicalTypeName: String!
}
-type org_apache_causeway_commons_functional_Either__accept__leftConsumer__gqlv_action_parameter {
- disabled(leftConsumer: java_util_function_Consumer__gqlv_input): String
+type org_apache_causeway_core_metamodel_inspect_model_MMNode__parentNode__gqlv_property {
+ disabled: String
hidden: Boolean
- validity: String
+ validate(parentNode: org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input): String
}
-type org_apache_causeway_commons_functional_Either__accept__rightConsumer__gqlv_action_parameter {
- disabled(leftConsumer: java_util_function_Consumer__gqlv_input, rightConsumer: java_util_function_Consumer__gqlv_input): String
- hidden(leftConsumer: java_util_function_Consumer__gqlv_input): Boolean
- validity: String
+type org_apache_causeway_core_metamodel_inspect_model_MemberNode {
+ _gqlv_meta: org_apache_causeway_core_metamodel_inspect_model_MemberNode__gqlv_meta
+ childNodes: org_apache_causeway_core_metamodel_inspect_model_MemberNode__childNodes__gqlv_collection
+ mixedIn: org_apache_causeway_core_metamodel_inspect_model_MemberNode__mixedIn__gqlv_property
+ parentNode: org_apache_causeway_core_metamodel_inspect_model_MemberNode__parentNode__gqlv_property
+}
+
+type org_apache_causeway_core_metamodel_inspect_model_MemberNode__childNodes__gqlv_collection {
+ disabled: String
+ hidden: Boolean
}
-type org_apache_causeway_commons_functional_Either__gqlv_meta {
+type org_apache_causeway_core_metamodel_inspect_model_MemberNode__gqlv_meta {
id: String!
logicalTypeName: String!
}
-type org_apache_causeway_commons_functional_Either__left__gqlv_action {
+type org_apache_causeway_core_metamodel_inspect_model_MemberNode__mixedIn__gqlv_property {
disabled: String
+ get: Boolean!
hidden: Boolean
- invokeNonIdempotent: String
- validate: String
+ validate(mixedIn: Boolean): String
}
-type org_apache_causeway_commons_functional_Either__mapLeft__gqlv_action {
+type org_apache_causeway_core_metamodel_inspect_model_MemberNode__parentNode__gqlv_property {
disabled: String
+ get: causeway_applib_TypeNode!
hidden: Boolean
- invokeNonIdempotent(leftMapper: java_util_function_Function__gqlv_input!): org_apache_causeway_commons_functional_Either
- params: org_apache_causeway_commons_functional_Either__mapLeft__gqlv_action_params
- validate(leftMapper: java_util_function_Function__gqlv_input): String
-}
-
-type org_apache_causeway_commons_functional_Either__mapLeft__gqlv_action_params {
- leftMapper: org_apache_causeway_commons_functional_Either__mapLeft__leftMapper__gqlv_action_parameter
+ validate(parentNode: causeway_applib_TypeNode__gqlv_input): String
}
-type org_apache_causeway_commons_functional_Either__mapLeft__leftMapper__gqlv_action_parameter {
- disabled(leftMapper: java_util_function_Function__gqlv_input): String
- hidden: Boolean
- validity: String
+type org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript {
+ _gqlv_meta: org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__gqlv_meta
+ friendlyName: org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__friendlyName__gqlv_property
+ qualifiedName: org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__qualifiedName__gqlv_property
}
-type org_apache_causeway_commons_functional_Either__mapRight__gqlv_action {
+type org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__friendlyName__gqlv_property {
disabled: String
+ get: String!
hidden: Boolean
- invokeNonIdempotent(rightMapper: java_util_function_Function__gqlv_input!): org_apache_causeway_commons_functional_Either
- params: org_apache_causeway_commons_functional_Either__mapRight__gqlv_action_params
- validate(rightMapper: java_util_function_Function__gqlv_input): String
+ validate(friendlyName: String): String
}
-type org_apache_causeway_commons_functional_Either__mapRight__gqlv_action_params {
- rightMapper: org_apache_causeway_commons_functional_Either__mapRight__rightMapper__gqlv_action_parameter
+type org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__gqlv_meta {
+ id: String!
+ logicalTypeName: String!
}
-type org_apache_causeway_commons_functional_Either__mapRight__rightMapper__gqlv_action_parameter {
- disabled(rightMapper: java_util_function_Function__gqlv_input): String
+type org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__qualifiedName__gqlv_property {
+ disabled: String
+ get: String!
hidden: Boolean
- validity: String
+ validate(qualifiedName: String): String
+}
+
+type university_calc_Calculator {
+ addBigDecimals: university_calc_Calculator__addBigDecimals__gqlv_action
+ addBigIntegers: university_calc_Calculator__addBigIntegers__gqlv_action
+ addByteWrappers: university_calc_Calculator__addByteWrappers__gqlv_action
+ addBytes: university_calc_Calculator__addBytes__gqlv_action
+ addDoubleWrappers: university_calc_Calculator__addDoubleWrappers__gqlv_action
+ addDoubles: university_calc_Calculator__addDoubles__gqlv_action
+ addFloatWrappers: university_calc_Calculator__addFloatWrappers__gqlv_action
+ addFloats: university_calc_Calculator__addFloats__gqlv_action
+ addIntegerWrappers: university_calc_Calculator__addIntegerWrappers__gqlv_action
+ addIntegers: university_calc_Calculator__addIntegers__gqlv_action
+ addShortWrappers: university_calc_Calculator__addShortWrappers__gqlv_action
+ addShorts: university_calc_Calculator__addShorts__gqlv_action
+ and: university_calc_Calculator__and__gqlv_action
+ concat: university_calc_Calculator__concat__gqlv_action
+ nextMonth: university_calc_Calculator__nextMonth__gqlv_action
+ not: university_calc_Calculator__not__gqlv_action
+ or: university_calc_Calculator__or__gqlv_action
+ plusDays: university_calc_Calculator__plusDays__gqlv_action
+ plusJodaDays: university_calc_Calculator__plusJodaDays__gqlv_action
}
-type org_apache_causeway_commons_functional_Either__map__gqlv_action {
+type university_calc_Calculator__addBigDecimals__gqlv_action {
disabled: String
hidden: Boolean
- invokeNonIdempotent(leftMapper: java_util_function_Function__gqlv_input!, rightMapper: java_util_function_Function__gqlv_input!): org_apache_causeway_commons_functional_Either
- params: org_apache_causeway_commons_functional_Either__map__gqlv_action_params
- validate(leftMapper: java_util_function_Function__gqlv_input, rightMapper: java_util_function_Function__gqlv_input): String
+ invoke(x: Float!, y: Float): Float
+ params: university_calc_Calculator__addBigDecimals__gqlv_action_params
+ validate(x: Float, y: Float): String
}
-type org_apache_causeway_commons_functional_Either__map__gqlv_action_params {
- leftMapper: org_apache_causeway_commons_functional_Either__map__leftMapper__gqlv_action_parameter
- rightMapper: org_apache_causeway_commons_functional_Either__map__rightMapper__gqlv_action_parameter
+type university_calc_Calculator__addBigDecimals__gqlv_action_params {
+ x: university_calc_Calculator__addBigDecimals__x__gqlv_action_parameter
+ y: university_calc_Calculator__addBigDecimals__y__gqlv_action_parameter
}
-type org_apache_causeway_commons_functional_Either__map__leftMapper__gqlv_action_parameter {
- disabled(leftMapper: java_util_function_Function__gqlv_input): String
+type university_calc_Calculator__addBigDecimals__x__gqlv_action_parameter {
+ disabled(x: Float): String
hidden: Boolean
validity: String
}
-type org_apache_causeway_commons_functional_Either__map__rightMapper__gqlv_action_parameter {
- disabled(leftMapper: java_util_function_Function__gqlv_input, rightMapper: java_util_function_Function__gqlv_input): String
- hidden(leftMapper: java_util_function_Function__gqlv_input): Boolean
+type university_calc_Calculator__addBigDecimals__y__gqlv_action_parameter {
+ disabled(x: Float, y: Float): String
+ hidden(x: Float): Boolean
validity: String
}
-type org_apache_causeway_commons_functional_Either__right__gqlv_action {
+type university_calc_Calculator__addBigIntegers__gqlv_action {
disabled: String
hidden: Boolean
- invokeNonIdempotent: String
- validate: String
+ invoke(x: Int!, y: Int): Int
+ params: university_calc_Calculator__addBigIntegers__gqlv_action_params
+ validate(x: Int, y: Int): String
}
-type org_apache_causeway_commons_functional_Railway {
- _gqlv_meta: org_apache_causeway_commons_functional_Railway__gqlv_meta
- chain: org_apache_causeway_commons_functional_Railway__chain__gqlv_action
- failure: org_apache_causeway_commons_functional_Railway__failure__gqlv_property
- ifFailure: org_apache_causeway_commons_functional_Railway__ifFailure__gqlv_action
- ifSuccess: org_apache_causeway_commons_functional_Railway__ifSuccess__gqlv_action
- mapFailure: org_apache_causeway_commons_functional_Railway__mapFailure__gqlv_action
- mapSuccess: org_apache_causeway_commons_functional_Railway__mapSuccess__gqlv_action
- success: org_apache_causeway_commons_functional_Railway__success__gqlv_property
+type university_calc_Calculator__addBigIntegers__gqlv_action_params {
+ x: university_calc_Calculator__addBigIntegers__x__gqlv_action_parameter
+ y: university_calc_Calculator__addBigIntegers__y__gqlv_action_parameter
}
-type org_apache_causeway_commons_functional_Railway__chain__chainingFunction__gqlv_action_parameter {
- disabled(chainingFunction: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
+type university_calc_Calculator__addBigIntegers__x__gqlv_action_parameter {
+ disabled(x: Int): String
hidden: Boolean
validity: String
}
-type org_apache_causeway_commons_functional_Railway__chain__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent(chainingFunction: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input!): org_apache_causeway_commons_functional_Railway
- params: org_apache_causeway_commons_functional_Railway__chain__gqlv_action_params
- validate(chainingFunction: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
-}
-
-type org_apache_causeway_commons_functional_Railway__chain__gqlv_action_params {
- chainingFunction: org_apache_causeway_commons_functional_Railway__chain__chainingFunction__gqlv_action_parameter
+type university_calc_Calculator__addBigIntegers__y__gqlv_action_parameter {
+ disabled(x: Int, y: Int): String
+ hidden(x: Int): Boolean
+ validity: String
}
-type org_apache_causeway_commons_functional_Railway__failure__gqlv_property {
+type university_calc_Calculator__addByteWrappers__gqlv_action {
disabled: String
- get: Boolean!
hidden: Boolean
- set(failure: Boolean!): org_apache_causeway_commons_functional_Railway
- validate(failure: Boolean): String
+ invoke(x: String!, y: String): Int
+ params: university_calc_Calculator__addByteWrappers__gqlv_action_params
+ validate(x: String, y: String): String
}
-type org_apache_causeway_commons_functional_Railway__gqlv_meta {
- id: String!
- logicalTypeName: String!
+type university_calc_Calculator__addByteWrappers__gqlv_action_params {
+ x: university_calc_Calculator__addByteWrappers__x__gqlv_action_parameter
+ y: university_calc_Calculator__addByteWrappers__y__gqlv_action_parameter
}
-type org_apache_causeway_commons_functional_Railway__ifFailure__failureConsumer__gqlv_action_parameter {
- disabled(failureConsumer: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input): String
+type university_calc_Calculator__addByteWrappers__x__gqlv_action_parameter {
+ disabled(x: String): String
hidden: Boolean
validity: String
}
-type org_apache_causeway_commons_functional_Railway__ifFailure__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent(failureConsumer: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input!): org_apache_causeway_commons_functional_Railway
- params: org_apache_causeway_commons_functional_Railway__ifFailure__gqlv_action_params
- validate(failureConsumer: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input): String
-}
-
-type org_apache_causeway_commons_functional_Railway__ifFailure__gqlv_action_params {
- failureConsumer: org_apache_causeway_commons_functional_Railway__ifFailure__failureConsumer__gqlv_action_parameter
+type university_calc_Calculator__addByteWrappers__y__gqlv_action_parameter {
+ disabled(x: String, y: String): String
+ hidden(x: String): Boolean
+ validity: String
}
-type org_apache_causeway_commons_functional_Railway__ifSuccess__gqlv_action {
+type university_calc_Calculator__addBytes__gqlv_action {
disabled: String
hidden: Boolean
- invokeNonIdempotent(successConsumer: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input!): org_apache_causeway_commons_functional_Railway
- params: org_apache_causeway_commons_functional_Railway__ifSuccess__gqlv_action_params
- validate(successConsumer: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input): String
+ invoke(x: String!, y: String!): String
+ params: university_calc_Calculator__addBytes__gqlv_action_params
+ validate(x: String, y: String): String
}
-type org_apache_causeway_commons_functional_Railway__ifSuccess__gqlv_action_params {
- successConsumer: org_apache_causeway_commons_functional_Railway__ifSuccess__successConsumer__gqlv_action_parameter
+type university_calc_Calculator__addBytes__gqlv_action_params {
+ x: university_calc_Calculator__addBytes__x__gqlv_action_parameter
+ y: university_calc_Calculator__addBytes__y__gqlv_action_parameter
}
-type org_apache_causeway_commons_functional_Railway__ifSuccess__successConsumer__gqlv_action_parameter {
- disabled(successConsumer: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input): String
+type university_calc_Calculator__addBytes__x__gqlv_action_parameter {
+ disabled(x: String): String
hidden: Boolean
validity: String
}
-type org_apache_causeway_commons_functional_Railway__mapFailure__failureMapper__gqlv_action_parameter {
- disabled(failureMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
- hidden: Boolean
+type university_calc_Calculator__addBytes__y__gqlv_action_parameter {
+ disabled(x: String, y: String): String
+ hidden(x: String): Boolean
validity: String
}
-type org_apache_causeway_commons_functional_Railway__mapFailure__gqlv_action {
+type university_calc_Calculator__addDoubleWrappers__gqlv_action {
disabled: String
hidden: Boolean
- invokeNonIdempotent(failureMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input!): org_apache_causeway_commons_functional_Railway
- params: org_apache_causeway_commons_functional_Railway__mapFailure__gqlv_action_params
- validate(failureMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
+ invoke(x: Float!, y: Float): Float
+ params: university_calc_Calculator__addDoubleWrappers__gqlv_action_params
+ validate(x: Float, y: Float): String
}
-type org_apache_causeway_commons_functional_Railway__mapFailure__gqlv_action_params {
- failureMapper: org_apache_causeway_commons_functional_Railway__mapFailure__failureMapper__gqlv_action_parameter
+type university_calc_Calculator__addDoubleWrappers__gqlv_action_params {
+ x: university_calc_Calculator__addDoubleWrappers__x__gqlv_action_parameter
+ y: university_calc_Calculator__addDoubleWrappers__y__gqlv_action_parameter
}
-type org_apache_causeway_commons_functional_Railway__mapSuccess__gqlv_action {
- disabled: String
+type university_calc_Calculator__addDoubleWrappers__x__gqlv_action_parameter {
+ disabled(x: Float): String
hidden: Boolean
- invokeNonIdempotent(successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input!): org_apache_causeway_commons_functional_Railway
- params: org_apache_causeway_commons_functional_Railway__mapSuccess__gqlv_action_params
- validate(successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
-}
-
-type org_apache_causeway_commons_functional_Railway__mapSuccess__gqlv_action_params {
- successMapper: org_apache_causeway_commons_functional_Railway__mapSuccess__successMapper__gqlv_action_parameter
+ validity: String
}
-type org_apache_causeway_commons_functional_Railway__mapSuccess__successMapper__gqlv_action_parameter {
- disabled(successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
- hidden: Boolean
+type university_calc_Calculator__addDoubleWrappers__y__gqlv_action_parameter {
+ disabled(x: Float, y: Float): String
+ hidden(x: Float): Boolean
validity: String
}
-type org_apache_causeway_commons_functional_Railway__success__gqlv_property {
+type university_calc_Calculator__addDoubles__gqlv_action {
disabled: String
- get: Boolean!
hidden: Boolean
- set(success: Boolean!): org_apache_causeway_commons_functional_Railway
- validate(success: Boolean): String
+ invoke(x: Float!, y: Float!): Float
+ params: university_calc_Calculator__addDoubles__gqlv_action_params
+ validate(x: Float, y: Float): String
}
-type org_apache_causeway_commons_functional_ThrowingConsumer {
- _gqlv_meta: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_meta
- andThen: org_apache_causeway_commons_functional_ThrowingConsumer__andThen__gqlv_action
- throwing: org_apache_causeway_commons_functional_ThrowingConsumer__throwing__gqlv_action
+type university_calc_Calculator__addDoubles__gqlv_action_params {
+ x: university_calc_Calculator__addDoubles__x__gqlv_action_parameter
+ y: university_calc_Calculator__addDoubles__y__gqlv_action_parameter
}
-type org_apache_causeway_commons_functional_ThrowingConsumer__andThen__arg0__gqlv_action_parameter {
- disabled(arg0: java_util_function_Consumer__gqlv_input): String
+type university_calc_Calculator__addDoubles__x__gqlv_action_parameter {
+ disabled(x: Float): String
hidden: Boolean
validity: String
}
-type org_apache_causeway_commons_functional_ThrowingConsumer__andThen__gqlv_action {
+type university_calc_Calculator__addDoubles__y__gqlv_action_parameter {
+ disabled(x: Float, y: Float): String
+ hidden(x: Float): Boolean
+ validity: String
+}
+
+type university_calc_Calculator__addFloatWrappers__gqlv_action {
disabled: String
hidden: Boolean
- invokeNonIdempotent(arg0: java_util_function_Consumer__gqlv_input!): java_util_function_Consumer
- params: org_apache_causeway_commons_functional_ThrowingConsumer__andThen__gqlv_action_params
- validate(arg0: java_util_function_Consumer__gqlv_input): String
+ invoke(x: Float!, y: Float): Float
+ params: university_calc_Calculator__addFloatWrappers__gqlv_action_params
+ validate(x: Float, y: Float): String
}
-type org_apache_causeway_commons_functional_ThrowingConsumer__andThen__gqlv_action_params {
- arg0: org_apache_causeway_commons_functional_ThrowingConsumer__andThen__arg0__gqlv_action_parameter
+type university_calc_Calculator__addFloatWrappers__gqlv_action_params {
+ x: university_calc_Calculator__addFloatWrappers__x__gqlv_action_parameter
+ y: university_calc_Calculator__addFloatWrappers__y__gqlv_action_parameter
}
-type org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_meta {
- id: String!
- logicalTypeName: String!
+type university_calc_Calculator__addFloatWrappers__x__gqlv_action_parameter {
+ disabled(x: Float): String
+ hidden: Boolean
+ validity: String
}
-type org_apache_causeway_commons_functional_ThrowingConsumer__throwing__exceptionWrapper__gqlv_action_parameter {
- disabled(exceptionWrapper: java_util_function_BiFunction__gqlv_input): String
- hidden: Boolean
+type university_calc_Calculator__addFloatWrappers__y__gqlv_action_parameter {
+ disabled(x: Float, y: Float): String
+ hidden(x: Float): Boolean
validity: String
}
-type org_apache_causeway_commons_functional_ThrowingConsumer__throwing__gqlv_action {
+type university_calc_Calculator__addFloats__gqlv_action {
disabled: String
hidden: Boolean
- invokeNonIdempotent(exceptionWrapper: java_util_function_BiFunction__gqlv_input!): org_apache_causeway_commons_functional_ThrowingConsumer
- params: org_apache_causeway_commons_functional_ThrowingConsumer__throwing__gqlv_action_params
- validate(exceptionWrapper: java_util_function_BiFunction__gqlv_input): String
+ invoke(x: Float!, y: Float!): Float
+ params: university_calc_Calculator__addFloats__gqlv_action_params
+ validate(x: Float, y: Float): String
}
-type org_apache_causeway_commons_functional_ThrowingConsumer__throwing__gqlv_action_params {
- exceptionWrapper: org_apache_causeway_commons_functional_ThrowingConsumer__throwing__exceptionWrapper__gqlv_action_parameter
+type university_calc_Calculator__addFloats__gqlv_action_params {
+ x: university_calc_Calculator__addFloats__x__gqlv_action_parameter
+ y: university_calc_Calculator__addFloats__y__gqlv_action_parameter
}
-type org_apache_causeway_commons_functional_ThrowingFunction {
- _gqlv_meta: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_meta
- andThen: org_apache_causeway_commons_functional_ThrowingFunction__andThen__gqlv_action
- compose: org_apache_causeway_commons_functional_ThrowingFunction__compose__gqlv_action
- throwing: org_apache_causeway_commons_functional_ThrowingFunction__throwing__gqlv_action
+type university_calc_Calculator__addFloats__x__gqlv_action_parameter {
+ disabled(x: Float): String
+ hidden: Boolean
+ validity: String
}
-type org_apache_causeway_commons_functional_ThrowingFunction__andThen__arg0__gqlv_action_parameter {
- disabled(arg0: java_util_function_Function__gqlv_input): String
- hidden: Boolean
+type university_calc_Calculator__addFloats__y__gqlv_action_parameter {
+ disabled(x: Float, y: Float): String
+ hidden(x: Float): Boolean
validity: String
}
-type org_apache_causeway_commons_functional_ThrowingFunction__andThen__gqlv_action {
+type university_calc_Calculator__addIntegerWrappers__gqlv_action {
disabled: String
hidden: Boolean
- invokeNonIdempotent(arg0: java_util_function_Function__gqlv_input!): java_util_function_Function
- params: org_apache_causeway_commons_functional_ThrowingFunction__andThen__gqlv_action_params
- validate(arg0: java_util_function_Function__gqlv_input): String
+ invoke(x: Int!, y: Int): Int
+ params: university_calc_Calculator__addIntegerWrappers__gqlv_action_params
+ validate(x: Int, y: Int): String
}
-type org_apache_causeway_commons_functional_ThrowingFunction__andThen__gqlv_action_params {
- arg0: org_apache_causeway_commons_functional_ThrowingFunction__andThen__arg0__gqlv_action_parameter
+type university_calc_Calculator__addIntegerWrappers__gqlv_action_params {
+ x: university_calc_Calculator__addIntegerWrappers__x__gqlv_action_parameter
+ y: university_calc_Calculator__addIntegerWrappers__y__gqlv_action_parameter
}
-type org_apache_causeway_commons_functional_ThrowingFunction__compose__arg0__gqlv_action_parameter {
- disabled(arg0: java_util_function_Function__gqlv_input): String
+type university_calc_Calculator__addIntegerWrappers__x__gqlv_action_parameter {
+ disabled(x: Int): String
hidden: Boolean
validity: String
}
-type org_apache_causeway_commons_functional_ThrowingFunction__compose__gqlv_action {
+type university_calc_Calculator__addIntegerWrappers__y__gqlv_action_parameter {
+ disabled(x: Int, y: Int): String
+ hidden(x: Int): Boolean
+ validity: String
+}
+
+type university_calc_Calculator__addIntegers__gqlv_action {
disabled: String
hidden: Boolean
- invokeNonIdempotent(arg0: java_util_function_Function__gqlv_input!): java_util_function_Function
- params: org_apache_causeway_commons_functional_ThrowingFunction__compose__gqlv_action_params
- validate(arg0: java_util_function_Function__gqlv_input): String
+ invoke(x: Int!, y: Int!): Int
+ params: university_calc_Calculator__addIntegers__gqlv_action_params
+ validate(x: Int, y: Int): String
}
-type org_apache_causeway_commons_functional_ThrowingFunction__compose__gqlv_action_params {
- arg0: org_apache_causeway_commons_functional_ThrowingFunction__compose__arg0__gqlv_action_parameter
+type university_calc_Calculator__addIntegers__gqlv_action_params {
+ x: university_calc_Calculator__addIntegers__x__gqlv_action_parameter
+ y: university_calc_Calculator__addIntegers__y__gqlv_action_parameter
}
-type org_apache_causeway_commons_functional_ThrowingFunction__gqlv_meta {
- id: String!
- logicalTypeName: String!
+type university_calc_Calculator__addIntegers__x__gqlv_action_parameter {
+ disabled(x: Int): String
+ hidden: Boolean
+ validity: String
}
-type org_apache_causeway_commons_functional_ThrowingFunction__throwing__exceptionWrapper__gqlv_action_parameter {
- disabled(exceptionWrapper: java_util_function_BiFunction__gqlv_input): String
- hidden: Boolean
+type university_calc_Calculator__addIntegers__y__gqlv_action_parameter {
+ disabled(x: Int, y: Int): String
+ hidden(x: Int): Boolean
validity: String
}
-type org_apache_causeway_commons_functional_ThrowingFunction__throwing__gqlv_action {
+type university_calc_Calculator__addShortWrappers__gqlv_action {
disabled: String
hidden: Boolean
- invokeNonIdempotent(exceptionWrapper: java_util_function_BiFunction__gqlv_input!): org_apache_causeway_commons_functional_ThrowingFunction
- params: org_apache_causeway_commons_functional_ThrowingFunction__throwing__gqlv_action_params
- validate(exceptionWrapper: java_util_function_BiFunction__gqlv_input): String
+ invoke(x: Int!, y: Int): Int
+ params: university_calc_Calculator__addShortWrappers__gqlv_action_params
+ validate(x: Int, y: Int): String
}
-type org_apache_causeway_commons_functional_ThrowingFunction__throwing__gqlv_action_params {
- exceptionWrapper: org_apache_causeway_commons_functional_ThrowingFunction__throwing__exceptionWrapper__gqlv_action_parameter
-}
-
-type org_apache_causeway_commons_functional_ThrowingRunnable {
- _gqlv_meta: org_apache_causeway_commons_functional_ThrowingRunnable__gqlv_meta
- callUncatched: org_apache_causeway_commons_functional_ThrowingRunnable__callUncatched__gqlv_action
- run: org_apache_causeway_commons_functional_ThrowingRunnable__run__gqlv_action
- runUncatched: org_apache_causeway_commons_functional_ThrowingRunnable__runUncatched__gqlv_action
- toCallable: org_apache_causeway_commons_functional_ThrowingRunnable__toCallable__gqlv_action
- toRunnable: org_apache_causeway_commons_functional_ThrowingRunnable__toRunnable__gqlv_action
-}
-
-type org_apache_causeway_commons_functional_ThrowingRunnable__callUncatched__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent: String
- validate: String
-}
-
-type org_apache_causeway_commons_functional_ThrowingRunnable__gqlv_meta {
- id: String!
- logicalTypeName: String!
-}
-
-type org_apache_causeway_commons_functional_ThrowingRunnable__runUncatched__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent: String
- validate: String
-}
-
-type org_apache_causeway_commons_functional_ThrowingRunnable__run__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent: String
- validate: String
-}
-
-type org_apache_causeway_commons_functional_ThrowingRunnable__toCallable__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent: java_util_concurrent_Callable
- validate: String
-}
-
-type org_apache_causeway_commons_functional_ThrowingRunnable__toRunnable__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent: java_lang_Runnable
- validate: String
-}
-
-type org_apache_causeway_commons_functional_Try {
- _gqlv_meta: org_apache_causeway_commons_functional_Try__gqlv_meta
- accept: org_apache_causeway_commons_functional_Try__accept__gqlv_action
- failure: org_apache_causeway_commons_functional_Try__failure__gqlv_property
- flatMapSuccess: org_apache_causeway_commons_functional_Try__flatMapSuccess__gqlv_action
- flatMapSuccessAsNullable: org_apache_causeway_commons_functional_Try__flatMapSuccessAsNullable__gqlv_action
- flatMapSuccessWhenPresent: org_apache_causeway_commons_functional_Try__flatMapSuccessWhenPresent__gqlv_action
- ifAbsentFail: org_apache_causeway_commons_functional_Try__ifAbsentFail__gqlv_action
- ifFailure: org_apache_causeway_commons_functional_Try__ifFailure__gqlv_action
- ifFailureFail: org_apache_causeway_commons_functional_Try__ifFailureFail__gqlv_action
- ifSuccess: org_apache_causeway_commons_functional_Try__ifSuccess__gqlv_action
- ifSuccessAsNullable: org_apache_causeway_commons_functional_Try__ifSuccessAsNullable__gqlv_action
- mapEmptyToFailure: org_apache_causeway_commons_functional_Try__mapEmptyToFailure__gqlv_action
- mapFailure: org_apache_causeway_commons_functional_Try__mapFailure__gqlv_action
- mapFailureToSuccess: org_apache_causeway_commons_functional_Try__mapFailureToSuccess__gqlv_action
- mapSuccess: org_apache_causeway_commons_functional_Try__mapSuccess__gqlv_action
- mapSuccessAsNullable: org_apache_causeway_commons_functional_Try__mapSuccessAsNullable__gqlv_action
- mapSuccessWhenPresent: org_apache_causeway_commons_functional_Try__mapSuccessWhenPresent__gqlv_action
- mapToEither: org_apache_causeway_commons_functional_Try__mapToEither__gqlv_action
- orCall: org_apache_causeway_commons_functional_Try__orCall__gqlv_action
- success: org_apache_causeway_commons_functional_Try__success__gqlv_property
- then: org_apache_causeway_commons_functional_Try__then__gqlv_action
- thenCall: org_apache_causeway_commons_functional_Try__thenCall__gqlv_action
- thenRun: org_apache_causeway_commons_functional_Try__thenRun__gqlv_action
- value: org_apache_causeway_commons_functional_Try__value__gqlv_property
-}
-
-type org_apache_causeway_commons_functional_Try__accept__failureConsumer__gqlv_action_parameter {
- disabled(failureConsumer: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input): String
- hidden: Boolean
- validity: String
-}
-
-type org_apache_causeway_commons_functional_Try__accept__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent(failureConsumer: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input!, successConsumer: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input!): org_apache_causeway_commons_functional_Try
- params: org_apache_causeway_commons_functional_Try__accept__gqlv_action_params
- validate(failureConsumer: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input, successConsumer: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input): String
-}
-
-type org_apache_causeway_commons_functional_Try__accept__gqlv_action_params {
- failureConsumer: org_apache_causeway_commons_functional_Try__accept__failureConsumer__gqlv_action_parameter
- successConsumer: org_apache_causeway_commons_functional_Try__accept__successConsumer__gqlv_action_parameter
-}
-
-type org_apache_causeway_commons_functional_Try__accept__successConsumer__gqlv_action_parameter {
- disabled(failureConsumer: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input, successConsumer: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input): String
- hidden(failureConsumer: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input): Boolean
- validity: String
-}
-
-type org_apache_causeway_commons_functional_Try__failure__gqlv_property {
- disabled: String
- get: Boolean!
- hidden: Boolean
- set(failure: Boolean!): org_apache_causeway_commons_functional_Try
- validate(failure: Boolean): String
-}
-
-type org_apache_causeway_commons_functional_Try__flatMapSuccessAsNullable__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent(successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input!): org_apache_causeway_commons_functional_Try
- params: org_apache_causeway_commons_functional_Try__flatMapSuccessAsNullable__gqlv_action_params
- validate(successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
-}
-
-type org_apache_causeway_commons_functional_Try__flatMapSuccessAsNullable__gqlv_action_params {
- successMapper: org_apache_causeway_commons_functional_Try__flatMapSuccessAsNullable__successMapper__gqlv_action_parameter
-}
-
-type org_apache_causeway_commons_functional_Try__flatMapSuccessAsNullable__successMapper__gqlv_action_parameter {
- disabled(successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
- hidden: Boolean
- validity: String
-}
-
-type org_apache_causeway_commons_functional_Try__flatMapSuccessWhenPresent__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent(successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input!): org_apache_causeway_commons_functional_Try
- params: org_apache_causeway_commons_functional_Try__flatMapSuccessWhenPresent__gqlv_action_params
- validate(successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
-}
-
-type org_apache_causeway_commons_functional_Try__flatMapSuccessWhenPresent__gqlv_action_params {
- successMapper: org_apache_causeway_commons_functional_Try__flatMapSuccessWhenPresent__successMapper__gqlv_action_parameter
-}
-
-type org_apache_causeway_commons_functional_Try__flatMapSuccessWhenPresent__successMapper__gqlv_action_parameter {
- disabled(successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
- hidden: Boolean
- validity: String
-}
-
-type org_apache_causeway_commons_functional_Try__flatMapSuccess__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent(successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input!): org_apache_causeway_commons_functional_Try
- params: org_apache_causeway_commons_functional_Try__flatMapSuccess__gqlv_action_params
- validate(successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
-}
-
-type org_apache_causeway_commons_functional_Try__flatMapSuccess__gqlv_action_params {
- successMapper: org_apache_causeway_commons_functional_Try__flatMapSuccess__successMapper__gqlv_action_parameter
-}
-
-type org_apache_causeway_commons_functional_Try__flatMapSuccess__successMapper__gqlv_action_parameter {
- disabled(successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
- hidden: Boolean
- validity: String
-}
-
-type org_apache_causeway_commons_functional_Try__gqlv_meta {
- id: String!
- logicalTypeName: String!
-}
-
-type org_apache_causeway_commons_functional_Try__ifAbsentFail__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent: org_apache_causeway_commons_functional_Try
- validate: String
-}
-
-type org_apache_causeway_commons_functional_Try__ifFailureFail__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent: org_apache_causeway_commons_functional_Try
- validate: String
-}
-
-type org_apache_causeway_commons_functional_Try__ifFailure__exceptionConsumer__gqlv_action_parameter {
- disabled(exceptionConsumer: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input): String
- hidden: Boolean
- validity: String
-}
-
-type org_apache_causeway_commons_functional_Try__ifFailure__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent(exceptionConsumer: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input!): org_apache_causeway_commons_functional_Try
- params: org_apache_causeway_commons_functional_Try__ifFailure__gqlv_action_params
- validate(exceptionConsumer: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input): String
-}
-
-type org_apache_causeway_commons_functional_Try__ifFailure__gqlv_action_params {
- exceptionConsumer: org_apache_causeway_commons_functional_Try__ifFailure__exceptionConsumer__gqlv_action_parameter
-}
-
-type org_apache_causeway_commons_functional_Try__ifSuccessAsNullable__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent(valueConsumer: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input!): org_apache_causeway_commons_functional_Try
- params: org_apache_causeway_commons_functional_Try__ifSuccessAsNullable__gqlv_action_params
- validate(valueConsumer: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input): String
-}
-
-type org_apache_causeway_commons_functional_Try__ifSuccessAsNullable__gqlv_action_params {
- valueConsumer: org_apache_causeway_commons_functional_Try__ifSuccessAsNullable__valueConsumer__gqlv_action_parameter
-}
-
-type org_apache_causeway_commons_functional_Try__ifSuccessAsNullable__valueConsumer__gqlv_action_parameter {
- disabled(valueConsumer: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input): String
- hidden: Boolean
- validity: String
-}
-
-type org_apache_causeway_commons_functional_Try__ifSuccess__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent(valueConsumer: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input!): org_apache_causeway_commons_functional_Try
- params: org_apache_causeway_commons_functional_Try__ifSuccess__gqlv_action_params
- validate(valueConsumer: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input): String
-}
-
-type org_apache_causeway_commons_functional_Try__ifSuccess__gqlv_action_params {
- valueConsumer: org_apache_causeway_commons_functional_Try__ifSuccess__valueConsumer__gqlv_action_parameter
-}
-
-type org_apache_causeway_commons_functional_Try__ifSuccess__valueConsumer__gqlv_action_parameter {
- disabled(valueConsumer: org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input): String
- hidden: Boolean
- validity: String
-}
-
-type org_apache_causeway_commons_functional_Try__mapEmptyToFailure__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent: org_apache_causeway_commons_functional_Try
- validate: String
-}
-
-type org_apache_causeway_commons_functional_Try__mapFailureToSuccess__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent(recoveryMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input!): org_apache_causeway_commons_functional_Try
- params: org_apache_causeway_commons_functional_Try__mapFailureToSuccess__gqlv_action_params
- validate(recoveryMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
-}
-
-type org_apache_causeway_commons_functional_Try__mapFailureToSuccess__gqlv_action_params {
- recoveryMapper: org_apache_causeway_commons_functional_Try__mapFailureToSuccess__recoveryMapper__gqlv_action_parameter
-}
-
-type org_apache_causeway_commons_functional_Try__mapFailureToSuccess__recoveryMapper__gqlv_action_parameter {
- disabled(recoveryMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
- hidden: Boolean
- validity: String
-}
-
-type org_apache_causeway_commons_functional_Try__mapFailure__failureMapper__gqlv_action_parameter {
- disabled(failureMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
- hidden: Boolean
- validity: String
-}
-
-type org_apache_causeway_commons_functional_Try__mapFailure__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent(failureMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input!): org_apache_causeway_commons_functional_Try
- params: org_apache_causeway_commons_functional_Try__mapFailure__gqlv_action_params
- validate(failureMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
-}
-
-type org_apache_causeway_commons_functional_Try__mapFailure__gqlv_action_params {
- failureMapper: org_apache_causeway_commons_functional_Try__mapFailure__failureMapper__gqlv_action_parameter
-}
-
-type org_apache_causeway_commons_functional_Try__mapSuccessAsNullable__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent(successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input!): org_apache_causeway_commons_functional_Try
- params: org_apache_causeway_commons_functional_Try__mapSuccessAsNullable__gqlv_action_params
- validate(successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
-}
-
-type org_apache_causeway_commons_functional_Try__mapSuccessAsNullable__gqlv_action_params {
- successMapper: org_apache_causeway_commons_functional_Try__mapSuccessAsNullable__successMapper__gqlv_action_parameter
-}
-
-type org_apache_causeway_commons_functional_Try__mapSuccessAsNullable__successMapper__gqlv_action_parameter {
- disabled(successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
- hidden: Boolean
- validity: String
-}
-
-type org_apache_causeway_commons_functional_Try__mapSuccessWhenPresent__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent(successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input!): org_apache_causeway_commons_functional_Try
- params: org_apache_causeway_commons_functional_Try__mapSuccessWhenPresent__gqlv_action_params
- validate(successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
-}
-
-type org_apache_causeway_commons_functional_Try__mapSuccessWhenPresent__gqlv_action_params {
- successMapper: org_apache_causeway_commons_functional_Try__mapSuccessWhenPresent__successMapper__gqlv_action_parameter
-}
-
-type org_apache_causeway_commons_functional_Try__mapSuccessWhenPresent__successMapper__gqlv_action_parameter {
- disabled(successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
- hidden: Boolean
- validity: String
-}
-
-type org_apache_causeway_commons_functional_Try__mapSuccess__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent(successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input!): org_apache_causeway_commons_functional_Try
- params: org_apache_causeway_commons_functional_Try__mapSuccess__gqlv_action_params
- validate(successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
-}
-
-type org_apache_causeway_commons_functional_Try__mapSuccess__gqlv_action_params {
- successMapper: org_apache_causeway_commons_functional_Try__mapSuccess__successMapper__gqlv_action_parameter
-}
-
-type org_apache_causeway_commons_functional_Try__mapSuccess__successMapper__gqlv_action_parameter {
- disabled(successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
- hidden: Boolean
- validity: String
-}
-
-type org_apache_causeway_commons_functional_Try__mapToEither__failureMapper__gqlv_action_parameter {
- disabled(failureMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
- hidden: Boolean
- validity: String
-}
-
-type org_apache_causeway_commons_functional_Try__mapToEither__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent(failureMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input!, successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input!): org_apache_causeway_commons_functional_Either
- params: org_apache_causeway_commons_functional_Try__mapToEither__gqlv_action_params
- validate(failureMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input, successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
-}
-
-type org_apache_causeway_commons_functional_Try__mapToEither__gqlv_action_params {
- failureMapper: org_apache_causeway_commons_functional_Try__mapToEither__failureMapper__gqlv_action_parameter
- successMapper: org_apache_causeway_commons_functional_Try__mapToEither__successMapper__gqlv_action_parameter
-}
-
-type org_apache_causeway_commons_functional_Try__mapToEither__successMapper__gqlv_action_parameter {
- disabled(failureMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input, successMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): String
- hidden(failureMapper: org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input): Boolean
- validity: String
-}
-
-type org_apache_causeway_commons_functional_Try__orCall__fallback__gqlv_action_parameter {
- disabled(fallback: java_util_concurrent_Callable__gqlv_input): String
- hidden: Boolean
- validity: String
-}
-
-type org_apache_causeway_commons_functional_Try__orCall__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent(fallback: java_util_concurrent_Callable__gqlv_input!): org_apache_causeway_commons_functional_Try
- params: org_apache_causeway_commons_functional_Try__orCall__gqlv_action_params
- validate(fallback: java_util_concurrent_Callable__gqlv_input): String
-}
-
-type org_apache_causeway_commons_functional_Try__orCall__gqlv_action_params {
- fallback: org_apache_causeway_commons_functional_Try__orCall__fallback__gqlv_action_parameter
-}
-
-type org_apache_causeway_commons_functional_Try__success__gqlv_property {
- disabled: String
- get: Boolean!
- hidden: Boolean
- set(success: Boolean!): org_apache_causeway_commons_functional_Try
- validate(success: Boolean): String
-}
-
-type org_apache_causeway_commons_functional_Try__thenCall__callable__gqlv_action_parameter {
- disabled(callable: java_util_concurrent_Callable__gqlv_input): String
- hidden: Boolean
- validity: String
-}
-
-type org_apache_causeway_commons_functional_Try__thenCall__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent(callable: java_util_concurrent_Callable__gqlv_input!): org_apache_causeway_commons_functional_Try
- params: org_apache_causeway_commons_functional_Try__thenCall__gqlv_action_params
- validate(callable: java_util_concurrent_Callable__gqlv_input): String
-}
-
-type org_apache_causeway_commons_functional_Try__thenCall__gqlv_action_params {
- callable: org_apache_causeway_commons_functional_Try__thenCall__callable__gqlv_action_parameter
-}
-
-type org_apache_causeway_commons_functional_Try__thenRun__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent(runnable: org_apache_causeway_commons_functional_ThrowingRunnable__gqlv_input!): org_apache_causeway_commons_functional_Try
- params: org_apache_causeway_commons_functional_Try__thenRun__gqlv_action_params
- validate(runnable: org_apache_causeway_commons_functional_ThrowingRunnable__gqlv_input): String
-}
-
-type org_apache_causeway_commons_functional_Try__thenRun__gqlv_action_params {
- runnable: org_apache_causeway_commons_functional_Try__thenRun__runnable__gqlv_action_parameter
-}
-
-type org_apache_causeway_commons_functional_Try__thenRun__runnable__gqlv_action_parameter {
- disabled(runnable: org_apache_causeway_commons_functional_ThrowingRunnable__gqlv_input): String
- hidden: Boolean
- validity: String
-}
-
-type org_apache_causeway_commons_functional_Try__then__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent(next: java_util_concurrent_Callable__gqlv_input!): org_apache_causeway_commons_functional_Try
- params: org_apache_causeway_commons_functional_Try__then__gqlv_action_params
- validate(next: java_util_concurrent_Callable__gqlv_input): String
-}
-
-type org_apache_causeway_commons_functional_Try__then__gqlv_action_params {
- next: org_apache_causeway_commons_functional_Try__then__next__gqlv_action_parameter
-}
-
-type org_apache_causeway_commons_functional_Try__then__next__gqlv_action_parameter {
- disabled(next: java_util_concurrent_Callable__gqlv_input): String
- hidden: Boolean
- validity: String
-}
-
-type org_apache_causeway_commons_functional_Try__value__gqlv_property {
- disabled: String
- hidden: Boolean
- set(value: String!): org_apache_causeway_commons_functional_Try
- validate(value: String): String
-}
-
-type org_apache_causeway_core_metamodel_inspect_model_MMNode {
- _gqlv_meta: org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_meta
- childNodes: org_apache_causeway_core_metamodel_inspect_model_MMNode__childNodes__gqlv_collection
- parentNode: org_apache_causeway_core_metamodel_inspect_model_MMNode__parentNode__gqlv_property
-}
-
-type org_apache_causeway_core_metamodel_inspect_model_MMNode__childNodes__gqlv_collection {
- disabled: String
- hidden: Boolean
-}
-
-type org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_meta {
- id: String!
- logicalTypeName: String!
-}
-
-type org_apache_causeway_core_metamodel_inspect_model_MMNode__parentNode__gqlv_property {
- disabled: String
- hidden: Boolean
- set(parentNode: org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input!): org_apache_causeway_core_metamodel_inspect_model_MMNode
- validate(parentNode: org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input): String
-}
-
-type org_apache_causeway_core_metamodel_inspect_model_MemberNode {
- _gqlv_meta: org_apache_causeway_core_metamodel_inspect_model_MemberNode__gqlv_meta
- childNodes: org_apache_causeway_core_metamodel_inspect_model_MemberNode__childNodes__gqlv_collection
- mixedIn: org_apache_causeway_core_metamodel_inspect_model_MemberNode__mixedIn__gqlv_property
- parentNode: org_apache_causeway_core_metamodel_inspect_model_MemberNode__parentNode__gqlv_property
- streamChildNodes: org_apache_causeway_core_metamodel_inspect_model_MemberNode__streamChildNodes__gqlv_action
-}
-
-type org_apache_causeway_core_metamodel_inspect_model_MemberNode__childNodes__gqlv_collection {
- disabled: String
- hidden: Boolean
-}
-
-type org_apache_causeway_core_metamodel_inspect_model_MemberNode__gqlv_meta {
- id: String!
- logicalTypeName: String!
-}
-
-type org_apache_causeway_core_metamodel_inspect_model_MemberNode__mixedIn__gqlv_property {
- disabled: String
- get: Boolean!
- hidden: Boolean
- set(mixedIn: Boolean!): org_apache_causeway_core_metamodel_inspect_model_MemberNode
- validate(mixedIn: Boolean): String
-}
-
-type org_apache_causeway_core_metamodel_inspect_model_MemberNode__parentNode__gqlv_property {
- disabled: String
- get: causeway_applib_TypeNode!
- hidden: Boolean
- set(parentNode: causeway_applib_TypeNode__gqlv_input!): org_apache_causeway_core_metamodel_inspect_model_MemberNode
- validate(parentNode: causeway_applib_TypeNode__gqlv_input): String
-}
-
-type org_apache_causeway_core_metamodel_inspect_model_MemberNode__streamChildNodes__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent: java_util_stream_Stream
- validate: String
-}
-
-type org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript {
- _gqlv_meta: org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__gqlv_meta
- friendlyName: org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__friendlyName__gqlv_property
- qualifiedName: org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__qualifiedName__gqlv_property
-}
-
-type org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__friendlyName__gqlv_property {
- disabled: String
- get: String!
- hidden: Boolean
- set(friendlyName: String!): org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript
- validate(friendlyName: String): String
-}
-
-type org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__gqlv_meta {
- id: String!
- logicalTypeName: String!
-}
-
-type org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__qualifiedName__gqlv_property {
- disabled: String
- get: String!
- hidden: Boolean
- set(qualifiedName: String!): org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript
- validate(qualifiedName: String): String
-}
-
-type university_admin_AdminMenu {
- actionWithDisabledParam: university_admin_AdminMenu__actionWithDisabledParam__gqlv_action
- actionWithHiddenParam: university_admin_AdminMenu__actionWithHiddenParam__gqlv_action
- adminAction: university_admin_AdminMenu__adminAction__gqlv_action
- otherAdminAction: university_admin_AdminMenu__otherAdminAction__gqlv_action
-}
-
-type university_admin_AdminMenu__actionWithDisabledParam__firstParam__gqlv_action_parameter {
- disabled(firstParam: String): String
- hidden: Boolean
- validity: String
-}
-
-type university_admin_AdminMenu__actionWithDisabledParam__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent(firstParam: String!, secondParam: String!, thirdParameter: String!): String
- params: university_admin_AdminMenu__actionWithDisabledParam__gqlv_action_params
- validate(firstParam: String, secondParam: String, thirdParameter: String): String
-}
-
-type university_admin_AdminMenu__actionWithDisabledParam__gqlv_action_params {
- firstParam: university_admin_AdminMenu__actionWithDisabledParam__firstParam__gqlv_action_parameter
- secondParam: university_admin_AdminMenu__actionWithDisabledParam__secondParam__gqlv_action_parameter
- thirdParameter: university_admin_AdminMenu__actionWithDisabledParam__thirdParameter__gqlv_action_parameter
-}
-
-type university_admin_AdminMenu__actionWithDisabledParam__secondParam__gqlv_action_parameter {
- disabled(firstParam: String, secondParam: String): String
- hidden(firstParam: String): Boolean
- validity: String
-}
-
-type university_admin_AdminMenu__actionWithDisabledParam__thirdParameter__gqlv_action_parameter {
- disabled(firstParam: String, secondParam: String, thirdParameter: String): String
- hidden(firstParam: String, secondParam: String): Boolean
- validity: String
-}
-
-type university_admin_AdminMenu__actionWithHiddenParam__firstParam__gqlv_action_parameter {
- disabled(firstParam: String): String
- hidden: Boolean
- validity: String
-}
-
-type university_admin_AdminMenu__actionWithHiddenParam__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent(firstParam: String!, secondParam: String!): String
- params: university_admin_AdminMenu__actionWithHiddenParam__gqlv_action_params
- validate(firstParam: String, secondParam: String): String
-}
-
-type university_admin_AdminMenu__actionWithHiddenParam__gqlv_action_params {
- firstParam: university_admin_AdminMenu__actionWithHiddenParam__firstParam__gqlv_action_parameter
- secondParam: university_admin_AdminMenu__actionWithHiddenParam__secondParam__gqlv_action_parameter
-}
-
-type university_admin_AdminMenu__actionWithHiddenParam__secondParam__gqlv_action_parameter {
- disabled(firstParam: String, secondParam: String): String
- hidden(firstParam: String): Boolean
- validity: String
-}
-
-type university_admin_AdminMenu__adminAction__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent: String
- validate: String
-}
-
-type university_admin_AdminMenu__otherAdminAction__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent: String
- validate: String
-}
-
-type university_calc_Calculator {
- addBigDecimals: university_calc_Calculator__addBigDecimals__gqlv_action
- addBigIntegers: university_calc_Calculator__addBigIntegers__gqlv_action
- addByteWrappers: university_calc_Calculator__addByteWrappers__gqlv_action
- addBytes: university_calc_Calculator__addBytes__gqlv_action
- addDoubleWrappers: university_calc_Calculator__addDoubleWrappers__gqlv_action
- addDoubles: university_calc_Calculator__addDoubles__gqlv_action
- addFloatWrappers: university_calc_Calculator__addFloatWrappers__gqlv_action
- addFloats: university_calc_Calculator__addFloats__gqlv_action
- addIntegerWrappers: university_calc_Calculator__addIntegerWrappers__gqlv_action
- addIntegers: university_calc_Calculator__addIntegers__gqlv_action
- addShortWrappers: university_calc_Calculator__addShortWrappers__gqlv_action
- addShorts: university_calc_Calculator__addShorts__gqlv_action
- and: university_calc_Calculator__and__gqlv_action
- concat: university_calc_Calculator__concat__gqlv_action
- nextMonth: university_calc_Calculator__nextMonth__gqlv_action
- not: university_calc_Calculator__not__gqlv_action
- or: university_calc_Calculator__or__gqlv_action
- plusDays: university_calc_Calculator__plusDays__gqlv_action
- plusJodaDays: university_calc_Calculator__plusJodaDays__gqlv_action
-}
-
-type university_calc_Calculator__addBigDecimals__gqlv_action {
- disabled: String
- hidden: Boolean
- invoke(x: Float!, y: Float): Float
- params: university_calc_Calculator__addBigDecimals__gqlv_action_params
- validate(x: Float, y: Float): String
-}
-
-type university_calc_Calculator__addBigDecimals__gqlv_action_params {
- x: university_calc_Calculator__addBigDecimals__x__gqlv_action_parameter
- y: university_calc_Calculator__addBigDecimals__y__gqlv_action_parameter
-}
-
-type university_calc_Calculator__addBigDecimals__x__gqlv_action_parameter {
- disabled(x: Float): String
- hidden: Boolean
- validity: String
-}
-
-type university_calc_Calculator__addBigDecimals__y__gqlv_action_parameter {
- disabled(x: Float, y: Float): String
- hidden(x: Float): Boolean
- validity: String
-}
-
-type university_calc_Calculator__addBigIntegers__gqlv_action {
- disabled: String
- hidden: Boolean
- invoke(x: Int!, y: Int): Int
- params: university_calc_Calculator__addBigIntegers__gqlv_action_params
- validate(x: Int, y: Int): String
-}
-
-type university_calc_Calculator__addBigIntegers__gqlv_action_params {
- x: university_calc_Calculator__addBigIntegers__x__gqlv_action_parameter
- y: university_calc_Calculator__addBigIntegers__y__gqlv_action_parameter
-}
-
-type university_calc_Calculator__addBigIntegers__x__gqlv_action_parameter {
- disabled(x: Int): String
- hidden: Boolean
- validity: String
-}
-
-type university_calc_Calculator__addBigIntegers__y__gqlv_action_parameter {
- disabled(x: Int, y: Int): String
- hidden(x: Int): Boolean
- validity: String
-}
-
-type university_calc_Calculator__addByteWrappers__gqlv_action {
- disabled: String
- hidden: Boolean
- invoke(x: String!, y: String): Int
- params: university_calc_Calculator__addByteWrappers__gqlv_action_params
- validate(x: String, y: String): String
-}
-
-type university_calc_Calculator__addByteWrappers__gqlv_action_params {
- x: university_calc_Calculator__addByteWrappers__x__gqlv_action_parameter
- y: university_calc_Calculator__addByteWrappers__y__gqlv_action_parameter
-}
-
-type university_calc_Calculator__addByteWrappers__x__gqlv_action_parameter {
- disabled(x: String): String
- hidden: Boolean
- validity: String
-}
-
-type university_calc_Calculator__addByteWrappers__y__gqlv_action_parameter {
- disabled(x: String, y: String): String
- hidden(x: String): Boolean
- validity: String
-}
-
-type university_calc_Calculator__addBytes__gqlv_action {
- disabled: String
- hidden: Boolean
- invoke(x: String!, y: String!): String
- params: university_calc_Calculator__addBytes__gqlv_action_params
- validate(x: String, y: String): String
-}
-
-type university_calc_Calculator__addBytes__gqlv_action_params {
- x: university_calc_Calculator__addBytes__x__gqlv_action_parameter
- y: university_calc_Calculator__addBytes__y__gqlv_action_parameter
-}
-
-type university_calc_Calculator__addBytes__x__gqlv_action_parameter {
- disabled(x: String): String
- hidden: Boolean
- validity: String
-}
-
-type university_calc_Calculator__addBytes__y__gqlv_action_parameter {
- disabled(x: String, y: String): String
- hidden(x: String): Boolean
- validity: String
-}
-
-type university_calc_Calculator__addDoubleWrappers__gqlv_action {
- disabled: String
- hidden: Boolean
- invoke(x: Float!, y: Float): Float
- params: university_calc_Calculator__addDoubleWrappers__gqlv_action_params
- validate(x: Float, y: Float): String
-}
-
-type university_calc_Calculator__addDoubleWrappers__gqlv_action_params {
- x: university_calc_Calculator__addDoubleWrappers__x__gqlv_action_parameter
- y: university_calc_Calculator__addDoubleWrappers__y__gqlv_action_parameter
-}
-
-type university_calc_Calculator__addDoubleWrappers__x__gqlv_action_parameter {
- disabled(x: Float): String
- hidden: Boolean
- validity: String
-}
-
-type university_calc_Calculator__addDoubleWrappers__y__gqlv_action_parameter {
- disabled(x: Float, y: Float): String
- hidden(x: Float): Boolean
- validity: String
-}
-
-type university_calc_Calculator__addDoubles__gqlv_action {
- disabled: String
- hidden: Boolean
- invoke(x: Float!, y: Float!): Float
- params: university_calc_Calculator__addDoubles__gqlv_action_params
- validate(x: Float, y: Float): String
-}
-
-type university_calc_Calculator__addDoubles__gqlv_action_params {
- x: university_calc_Calculator__addDoubles__x__gqlv_action_parameter
- y: university_calc_Calculator__addDoubles__y__gqlv_action_parameter
-}
-
-type university_calc_Calculator__addDoubles__x__gqlv_action_parameter {
- disabled(x: Float): String
- hidden: Boolean
- validity: String
-}
-
-type university_calc_Calculator__addDoubles__y__gqlv_action_parameter {
- disabled(x: Float, y: Float): String
- hidden(x: Float): Boolean
- validity: String
-}
-
-type university_calc_Calculator__addFloatWrappers__gqlv_action {
- disabled: String
- hidden: Boolean
- invoke(x: Float!, y: Float): Float
- params: university_calc_Calculator__addFloatWrappers__gqlv_action_params
- validate(x: Float, y: Float): String
-}
-
-type university_calc_Calculator__addFloatWrappers__gqlv_action_params {
- x: university_calc_Calculator__addFloatWrappers__x__gqlv_action_parameter
- y: university_calc_Calculator__addFloatWrappers__y__gqlv_action_parameter
-}
-
-type university_calc_Calculator__addFloatWrappers__x__gqlv_action_parameter {
- disabled(x: Float): String
- hidden: Boolean
- validity: String
-}
-
-type university_calc_Calculator__addFloatWrappers__y__gqlv_action_parameter {
- disabled(x: Float, y: Float): String
- hidden(x: Float): Boolean
- validity: String
-}
-
-type university_calc_Calculator__addFloats__gqlv_action {
- disabled: String
- hidden: Boolean
- invoke(x: Float!, y: Float!): Float
- params: university_calc_Calculator__addFloats__gqlv_action_params
- validate(x: Float, y: Float): String
-}
-
-type university_calc_Calculator__addFloats__gqlv_action_params {
- x: university_calc_Calculator__addFloats__x__gqlv_action_parameter
- y: university_calc_Calculator__addFloats__y__gqlv_action_parameter
-}
-
-type university_calc_Calculator__addFloats__x__gqlv_action_parameter {
- disabled(x: Float): String
- hidden: Boolean
- validity: String
-}
-
-type university_calc_Calculator__addFloats__y__gqlv_action_parameter {
- disabled(x: Float, y: Float): String
- hidden(x: Float): Boolean
- validity: String
-}
-
-type university_calc_Calculator__addIntegerWrappers__gqlv_action {
- disabled: String
- hidden: Boolean
- invoke(x: Int!, y: Int): Int
- params: university_calc_Calculator__addIntegerWrappers__gqlv_action_params
- validate(x: Int, y: Int): String
-}
-
-type university_calc_Calculator__addIntegerWrappers__gqlv_action_params {
- x: university_calc_Calculator__addIntegerWrappers__x__gqlv_action_parameter
- y: university_calc_Calculator__addIntegerWrappers__y__gqlv_action_parameter
-}
-
-type university_calc_Calculator__addIntegerWrappers__x__gqlv_action_parameter {
- disabled(x: Int): String
- hidden: Boolean
- validity: String
-}
-
-type university_calc_Calculator__addIntegerWrappers__y__gqlv_action_parameter {
- disabled(x: Int, y: Int): String
- hidden(x: Int): Boolean
- validity: String
-}
-
-type university_calc_Calculator__addIntegers__gqlv_action {
- disabled: String
- hidden: Boolean
- invoke(x: Int!, y: Int!): Int
- params: university_calc_Calculator__addIntegers__gqlv_action_params
- validate(x: Int, y: Int): String
-}
-
-type university_calc_Calculator__addIntegers__gqlv_action_params {
- x: university_calc_Calculator__addIntegers__x__gqlv_action_parameter
- y: university_calc_Calculator__addIntegers__y__gqlv_action_parameter
-}
-
-type university_calc_Calculator__addIntegers__x__gqlv_action_parameter {
- disabled(x: Int): String
- hidden: Boolean
- validity: String
-}
-
-type university_calc_Calculator__addIntegers__y__gqlv_action_parameter {
- disabled(x: Int, y: Int): String
- hidden(x: Int): Boolean
- validity: String
-}
-
-type university_calc_Calculator__addShortWrappers__gqlv_action {
- disabled: String
- hidden: Boolean
- invoke(x: Int!, y: Int): Int
- params: university_calc_Calculator__addShortWrappers__gqlv_action_params
- validate(x: Int, y: Int): String
-}
-
-type university_calc_Calculator__addShortWrappers__gqlv_action_params {
- x: university_calc_Calculator__addShortWrappers__x__gqlv_action_parameter
- y: university_calc_Calculator__addShortWrappers__y__gqlv_action_parameter
+type university_calc_Calculator__addShortWrappers__gqlv_action_params {
+ x: university_calc_Calculator__addShortWrappers__x__gqlv_action_parameter
+ y: university_calc_Calculator__addShortWrappers__y__gqlv_action_parameter
}
type university_calc_Calculator__addShortWrappers__x__gqlv_action_parameter {
@@ -2711,99 +1732,16 @@ type university_calc_Calculator__plusJodaDays__numDays__gqlv_action_parameter {
type university_dept_Department {
_gqlv_meta: university_dept_Department__gqlv_meta
- addStaffMember: university_dept_Department__addStaffMember__gqlv_action
- addStaffMembers: university_dept_Department__addStaffMembers__gqlv_action
- changeDeptHead: university_dept_Department__changeDeptHead__gqlv_action
- changeName: university_dept_Department__changeName__gqlv_action
deptHead: university_dept_Department__deptHead__gqlv_property
name: university_dept_Department__name__gqlv_property
- removeStaffMember: university_dept_Department__removeStaffMember__gqlv_action
staffMembers: university_dept_Department__staffMembers__gqlv_collection
}
-type university_dept_Department__addStaffMember__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeIdempotent(staffMember: university_dept_StaffMember__gqlv_input!): university_dept_Department
- params: university_dept_Department__addStaffMember__gqlv_action_params
- validate(staffMember: university_dept_StaffMember__gqlv_input): String
-}
-
-type university_dept_Department__addStaffMember__gqlv_action_params {
- staffMember: university_dept_Department__addStaffMember__staffMember__gqlv_action_parameter
-}
-
-type university_dept_Department__addStaffMember__staffMember__gqlv_action_parameter {
- autoComplete(search: String!): [university_dept_StaffMember]
- disabled(staffMember: university_dept_StaffMember__gqlv_input): String
- hidden: Boolean
- validity: String
-}
-
-type university_dept_Department__addStaffMembers__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeIdempotent(staffMembers: [university_dept_StaffMember__gqlv_input]): university_dept_Department
- params: university_dept_Department__addStaffMembers__gqlv_action_params
- validate(staffMembers: [university_dept_StaffMember__gqlv_input]): String
-}
-
-type university_dept_Department__addStaffMembers__gqlv_action_params {
- staffMembers: university_dept_Department__addStaffMembers__staffMembers__gqlv_action_parameter
-}
-
-type university_dept_Department__addStaffMembers__staffMembers__gqlv_action_parameter {
- choices: [university_dept_StaffMember]
- disabled(staffMembers: [university_dept_StaffMember__gqlv_input]): String
- hidden: Boolean
- validity: String
-}
-
-type university_dept_Department__changeDeptHead__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeIdempotent(newDeptHead: university_dept_DeptHead__gqlv_input!): university_dept_Department
- params: university_dept_Department__changeDeptHead__gqlv_action_params
- validate(newDeptHead: university_dept_DeptHead__gqlv_input): String
-}
-
-type university_dept_Department__changeDeptHead__gqlv_action_params {
- newDeptHead: university_dept_Department__changeDeptHead__newDeptHead__gqlv_action_parameter
-}
-
-type university_dept_Department__changeDeptHead__newDeptHead__gqlv_action_parameter {
- autoComplete(search: String!): [university_dept_DeptHead]
- default: university_dept_DeptHead
- disabled(newDeptHead: university_dept_DeptHead__gqlv_input): String
- hidden: Boolean
- validity: String
-}
-
-type university_dept_Department__changeName__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeIdempotent(newName: String!): university_dept_Department
- params: university_dept_Department__changeName__gqlv_action_params
- validate(newName: String): String
-}
-
-type university_dept_Department__changeName__gqlv_action_params {
- newName: university_dept_Department__changeName__newName__gqlv_action_parameter
-}
-
-type university_dept_Department__changeName__newName__gqlv_action_parameter {
- default: String
- disabled(newName: String): String
- hidden: Boolean
- validity: String
-}
-
type university_dept_Department__deptHead__gqlv_property {
autoComplete(search: String!): [university_dept_DeptHead]
disabled: String
get: university_dept_DeptHead
hidden: Boolean
- set(deptHead: university_dept_DeptHead__gqlv_input): university_dept_Department
validate(deptHead: university_dept_DeptHead__gqlv_input): String
}
@@ -2817,29 +1755,9 @@ type university_dept_Department__name__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(name: String!): university_dept_Department
validate(name: String): String
}
-type university_dept_Department__removeStaffMember__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeIdempotent(staffMember: university_dept_StaffMember__gqlv_input!): university_dept_Department
- params: university_dept_Department__removeStaffMember__gqlv_action_params
- validate(staffMember: university_dept_StaffMember__gqlv_input): String
-}
-
-type university_dept_Department__removeStaffMember__gqlv_action_params {
- staffMember: university_dept_Department__removeStaffMember__staffMember__gqlv_action_parameter
-}
-
-type university_dept_Department__removeStaffMember__staffMember__gqlv_action_parameter {
- choices: [university_dept_StaffMember]
- disabled(staffMember: university_dept_StaffMember__gqlv_input): String
- hidden: Boolean
- validity: String
-}
-
type university_dept_Department__staffMembers__gqlv_collection {
disabled: String
get: [university_dept_StaffMember]
@@ -2847,37 +1765,10 @@ type university_dept_Department__staffMembers__gqlv_collection {
}
type university_dept_Departments {
- createDepartment: university_dept_Departments__createDepartment__gqlv_action
findAllDepartments: university_dept_Departments__findAllDepartments__gqlv_action
findDepartmentByName: university_dept_Departments__findDepartmentByName__gqlv_action
}
-type university_dept_Departments__createDepartment__deptHead__gqlv_action_parameter {
- autoComplete(name: String, search: String!): [university_dept_DeptHead]
- disabled(deptHead: university_dept_DeptHead__gqlv_input, name: String): String
- hidden(name: String): Boolean
- validity: String
-}
-
-type university_dept_Departments__createDepartment__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent(deptHead: university_dept_DeptHead__gqlv_input, name: String!): university_dept_Department
- params: university_dept_Departments__createDepartment__gqlv_action_params
- validate(deptHead: university_dept_DeptHead__gqlv_input, name: String): String
-}
-
-type university_dept_Departments__createDepartment__gqlv_action_params {
- deptHead: university_dept_Departments__createDepartment__deptHead__gqlv_action_parameter
- name: university_dept_Departments__createDepartment__name__gqlv_action_parameter
-}
-
-type university_dept_Departments__createDepartment__name__gqlv_action_parameter {
- disabled(name: String): String
- hidden: Boolean
- validity: String
-}
-
type university_dept_Departments__findAllDepartments__gqlv_action {
disabled: String
hidden: Boolean
@@ -2905,56 +1796,15 @@ type university_dept_Departments__findDepartmentByName__name__gqlv_action_parame
type university_dept_DeptHead {
_gqlv_meta: university_dept_DeptHead__gqlv_meta
- changeDepartment: university_dept_DeptHead__changeDepartment__gqlv_action
- changeName: university_dept_DeptHead__changeName__gqlv_action
department: university_dept_DeptHead__department__gqlv_property
name: university_dept_DeptHead__name__gqlv_property
}
-type university_dept_DeptHead__changeDepartment__department__gqlv_action_parameter {
- choices: [university_dept_Department]
- disabled(department: university_dept_Department__gqlv_input): String
- hidden: Boolean
- validity: String
-}
-
-type university_dept_DeptHead__changeDepartment__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeIdempotent(department: university_dept_Department__gqlv_input!): university_dept_DeptHead
- params: university_dept_DeptHead__changeDepartment__gqlv_action_params
- validate(department: university_dept_Department__gqlv_input): String
-}
-
-type university_dept_DeptHead__changeDepartment__gqlv_action_params {
- department: university_dept_DeptHead__changeDepartment__department__gqlv_action_parameter
-}
-
-type university_dept_DeptHead__changeName__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeIdempotent(newName: String!): university_dept_DeptHead
- params: university_dept_DeptHead__changeName__gqlv_action_params
- validate(newName: String): String
-}
-
-type university_dept_DeptHead__changeName__gqlv_action_params {
- newName: university_dept_DeptHead__changeName__newName__gqlv_action_parameter
-}
-
-type university_dept_DeptHead__changeName__newName__gqlv_action_parameter {
- default: String
- disabled(newName: String): String
- hidden: Boolean
- validity: String
-}
-
type university_dept_DeptHead__department__gqlv_property {
choices(department: university_dept_Department__gqlv_input): [university_dept_Department]
disabled: String
get: university_dept_Department
hidden: Boolean
- set(department: university_dept_Department__gqlv_input): university_dept_DeptHead
validate(department: university_dept_Department__gqlv_input): String
}
@@ -2968,7 +1818,6 @@ type university_dept_DeptHead__name__gqlv_property {
disabled: String
get: String
hidden: Boolean
- set(name: String): university_dept_DeptHead
validate(name: String): String
}
@@ -3003,7 +1852,6 @@ type university_dept_DeptHeads__findHeadByName__name__gqlv_action_parameter {
}
type university_dept_Staff {
- createStaffMember: university_dept_Staff__createStaffMember__gqlv_action
findAllStaffMembers: university_dept_Staff__findAllStaffMembers__gqlv_action
findStaffMemberByName: university_dept_Staff__findStaffMemberByName__gqlv_action
}
@@ -3021,7 +1869,6 @@ type university_dept_StaffMember__department__gqlv_property {
disabled: String
get: university_dept_Department
hidden: Boolean
- set(department: university_dept_Department__gqlv_input): university_dept_StaffMember
validate(department: university_dept_Department__gqlv_input): String
}
@@ -3036,7 +1883,6 @@ type university_dept_StaffMember__grade__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(grade: String!): university_dept_StaffMember
validate(grade: String): String
}
@@ -3044,7 +1890,6 @@ type university_dept_StaffMember__name__gqlv_property {
disabled: String
get: String!
hidden: Boolean
- set(name: String!): university_dept_StaffMember
validate(name: String): String
}
@@ -3052,36 +1897,9 @@ type university_dept_StaffMember__photo__gqlv_property {
disabled: String
get: String
hidden: Boolean
- set(photo: String): university_dept_StaffMember
validate(photo: String): String
}
-type university_dept_Staff__createStaffMember__department__gqlv_action_parameter {
- choices(name: String): [university_dept_Department]
- disabled(department: university_dept_Department__gqlv_input, name: String): String
- hidden(name: String): Boolean
- validity: String
-}
-
-type university_dept_Staff__createStaffMember__gqlv_action {
- disabled: String
- hidden: Boolean
- invokeNonIdempotent(department: university_dept_Department__gqlv_input!, name: String!): university_dept_StaffMember
- params: university_dept_Staff__createStaffMember__gqlv_action_params
- validate(department: university_dept_Department__gqlv_input, name: String): String
-}
-
-type university_dept_Staff__createStaffMember__gqlv_action_params {
- department: university_dept_Staff__createStaffMember__department__gqlv_action_parameter
- name: university_dept_Staff__createStaffMember__name__gqlv_action_parameter
-}
-
-type university_dept_Staff__createStaffMember__name__gqlv_action_parameter {
- disabled(name: String): String
- hidden: Boolean
- validity: String
-}
-
type university_dept_Staff__findAllStaffMembers__gqlv_action {
disabled: String
hidden: Boolean
@@ -3231,30 +2049,6 @@ input java_util_stream_Stream__gqlv_input {
id: ID!
}
-input org_apache_causeway_commons_functional_Either__gqlv_input {
- id: ID!
-}
-
-input org_apache_causeway_commons_functional_Railway__gqlv_input {
- id: ID!
-}
-
-input org_apache_causeway_commons_functional_ThrowingConsumer__gqlv_input {
- id: ID!
-}
-
-input org_apache_causeway_commons_functional_ThrowingFunction__gqlv_input {
- id: ID!
-}
-
-input org_apache_causeway_commons_functional_ThrowingRunnable__gqlv_input {
- id: ID!
-}
-
-input org_apache_causeway_commons_functional_Try__gqlv_input {
- id: ID!
-}
-
input org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_input {
id: ID!
}
diff --git a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
index 62a00b5273..1d8930e97c 100644
--- a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
+++ b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
@@ -23,6 +23,7 @@ import java.util.Comparator;
import javax.annotation.PostConstruct;
import javax.inject.Inject;
+import org.apache.causeway.commons.functional.Either;
import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
import org.apache.causeway.viewer.graphql.viewer.toplevel.GqlvTopLevelMutation;
@@ -103,7 +104,7 @@ public class GraphQlSourceForCauseway implements GraphQlSource {
}
val codeRegistryBuilder = GraphQLCodeRegistry.newCodeRegistry();
- val context = new Context(codeRegistryBuilder, bookmarkService, specificationLoader, typeMapper, causewayConfiguration, causewaySystemEnvironment);
+ val context = new Context(codeRegistryBuilder, bookmarkService, specificationLoader, typeMapper, serviceRegistry, causewayConfiguration, causewaySystemEnvironment);
// add to the top-level query type and (dependent on configuration) the top-level mutation type also
val topLevelQuery = new GqlvTopLevelQuery(serviceRegistry, codeRegistryBuilder);
@@ -114,6 +115,7 @@ public class GraphQlSourceForCauseway implements GraphQlSource {
val objectSpecifications = specificationLoader.snapshotSpecifications()
+ .filter(x -> x.getCorrespondingClass().getPackage() != Either.class.getPackage()) // exclude the org.apache_causeway.commons.functional
.distinct((a, b) -> a.getLogicalTypeName().equals(b.getLogicalTypeName()))
.filter(x -> x.isEntityOrViewModelOrAbstract() || x.getBeanSort().isManagedBeanContributing())
.sorted(Comparator.comparing(HasLogicalType::getLogicalTypeName))
@@ -139,7 +141,7 @@ public class GraphQlSourceForCauseway implements GraphQlSource {
});
topLevelMutation.buildMutationType();
- topLevelMutation.addFetchers();
+ topLevelMutation.addDataFetchers();
}
// add remaining domain objects
diff --git a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java
index 9442da2755..00db413aee 100644
--- a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java
+++ b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java
@@ -1,14 +1,12 @@
package org.apache.causeway.viewer.graphql.viewer.toplevel;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.stream.Collectors;
+import java.util.ArrayList;
+import java.util.List;
import graphql.schema.DataFetchingEnvironment;
import graphql.schema.FieldCoordinates;
import graphql.schema.GraphQLArgument;
import graphql.schema.GraphQLFieldDefinition;
-import graphql.schema.GraphQLInputType;
import graphql.schema.GraphQLObjectType;
import static graphql.schema.GraphQLObjectType.newObject;
@@ -24,7 +22,7 @@ import org.apache.causeway.core.metamodel.spec.feature.OneToOneActionParameter;
import org.apache.causeway.viewer.graphql.applib.types.TypeMapper;
import org.apache.causeway.viewer.graphql.model.context.Context;
import org.apache.causeway.viewer.graphql.model.domain.GqlvAction;
-import org.apache.causeway.viewer.graphql.model.domain.GqlvActionInvokeMutating;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvMutation;
import org.apache.causeway.viewer.graphql.model.domain.GqlvHolder;
import lombok.Getter;
@@ -42,7 +40,7 @@ public class GqlvTopLevelMutation implements GqlvHolder {
*/
private GraphQLObjectType gqlObjectType;
- private final Map<String, GqlvActionInvokeMutating> actions = new LinkedHashMap<String, GqlvActionInvokeMutating>();
+ private final List<GqlvMutation> actions = new ArrayList<>();
public GqlvTopLevelMutation(final Context context) {
this.context = context;
@@ -87,8 +85,8 @@ public class GqlvTopLevelMutation implements GqlvHolder {
public void addAction(ObjectSpecification objectSpec, final ObjectAction objectAction) {
// TODO: kinda ugly the responsibilities here
- val holder = new GqlvActionInvokeMutatingHolder(this, objectSpec, objectAction, context);
- actions.put(objectAction.getId(), new GqlvActionInvokeMutating(holder, context));
+ val holder = new GqlvMutationHolder(this, objectSpec, objectAction, context);
+ actions.add(new GqlvMutation(holder, context));
}
@Override
@@ -102,19 +100,19 @@ public class GqlvTopLevelMutation implements GqlvHolder {
return FieldCoordinates.coordinates(gqlObjectType, fieldDefinition);
}
- public void addFetchers() {
-
+ public void addDataFetchers() {
+ actions.forEach(GqlvMutation::addDataFetcher);
}
}
-class GqlvActionInvokeMutatingHolder implements GqlvActionInvokeMutating.Holder {
+class GqlvMutationHolder implements GqlvMutation.Holder {
private final GqlvTopLevelMutation gqlvTopLevelMutation;
private final ObjectSpecification objectSpec;
private final ObjectAction objectAction;
private final Context context;
- public GqlvActionInvokeMutatingHolder(
+ public GqlvMutationHolder(
final GqlvTopLevelMutation gqlvTopLevelMutation,
final ObjectSpecification objectSpec,
final ObjectAction objectAction,
@@ -135,50 +133,49 @@ class GqlvActionInvokeMutatingHolder implements GqlvActionInvokeMutating.Holder
final GraphQLFieldDefinition.Builder fieldBuilder,
final TypeMapper.InputContext inputContext) {
+ val arguments = new ArrayList<GraphQLArgument>();
+ val argName = context.causewayConfiguration.getViewer().getGraphql().getMutation().getTargetArgName();
+
// add target (if not a service)
- if (!objectSpec.getBeanSort().isManagedBeanContributing()) {
- GraphQLInputType graphQLInputType = context.typeMapper.inputTypeFor(objectSpec);
- fieldBuilder.argument(GraphQLArgument.newArgument()
- .name("target")
- .type(graphQLInputType)
- .build());
+ if (! objectSpec.getBeanSort().isManagedBeanContributing()) {
+ arguments.add(
+ GraphQLArgument.newArgument()
+ .name(argName)
+ .type(context.typeMapper.inputTypeFor(objectSpec))
+ .build()
+ );
}
val parameters = objectAction.getParameters();
- val arguments = parameters.stream()
- .map(objectActionParameter -> gqlArgumentFor(objectActionParameter, inputContext))
- .collect(Collectors.toList());
+ parameters.stream()
+ .map(this::gqlArgumentFor)
+ .forEach(arguments::add);
+
if (!arguments.isEmpty()) {
fieldBuilder.arguments(arguments);
}
}
- // TODO: copied from GqlvAction
- GraphQLArgument gqlArgumentFor(
- final ObjectActionParameter objectActionParameter,
- final TypeMapper.InputContext inputContext) {
+ // adapted from GqlvAction
+ GraphQLArgument gqlArgumentFor(final ObjectActionParameter objectActionParameter) {
return objectActionParameter.isPlural()
- ? gqlArgumentFor((OneToManyActionParameter) objectActionParameter, inputContext)
- : gqlArgumentFor((OneToOneActionParameter) objectActionParameter, inputContext);
+ ? gqlArgumentFor((OneToManyActionParameter) objectActionParameter)
+ : gqlArgumentFor((OneToOneActionParameter) objectActionParameter);
}
- // TODO: copied from GqlvAction
- GraphQLArgument gqlArgumentFor(
- final OneToOneActionParameter oneToOneActionParameter,
- final TypeMapper.InputContext inputContext) {
+ // adapted from GqlvAction
+ GraphQLArgument gqlArgumentFor(final OneToOneActionParameter oneToOneActionParameter) {
return GraphQLArgument.newArgument()
.name(oneToOneActionParameter.getId())
- .type(context.typeMapper.inputTypeFor(oneToOneActionParameter, inputContext))
+ .type(context.typeMapper.inputTypeFor(oneToOneActionParameter, TypeMapper.InputContext.INVOKE))
.build();
}
// TODO: copied from GqlvAction
- GraphQLArgument gqlArgumentFor(
- final OneToManyActionParameter oneToManyActionParameter,
- final TypeMapper.InputContext inputContext) {
+ GraphQLArgument gqlArgumentFor(final OneToManyActionParameter oneToManyActionParameter) {
return GraphQLArgument.newArgument()
.name(oneToManyActionParameter.getId())
- .type(context.typeMapper.inputTypeFor(oneToManyActionParameter, inputContext))
+ .type(context.typeMapper.inputTypeFor(oneToManyActionParameter))
.build();
}
(causeway) 08/08: CAUSEWAY-3676: updates docs
Posted by da...@apache.org.
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 1657422d0f7ff1722aa1096fd646fb3c70cc6da6
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 30 16:44:28 2024 +0000
CAUSEWAY-3676: updates docs
---
.../core/config/CausewayConfiguration.java | 29 ++--
viewers/graphql/adoc/modules/ROOT/pages/about.adoc | 162 ++++++++++++++++++--
.../model/domain/GqlvMutationForProperty.java | 165 +++++++++++++++++++++
.../graphql/model/domain/GqlvPropertySet.java | 1 -
...ayViewerGraphqlTestModuleIntegTestAbstract.java | 5 +-
...Mutating_IntegTest.change_department_name._.gql | 5 +-
...tHeadMutating_IntegTest.create_department._.gql | 5 +-
.../StaffMutating_IntegTest.java | 79 ++++++++++
...Mutating_IntegTest.staff_member_edit_name._.gql | 10 ++
..._IntegTest.staff_member_edit_name.approved.json | 9 ++
viewers/graphql/test/src/test/resources/schema.gql | 28 ++++
.../integration/GraphQlSourceForCauseway.java | 5 +
.../viewer/toplevel/GqlvTopLevelMutation.java | 11 +-
13 files changed, 481 insertions(+), 33 deletions(-)
diff --git a/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java b/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
index f10e28c091..6613c49d1b 100644
--- a/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
+++ b/core/config/src/main/java/org/apache/causeway/core/config/CausewayConfiguration.java
@@ -2353,9 +2353,15 @@ public class CausewayConfiguration {
* are excluded from the API, as is the ability to set properties.
*/
QUERY_ONLY,
+ /**
+ * Exposes an API with Query for query/safe separate queries and field access, with mutating (idempotent
+ * and non-idempotent) actions and property setters instead surfaced as Mutations, as per the
+ * <a href="https://spec.graphql.org/June2018/#sec-Language.Operations">GraphQL spec</a>.
+ */
+ QUERY_AND_MUTATIONS,
/**
* Exposes only a Query API, but relaxes the rule that system state may not be changed by also including
- * idempotent and non-idempotent actions as part of the "query" API. Modifiable properties
+ * idempotent and non-idempotent actions as part of the schema. Modifiable properties
* can also be set.
*
* <p>
@@ -2365,29 +2371,16 @@ public class CausewayConfiguration {
* </p>
*/
QUERY_WITH_MUTATIONS_NON_SPEC_COMPLIANT,
- /**
- * Exposes an API with Query for query/safe separate queries and field access, with mutating (idempotent
- * and non-idempotent) actions instead surfaced as Mutations, as per the
- * <a href="https://spec.graphql.org/June2018/#sec-Language.Operations">GraphQL spec</a>.
- *
- * <p>
- * <b>NOTE</b>: this is not currently implemented.
- * </p>
- */
- QUERY_AND_MUTATIONS,
;
}
/**
* Which variant of API to expose: {@link ApiVariant#QUERY_ONLY} (which suppresses any actions that mutate the state of the
- * system), or alternatively as {@link ApiVariant#QUERY_WITH_MUTATIONS_NON_SPEC_COMPLIANT} (which does expose actions that mutate the system but within a query, and so is not spec-compliant), or
- * as {@link ApiVariant#QUERY_AND_MUTATIONS} (which also exposes actions that mutate the system but as mutations, and so <i>is</i> spec-compliant.
- *
- * <p>
- * <b>NOTE:</b> {@link ApiVariant#QUERY_AND_MUTATIONS} is not currently implemented.
- * </p>
+ * system), or as {@link ApiVariant#QUERY_AND_MUTATIONS} (which additionally exposes actions that mutate the system as mutations)
+ * or alternatively as {@link ApiVariant#QUERY_WITH_MUTATIONS_NON_SPEC_COMPLIANT}, a query-only schema that relaxes the read-only rule
+ * by exposing actions that mutate the system; it is therefore not compliant with the GraphQL spec),
*/
- private ApiVariant apiVariant = ApiVariant.QUERY_WITH_MUTATIONS_NON_SPEC_COMPLIANT;
+ private ApiVariant apiVariant = ApiVariant.QUERY_AND_MUTATIONS;
private final MetaData metaData = new MetaData();
@Data
diff --git a/viewers/graphql/adoc/modules/ROOT/pages/about.adoc b/viewers/graphql/adoc/modules/ROOT/pages/about.adoc
index 9679c0a8ae..dc35227752 100644
--- a/viewers/graphql/adoc/modules/ROOT/pages/about.adoc
+++ b/viewers/graphql/adoc/modules/ROOT/pages/about.adoc
@@ -13,7 +13,13 @@ The diagram below shows a simple domain footnote:[in fact, this is the domain us
image::test-domain.drawio.png[width=600]
-To list all Departments:
+GraphQL distinguishes queries and mutations, so let's look at each.
+
+NOTE: GraphQL also defines the notion of subscriptions; the GraphQL viewer currently has no support for these.
+
+=== Queries
+
+To list all Departments, we can submit this query:
[source,graphql]
----
@@ -68,7 +74,7 @@ For example:
<.> whether this action is disabled
<.> whether the property of the resultant object is hidden
-Similarly, there are fields for:
+Similarly, there are fields for action parameters:
* `validate` - is the proposed action parameter valid?
* `disable` - is the action or action parameter disabled?
@@ -76,8 +82,82 @@ Similarly, there are fields for:
* `autoComplete` - for an action parameter, is there an auto-complete?
* `default` - for an action parameter, is there a default value?
+There are also similar fields for properties:
+
+* `validate` - is the proposed value of the property valid?
+* `disable` - is the property disabled?
+* `choices` - for a property, are their choices?
+* `autoComplete` - for a property , is there an auto-complete?
+
+
+The next section explains how use mutations to change the state of the system.
+
+=== Mutations
+
+Actions that mutate the state of the system (with idempotent or non-idempotent xref:refguide:applib:index/annotation/Action.adoc#semantics[@Action#semantics]) are exposed as mutations.
+Editable properties are also exposed as mutations.
-=== Support for "mutating" queries
+IF the action is on a domain service, then the target is implicit; but if the action is on a domain object -- and also for properties -- then the target domain object must be specified.
+
+For example, to invoke a mutating action on a domain service:
+
+[source,graphql]
+----
+mutation {
+ university_dept_Departments__createDepartment( #<.>
+ name: "Geophysics",
+ deptHead: null
+ ) {
+ name {
+ get
+ }
+ }
+}
+----
+<.> derived from the logical type name of the domain service, and the action Id.
+
+For example, to invoke a mutating action on a domain object:
+
+[source,graphql]
+----
+mutation {
+ university_dept_Department__changeName( # <.>
+ _gqlv_target: {id : "1"}, # <.>
+ newName: "Classics and Ancient History"
+ ) {
+ name {
+ get
+ }
+ }
+}
+----
+<.> derived from the logical type name of the domain object, and the action Id.
+<.> the `_gqlv_target` specifies the target object
+
+
+Or, to set a property on a domain object:
+
+[source,graphql]
+----
+mutation {
+ university_dept_StaffMember__name( #<.>
+ _gqlv_target: {id: "1"}, #<.>
+ name: "Jonathon Gartner"
+ ) {
+ name { #<.>
+ get
+ }
+ }
+}
+----
+<.> derived from the logical type name of the domain object, and the property Id.
+<.> the `_gqlv_target` specifies the target object
+<.> property setters are `void`, so as a convenience the mutator instead returns the target object.
+
+
+
+
+=== Mutations using Queries
According to the link:https://spec.graphql.org/June2018/#sec-Language.Operations[GraphQL specification], queries should be read-only; they must not change the state of the system.
@@ -91,17 +171,79 @@ As specified by xref:refguide:applib:index/annotation/Action.adoc#semantics[@Act
* `set` - to modify a property.
-It also means that the above fields for supporting methods also apply to properties:
+For example, to invoke an action on a domain service
-* `validate` - is the proposed value of the property valid?
-* `disable` - is the property disabled?
-* `choices` - for a property, are their choices?
-* `autoComplete` - for a property , is there an auto-complete?
+[source,graphql]
+----
+{
+ university_dept_Staff {
+ createStaffMember {
+ invokeNonIdempotent(
+ name: "Dr. Georgina McGovern",
+ department: { id: "1"}
+ ) {
+ name {
+ get
+ }
+ department {
+ get {
+ name {
+ get
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+----
+
+Or, to find a domain object and then invoke a mutating action on it:
+
+[source,graphql]
+----
+{
+ university_dept_DeptHeads {
+ findHeadByName {
+ invoke(name: "Prof. Dicky Horwich") {
+ changeName {
+ invokeIdempotent(newName: "Prof. Richard Horwich") {
+ name {
+ get
+ }
+ }
+ }
+ }
+ }
+ }
+}
+----
+
+Or, similarly to find a domain object and then set a property afterwards:
+
+[source,graphql]
+----
+{
+ university_dept_Staff {
+ findStaffMemberByName {
+ invoke(name: "Gerry Jones") {
+ name {
+ set(name: "Gerald Johns") {
+ name {
+ get
+ }
+ }
+ }
+ }
+ }
+ }
+}
+----
-This relaxed mode is enabled by default, but if you want read-only queries then there is a configuration property, see xref:setup-and-configuration.adoc[].
+This relaxed mode is specified using a configuration property, see xref:setup-and-configuration.adoc[].
-IMPORTANT: GraphQL mutations are currently not yet implemented, and so there is not yet any spec-compliant way to mutate the state of the system.
== See also
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForProperty.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForProperty.java
new file mode 100644
index 0000000000..1ebcd55b80
--- /dev/null
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMutationForProperty.java
@@ -0,0 +1,165 @@
+/*
+ * 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.causeway.viewer.graphql.model.domain;
+
+import java.util.ArrayList;
+import java.util.Map;
+
+import graphql.schema.DataFetchingEnvironment;
+import graphql.schema.GraphQLArgument;
+import graphql.schema.GraphQLFieldDefinition;
+import graphql.schema.GraphQLOutputType;
+
+import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
+
+import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
+
+import org.apache.causeway.applib.annotation.Where;
+import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
+import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
+import org.apache.causeway.viewer.graphql.applib.types.TypeMapper;
+import org.apache.causeway.viewer.graphql.model.context.Context;
+import org.apache.causeway.viewer.graphql.model.exceptions.DisabledException;
+import org.apache.causeway.viewer.graphql.model.exceptions.HiddenException;
+import org.apache.causeway.viewer.graphql.model.exceptions.InvalidException;
+
+import lombok.val;
+import lombok.extern.log4j.Log4j2;
+
+@Log4j2
+public class GqlvMutationForProperty {
+
+ private final Holder holder;
+ private final ObjectSpecification objectSpec;
+ private final OneToOneAssociation oneToOneAssociation;
+ private final Context context;
+ private final GraphQLFieldDefinition field;
+ private String argumentName;
+
+ public GqlvMutationForProperty(
+ final Holder holder,
+ final ObjectSpecification objectSpec,
+ final OneToOneAssociation oneToOneAssociation,
+ final Context context) {
+ this.holder = holder;
+ this.objectSpec = objectSpec;
+ this.oneToOneAssociation = oneToOneAssociation;
+ this.context = context;
+
+ this.argumentName = context.causewayConfiguration.getViewer().getGraphql().getMutation().getTargetArgName();
+
+ GraphQLOutputType type = context.typeMapper.outputTypeFor(objectSpec); // setter returns void, so will return target instead.
+ if (type != null) {
+ val fieldBuilder = newFieldDefinition()
+ .name(fieldName(objectSpec, oneToOneAssociation))
+ .type(type);
+ addGqlArguments(fieldBuilder);
+ this.field = holder.addField(fieldBuilder.build());
+ } else {
+ this.field = null;
+ }
+ }
+
+ private static String fieldName(
+ final ObjectSpecification objectSpecification,
+ final OneToOneAssociation oneToOneAssociation) {
+ return TypeNames.objectTypeNameFor(objectSpecification) + "__" + oneToOneAssociation.getId();
+ }
+
+
+ public void addDataFetcher() {
+
+ val beanSort = oneToOneAssociation.getElementType().getBeanSort();
+
+ switch (beanSort) {
+ case VALUE:
+ case VIEW_MODEL:
+ case ENTITY:
+ context.codeRegistryBuilder.dataFetcher(
+ holder.coordinatesFor(field),
+ this::set);
+
+ break;
+ }
+
+ context.codeRegistryBuilder.dataFetcher(
+ holder.coordinatesFor(field),
+ this::set
+ );
+ }
+
+ private Object set(final DataFetchingEnvironment dataFetchingEnvironment) {
+
+
+ Object target = dataFetchingEnvironment.getArgument(argumentName);
+ Object sourcePojo = GqlvAction.asPojo(objectSpec, target, context.bookmarkService)
+ .orElseThrow(); // TODO: better error handling if no such object found.
+
+ val managedObject = ManagedObject.adaptSingular(objectSpec, sourcePojo);
+
+ Map<String, Object> arguments = dataFetchingEnvironment.getArguments();
+ Object argumentValue = arguments.get(oneToOneAssociation.getId());
+ ManagedObject argumentManagedObject = ManagedObject.adaptProperty(oneToOneAssociation, argumentValue);
+
+ val visibleConsent = oneToOneAssociation.isVisible(managedObject, InteractionInitiatedBy.USER, Where.ANYWHERE);
+ if (visibleConsent.isVetoed()) {
+ throw new HiddenException(oneToOneAssociation.getFeatureIdentifier());
+ }
+
+ val usableConsent = oneToOneAssociation.isUsable(managedObject, InteractionInitiatedBy.USER, Where.ANYWHERE);
+ if (usableConsent.isVetoed()) {
+ throw new DisabledException(oneToOneAssociation.getFeatureIdentifier());
+ }
+
+ val validityConsent = oneToOneAssociation.isAssociationValid(managedObject, argumentManagedObject, InteractionInitiatedBy.USER);
+ if (validityConsent.isVetoed()) {
+ throw new InvalidException(validityConsent);
+ }
+
+ oneToOneAssociation.set(managedObject, argumentManagedObject, InteractionInitiatedBy.USER);
+
+ return managedObject; // return the original object because setters return void
+ }
+
+
+ private void addGqlArguments(final GraphQLFieldDefinition.Builder fieldBuilder) {
+
+ // add target
+ val targetArgName = context.causewayConfiguration.getViewer().getGraphql().getMutation().getTargetArgName();
+ fieldBuilder.argument(
+ GraphQLArgument.newArgument()
+ .name(targetArgName)
+ .type(context.typeMapper.inputTypeFor(objectSpec))
+ .build()
+ );
+
+ fieldBuilder.argument(
+ GraphQLArgument.newArgument()
+ .name(oneToOneAssociation.getId())
+ .type(context.typeMapper.inputTypeFor(oneToOneAssociation, TypeMapper.InputContext.INVOKE))
+ .build());
+ }
+
+
+ public interface Holder
+ extends GqlvHolder {
+ }
+
+}
diff --git a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java
index d2659adcd0..762ba7a081 100644
--- a/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java
+++ b/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertySet.java
@@ -96,7 +96,6 @@ public class GqlvPropertySet {
Object set(final DataFetchingEnvironment dataFetchingEnvironment) {
-
val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment);
val sourcePojoClass = sourcePojo.getClass();
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/CausewayViewerGraphqlTestModuleIntegTestAbstract.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/CausewayViewerGraphqlTestModuleIntegTestAbstract.java
index 9f9fb857b3..227a2eebea 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/CausewayViewerGraphqlTestModuleIntegTestAbstract.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/CausewayViewerGraphqlTestModuleIntegTestAbstract.java
@@ -76,7 +76,10 @@ import lombok.val;
classes = {
CausewayViewerGraphqlTestModuleIntegTestAbstract.TestApp.class
},
- webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT
+ webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
+ properties = {
+ "causeway.viewer.graphql.api-variant=QUERY_WITH_MUTATIONS_NON_SPEC_COMPLIANT"
+ }
)
@AutoConfigureHttpGraphQlTester
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.change_department_name._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.change_department_name._.gql
index 45e4992450..2d140978b5 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.change_department_name._.gql
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.change_department_name._.gql
@@ -1,5 +1,8 @@
mutation {
- university_dept_Department__changeName(_gqlv_target: {id : "$departmentId"}, newName: "Classics and Ancient History") {
+ university_dept_Department__changeName(
+ _gqlv_target: {id : "$departmentId"},
+ newName: "Classics and Ancient History"
+ ) {
name {
get
}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.create_department._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.create_department._.gql
index a2dc6052c2..8521588968 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.create_department._.gql
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/DeptHeadMutating_IntegTest.create_department._.gql
@@ -1,5 +1,8 @@
mutation {
- university_dept_Departments__createDepartment(name: "Geophysics", deptHead: null) {
+ university_dept_Departments__createDepartment(
+ name: "Geophysics",
+ deptHead: null
+ ) {
name {
get
}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/StaffMutating_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/StaffMutating_IntegTest.java
new file mode 100644
index 0000000000..a59c89fd4d
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/StaffMutating_IntegTest.java
@@ -0,0 +1,79 @@
+/*
+ * 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.causeway.viewer.graphql.viewer.test.e2e.query_and_mutations;
+
+import java.util.Optional;
+
+import org.apache.causeway.viewer.graphql.viewer.test.CausewayViewerGraphqlTestModuleIntegTestAbstract;
+
+import org.approvaltests.Approvals;
+import org.approvaltests.reporters.DiffReporter;
+import org.approvaltests.reporters.UseReporter;
+import org.junit.jupiter.api.Order;
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
+import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
+
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.ActiveProfiles;
+import org.springframework.transaction.annotation.Propagation;
+
+import org.apache.causeway.applib.services.bookmark.Bookmark;
+import org.apache.causeway.commons.internal.collections._Maps;
+import org.apache.causeway.viewer.graphql.viewer.test.domain.dept.Department;
+import org.apache.causeway.viewer.graphql.viewer.test.domain.dept.StaffMember;
+import org.apache.causeway.viewer.graphql.viewer.test.e2e.Abstract_IntegTest;
+
+import lombok.val;
+
+
+// NOT USING @Transactional since we are running server within same transaction otherwise
+@SpringBootTest(
+ classes = {
+ CausewayViewerGraphqlTestModuleIntegTestAbstract.TestApp.class
+ },
+ webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
+ properties = {
+ "causeway.viewer.graphql.api-variant=QUERY_AND_MUTATIONS"
+ }
+)
+@Order(60)
+@ActiveProfiles("test")
+public class StaffMutating_IntegTest extends Abstract_IntegTest {
+
+ @Test
+ @UseReporter(DiffReporter.class)
+ void staff_member_edit_name() throws Exception {
+
+ final Bookmark bookmark =
+ transactionService.callTransactional(
+ Propagation.REQUIRED,
+ () -> {
+ StaffMember staffMember = staffMemberRepository.findByName("John Gartner");
+ return bookmarkService.bookmarkFor(staffMember).orElseThrow();
+ }
+ ).valueAsNonNullElseFail();
+
+ val response = submit(_Maps.unmodifiable("$staffMemberId", bookmark.getIdentifier()));
+
+ // then payload
+ Approvals.verify(response, jsonOptions());
+ }
+}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/StaffMutating_IntegTest.staff_member_edit_name._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/StaffMutating_IntegTest.staff_member_edit_name._.gql
new file mode 100644
index 0000000000..c251ee695e
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/StaffMutating_IntegTest.staff_member_edit_name._.gql
@@ -0,0 +1,10 @@
+mutation {
+ university_dept_StaffMember__name(
+ _gqlv_target: {id: "$staffMemberId"},
+ name: "Jonathon Gartner"
+ ) {
+ name {
+ get
+ }
+ }
+}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/StaffMutating_IntegTest.staff_member_edit_name.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/StaffMutating_IntegTest.staff_member_edit_name.approved.json
new file mode 100644
index 0000000000..9e142d65fd
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/query_and_mutations/StaffMutating_IntegTest.staff_member_edit_name.approved.json
@@ -0,0 +1,9 @@
+{
+ "data" : {
+ "university_dept_StaffMember__name" : {
+ "name" : {
+ "get" : "Jonathon Gartner"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/viewers/graphql/test/src/test/resources/schema.gql b/viewers/graphql/test/src/test/resources/schema.gql
index 5f6c0fe828..94892a724d 100644
--- a/viewers/graphql/test/src/test/resources/schema.gql
+++ b/viewers/graphql/test/src/test/resources/schema.gql
@@ -23,10 +23,30 @@ directive @specifiedBy(
) on SCALAR
type Mutation {
+ causeway_applib_PropertyNode__mixedIn(_gqlv_target: causeway_applib_PropertyNode__gqlv_input, mixedIn: Boolean!): causeway_applib_PropertyNode
causeway_applib_PropertyNode__streamChildNodes(_gqlv_target: causeway_applib_PropertyNode__gqlv_input): java_util_stream_Stream
+ causeway_applib_node_ActionNode__mixedIn(_gqlv_target: causeway_applib_node_ActionNode__gqlv_input, mixedIn: Boolean!): causeway_applib_node_ActionNode
causeway_applib_node_ActionNode__streamChildNodes(_gqlv_target: causeway_applib_node_ActionNode__gqlv_input): java_util_stream_Stream
+ causeway_applib_node_CollectionNode__mixedIn(_gqlv_target: causeway_applib_node_CollectionNode__gqlv_input, mixedIn: Boolean!): causeway_applib_node_CollectionNode
causeway_applib_node_CollectionNode__streamChildNodes(_gqlv_target: causeway_applib_node_CollectionNode__gqlv_input): java_util_stream_Stream
+ causeway_applib_node_FacetNode__shadowed(_gqlv_target: causeway_applib_node_FacetNode__gqlv_input, shadowed: Boolean!): causeway_applib_node_FacetNode
+ causeway_conf_ConfigurationProperty__key(_gqlv_target: causeway_conf_ConfigurationProperty__gqlv_input, key: String!): causeway_conf_ConfigurationProperty
+ causeway_conf_ConfigurationProperty__value(_gqlv_target: causeway_conf_ConfigurationProperty__gqlv_input, value: String!): causeway_conf_ConfigurationProperty
+ causeway_schema_metamodel_v2_DomainClassDto__actions(_gqlv_target: causeway_schema_metamodel_v2_DomainClassDto__gqlv_input, actions: String!): causeway_schema_metamodel_v2_DomainClassDto
+ causeway_schema_metamodel_v2_DomainClassDto__annotations(_gqlv_target: causeway_schema_metamodel_v2_DomainClassDto__gqlv_input, annotations: String!): causeway_schema_metamodel_v2_DomainClassDto
+ causeway_schema_metamodel_v2_DomainClassDto__collections(_gqlv_target: causeway_schema_metamodel_v2_DomainClassDto__gqlv_input, collections: String!): causeway_schema_metamodel_v2_DomainClassDto
+ causeway_schema_metamodel_v2_DomainClassDto__facets(_gqlv_target: causeway_schema_metamodel_v2_DomainClassDto__gqlv_input, facets: String!): causeway_schema_metamodel_v2_DomainClassDto
+ causeway_schema_metamodel_v2_DomainClassDto__id(_gqlv_target: causeway_schema_metamodel_v2_DomainClassDto__gqlv_input, id: String!): causeway_schema_metamodel_v2_DomainClassDto
+ causeway_schema_metamodel_v2_DomainClassDto__majorVersion(_gqlv_target: causeway_schema_metamodel_v2_DomainClassDto__gqlv_input, majorVersion: String): causeway_schema_metamodel_v2_DomainClassDto
+ causeway_schema_metamodel_v2_DomainClassDto__minorVersion(_gqlv_target: causeway_schema_metamodel_v2_DomainClassDto__gqlv_input, minorVersion: String): causeway_schema_metamodel_v2_DomainClassDto
+ causeway_schema_metamodel_v2_DomainClassDto__properties(_gqlv_target: causeway_schema_metamodel_v2_DomainClassDto__gqlv_input, properties: String!): causeway_schema_metamodel_v2_DomainClassDto
+ causeway_schema_metamodel_v2_DomainClassDto__service(_gqlv_target: causeway_schema_metamodel_v2_DomainClassDto__gqlv_input, service: Boolean!): causeway_schema_metamodel_v2_DomainClassDto
+ causeway_testing_fixtures_FixtureResult__fixtureScriptClassName(_gqlv_target: causeway_testing_fixtures_FixtureResult__gqlv_input, fixtureScriptClassName: String): causeway_testing_fixtures_FixtureResult
+ causeway_testing_fixtures_FixtureResult__key(_gqlv_target: causeway_testing_fixtures_FixtureResult__gqlv_input, key: String!): causeway_testing_fixtures_FixtureResult
+ causeway_testing_fixtures_FixtureResult__object(_gqlv_target: causeway_testing_fixtures_FixtureResult__gqlv_input, object: String!): causeway_testing_fixtures_FixtureResult
+ org_apache_causeway_core_metamodel_inspect_model_MemberNode__mixedIn(_gqlv_target: org_apache_causeway_core_metamodel_inspect_model_MemberNode__gqlv_input, mixedIn: Boolean!): org_apache_causeway_core_metamodel_inspect_model_MemberNode
org_apache_causeway_core_metamodel_inspect_model_MemberNode__streamChildNodes(_gqlv_target: org_apache_causeway_core_metamodel_inspect_model_MemberNode__gqlv_input): java_util_stream_Stream
+ org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__friendlyName(_gqlv_target: org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__gqlv_input, friendlyName: String!): org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript
university_admin_AdminMenu__actionWithDisabledParam(firstParam: String!, secondParam: String!, thirdParameter: String!): String
university_admin_AdminMenu__actionWithHiddenParam(firstParam: String!, secondParam: String!): String
university_admin_AdminMenu__adminAction: String
@@ -35,10 +55,18 @@ type Mutation {
university_dept_Department__addStaffMembers(_gqlv_target: university_dept_Department__gqlv_input, staffMembers: [university_dept_StaffMember__gqlv_input]): university_dept_Department
university_dept_Department__changeDeptHead(_gqlv_target: university_dept_Department__gqlv_input, newDeptHead: university_dept_DeptHead__gqlv_input!): university_dept_Department
university_dept_Department__changeName(_gqlv_target: university_dept_Department__gqlv_input, newName: String!): university_dept_Department
+ university_dept_Department__deptHead(_gqlv_target: university_dept_Department__gqlv_input, deptHead: university_dept_DeptHead__gqlv_input): university_dept_Department
+ university_dept_Department__name(_gqlv_target: university_dept_Department__gqlv_input, name: String!): university_dept_Department
university_dept_Department__removeStaffMember(_gqlv_target: university_dept_Department__gqlv_input, staffMember: university_dept_StaffMember__gqlv_input!): university_dept_Department
university_dept_Departments__createDepartment(deptHead: university_dept_DeptHead__gqlv_input, name: String!): university_dept_Department
university_dept_DeptHead__changeDepartment(_gqlv_target: university_dept_DeptHead__gqlv_input, department: university_dept_Department__gqlv_input!): university_dept_DeptHead
university_dept_DeptHead__changeName(_gqlv_target: university_dept_DeptHead__gqlv_input, newName: String!): university_dept_DeptHead
+ university_dept_DeptHead__department(_gqlv_target: university_dept_DeptHead__gqlv_input, department: university_dept_Department__gqlv_input): university_dept_DeptHead
+ university_dept_DeptHead__name(_gqlv_target: university_dept_DeptHead__gqlv_input, name: String): university_dept_DeptHead
+ university_dept_StaffMember__department(_gqlv_target: university_dept_StaffMember__gqlv_input, department: university_dept_Department__gqlv_input): university_dept_StaffMember
+ university_dept_StaffMember__grade(_gqlv_target: university_dept_StaffMember__gqlv_input, grade: String!): university_dept_StaffMember
+ university_dept_StaffMember__name(_gqlv_target: university_dept_StaffMember__gqlv_input, name: String!): university_dept_StaffMember
+ university_dept_StaffMember__photo(_gqlv_target: university_dept_StaffMember__gqlv_input, photo: String): university_dept_StaffMember
university_dept_Staff__createStaffMember(department: university_dept_Department__gqlv_input!, name: String!): university_dept_StaffMember
}
diff --git a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
index 1d8930e97c..852ec0c70a 100644
--- a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
+++ b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
@@ -24,6 +24,7 @@ import javax.annotation.PostConstruct;
import javax.inject.Inject;
import org.apache.causeway.commons.functional.Either;
+import org.apache.causeway.core.metamodel.facets.properties.update.modify.PropertySetterFacet;
import org.apache.causeway.core.metamodel.spec.feature.MixedIn;
import org.apache.causeway.viewer.graphql.viewer.toplevel.GqlvTopLevelMutation;
@@ -138,6 +139,10 @@ public class GraphQlSourceForCauseway implements GraphQlSource {
objectSpec.streamActions(context.getActionScope(), MixedIn.INCLUDED)
.filter(x -> ! x.getSemantics().isSafeInNature())
.forEach(objectAction -> topLevelMutation.addAction(objectSpec, objectAction));
+ objectSpec.streamProperties(MixedIn.INCLUDED)
+ .filter(property -> ! property.isAlwaysHidden())
+ .filter(property -> property.containsFacet(PropertySetterFacet.class))
+ .forEach(property -> topLevelMutation.addProperty(objectSpec, property));
});
topLevelMutation.buildMutationType();
diff --git a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java
index feb16fd775..822f2948ca 100644
--- a/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java
+++ b/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/toplevel/GqlvTopLevelMutation.java
@@ -11,12 +11,15 @@ import static graphql.schema.GraphQLObjectType.newObject;
import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
import org.apache.causeway.viewer.graphql.model.context.Context;
import org.apache.causeway.viewer.graphql.model.domain.GqlvMutationForAction;
+import org.apache.causeway.viewer.graphql.model.domain.GqlvMutationForProperty;
import lombok.Getter;
-public class GqlvTopLevelMutation implements GqlvMutationForAction.Holder {
+public class GqlvTopLevelMutation
+ implements GqlvMutationForAction.Holder, GqlvMutationForProperty.Holder {
private final Context context;
@@ -29,6 +32,7 @@ public class GqlvTopLevelMutation implements GqlvMutationForAction.Holder {
private GraphQLObjectType gqlObjectType;
private final List<GqlvMutationForAction> actions = new ArrayList<>();
+ private final List<GqlvMutationForProperty> properties = new ArrayList<>();
public GqlvTopLevelMutation(final Context context) {
this.context = context;
@@ -61,6 +65,10 @@ public class GqlvTopLevelMutation implements GqlvMutationForAction.Holder {
actions.add(new GqlvMutationForAction(this, objectSpec, objectAction, context));
}
+ public void addProperty(ObjectSpecification objectSpec, final OneToOneAssociation property) {
+ properties.add(new GqlvMutationForProperty(this, objectSpec, property, context));
+ }
+
@Override
public GraphQLFieldDefinition addField(GraphQLFieldDefinition field) {
gqlObjectTypeBuilder.field(field);
@@ -74,6 +82,7 @@ public class GqlvTopLevelMutation implements GqlvMutationForAction.Holder {
public void addDataFetchers() {
actions.forEach(GqlvMutationForAction::addDataFetcher);
+ properties.forEach(GqlvMutationForProperty::addDataFetcher);
}
(causeway) 04/08: CAUSEWAY-3676: sketching out introducing mutations (3)
Posted by da...@apache.org.
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 9924cc05742bc0976eaead9e45e3af5691533155
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Tue Jan 30 09:00:12 2024 +0000
CAUSEWAY-3676: sketching out introducing mutations (3)
---
.../graphql/viewer/test/e2e/Admin_IntegTest.java | 2 +
.../viewer/test/e2e/Calculator_IntegTest.java | 2 +
.../viewer/test/e2e/Department_IntegTest.java | 2 +
...g_IntegTest.find_depthead_and_change_name._.gql | 7 +++
...est.find_depthead_and_change_name.approved.json | 0
...egTest.java => DeptHeadMutating_IntegTest.java} | 58 ++++++++--------------
.../viewer/test/e2e/DeptHead_IntegTest.java | 2 +
.../graphql/viewer/test/e2e/Staff_IntegTest.java | 2 +
.../test/schema/GqlSchema_print_IntegTest.java | 2 +
.../src/test/resources/junit-platform.properties | 2 +
10 files changed, 41 insertions(+), 38 deletions(-)
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.java
index 61c9f41587..20ca803741 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Admin_IntegTest.java
@@ -21,6 +21,7 @@ package org.apache.causeway.viewer.graphql.viewer.test.e2e;
import org.approvaltests.Approvals;
import org.approvaltests.reporters.DiffReporter;
import org.approvaltests.reporters.UseReporter;
+import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.springframework.test.context.ActiveProfiles;
@@ -29,6 +30,7 @@ import lombok.val;
//NOT USING @Transactional since we are running server within same transaction otherwise
+@Order(20)
@ActiveProfiles("test")
public class Admin_IntegTest extends Abstract_IntegTest {
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.java
index d3c5ee98a3..90a5456d77 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Calculator_IntegTest.java
@@ -21,12 +21,14 @@ package org.apache.causeway.viewer.graphql.viewer.test.e2e;
import org.approvaltests.Approvals;
import org.approvaltests.reporters.DiffReporter;
import org.approvaltests.reporters.UseReporter;
+import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.springframework.test.context.ActiveProfiles;
//NOT USING @Transactional since we are running server within same transaction otherwise
+@Order(30)
@ActiveProfiles("test")
public class Calculator_IntegTest extends Abstract_IntegTest {
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.java
index 1a8e1fb441..b24e66a06d 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Department_IntegTest.java
@@ -28,6 +28,7 @@ import org.approvaltests.Approvals;
import org.approvaltests.reporters.DiffReporter;
import org.approvaltests.reporters.UseReporter;
import org.assertj.core.api.Assertions;
+import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
@@ -44,6 +45,7 @@ import lombok.val;
//NOT USING @Transactional since we are running server within same transaction otherwise
+@Order(40)
@ActiveProfiles("test")
public class Department_IntegTest extends Abstract_IntegTest {
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHeadMutating_IntegTest.find_depthead_and_change_name._.gql b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHeadMutating_IntegTest.find_depthead_and_change_name._.gql
new file mode 100644
index 0000000000..1c79eb6819
--- /dev/null
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHeadMutating_IntegTest.find_depthead_and_change_name._.gql
@@ -0,0 +1,7 @@
+mutation {
+ invokeIdempotent(newName: "Foo", target: {id: 123}) {
+ name {
+ get
+ }
+ }
+}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHeadMutating_IntegTest.find_depthead_and_change_name.approved.json b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHeadMutating_IntegTest.find_depthead_and_change_name.approved.json
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHeadMutating_IntegTest.java
similarity index 64%
copy from viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.java
copy to viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHeadMutating_IntegTest.java
index 4b9019d10c..4715c571c3 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHeadMutating_IntegTest.java
@@ -18,48 +18,38 @@
*/
package org.apache.causeway.viewer.graphql.viewer.test.e2e;
+import org.apache.causeway.viewer.graphql.viewer.test.CausewayViewerGraphqlTestModuleIntegTestAbstract;
+
+import org.apache.causeway.viewer.graphql.viewer.test.domain.dept.DeptHead;
+
import org.approvaltests.Approvals;
import org.approvaltests.reporters.DiffReporter;
import org.approvaltests.reporters.UseReporter;
+import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
-import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
-
+import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.transaction.annotation.Propagation;
-import org.apache.causeway.viewer.graphql.viewer.test.domain.dept.DeptHead;
+import lombok.val;
+
+import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
//NOT USING @Transactional since we are running server within same transaction otherwise
+@SpringBootTest(
+ classes = {
+ CausewayViewerGraphqlTestModuleIntegTestAbstract.TestApp.class
+ },
+ webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
+ properties = {
+ "causeway.viewer.graphql.api-variant=QUERY_AND_MUTATIONS"
+ }
+)
+@Order(110)
@ActiveProfiles("test")
-public class DeptHead_IntegTest extends Abstract_IntegTest {
-
- @Test
- @UseReporter(DiffReporter.class)
- void find_depthead_by_name() throws Exception {
-
- // when, then
- Approvals.verify(submit(), jsonOptions());
- }
-
-
- @Test
- @UseReporter(DiffReporter.class)
- void find_depthead_and_change_name_invalid() throws Exception {
-
- String response = submit();
-
- // then payload
- Approvals.verify(response, jsonOptions());
- }
- @Test
- @UseReporter(DiffReporter.class)
- void find_depthead_and_change_name_invoke_invalid() throws Exception {
-
- // when, then
- Approvals.verify(submit(), jsonOptions());
- }
+public class DeptHeadMutating_IntegTest extends Abstract_IntegTest {
@Test
@UseReporter(DiffReporter.class)
@@ -71,14 +61,6 @@ public class DeptHead_IntegTest extends Abstract_IntegTest {
// then payload
Approvals.verify(response, jsonOptions());
- // and also in the database
- DeptHead deptHeadAfter = transactionService.callTransactional(
- Propagation.REQUIRED,
- () -> deptHeadRepository.findByName("Prof. Richard Horwich")
- ).valueAsNullableElseFail();
-
- assertThat(deptHeadAfter).isNotNull();
}
-
}
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.java
index 4b9019d10c..1ee91e96e9 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/DeptHead_IntegTest.java
@@ -21,6 +21,7 @@ package org.apache.causeway.viewer.graphql.viewer.test.e2e;
import org.approvaltests.Approvals;
import org.approvaltests.reporters.DiffReporter;
import org.approvaltests.reporters.UseReporter;
+import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat;
@@ -32,6 +33,7 @@ import org.apache.causeway.viewer.graphql.viewer.test.domain.dept.DeptHead;
//NOT USING @Transactional since we are running server within same transaction otherwise
+@Order(50)
@ActiveProfiles("test")
public class DeptHead_IntegTest extends Abstract_IntegTest {
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.java
index 0d7ac838aa..3eb3f513c0 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/e2e/Staff_IntegTest.java
@@ -23,6 +23,7 @@ import java.util.Optional;
import org.approvaltests.Approvals;
import org.approvaltests.reporters.DiffReporter;
import org.approvaltests.reporters.UseReporter;
+import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
@@ -40,6 +41,7 @@ import lombok.val;
//NOT USING @Transactional since we are running server within same transaction otherwise
+@Order(60)
@ActiveProfiles("test")
public class Staff_IntegTest extends Abstract_IntegTest {
diff --git a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/GqlSchema_print_IntegTest.java b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/GqlSchema_print_IntegTest.java
index d8a8473065..e2b5db13c8 100644
--- a/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/GqlSchema_print_IntegTest.java
+++ b/viewers/graphql/test/src/test/java/org/apache/causeway/viewer/graphql/viewer/test/schema/GqlSchema_print_IntegTest.java
@@ -27,6 +27,7 @@ import javax.inject.Inject;
import org.approvaltests.core.Options;
import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Order;
import org.junit.jupiter.api.Test;
import org.springframework.transaction.annotation.Transactional;
@@ -43,6 +44,7 @@ import lombok.val;
import graphql.schema.idl.SchemaPrinter;
+@Order(10)
@Transactional
public class GqlSchema_print_IntegTest extends CausewayViewerGraphqlTestModuleIntegTestAbstract {
diff --git a/viewers/graphql/test/src/test/resources/junit-platform.properties b/viewers/graphql/test/src/test/resources/junit-platform.properties
new file mode 100644
index 0000000000..f61913bd47
--- /dev/null
+++ b/viewers/graphql/test/src/test/resources/junit-platform.properties
@@ -0,0 +1,2 @@
+# ClassOrderer$OrderAnnotation sorts classes based on their @Order annotation
+junit.jupiter.testclass.order.default=org.junit.jupiter.api.ClassOrderer$OrderAnnotation
\ No newline at end of file