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
The following commit(s) were added to refs/heads/CAUSEWAY-3676 by this push:
new dd9883f066 CAUSEWAY-3676: inlines ObjectTypeFactory
dd9883f066 is described below
commit dd9883f066a33df76030c7fcc2c4ff8940ed0758
Author: danhaywood <[email protected]>
AuthorDate: Sat Jan 20 10:56:03 2024 +0000
CAUSEWAY-3676: inlines ObjectTypeFactory
---
.../integration/GraphQlSourceForCauseway.java | 59 ++++++++++++++++------
.../graphql/viewer/source/ObjectTypeFactory.java | 27 ----------
.../graphql/viewer/source/QueryFieldFactory.java | 52 -------------------
3 files changed, 44 insertions(+), 94 deletions(-)
diff --git
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
index 5c24c29be4..17215e4282 100644
---
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
+++
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/integration/GraphQlSourceForCauseway.java
@@ -31,15 +31,16 @@ import javax.inject.Inject;
import org.apache.causeway.applib.id.HasLogicalType;
+import org.apache.causeway.applib.services.bookmark.BookmarkService;
+import org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
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.viewer.graphql.model.domain.GqlvDomainObject;
import org.apache.causeway.viewer.graphql.model.domain.GqlvDomainService;
import org.apache.causeway.viewer.graphql.viewer.source.GqlvTopLevelQuery;
import org.apache.causeway.viewer.graphql.model.registry.GraphQLTypeRegistry;
-import org.apache.causeway.viewer.graphql.viewer.source.ObjectTypeFactory;
-import org.apache.causeway.viewer.graphql.viewer.source.QueryFieldFactory;
import org.springframework.graphql.execution.GraphQlSource;
import org.springframework.stereotype.Service;
@@ -52,6 +53,7 @@ import
org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
import graphql.GraphQL;
import graphql.schema.GraphQLCodeRegistry;
+import graphql.schema.GraphQLObjectType;
import graphql.schema.GraphQLSchema;
import lombok.RequiredArgsConstructor;
@@ -61,16 +63,14 @@ import lombok.val;
@RequiredArgsConstructor(onConstructor_ = {@Inject})
public class GraphQlSourceForCauseway implements GraphQlSource {
- private final ServiceRegistry serviceRegistry;
- private final SpecificationLoader specificationLoader;
private final CausewayConfiguration causewayConfiguration;
private final CausewaySystemEnvironment causewaySystemEnvironment;
-
- private final AsyncExecutionStrategyResolvingWithinInteraction
executionStrategy;
-
- private final ObjectTypeFactory objectTypeFactory;
- private final QueryFieldFactory queryFieldFactory;
+ private final SpecificationLoader specificationLoader;
+ private final ServiceRegistry serviceRegistry;
+ private final ObjectManager objectManager;
+ private final BookmarkService bookmarkService;
private final GraphQLTypeRegistry graphQLTypeRegistry;
+ private final AsyncExecutionStrategyResolvingWithinInteraction
executionStrategy;
@PostConstruct
public void init() {
@@ -134,15 +134,15 @@ public class GraphQlSourceForCauseway implements
GraphQlSource {
case MANAGED_BEAN_CONTRIBUTING: // @DomainService
- addServiceToTopLevelQuery(objectSpec, gqlvTopLevelQuery,
codeRegistryBuilder);
+ addDomainServiceToTopLevelQuery(objectSpec, gqlvTopLevelQuery,
codeRegistryBuilder);
break;
case ABSTRACT:
+ // TODO: App interface should map to gql interfaces?
case VIEW_MODEL: // @DomainObject(nature=VIEW_MODEL)
case ENTITY: // @DomainObject(nature=ENTITY)
- // TODO: App interface should map to gql interfaces?
- objectTypeFactory.createGqlObjectTypeWithFetchers(objectSpec,
codeRegistryBuilder);
+ addDomainObjectAsGqlObjectType(objectSpec,
codeRegistryBuilder);
break;
@@ -156,18 +156,18 @@ public class GraphQlSourceForCauseway implements
GraphQlSource {
}
}
- public void addServiceToTopLevelQuery(
+ public void addDomainServiceToTopLevelQuery(
final ObjectSpecification objectSpec,
final GqlvTopLevelQuery topLevelQueryStructure,
final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
serviceRegistry.lookupBeanById(objectSpec.getLogicalTypeName())
.ifPresent(service -> {
- addServiceToTopLevelQuery(service, objectSpec,
topLevelQueryStructure, codeRegistryBuilder);
+ addDomainServiceToTopLevelQuery(service, objectSpec,
topLevelQueryStructure, codeRegistryBuilder);
});
}
- private void addServiceToTopLevelQuery(
+ private void addDomainServiceToTopLevelQuery(
final Object service,
final ObjectSpecification objectSpec,
final GqlvTopLevelQuery topLevelQueryStructure,
@@ -192,4 +192,33 @@ public class GraphQlSourceForCauseway implements
GraphQlSource {
topLevelQueryStructure.addFieldFor(domainService, codeRegistryBuilder);
}
+
+ public void addDomainObjectAsGqlObjectType(
+ final ObjectSpecification objectSpec,
+ final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
+
+ val gqlvDomainObject = new GqlvDomainObject(objectSpec,
codeRegistryBuilder, bookmarkService, objectManager, specificationLoader);
+
+
graphQLTypeRegistry.addTypeIfNotAlreadyPresent(gqlvDomainObject.getMetaField().getType());
+
graphQLTypeRegistry.addTypeIfNotAlreadyPresent(gqlvDomainObject.getGqlInputObjectType());
+
+ gqlvDomainObject.addPropertiesAsFields();
+ gqlvDomainObject.addCollectionsAsLists();
+ gqlvDomainObject.addActionsAsFields();
+
+ gqlvDomainObject.getMutatorsTypeIfAny()
+ .ifPresent(graphQLTypeRegistry::addTypeIfNotAlreadyPresent);
+
+ // build and register object type
+ GraphQLObjectType graphQLObjectType =
gqlvDomainObject.buildGqlObjectType();
+ graphQLTypeRegistry.addTypeIfNotAlreadyPresent(graphQLObjectType);
+
+ // create and register data fetchers
+ gqlvDomainObject.createAndRegisterDataFetchersForMetaData();
+ gqlvDomainObject.createAndRegisterDataFetchersForMutators();
+
+ gqlvDomainObject.createAndRegisterDataFetchersForField();
+ gqlvDomainObject.createAndRegisterDataFetchersForCollection();
+ }
+
}
diff --git
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/ObjectTypeFactory.java
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/ObjectTypeFactory.java
index a07905bcce..cfae222aee 100644
---
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/ObjectTypeFactory.java
+++
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/ObjectTypeFactory.java
@@ -47,32 +47,5 @@ public class ObjectTypeFactory {
private final ObjectManager objectManager;
private final SpecificationLoader specificationLoader;
- public void createGqlObjectTypeWithFetchers(
- final ObjectSpecification objectSpec,
- final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
-
- val gqlvDomainObject = new GqlvDomainObject(objectSpec,
codeRegistryBuilder, bookmarkService, objectManager, specificationLoader);
-
-
graphQLTypeRegistry.addTypeIfNotAlreadyPresent(gqlvDomainObject.getMetaField().getType());
-
graphQLTypeRegistry.addTypeIfNotAlreadyPresent(gqlvDomainObject.getGqlInputObjectType());
-
- gqlvDomainObject.addPropertiesAsFields();
- gqlvDomainObject.addCollectionsAsLists();
- gqlvDomainObject.addActionsAsFields();
-
- gqlvDomainObject.getMutatorsTypeIfAny()
- .ifPresent(graphQLTypeRegistry::addTypeIfNotAlreadyPresent);
-
- // build and register object type
- GraphQLObjectType graphQLObjectType =
gqlvDomainObject.buildGqlObjectType();
- graphQLTypeRegistry.addTypeIfNotAlreadyPresent(graphQLObjectType);
-
- // create and register data fetchers
- gqlvDomainObject.createAndRegisterDataFetchersForMetaData();
- gqlvDomainObject.createAndRegisterDataFetchersForMutators();
-
- gqlvDomainObject.createAndRegisterDataFetchersForField();
- gqlvDomainObject.createAndRegisterDataFetchersForCollection();
- }
}
diff --git
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/QueryFieldFactory.java
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/QueryFieldFactory.java
deleted file mode 100644
index 724df42b07..0000000000
---
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/QueryFieldFactory.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * 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.source;
-
-import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
-import static graphql.schema.GraphQLObjectType.newObject;
-
-import java.util.List;
-import java.util.stream.Collectors;
-
-import javax.inject.Inject;
-
-import org.apache.causeway.viewer.graphql.model.domain.GqlvDomainService;
-
-import org.springframework.stereotype.Component;
-
-import org.apache.causeway.applib.services.registry.ServiceRegistry;
-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.specloader.SpecificationLoader;
-
-import graphql.schema.GraphQLCodeRegistry;
-
-import lombok.RequiredArgsConstructor;
-import lombok.val;
-
-@Component
-@RequiredArgsConstructor(onConstructor_ = {@Inject})
-public class QueryFieldFactory {
-
- private final ServiceRegistry serviceRegistry;
- private final SpecificationLoader specificationLoader;
-
-
-}