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 a680b35aff34fd9842f25209782612705beecc45
Author: danhaywood <[email protected]>
AuthorDate: Sat Jan 20 17:35:35 2024 +0000

    CAUSEWAY-3676: introduces GqlvMemberHolder and subclasses; starting to move 
fetcher logic to members
---
 .../viewer/graphql/model/domain/GqlvAction.java    | 10 ++--
 .../graphql/model/domain/GqlvActionHolder.java     |  4 ++
 .../graphql/model/domain/GqlvAssociation.java      | 61 ++++++++++++++++++++--
 .../model/domain/GqlvAssociationHolder.java        |  4 ++
 .../graphql/model/domain/GqlvCollection.java       | 16 ++++--
 .../graphql/model/domain/GqlvCollectionHolder.java |  4 ++
 .../graphql/model/domain/GqlvDomainObject.java     | 55 +++----------------
 .../model/domain/GqlvDomainObjectMutators.java     | 15 ++++--
 .../graphql/model/domain/GqlvDomainService.java    |  4 +-
 .../viewer/graphql/model/domain/GqlvMember.java    | 14 +++--
 .../graphql/model/domain/GqlvMemberHolder.java     |  7 +++
 .../viewer/graphql/model/domain/GqlvProperty.java  | 12 +++--
 .../graphql/model/domain/GqlvPropertyHolder.java   |  4 ++
 13 files changed, 143 insertions(+), 67 deletions(-)

diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
index 46680c1a42..5048fba08c 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAction.java
@@ -2,14 +2,18 @@ package org.apache.causeway.viewer.graphql.model.domain;
 
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 
+import graphql.schema.GraphQLCodeRegistry;
 import graphql.schema.GraphQLFieldDefinition;
 
