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/24 19:53:46 UTC
(causeway) 06/09: CAUSEWAY-3676: factors out GqlvAssociationGet
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 fe71add7b09c54ee38c3e164250945072b337e37
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Wed Jan 24 13:07:39 2024 +0000
CAUSEWAY-3676: factors out GqlvAssociationGet
---
.../graphql/model/domain/GqlvAssociation.java | 36 ----------
...qlvPropertyGet.java => GqlvAssociationGet.java} | 39 ++++++-----
...etHolder.java => GqlvAssociationGetHolder.java} | 6 +-
.../graphql/model/domain/GqlvCollection.java | 3 +-
.../graphql/model/domain/GqlvCollectionGet.java | 79 +++------------------
.../model/domain/GqlvCollectionGetHolder.java | 3 +-
.../graphql/model/domain/GqlvCollectionSimple.java | 60 ----------------
.../graphql/model/domain/GqlvDomainObject.java | 9 ---
.../viewer/graphql/model/domain/GqlvProperty.java | 2 +-
.../graphql/model/domain/GqlvPropertyGet.java | 80 +++-------------------
.../model/domain/GqlvPropertyGetHolder.java | 3 +-
11 files changed, 49 insertions(+), 271 deletions(-)
diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java
index d372fae02d..4b8f31bf96 100644
--- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java
+++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociation.java
@@ -57,40 +57,4 @@ public abstract class GqlvAssociation<T extends ObjectAssociation, H extends Gql
return getObjectMember();
}
- public void addDataFetcher() {
-
- final ObjectAssociation association = getObjectAssociation();
- final ObjectSpecification fieldObjectSpecification = association.getElementType();
- final BeanSort beanSort = fieldObjectSpecification.getBeanSort();
-
- switch (beanSort) {
-
- case VALUE:
- case VIEW_MODEL:
- case ENTITY:
-
- codeRegistryBuilder.dataFetcher(
- getHolder().coordinatesFor(getField()),
- (DataFetcher<Object>) environment -> {
-
- Object domainObjectInstance = environment.getSource();
-
- Class<?> domainObjectInstanceClass = domainObjectInstance.getClass();
- ObjectSpecification specification = specificationLoader.loadSpecification(domainObjectInstanceClass);
- if (specification == null) {
- return null;
- }
-
- // TODO: probably incorrect to adapt as a singular here.
- ManagedObject owner = ManagedObject.adaptSingular(specification, domainObjectInstance);
- ManagedObject managedObject = association.get(owner);
-
- return managedObject!=null ? managedObject.getPojo() : null;
- });
-
- break;
-
- }
- }
-
}
diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGet.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGet.java
similarity index 71%
copy from incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGet.java
copy to incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGet.java
index 37ec2cf782..fb8a32d616 100644
--- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGet.java
+++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGet.java
@@ -19,6 +19,9 @@
package org.apache.causeway.viewer.graphql.model.domain;
import org.apache.causeway.core.metamodel.object.ManagedObject;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
+import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
import lombok.val;
@@ -30,27 +33,27 @@ import graphql.schema.GraphQLOutputType;
import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
-public class GqlvPropertyGet {
+public abstract class GqlvAssociationGet<T extends ObjectAssociation> {
- private final GqlvPropertyGetHolder holder;
- private final GraphQLCodeRegistry.Builder codeRegistryBuilder;
- private final GraphQLFieldDefinition field;
+ final GqlvAssociationGetHolder<T> holder;
+ final GraphQLCodeRegistry.Builder codeRegistryBuilder;
+ final SpecificationLoader specificationLoader;
+ final GraphQLFieldDefinition field;
-
- public GqlvPropertyGet(
- final GqlvPropertyGetHolder holder,
- final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
+ public GqlvAssociationGet(
+ final GqlvAssociationGetHolder<T> holder,
+ final GraphQLCodeRegistry.Builder codeRegistryBuilder,
+ final SpecificationLoader specificationLoader) {
this.holder = holder;
this.codeRegistryBuilder = codeRegistryBuilder;
this.field = fieldDefinition(holder);
+ this.specificationLoader = specificationLoader;
}
- private static GraphQLFieldDefinition fieldDefinition(final GqlvPropertyGetHolder holder) {
-
- val oneToOneAssociation = holder.getOneToOneAssociation();
+ GraphQLFieldDefinition fieldDefinition(final GqlvAssociationGetHolder<T> holder) {
GraphQLFieldDefinition fieldDefinition = null;
- GraphQLOutputType type = TypeMapper.outputTypeFor(oneToOneAssociation);
+ GraphQLOutputType type = outputTypeFor(holder);
if (type != null) {
val fieldBuilder = newFieldDefinition()
.name("get")
@@ -62,13 +65,14 @@ public class GqlvPropertyGet {
return fieldDefinition;
}
- public void addDataFetcher() {
+ abstract GraphQLOutputType outputTypeFor(GqlvAssociationGetHolder<T> holder);
+
+ void addDataFetcher() {
- val association = holder.getOneToOneAssociation();
+ val association = holder.getObjectAssociation();
val fieldObjectSpecification = association.getElementType();
val beanSort = fieldObjectSpecification.getBeanSort();
- val specificationLoader = association.getSpecificationLoader();
switch (beanSort) {
case VALUE:
@@ -84,14 +88,13 @@ public class GqlvPropertyGet {
}
}
- private Object get(final DataFetchingEnvironment dataFetchingEnvironment) {
+ Object get(final DataFetchingEnvironment dataFetchingEnvironment) {
- val association = holder.getOneToOneAssociation();
+ val association = holder.getObjectAssociation();
val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment);
val sourcePojoClass = sourcePojo.getClass();
- val specificationLoader = association.getSpecificationLoader();
val objectSpecification = specificationLoader.loadSpecification(sourcePojoClass);
if (objectSpecification == null) {
// not expected
diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetHolder.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGetHolder.java
similarity index 81%
copy from incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetHolder.java
copy to incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGetHolder.java
index 6929661150..60374717b1 100644
--- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetHolder.java
+++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationGetHolder.java
@@ -18,9 +18,9 @@
*/
package org.apache.causeway.viewer.graphql.model.domain;
-import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
-public interface GqlvPropertyGetHolder extends GqlvHolder {
+public interface GqlvAssociationGetHolder<T extends ObjectAssociation> extends GqlvHolder {
- OneToOneAssociation getOneToOneAssociation();
+ T getObjectAssociation();
}
diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java
index 488223bd98..f8abc10017 100644
--- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java
+++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollection.java
@@ -20,7 +20,6 @@ package org.apache.causeway.viewer.graphql.model.domain;
import org.apache.causeway.applib.services.bookmark.BookmarkService;
import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
-import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
import org.apache.causeway.viewer.graphql.model.util.TypeNames;
import lombok.val;
@@ -57,7 +56,7 @@ public class GqlvCollection extends GqlvAssociation<OneToManyAssociation, GqlvCo
this.hidden = new GqlvMemberHidden(this, codeRegistryBuilder);
this.disabled = new GqlvMemberDisabled(this, codeRegistryBuilder);
- this.get = new GqlvCollectionGet(this, codeRegistryBuilder);
+ this.get = new GqlvCollectionGet(this, codeRegistryBuilder, specificationLoader);
this.gqlObjectType = gqlObjectTypeBuilder.build();
diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionGet.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionGet.java
index faec3d340a..d71e317bcd 100644
--- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionGet.java
+++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionGet.java
@@ -19,6 +19,8 @@
package org.apache.causeway.viewer.graphql.model.domain;
import org.apache.causeway.core.metamodel.object.ManagedObject;
+import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
import lombok.val;
@@ -30,80 +32,19 @@ import graphql.schema.GraphQLOutputType;
import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
-public class GqlvCollectionGet {
-
- private final GqlvCollectionGetHolder holder;
- private final GraphQLCodeRegistry.Builder codeRegistryBuilder;
- private final GraphQLFieldDefinition field;
-
+public class GqlvCollectionGet extends GqlvAssociationGet<OneToManyAssociation> {
public GqlvCollectionGet(
final GqlvCollectionGetHolder holder,
- final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
- this.holder = holder;
- this.codeRegistryBuilder = codeRegistryBuilder;
- this.field = fieldDefinition(holder);
- }
-
- private static GraphQLFieldDefinition fieldDefinition(final GqlvCollectionGetHolder holder) {
-
- val oneToManyAssociation = holder.getOneToManyAssociation();
-
- GraphQLFieldDefinition fieldDefinition = null;
- GraphQLOutputType type = TypeMapper.listTypeForElementTypeOf(oneToManyAssociation);
- if (type != null) {
- val fieldBuilder = newFieldDefinition()
- .name("get")
- .type(type);
- fieldDefinition = fieldBuilder.build();
-
- holder.addField(fieldDefinition);
- }
- return fieldDefinition;
- }
-
- public void addDataFetcher() {
-
- val association = holder.getOneToManyAssociation();
- val fieldObjectSpecification = association.getElementType();
- val beanSort = fieldObjectSpecification.getBeanSort();
-
- switch (beanSort) {
-
- case VALUE:
- case VIEW_MODEL:
- case ENTITY:
-
- codeRegistryBuilder.dataFetcher(
- holder.coordinatesFor(field),
- this::get);
-
- break;
-
- }
+ final GraphQLCodeRegistry.Builder codeRegistryBuilder,
+ final SpecificationLoader specificationLoader) {
+ super(holder, codeRegistryBuilder, specificationLoader);
}
- private Object get(final DataFetchingEnvironment dataFetchingEnvironment) {
-
- val association = holder.getOneToManyAssociation();
-
- val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment);
-
- val sourcePojoClass = sourcePojo.getClass();
- val specificationLoader = association.getSpecificationLoader();
- val objectSpecification = specificationLoader.loadSpecification(sourcePojoClass);
- if (objectSpecification == null) {
- // not expected
- return null;
- }
-
- // TODO: probably incorrect to adapt as a singular here?
- val managedObject = ManagedObject.adaptSingular(objectSpecification, sourcePojo);
- val resultManagedObject = association.get(managedObject);
-
- return resultManagedObject != null
- ? resultManagedObject.getPojo()
- : null;
+ @Override
+ GraphQLOutputType outputTypeFor(GqlvAssociationGetHolder<OneToManyAssociation> holder) {
+ val oneToManyAssociation = holder.getObjectAssociation();
+ return TypeMapper.listTypeForElementTypeOf(oneToManyAssociation);
}
}
diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionGetHolder.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionGetHolder.java
index be3dc7a899..326a27654c 100644
--- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionGetHolder.java
+++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionGetHolder.java
@@ -20,7 +20,6 @@ package org.apache.causeway.viewer.graphql.model.domain;
import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
-public interface GqlvCollectionGetHolder extends GqlvHolder {
+public interface GqlvCollectionGetHolder extends GqlvAssociationGetHolder<OneToManyAssociation> {
- OneToManyAssociation getOneToManyAssociation();
}
diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionSimple.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionSimple.java
deleted file mode 100644
index eb4a867652..0000000000
--- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionSimple.java
+++ /dev/null
@@ -1,60 +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.model.domain;
-
-import org.springframework.lang.Nullable;
-
-import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
-import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
-
-import graphql.schema.GraphQLCodeRegistry;
-import graphql.schema.GraphQLFieldDefinition;
-import graphql.schema.GraphQLList;
-
-import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
-
-public class GqlvCollectionSimple extends GqlvAssociation<OneToManyAssociation, GqlvCollectionHolder> {
-
- public GqlvCollectionSimple(
- final GqlvCollectionHolder domainObject,
- final OneToManyAssociation oneToManyAssociation,
- final GraphQLCodeRegistry.Builder codeRegistryBuilder
- ) {
- super(domainObject, oneToManyAssociation, fieldDefinition(domainObject, oneToManyAssociation), codeRegistryBuilder);
- }
-
- @Nullable private static GraphQLFieldDefinition fieldDefinition(
- final GqlvCollectionHolder holder,
- final OneToManyAssociation otom) {
- GraphQLList type = TypeMapper.listTypeForElementTypeOf(otom);
- GraphQLFieldDefinition fieldDefinition = null;
- if (type != null) {
- fieldDefinition = newFieldDefinition()
- .name(otom.getId())
- .type(type).build();
- holder.addField(fieldDefinition);
- }
- return fieldDefinition;
- }
-
- public OneToManyAssociation getOneToManyAssociation() {
- return getObjectAssociation();
- }
-
-}
diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
index 13b328cfd9..fc831fad44 100644
--- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
+++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObject.java
@@ -65,7 +65,6 @@ public class GqlvDomainObject implements GqlvActionHolder, GqlvPropertyHolder, G
private final SortedMap<String, GqlvProperty> properties = new TreeMap<>();
private final SortedMap<String, GqlvCollection> collections = new TreeMap<>();
- private final SortedMap<String, GqlvCollectionSimple> collectionSimples = new TreeMap<>();
private final Map<String, GqlvAction> safeActions = new TreeMap<>();
private GraphQLObjectType gqlObjectType;
@@ -132,13 +131,6 @@ public class GqlvDomainObject implements GqlvActionHolder, GqlvPropertyHolder, G
collections.put(collectionId, collection);
}
}
-// GqlvCollectionSimple collection = new GqlvCollectionSimple(this, otom, codeRegistryBuilder);
-// if (collection.hasFieldDefinition()) {
-// String collectionId = collection.getId();
-// if (!collectionSimples.containsKey(collectionId)) {
-// collectionSimples.put(collectionId, collection);
-// }
-// }
}
private void addAction(final ObjectAction objectAction) {
@@ -177,7 +169,6 @@ public class GqlvDomainObject implements GqlvActionHolder, GqlvPropertyHolder, G
meta.addDataFetchers();
properties.forEach((id, property) -> property.addDataFetcher());
collections.forEach((id, collection) -> collection.addDataFetcher());
-// collectionSimples.forEach((id, collection) -> collection.addDataFetcher());
safeActions.forEach((id, action) -> action.addDataFetcher());
mutations.addDataFetchers();
}
diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java
index 2c6677b117..14c4ee2606 100644
--- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java
+++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvProperty.java
@@ -57,7 +57,7 @@ public class GqlvProperty extends GqlvAssociation<OneToOneAssociation, GqlvPrope
this.hidden = new GqlvMemberHidden(this, codeRegistryBuilder);
this.disabled = new GqlvMemberDisabled(this, codeRegistryBuilder);
- this.get = new GqlvPropertyGet(this, codeRegistryBuilder);
+ this.get = new GqlvPropertyGet(this, codeRegistryBuilder, specificationLoader);
this.gqlObjectType = gqlObjectTypeBuilder.build();
diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGet.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGet.java
index 37ec2cf782..d67944f14f 100644
--- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGet.java
+++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGet.java
@@ -19,6 +19,9 @@
package org.apache.causeway.viewer.graphql.model.domain;
import org.apache.causeway.core.metamodel.object.ManagedObject;
+import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
import org.apache.causeway.viewer.graphql.model.types.TypeMapper;
import lombok.val;
@@ -30,80 +33,19 @@ import graphql.schema.GraphQLOutputType;
import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
-public class GqlvPropertyGet {
-
- private final GqlvPropertyGetHolder holder;
- private final GraphQLCodeRegistry.Builder codeRegistryBuilder;
- private final GraphQLFieldDefinition field;
-
+public class GqlvPropertyGet extends GqlvAssociationGet<OneToOneAssociation> {
public GqlvPropertyGet(
final GqlvPropertyGetHolder holder,
- final GraphQLCodeRegistry.Builder codeRegistryBuilder) {
- this.holder = holder;
- this.codeRegistryBuilder = codeRegistryBuilder;
- this.field = fieldDefinition(holder);
- }
-
- private static GraphQLFieldDefinition fieldDefinition(final GqlvPropertyGetHolder holder) {
-
- val oneToOneAssociation = holder.getOneToOneAssociation();
-
- GraphQLFieldDefinition fieldDefinition = null;
- GraphQLOutputType type = TypeMapper.outputTypeFor(oneToOneAssociation);
- if (type != null) {
- val fieldBuilder = newFieldDefinition()
- .name("get")
- .type(type);
- fieldDefinition = fieldBuilder.build();
-
- holder.addField(fieldDefinition);
- }
- return fieldDefinition;
- }
-
- public void addDataFetcher() {
-
- val association = holder.getOneToOneAssociation();
- val fieldObjectSpecification = association.getElementType();
- val beanSort = fieldObjectSpecification.getBeanSort();
-
- val specificationLoader = association.getSpecificationLoader();
- switch (beanSort) {
-
- case VALUE:
- case VIEW_MODEL:
- case ENTITY:
-
- codeRegistryBuilder.dataFetcher(
- holder.coordinatesFor(field),
- this::get);
-
- break;
-
- }
+ final GraphQLCodeRegistry.Builder codeRegistryBuilder,
+ final SpecificationLoader specificationLoader) {
+ super(holder, codeRegistryBuilder, specificationLoader);
}
- private Object get(final DataFetchingEnvironment dataFetchingEnvironment) {
-
- val association = holder.getOneToOneAssociation();
-
- val sourcePojo = BookmarkedPojo.sourceFrom(dataFetchingEnvironment);
-
- val sourcePojoClass = sourcePojo.getClass();
- val specificationLoader = association.getSpecificationLoader();
- val objectSpecification = specificationLoader.loadSpecification(sourcePojoClass);
- if (objectSpecification == null) {
- // not expected
- return null;
- }
-
- val managedObject = ManagedObject.adaptSingular(objectSpecification, sourcePojo);
- val resultManagedObject = association.get(managedObject);
-
- return resultManagedObject != null
- ? resultManagedObject.getPojo()
- : null;
+ @Override
+ GraphQLOutputType outputTypeFor(GqlvAssociationGetHolder<OneToOneAssociation> holder) {
+ val oneToOneAssociation = holder.getObjectAssociation();
+ return TypeMapper.outputTypeFor(oneToOneAssociation);
}
}
diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetHolder.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetHolder.java
index 6929661150..0f68abb1a6 100644
--- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetHolder.java
+++ b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyGetHolder.java
@@ -20,7 +20,6 @@ package org.apache.causeway.viewer.graphql.model.domain;
import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
-public interface GqlvPropertyGetHolder extends GqlvHolder {
+public interface GqlvPropertyGetHolder extends GqlvAssociationGetHolder<OneToOneAssociation> {
- OneToOneAssociation getOneToOneAssociation();
}