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 aaabbd110dd6a8efd745b14e6c6c5ba9f8e8156d Author: danhaywood <[email protected]> AuthorDate: Sun Feb 11 12:29:46 2024 +0000 CAUSEWAY-3676: refactors top level query/mutation a little --- .../viewer/graphql/model/context/Context.java | 14 ++ viewers/graphql/test/src/test/resources/schema.gql | 158 +++++++++++++++------ .../integration/GraphQlSourceForCauseway.java | 53 +------ .../viewer/toplevel/GqlvTopLevelMutation.java | 23 +++ .../graphql/viewer/toplevel/GqlvTopLevelQuery.java | 22 +++ 5 files changed, 179 insertions(+), 91 deletions(-) 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 a073e2e694..0a9ffe1fbc 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 @@ -20,17 +20,23 @@ package org.apache.causeway.viewer.graphql.model.context; import graphql.schema.GraphQLCodeRegistry; +import org.apache.causeway.applib.id.HasLogicalType; 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.commons.functional.Either; import org.apache.causeway.core.config.CausewayConfiguration; import org.apache.causeway.core.config.environment.CausewaySystemEnvironment; import org.apache.causeway.core.metamodel.spec.ActionScope; +import org.apache.causeway.core.metamodel.spec.ObjectSpecification; import org.apache.causeway.core.metamodel.specloader.SpecificationLoader; import org.apache.causeway.viewer.graphql.model.types.TypeMapper; import lombok.RequiredArgsConstructor; +import java.util.Comparator; +import java.util.List; + @RequiredArgsConstructor public class Context { public final GraphQLCodeRegistry.Builder codeRegistryBuilder; @@ -47,4 +53,12 @@ public class Context { : ActionScope.ANY; } + public List<ObjectSpecification> objectSpecifications() { + return 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)) + .toList(); + } } diff --git a/viewers/graphql/test/src/test/resources/schema.gql b/viewers/graphql/test/src/test/resources/schema.gql index b7d6eb65ee..65b53a6d18 100644 --- a/viewers/graphql/test/src/test/resources/schema.gql +++ b/viewers/graphql/test/src/test/resources/schema.gql @@ -22,50 +22,6 @@ directive @specifiedBy( url: String! ) on SCALAR -type Mutation { - causeway_applib_PropertyNode__mixedIn(_gqlv_target: causeway_applib_PropertyNode__gqlv_input, mixedIn: Boolean!): causeway_applib_PropertyNode - causeway_applib_node_ActionNode__mixedIn(_gqlv_target: causeway_applib_node_ActionNode__gqlv_input, mixedIn: Boolean!): causeway_applib_node_ActionNode - causeway_applib_node_CollectionNode__mixedIn(_gqlv_target: causeway_applib_node_CollectionNode__gqlv_input, mixedIn: Boolean!): causeway_applib_node_CollectionNode - 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_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 - university_admin_AdminMenu__otherAdminAction: String - 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__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 -} - type Query { _gqlv_lookup__causeway_applib_DomainObjectList(object: causeway_applib_DomainObjectList__gqlv_input): causeway_applib_DomainObjectList _gqlv_lookup__causeway_applib_FacetGroupNode(object: causeway_applib_FacetGroupNode__gqlv_input): causeway_applib_FacetGroupNode @@ -128,6 +84,7 @@ type causeway_applib_DomainObjectList__actionArguments__gqlv_property { disabled: String get: String hidden: Boolean + set(actionArguments: String): causeway_applib_DomainObjectList validate(actionArguments: String): String } @@ -135,6 +92,7 @@ type causeway_applib_DomainObjectList__actionId__gqlv_property { disabled: String get: String hidden: Boolean + set(actionId: String): causeway_applib_DomainObjectList validate(actionId: String): String } @@ -142,6 +100,7 @@ type causeway_applib_DomainObjectList__actionOwningFqcn__gqlv_property { disabled: String get: String hidden: Boolean + set(actionOwningFqcn: String): causeway_applib_DomainObjectList validate(actionOwningFqcn: String): String } @@ -149,6 +108,7 @@ type causeway_applib_DomainObjectList__elementTypeFqcn__gqlv_property { disabled: String get: String! hidden: Boolean + set(elementTypeFqcn: String!): causeway_applib_DomainObjectList validate(elementTypeFqcn: String): String } @@ -166,6 +126,7 @@ type causeway_applib_DomainObjectList__title__gqlv_property { disabled: String get: String! hidden: Boolean + set(title: String!): causeway_applib_DomainObjectList validate(title: String): String } @@ -185,6 +146,7 @@ type causeway_applib_FacetGroupNode__facets__gqlv_property { disabled: String get: String! hidden: Boolean + set(facets: String!): causeway_applib_FacetGroupNode validate(facets: String): String } @@ -196,6 +158,7 @@ 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 } @@ -220,6 +183,7 @@ type causeway_applib_ParameterNode__parameter__gqlv_property { disabled: String get: String! hidden: Boolean + set(parameter: String!): causeway_applib_ParameterNode validate(parameter: String): String } @@ -227,6 +191,7 @@ 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 } @@ -252,6 +217,7 @@ type causeway_applib_PropertyNode__mixedIn__gqlv_property { disabled: String get: Boolean! hidden: Boolean + set(mixedIn: Boolean!): causeway_applib_PropertyNode validate(mixedIn: Boolean): String } @@ -259,6 +225,7 @@ 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 } @@ -266,6 +233,7 @@ type causeway_applib_PropertyNode__property__gqlv_property { disabled: String get: String! hidden: Boolean + set(property: String!): causeway_applib_PropertyNode validate(property: String): String } @@ -279,6 +247,7 @@ type causeway_applib_RoleMemento__description__gqlv_property { disabled: String get: String! hidden: Boolean + set(description: String!): causeway_applib_RoleMemento validate(description: String): String } @@ -291,6 +260,7 @@ type causeway_applib_RoleMemento__name__gqlv_property { disabled: String get: String! hidden: Boolean + set(name: String!): causeway_applib_RoleMemento validate(name: String): String } @@ -310,6 +280,7 @@ 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 } @@ -321,6 +292,7 @@ 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 } @@ -343,6 +315,7 @@ type causeway_applib_UserMemento__authenticationCode__gqlv_property { disabled: String get: String! hidden: Boolean + set(authenticationCode: String!): causeway_applib_UserMemento validate(authenticationCode: String): String } @@ -351,6 +324,7 @@ type causeway_applib_UserMemento__authenticationSource__gqlv_property { disabled: String get: String! hidden: Boolean + set(authenticationSource: String!): causeway_applib_UserMemento validate(authenticationSource: String): String } @@ -358,6 +332,7 @@ type causeway_applib_UserMemento__avatarUrl__gqlv_property { disabled: String get: String hidden: Boolean + set(avatarUrl: String): causeway_applib_UserMemento validate(avatarUrl: String): String } @@ -370,6 +345,7 @@ type causeway_applib_UserMemento__impersonating__gqlv_property { disabled: String get: Boolean! hidden: Boolean + set(impersonating: Boolean!): causeway_applib_UserMemento validate(impersonating: Boolean): String } @@ -377,6 +353,7 @@ type causeway_applib_UserMemento__languageLocale__gqlv_property { disabled: String get: String hidden: Boolean + set(languageLocale: String): causeway_applib_UserMemento validate(languageLocale: String): String } @@ -384,6 +361,7 @@ type causeway_applib_UserMemento__multiTenancyToken__gqlv_property { disabled: String get: String hidden: Boolean + set(multiTenancyToken: String): causeway_applib_UserMemento validate(multiTenancyToken: String): String } @@ -391,6 +369,7 @@ type causeway_applib_UserMemento__name__gqlv_property { disabled: String get: String! hidden: Boolean + set(name: String!): causeway_applib_UserMemento validate(name: String): String } @@ -398,6 +377,7 @@ type causeway_applib_UserMemento__numberFormatLocale__gqlv_property { disabled: String get: String hidden: Boolean + set(numberFormatLocale: String): causeway_applib_UserMemento validate(numberFormatLocale: String): String } @@ -405,6 +385,7 @@ type causeway_applib_UserMemento__realName__gqlv_property { disabled: String get: String hidden: Boolean + set(realName: String): causeway_applib_UserMemento validate(realName: String): String } @@ -418,6 +399,7 @@ type causeway_applib_UserMemento__timeFormatLocale__gqlv_property { disabled: String get: String hidden: Boolean + set(timeFormatLocale: String): causeway_applib_UserMemento validate(timeFormatLocale: String): String } @@ -444,6 +426,7 @@ 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 } @@ -461,6 +444,7 @@ 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 } @@ -468,6 +452,7 @@ 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 } @@ -488,6 +473,7 @@ 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 } @@ -500,6 +486,7 @@ 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 } @@ -507,6 +494,7 @@ 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 } @@ -526,6 +514,7 @@ 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 } @@ -538,6 +527,7 @@ 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 } @@ -558,6 +548,7 @@ 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 } @@ -569,6 +560,7 @@ 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 } @@ -576,6 +568,7 @@ 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 } @@ -605,6 +598,7 @@ type causeway_conf_ConfigurationProperty__key__gqlv_property { disabled: String get: String! hidden: Boolean + set(key: String!): causeway_conf_ConfigurationProperty validate(key: String): String } @@ -612,6 +606,7 @@ type causeway_conf_ConfigurationProperty__value__gqlv_property { disabled: String get: String! hidden: Boolean + set(value: String!): causeway_conf_ConfigurationProperty validate(value: String): String } @@ -662,6 +657,7 @@ type causeway_feat_ApplicationFeatureViewModel__memberName__gqlv_property { disabled: String get: String! hidden: Boolean + set(memberName: String!): causeway_feat_ApplicationFeatureViewModel validate(memberName: String): String } @@ -669,12 +665,14 @@ 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 } @@ -682,6 +680,7 @@ type causeway_feat_ApplicationFeatureViewModel__typeSimpleName__gqlv_property { disabled: String get: String! hidden: Boolean + set(typeSimpleName: String!): causeway_feat_ApplicationFeatureViewModel validate(typeSimpleName: String): String } @@ -708,6 +707,7 @@ type causeway_feat_ApplicationNamespace__memberName__gqlv_property { disabled: String get: String! hidden: Boolean + set(memberName: String!): causeway_feat_ApplicationNamespace validate(memberName: String): String } @@ -715,12 +715,14 @@ 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 } @@ -728,6 +730,7 @@ type causeway_feat_ApplicationNamespace__typeSimpleName__gqlv_property { disabled: String get: String! hidden: Boolean + set(typeSimpleName: String!): causeway_feat_ApplicationNamespace validate(typeSimpleName: String): String } @@ -757,6 +760,7 @@ type causeway_feat_ApplicationTypeAction__actionSemantics__gqlv_property { disabled: String get: String! hidden: Boolean + set(actionSemantics: String!): causeway_feat_ApplicationTypeAction validate(actionSemantics: String): String } @@ -769,6 +773,7 @@ type causeway_feat_ApplicationTypeAction__memberName__gqlv_property { disabled: String get: String! hidden: Boolean + set(memberName: String!): causeway_feat_ApplicationTypeAction validate(memberName: String): String } @@ -776,12 +781,14 @@ 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 } @@ -789,6 +796,7 @@ type causeway_feat_ApplicationTypeAction__returnType__gqlv_property { disabled: String get: String! hidden: Boolean + set(returnType: String!): causeway_feat_ApplicationTypeAction validate(returnType: String): String } @@ -796,6 +804,7 @@ type causeway_feat_ApplicationTypeAction__typeSimpleName__gqlv_property { disabled: String get: String! hidden: Boolean + set(typeSimpleName: String!): causeway_feat_ApplicationTypeAction validate(typeSimpleName: String): String } @@ -813,6 +822,7 @@ type causeway_feat_ApplicationTypeCollection__derived__gqlv_property { disabled: String get: Boolean! hidden: Boolean + set(derived: Boolean!): causeway_feat_ApplicationTypeCollection validate(derived: Boolean): String } @@ -820,6 +830,7 @@ type causeway_feat_ApplicationTypeCollection__elementType__gqlv_property { disabled: String get: String! hidden: Boolean + set(elementType: String!): causeway_feat_ApplicationTypeCollection validate(elementType: String): String } @@ -832,6 +843,7 @@ type causeway_feat_ApplicationTypeCollection__memberName__gqlv_property { disabled: String get: String! hidden: Boolean + set(memberName: String!): causeway_feat_ApplicationTypeCollection validate(memberName: String): String } @@ -839,12 +851,14 @@ 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 } @@ -852,6 +866,7 @@ type causeway_feat_ApplicationTypeCollection__typeSimpleName__gqlv_property { disabled: String get: String! hidden: Boolean + set(typeSimpleName: String!): causeway_feat_ApplicationTypeCollection validate(typeSimpleName: String): String } @@ -872,6 +887,7 @@ type causeway_feat_ApplicationTypeMember__memberName__gqlv_property { disabled: String get: String! hidden: Boolean + set(memberName: String!): causeway_feat_ApplicationTypeMember validate(memberName: String): String } @@ -879,12 +895,14 @@ 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 } @@ -892,6 +910,7 @@ type causeway_feat_ApplicationTypeMember__typeSimpleName__gqlv_property { disabled: String get: String! hidden: Boolean + set(typeSimpleName: String!): causeway_feat_ApplicationTypeMember validate(typeSimpleName: String): String } @@ -911,6 +930,7 @@ type causeway_feat_ApplicationTypeProperty__derived__gqlv_property { disabled: String get: Boolean! hidden: Boolean + set(derived: Boolean!): causeway_feat_ApplicationTypeProperty validate(derived: Boolean): String } @@ -923,6 +943,7 @@ type causeway_feat_ApplicationTypeProperty__maxLength__gqlv_property { disabled: String get: Int hidden: Boolean + set(maxLength: Int): causeway_feat_ApplicationTypeProperty validate(maxLength: Int): String } @@ -930,6 +951,7 @@ type causeway_feat_ApplicationTypeProperty__memberName__gqlv_property { disabled: String get: String! hidden: Boolean + set(memberName: String!): causeway_feat_ApplicationTypeProperty validate(memberName: String): String } @@ -937,12 +959,14 @@ 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 } @@ -950,6 +974,7 @@ type causeway_feat_ApplicationTypeProperty__returnType__gqlv_property { disabled: String get: String! hidden: Boolean + set(returnType: String!): causeway_feat_ApplicationTypeProperty validate(returnType: String): String } @@ -957,6 +982,7 @@ type causeway_feat_ApplicationTypeProperty__typeSimpleName__gqlv_property { disabled: String get: String! hidden: Boolean + set(typeSimpleName: String!): causeway_feat_ApplicationTypeProperty validate(typeSimpleName: String): String } @@ -964,6 +990,7 @@ type causeway_feat_ApplicationTypeProperty__typicalLength__gqlv_property { disabled: String get: Int hidden: Boolean + set(typicalLength: Int): causeway_feat_ApplicationTypeProperty validate(typicalLength: Int): String } @@ -988,6 +1015,7 @@ type causeway_feat_ApplicationType__memberName__gqlv_property { disabled: String get: String! hidden: Boolean + set(memberName: String!): causeway_feat_ApplicationType validate(memberName: String): String } @@ -995,12 +1023,14 @@ 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 } @@ -1014,6 +1044,7 @@ type causeway_feat_ApplicationType__typeSimpleName__gqlv_property { disabled: String get: String! hidden: Boolean + set(typeSimpleName: String!): causeway_feat_ApplicationType validate(typeSimpleName: String): String } @@ -1034,6 +1065,7 @@ 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 } @@ -1041,6 +1073,7 @@ 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 } @@ -1048,6 +1081,7 @@ 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 } @@ -1055,6 +1089,7 @@ 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 } @@ -1067,6 +1102,7 @@ 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 } @@ -1074,6 +1110,7 @@ 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 } @@ -1081,6 +1118,7 @@ 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 } @@ -1088,6 +1126,7 @@ 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 } @@ -1095,6 +1134,7 @@ 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 } @@ -1130,6 +1170,7 @@ 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 } @@ -1137,6 +1178,7 @@ 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 } @@ -1149,12 +1191,14 @@ 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 } @@ -1249,6 +1293,7 @@ type org_apache_causeway_core_metamodel_inspect_model_MMNode__gqlv_meta { 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 } @@ -1273,6 +1318,7 @@ type org_apache_causeway_core_metamodel_inspect_model_MemberNode__mixedIn__gqlv_ disabled: String get: Boolean! hidden: Boolean + set(mixedIn: Boolean!): org_apache_causeway_core_metamodel_inspect_model_MemberNode validate(mixedIn: Boolean): String } @@ -1280,6 +1326,7 @@ type org_apache_causeway_core_metamodel_inspect_model_MemberNode__parentNode__gq 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 } @@ -1293,6 +1340,7 @@ type org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__f disabled: String get: String! hidden: Boolean + set(friendlyName: String!): org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript validate(friendlyName: String): String } @@ -1305,6 +1353,7 @@ type org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript__q disabled: String get: String! hidden: Boolean + set(qualifiedName: String!): org_apache_causeway_testing_fixtures_applib_fixturescripts_FixtureScript validate(qualifiedName: String): String } @@ -1324,6 +1373,7 @@ type university_admin_AdminMenu__actionWithDisabledParam__firstParam__gqlv_actio 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 } @@ -1355,6 +1405,7 @@ type university_admin_AdminMenu__actionWithHiddenParam__firstParam__gqlv_action_ 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 } @@ -1373,12 +1424,14 @@ type university_admin_AdminMenu__actionWithHiddenParam__secondParam__gqlv_action 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 } @@ -1881,6 +1934,7 @@ type university_dept_Department { 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 } @@ -1899,6 +1953,7 @@ type university_dept_Department__addStaffMember__staffMember__gqlv_action_parame 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 } @@ -1917,6 +1972,7 @@ type university_dept_Department__addStaffMembers__staffMembers__gqlv_action_para 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 } @@ -1936,6 +1992,7 @@ type university_dept_Department__changeDeptHead__newDeptHead__gqlv_action_parame 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 } @@ -1956,6 +2013,7 @@ type university_dept_Department__deptHead__gqlv_property { 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 } @@ -1969,12 +2027,14 @@ 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 } @@ -2012,6 +2072,7 @@ type university_dept_Departments__createDepartment__deptHead__gqlv_action_parame 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 } @@ -2070,6 +2131,7 @@ type university_dept_DeptHead__changeDepartment__department__gqlv_action_paramet 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 } @@ -2081,6 +2143,7 @@ type university_dept_DeptHead__changeDepartment__gqlv_action_params { 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 } @@ -2101,6 +2164,7 @@ type university_dept_DeptHead__department__gqlv_property { 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 } @@ -2114,6 +2178,7 @@ type university_dept_DeptHead__name__gqlv_property { disabled: String get: String hidden: Boolean + set(name: String): university_dept_DeptHead validate(name: String): String } @@ -2166,6 +2231,7 @@ 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 } @@ -2180,6 +2246,7 @@ type university_dept_StaffMember__grade__gqlv_property { disabled: String get: String! hidden: Boolean + set(grade: String!): university_dept_StaffMember validate(grade: String): String } @@ -2187,6 +2254,7 @@ type university_dept_StaffMember__name__gqlv_property { disabled: String get: String! hidden: Boolean + set(name: String!): university_dept_StaffMember validate(name: String): String } @@ -2194,6 +2262,7 @@ type university_dept_StaffMember__photo__gqlv_property { disabled: String get: String hidden: Boolean + set(photo: String): university_dept_StaffMember validate(photo: String): String } @@ -2207,6 +2276,7 @@ type university_dept_Staff__createStaffMember__department__gqlv_action_parameter 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 } 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 45cfaf186b..4860a59f26 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 @@ -109,22 +109,11 @@ public class GraphQlSourceForCauseway implements GraphQlSource { val codeRegistryBuilder = GraphQLCodeRegistry.newCodeRegistry(); val context = new Context(codeRegistryBuilder, bookmarkService, specificationLoader, typeMapper, serviceRegistry, causewayConfiguration, causewaySystemEnvironment); - 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)) - .toList(); - // top-level query type and (dependent on configuration) the top-level mutation type val topLevelQuery = new GqlvTopLevelQuery(context); - val topLevelMutation = - causewayConfiguration.getViewer().getGraphql().getApiVariant() == CausewayConfiguration.Viewer.Graphql.ApiVariant.QUERY_AND_MUTATIONS ? - new GqlvTopLevelMutation(context) - : null; - // domain objects + val objectSpecifications = context.objectSpecifications(); val domainObjects = new LinkedHashMap<ObjectSpecification, GqlvDomainObject>(); objectSpecifications.forEach(objectSpec -> { switch (objectSpec.getBeanSort()) { @@ -143,44 +132,14 @@ public class GraphQlSourceForCauseway implements GraphQlSource { } }); - - // add services to top-level query - objectSpecifications.forEach(objectSpec -> { - switch (objectSpec.getBeanSort()) { - case MANAGED_BEAN_CONTRIBUTING: // @DomainService - serviceRegistry.lookupBeanById(objectSpec.getLogicalTypeName()) - .ifPresent(servicePojo -> { - topLevelQuery.addDomainService(objectSpec, servicePojo, context); - topLevelQuery.addDataFetchers(); - }); - break; - } - }); - // add lookup to top-level query - domainObjects.forEach((objectSpec, domainObject) -> { - topLevelQuery.addLookupFor(objectSpec, domainObject); - }); - + domainObjects.forEach(topLevelQuery::addLookupFor); 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)); - objectSpec.streamProperties(MixedIn.INCLUDED) - .filter(property -> ! property.isAlwaysHidden()) - .filter(property -> property.containsFacet(PropertySetterFacet.class)) - .forEach(property -> topLevelMutation.addProperty(objectSpec, property)); - - }); - topLevelMutation.buildMutationType(); - topLevelMutation.addDataFetchers(); - } - - + val topLevelMutation = + causewayConfiguration.getViewer().getGraphql().getApiVariant() == CausewayConfiguration.Viewer.Graphql.ApiVariant.QUERY_AND_MUTATIONS ? + new GqlvTopLevelMutation(context) + : null; // finalize the fetcher/mutator code that's been registered 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 822f2948ca..9f11f63532 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,6 +1,7 @@ package org.apache.causeway.viewer.graphql.viewer.toplevel; import java.util.ArrayList; +import java.util.Comparator; import java.util.List; import graphql.schema.FieldCoordinates; @@ -9,7 +10,11 @@ import graphql.schema.GraphQLObjectType; import static graphql.schema.GraphQLObjectType.newObject; +import org.apache.causeway.applib.id.HasLogicalType; +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.ObjectSpecification; +import org.apache.causeway.core.metamodel.spec.feature.MixedIn; 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; @@ -17,6 +22,7 @@ import org.apache.causeway.viewer.graphql.model.domain.GqlvMutationForAction; import org.apache.causeway.viewer.graphql.model.domain.GqlvMutationForProperty; import lombok.Getter; +import lombok.val; public class GqlvTopLevelMutation implements GqlvMutationForAction.Holder, GqlvMutationForProperty.Holder { @@ -38,6 +44,23 @@ public class GqlvTopLevelMutation this.context = context; gqlObjectTypeBuilder = newObject().name("Mutation"); + val objectSpecifications = context.objectSpecifications(); + + objectSpecifications.forEach(objectSpec -> { + objectSpec.streamActions(context.getActionScope(), MixedIn.INCLUDED) + .filter(x -> ! x.getSemantics().isSafeInNature()) + .forEach(objectAction -> addAction(objectSpec, objectAction)); + objectSpec.streamProperties(MixedIn.INCLUDED) + .filter(property -> ! property.isAlwaysHidden()) + .filter(property -> property.containsFacet(PropertySetterFacet.class)) + .forEach(property -> addProperty(objectSpec, property)); + + }); + + buildMutationType(); + + addDataFetchers(); + } 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 3404f8f05a..cb2c7d5643 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 java.util.ArrayList; +import java.util.Comparator; +import java.util.LinkedHashMap; import java.util.List; import graphql.schema.DataFetcher; @@ -13,6 +15,8 @@ import graphql.schema.GraphQLObjectType; import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; import static graphql.schema.GraphQLObjectType.newObject; +import org.apache.causeway.applib.id.HasLogicalType; +import org.apache.causeway.commons.functional.Either; 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.GqlvAction; @@ -40,6 +44,24 @@ public class GqlvTopLevelQuery implements GqlvDomainService.Holder { public GqlvTopLevelQuery(Context context) { this.context = context; queryBuilder = newObject().name("Query"); + + val objectSpecifications = context.objectSpecifications(); + + + // add services to top-level query + objectSpecifications.forEach(objectSpec -> { + switch (objectSpec.getBeanSort()) { + case MANAGED_BEAN_CONTRIBUTING: // @DomainService + context.serviceRegistry.lookupBeanById(objectSpec.getLogicalTypeName()) + .ifPresent(servicePojo -> { + addDomainService(objectSpec, servicePojo, context); + addDataFetchers(); + }); + break; + } + }); + + }