-public class GqlvAction extends GqlvMember<ObjectAction> {
+public class GqlvAction extends GqlvMember<ObjectAction, GqlvActionHolder> {
 
     public GqlvAction(
+            final GqlvActionHolder holder,
             final ObjectAction objectAction,
-            final GraphQLFieldDefinition fieldDefinition) {
-        super(objectAction, fieldDefinition);
+            final GraphQLFieldDefinition fieldDefinition,
+            final GraphQLCodeRegistry.Builder codeRegistryBuilder
+    ) {
+        super(holder, objectAction, fieldDefinition, codeRegistryBuilder);
     }
 
     public ObjectAction getObjectAction() {
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionHolder.java
new file mode 100644
index 0000000000..00293a11be
--- /dev/null
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionHolder.java
@@ -0,0 +1,4 @@
+package org.apache.causeway.viewer.graphql.model.domain;
+
+public interface GqlvActionHolder extends GqlvMemberHolder {
+}
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 a20feed24c..1e38e89de8 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
@@ -1,15 +1,32 @@
 package org.apache.causeway.viewer.graphql.model.domain;
 
+import org.apache.causeway.applib.services.metamodel.BeanSort;
+import org.apache.causeway.core.metamodel.object.ManagedObject;
+import org.apache.causeway.core.metamodel.spec.ObjectSpecification;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
+import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
 
+import graphql.schema.DataFetcher;
+import graphql.schema.GraphQLCodeRegistry;
 import graphql.schema.GraphQLFieldDefinition;
+import graphql.schema.GraphQLObjectType;
 
-public abstract class GqlvAssociation<T extends ObjectAssociation> extends 
GqlvMember<T> {
+import static graphql.schema.FieldCoordinates.coordinates;
+
+public abstract class GqlvAssociation<T extends ObjectAssociation, H extends 
GqlvAssociationHolder> extends GqlvMember<T, H> {
+
+
+    private final SpecificationLoader specificationLoader;
 
     public GqlvAssociation(
+            final H holder,
             final T objectAssociation,
-            final GraphQLFieldDefinition fieldDefinition) {
-        super(objectAssociation, fieldDefinition);
+            final GraphQLFieldDefinition fieldDefinition,
+            final GraphQLCodeRegistry.Builder codeRegistryBuilder,
+            final SpecificationLoader specificationLoader
+            ) {
+        super(holder, objectAssociation, fieldDefinition, codeRegistryBuilder);
+        this.specificationLoader = specificationLoader;
     }
 
     /**
@@ -18,4 +35,42 @@ public abstract class GqlvAssociation<T extends 
ObjectAssociation> extends GqlvM
     public T getObjectAssociation() {
         return getObjectMember();
     }
+
+    public void addDataFetcher() {
+
+        final ObjectAssociation association = getObjectMember();
+        final GraphQLFieldDefinition field = getFieldDefinition();
+
+        final GraphQLObjectType graphQLObjectType = 
getHolder().getGqlObjectType();
+
+        ObjectSpecification fieldObjectSpecification = 
association.getElementType();
+        BeanSort beanSort = fieldObjectSpecification.getBeanSort();
+        switch (beanSort) {
+
+            case VALUE: //TODO: does this work for values as well?
+
+            case VIEW_MODEL:
+
+            case ENTITY:
+
+                codeRegistryBuilder.dataFetcher(
+                        coordinates(graphQLObjectType, field),
+                        (DataFetcher<Object>) environment -> {
+
+                            Object domainObjectInstance = 
environment.getSource();
+
+                            Class<?> domainObjectInstanceClass = 
domainObjectInstance.getClass();
+                            ObjectSpecification specification = 
specificationLoader.loadSpecification(domainObjectInstanceClass);
+
+                            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/GqlvAssociationHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationHolder.java
new file mode 100644
index 0000000000..ff635928a1
--- /dev/null
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvAssociationHolder.java
@@ -0,0 +1,4 @@
+package org.apache.causeway.viewer.graphql.model.domain;
+
+public interface GqlvAssociationHolder extends GqlvMemberHolder {
+}
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 051ffaab0c..edd22e2c1a 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
@@ -1,18 +1,28 @@
 package org.apache.causeway.viewer.graphql.model.domain;
 
+import graphql.schema.GraphQLCodeRegistry;
 import graphql.schema.GraphQLFieldDefinition;
 
 import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
+import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
 
-public class GqlvCollection extends GqlvAssociation<OneToManyAssociation> {
+public class GqlvCollection extends GqlvAssociation<OneToManyAssociation, 
GqlvCollectionHolder> {
 
     public GqlvCollection(
+            final GqlvCollectionHolder domainObject,
             final OneToManyAssociation oneToManyAssociation,
-            final GraphQLFieldDefinition fieldDefinition) {
-        super(oneToManyAssociation, fieldDefinition);
+            final GraphQLFieldDefinition fieldDefinition,
+            final GraphQLCodeRegistry.Builder codeRegistryBuilder,
+            final SpecificationLoader specificationLoader
+    ) {
+        super(domainObject, oneToManyAssociation, fieldDefinition, 
codeRegistryBuilder, specificationLoader);
     }
 
     public OneToManyAssociation getOneToManyAssociation() {
         return getObjectAssociation();
     }
+
+    public void addDataFetcher() {
+
+    }
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionHolder.java
new file mode 100644
index 0000000000..9ceb6c471f
--- /dev/null
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvCollectionHolder.java
@@ -0,0 +1,4 @@
+package org.apache.causeway.viewer.graphql.model.domain;
+
+public interface    GqlvCollectionHolder extends GqlvAssociationHolder {
+}
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 2cad9f1198..9712762d5b 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
@@ -10,14 +10,12 @@ import java.util.stream.Collectors;
 import org.apache.causeway.applib.services.bookmark.BookmarkService;
 import org.apache.causeway.applib.services.metamodel.BeanSort;
 import org.apache.causeway.commons.collections.Can;
-import org.apache.causeway.core.metamodel.object.ManagedObject;
 import org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
 import org.apache.causeway.core.metamodel.spec.ActionScope;
 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.ObjectActionParameter;
-import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
 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;
@@ -30,7 +28,6 @@ import static graphql.schema.FieldCoordinates.coordinates;
 
 import static 
org.apache.causeway.viewer.graphql.model.types._Constants.GQL_INPUTTYPE_PREFIX;
 
-import graphql.schema.DataFetcher;
 import graphql.schema.GraphQLCodeRegistry;
 
 import lombok.Getter;
@@ -56,7 +53,7 @@ import static graphql.schema.GraphQLTypeReference.typeRef;
 /**
  * A wrapper around {@link ObjectSpecification}
  */
-public class GqlvDomainObject {
+public class GqlvDomainObject implements GqlvActionHolder, GqlvPropertyHolder, 
GqlvCollectionHolder {
 
     @Getter private final GqlvDomainObjectMeta meta;
     @Getter private final GqlvDomainObjectMutators mutators;
@@ -113,7 +110,7 @@ public class GqlvDomainObject {
         this.gqlObjectTypeBuilder = 
newObject().name(getLogicalTypeNameSanitized());
 
         meta = new GqlvDomainObjectMeta(this, codeRegistryBuilder, 
bookmarkService, objectManager);
-        mutators = new GqlvDomainObjectMutators(this);
+        mutators = new GqlvDomainObjectMutators(this, codeRegistryBuilder);
 
         // input object type
         String inputTypeName = GQL_INPUTTYPE_PREFIX + 
getLogicalTypeNameSanitized();
@@ -172,7 +169,7 @@ public class GqlvDomainObject {
                 break;
         }
         if (fieldDefinition != null) {
-            properties.add(new GqlvProperty(otoa, fieldDefinition));
+            properties.add(new GqlvProperty(this, otoa, fieldDefinition, 
codeRegistryBuilder, specificationLoader));
         }
     }
 
@@ -207,7 +204,7 @@ public class GqlvDomainObject {
         }
 
         if (fieldDefinition != null) {
-            collections.add(new GqlvCollection(otom, fieldDefinition));
+            collections.add(new GqlvCollection(this, otom, fieldDefinition, 
codeRegistryBuilder, specificationLoader));
         }
     }
 
@@ -256,7 +253,7 @@ public class GqlvDomainObject {
             final ObjectAction objectAction,
             final GraphQLFieldDefinition fieldDefinition) {
         getGqlObjectTypeBuilder().field(fieldDefinition);
-        safeActions.add(new GqlvAction(objectAction, fieldDefinition));
+        safeActions.add(new GqlvAction(this, objectAction, fieldDefinition, 
codeRegistryBuilder));
     }
 
     public void addNonSafeActionAsMutatorField(
@@ -286,7 +283,7 @@ public class GqlvDomainObject {
     /**
      * @see #buildGqlObjectType()
      */
-    GraphQLObjectType getGqlObjectType() {
+    public GraphQLObjectType getGqlObjectType() {
         if (gqlObjectType == null) {
             throw new IllegalStateException(String.format(
                     "GraphQLObjectType has not yet been built for %s", 
getLogicalTypeName()));
@@ -332,49 +329,13 @@ public class GqlvDomainObject {
     }
 
     public void addDataFetchersForProperties() {
-        getProperties().forEach(this::addDataFetcherForAssociation);
+        getProperties().forEach(property -> property.addDataFetcher());
     }
 
     public void addDataFetchersForCollections() {
-        getCollections().forEach(this::addDataFetcherForAssociation);
+        getCollections().forEach(collection -> collection.addDataFetcher());
     }
 
-    private void addDataFetcherForAssociation(final GqlvAssociation<?> 
property) {
-
-        final ObjectAssociation association = property.getObjectMember();
-        final GraphQLFieldDefinition field = property.getFieldDefinition();
-
-        final GraphQLObjectType graphQLObjectType = getGqlObjectType();
-
-        ObjectSpecification fieldObjectSpecification = 
association.getElementType();
-        BeanSort beanSort = fieldObjectSpecification.getBeanSort();
-        switch (beanSort) {
-
-            case VALUE: //TODO: does this work for values as well?
-
-            case VIEW_MODEL:
-
-            case ENTITY:
-
-                codeRegistryBuilder.dataFetcher(
-                        coordinates(graphQLObjectType, field),
-                        (DataFetcher<Object>) environment -> {
-
-                            Object domainObjectInstance = 
environment.getSource();
-
-                            Class<?> domainObjectInstanceClass = 
domainObjectInstance.getClass();
-                            ObjectSpecification specification = 
specificationLoader.loadSpecification(domainObjectInstanceClass);
-
-                            ManagedObject owner = 
ManagedObject.adaptSingular(specification, domainObjectInstance);
-                            ManagedObject managedObject = 
association.get(owner);
-
-                            return managedObject!=null ? 
managedObject.getPojo() : null;
-                        });
-
-                break;
-
-        }
-    }
 
     public void addDataFetchersForMutators() {
 
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObjectMutators.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObjectMutators.java
index 71986cce55..b523344b82 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObjectMutators.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainObjectMutators.java
@@ -1,5 +1,6 @@
 package org.apache.causeway.viewer.graphql.model.domain;
 
+import graphql.schema.GraphQLCodeRegistry;
 import graphql.schema.GraphQLFieldDefinition;
 import graphql.schema.GraphQLObjectType;
 
@@ -12,9 +13,10 @@ import 
org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
 
 import static graphql.schema.GraphQLObjectType.newObject;
 
-public class GqlvDomainObjectMutators {
+public class GqlvDomainObjectMutators implements GqlvActionHolder {
 
     private final GqlvDomainObject domainObject;
+    private final GraphQLCodeRegistry.Builder codeRegistryBuilder;
 
     final GraphQLObjectType.Builder mutatorsTypeBuilder;
 
@@ -25,8 +27,11 @@ public class GqlvDomainObjectMutators {
     private Optional<GraphQLObjectType> mutatorsTypeIfAny;
 
     public GqlvDomainObjectMutators(
-            final GqlvDomainObject domainObject) {
+            final GqlvDomainObject domainObject,
+            final GraphQLCodeRegistry.Builder codeRegistryBuilder
+    ) {
         this.domainObject = domainObject;
+        this.codeRegistryBuilder = codeRegistryBuilder;
 
         mutatorsTypeBuilder = 
newObject().name(this.domainObject.getLogicalTypeNameSanitized() + 
"__DomainObject_mutators");
 
@@ -37,7 +42,7 @@ public class GqlvDomainObjectMutators {
             final GraphQLFieldDefinition fieldDefinition) {
 
         mutatorsTypeBuilder.field(fieldDefinition);
-        actions.add(new GqlvAction(objectAction, fieldDefinition));
+        actions.add(new GqlvAction(domainObject, objectAction, 
fieldDefinition, codeRegistryBuilder));
     }
 
     private final List<GqlvAction> actions = new ArrayList<>();
@@ -72,4 +77,8 @@ public class GqlvDomainObjectMutators {
                 : Optional.empty();
     }
 
+    @Override
+    public GraphQLObjectType getGqlObjectType() {
+        return mutatorsTypeIfAny.orElse(null);
+    }
 }
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
index 5e70388021..ddbf1159fb 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvDomainService.java
@@ -32,7 +32,7 @@ import 
org.apache.causeway.viewer.graphql.model.types.TypeMapper;
 import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
 import static graphql.schema.GraphQLObjectType.newObject;
 
-public class GqlvDomainService {
+public class GqlvDomainService implements GqlvActionHolder {
 
     private final ObjectSpecification serviceSpec;
     @Getter private final Object pojo;
@@ -121,7 +121,7 @@ public class GqlvDomainService {
         gqlObjectTypeBuilder.field(fieldDefinition);
 
         // TODO: either safe or mutator
-        safeActions.add(new GqlvAction(objectAction, fieldDefinition));
+        safeActions.add(new GqlvAction(this, objectAction, fieldDefinition, 
codeRegistryBuilder));
     }
 
 
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java
index b94d93bef1..ee0179dedf 100644
--- 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMember.java
@@ -1,22 +1,30 @@
 package org.apache.causeway.viewer.graphql.model.domain;
 
 import org.apache.causeway.core.metamodel.spec.feature.ObjectMember;
-import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
+
+import graphql.schema.GraphQLCodeRegistry;
 
 import lombok.Getter;
 
 import graphql.schema.GraphQLFieldDefinition;
 
-public abstract class GqlvMember<T extends ObjectMember> {
+public abstract class GqlvMember<T extends ObjectMember, H extends 
GqlvMemberHolder> {
 
+    @Getter private final H holder;
     @Getter private final T objectMember;
     @Getter private final GraphQLFieldDefinition fieldDefinition;
+    final GraphQLCodeRegistry.Builder codeRegistryBuilder;
 
     public GqlvMember(
+            final H holder,
             final T objectMember,
-            final GraphQLFieldDefinition fieldDefinition) {
+            final GraphQLFieldDefinition fieldDefinition,
+            final GraphQLCodeRegistry.Builder codeRegistryBuilder
+    ) {
+        this.holder = holder;
         this.objectMember = objectMember;
         this.fieldDefinition = fieldDefinition;
+        this.codeRegistryBuilder = codeRegistryBuilder;
     }
 
     public String getId() {
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHolder.java
new file mode 100644
index 0000000000..4d29b59656
--- /dev/null
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvMemberHolder.java
@@ -0,0 +1,7 @@
+package org.apache.causeway.viewer.graphql.model.domain;
+
+import graphql.schema.GraphQLObjectType;
+
+public interface GqlvMemberHolder  {
+    GraphQLObjectType getGqlObjectType();
+}
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 ff990ad41b..a58b926ada 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
@@ -1,15 +1,21 @@
 package org.apache.causeway.viewer.graphql.model.domain;
 
+import graphql.schema.GraphQLCodeRegistry;
 import graphql.schema.GraphQLFieldDefinition;
 
 import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
+import org.apache.causeway.core.metamodel.specloader.SpecificationLoader;
 
-public class GqlvProperty extends GqlvAssociation<OneToOneAssociation> {
+public class GqlvProperty extends GqlvAssociation<OneToOneAssociation, 
GqlvPropertyHolder> {
 
     public GqlvProperty(
+            final GqlvPropertyHolder domainObject,
             final OneToOneAssociation oneToOneAssociation,
-            final GraphQLFieldDefinition fieldDefinition) {
-        super(oneToOneAssociation, fieldDefinition);
+            final GraphQLFieldDefinition fieldDefinition,
+            final GraphQLCodeRegistry.Builder codeRegistryBuilder,
+            final SpecificationLoader specificationLoader
+    ) {
+        super(domainObject, oneToOneAssociation, fieldDefinition, 
codeRegistryBuilder, specificationLoader);
     }
 
     public OneToOneAssociation getOneToOneAssociation() {
diff --git 
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyHolder.java
 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyHolder.java
new file mode 100644
index 0000000000..51d0c328ad
--- /dev/null
+++ 
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvPropertyHolder.java
@@ -0,0 +1,4 @@
+package org.apache.causeway.viewer.graphql.model.domain;
+
+public interface GqlvPropertyHolder extends GqlvAssociationHolder {
+}

Reply via email to