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 d316910aa0 CAUSEWAY-3676: introduces GqlvProperty, Collection, Action
d316910aa0 is described below
commit d316910aa0306d0d01501f534ace6467a84c5736
Author: danhaywood <[email protected]>
AuthorDate: Sat Jan 20 10:13:49 2024 +0000
CAUSEWAY-3676: introduces GqlvProperty, Collection, Action
---
.../graphql/model/src/main/java/module-info.java | 3 +
.../viewer/graphql/model/parts/GqlvAction.java | 18 +++++
.../graphql/model/parts/GqlvAssociation.java | 21 ++++++
.../viewer/graphql/model/parts/GqlvCollection.java | 18 +++++
.../viewer/graphql/model/parts/GqlvMember.java | 26 ++++++++
.../viewer/graphql/model/parts/GqlvProperty.java | 18 +++++
.../graphql/viewer/source/GqlvObjectBehaviour.java | 15 +++--
.../graphql/viewer/source/GqlvObjectStructure.java | 78 ++++++++++------------
8 files changed, 146 insertions(+), 51 deletions(-)
diff --git a/incubator/viewers/graphql/model/src/main/java/module-info.java
b/incubator/viewers/graphql/model/src/main/java/module-info.java
index e3aae7aa0b..5899d6c459 100644
--- a/incubator/viewers/graphql/model/src/main/java/module-info.java
+++ b/incubator/viewers/graphql/model/src/main/java/module-info.java
@@ -1,7 +1,10 @@
module org.apache.causeway.incubator.viewer.graphql.model {
exports org.apache.causeway.viewer.graphql.model;
+ exports org.apache.causeway.viewer.graphql.model.parts;
requires org.apache.causeway.core.config;
requires org.apache.causeway.incubator.viewer.graphql.applib;
requires spring.context;
+ requires org.apache.causeway.core.metamodel;
+ requires com.graphqljava;
}
\ No newline at end of file
diff --git
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/parts/GqlvAction.java
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/parts/GqlvAction.java
new file mode 100644
index 0000000000..8456d06cf3
--- /dev/null
+++
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/parts/GqlvAction.java
@@ -0,0 +1,18 @@
+package org.apache.causeway.viewer.graphql.model.parts;
+
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAction;
+
+import graphql.schema.GraphQLFieldDefinition;
+
+public class GqlvAction extends GqlvMember<ObjectAction> {
+
+ public GqlvAction(
+ final ObjectAction objectAction,
+ final GraphQLFieldDefinition fieldDefinition) {
+ super(objectAction, fieldDefinition);
+ }
+
+ public ObjectAction getObjectAction() {
+ return getObjectMember();
+ }
+}
diff --git
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/parts/GqlvAssociation.java
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/parts/GqlvAssociation.java
new file mode 100644
index 0000000000..8f922f04c1
--- /dev/null
+++
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/parts/GqlvAssociation.java
@@ -0,0 +1,21 @@
+package org.apache.causeway.viewer.graphql.model.parts;
+
+import org.apache.causeway.core.metamodel.spec.feature.ObjectAssociation;
+
+import graphql.schema.GraphQLFieldDefinition;
+
+public abstract class GqlvAssociation<T extends ObjectAssociation> extends
GqlvMember<T> {
+
+ public GqlvAssociation(
+ final T objectAssociation,
+ final GraphQLFieldDefinition fieldDefinition) {
+ super(objectAssociation, fieldDefinition);
+ }
+
+ /**
+ * @see #getObjectMember()
+ */
+ public T getObjectAssociation() {
+ return getObjectMember();
+ }
+}
diff --git
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/parts/GqlvCollection.java
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/parts/GqlvCollection.java
new file mode 100644
index 0000000000..dfedee12d0
--- /dev/null
+++
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/parts/GqlvCollection.java
@@ -0,0 +1,18 @@
+package org.apache.causeway.viewer.graphql.model.parts;
+
+import graphql.schema.GraphQLFieldDefinition;
+
+import org.apache.causeway.core.metamodel.spec.feature.OneToManyAssociation;
+
+public class GqlvCollection extends GqlvAssociation<OneToManyAssociation> {
+
+ public GqlvCollection(
+ final OneToManyAssociation oneToManyAssociation,
+ final GraphQLFieldDefinition fieldDefinition) {
+ super(oneToManyAssociation, fieldDefinition);
+ }
+
+ public OneToManyAssociation getOneToManyAssociation() {
+ return getObjectAssociation();
+ }
+}
diff --git
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/parts/GqlvMember.java
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/parts/GqlvMember.java
new file mode 100644
index 0000000000..770d0dac5d
--- /dev/null
+++
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/parts/GqlvMember.java
@@ -0,0 +1,26 @@
+package org.apache.causeway.viewer.graphql.model.parts;
+
+import org.apache.causeway.core.metamodel.spec.feature.ObjectMember;
+import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
+
+import lombok.Getter;
+
+import graphql.schema.GraphQLFieldDefinition;
+
+public abstract class GqlvMember<T extends ObjectMember> {
+
+ @Getter final T objectMember;
+ @Getter final GraphQLFieldDefinition fieldDefinition;
+
+ public GqlvMember(
+ final T objectMember,
+ final GraphQLFieldDefinition fieldDefinition) {
+ this.objectMember = objectMember;
+ this.fieldDefinition = fieldDefinition;
+ }
+
+ public String getId() {
+ return objectMember.getFeatureIdentifier().getFullIdentityString();
+ }
+
+}
diff --git
a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/parts/GqlvProperty.java
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/parts/GqlvProperty.java
new file mode 100644
index 0000000000..fea94f9078
--- /dev/null
+++
b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/parts/GqlvProperty.java
@@ -0,0 +1,18 @@
+package org.apache.causeway.viewer.graphql.model.parts;
+
+import graphql.schema.GraphQLFieldDefinition;
+
+import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
+
+public class GqlvProperty extends GqlvAssociation<OneToOneAssociation> {
+
+ public GqlvProperty(
+ final OneToOneAssociation oneToOneAssociation,
+ final GraphQLFieldDefinition fieldDefinition) {
+ super(oneToOneAssociation, fieldDefinition);
+ }
+
+ public OneToOneAssociation getOneToOneAssociation() {
+ return getObjectAssociation();
+ }
+}
diff --git
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectBehaviour.java
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectBehaviour.java
index 1ab0c21ab5..fe4a96e6e0 100644
---
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectBehaviour.java
+++
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectBehaviour.java
@@ -1,7 +1,6 @@
package org.apache.causeway.viewer.graphql.viewer.source;
-import java.util.Map;
import java.util.Set;
import org.apache.causeway.applib.services.bookmark.BookmarkService;
@@ -11,6 +10,8 @@ import
org.apache.causeway.core.metamodel.objectmanager.ObjectManager;
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 org.apache.causeway.viewer.graphql.model.parts.GqlvAssociation;
+import org.apache.causeway.viewer.graphql.model.parts.GqlvProperty;
import lombok.RequiredArgsConstructor;
@@ -70,18 +71,18 @@ public class GqlvObjectBehaviour {
public void createAndRegisterDataFetchersForField() {
-
structure.getProperties().entrySet().forEach(this::createAndRegisterDataFetcherForAssociation);
+
structure.getProperties().forEach(this::createAndRegisterDataFetcherForAssociation);
}
void createAndRegisterDataFetchersForCollection() {
-
structure.getCollections().entrySet().forEach(this::createAndRegisterDataFetcherForAssociation);
+ structure.getCollections().forEach(
+ this::createAndRegisterDataFetcherForAssociation);
}
- private void createAndRegisterDataFetcherForAssociation(
- final Map.Entry<? extends ObjectAssociation,
GraphQLFieldDefinition> associationAndField) {
+ private void createAndRegisterDataFetcherForAssociation(final
GqlvAssociation<?> property) {
- final ObjectAssociation association = associationAndField.getKey();
- final GraphQLFieldDefinition field = associationAndField.getValue();
+ final ObjectAssociation association = property.getObjectMember();
+ final GraphQLFieldDefinition field = property.getFieldDefinition();
final GraphQLObjectType graphQLObjectType =
structure.getGqlObjectType();
diff --git
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectStructure.java
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectStructure.java
index cb307d506e..37a08e28b6 100644
---
a/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectStructure.java
+++
b/incubator/viewers/graphql/viewer/src/main/java/org/apache/causeway/viewer/graphql/viewer/source/GqlvObjectStructure.java
@@ -1,26 +1,8 @@
package org.apache.causeway.viewer.graphql.viewer.source;
-import graphql.Scalars;
-import graphql.com.google.common.collect.BiMap;
-import graphql.schema.GraphQLArgument;
-import graphql.schema.GraphQLFieldDefinition;
-import graphql.schema.GraphQLInputObjectType;
-import graphql.schema.GraphQLList;
-import graphql.schema.GraphQLObjectType;
-
-import graphql.schema.GraphQLOutputType;
-import graphql.schema.GraphQLType;
-import graphql.schema.GraphQLTypeReference;
-
-import lombok.Getter;
-import lombok.Synchronized;
-import lombok.experimental.UtilityClass;
-import lombok.val;
-
import java.util.ArrayList;
-import java.util.LinkedHashMap;
+import java.util.Collections;
import java.util.List;
-import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
@@ -33,16 +15,32 @@ 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.OneToManyAssociation;
import org.apache.causeway.core.metamodel.spec.feature.OneToOneAssociation;
-import org.apache.causeway.viewer.graphql.viewer.util._BiMap;
+import org.apache.causeway.viewer.graphql.model.parts.GqlvAction;
+import org.apache.causeway.viewer.graphql.model.parts.GqlvCollection;
+import org.apache.causeway.viewer.graphql.model.parts.GqlvProperty;
+
+import static
org.apache.causeway.viewer.graphql.viewer.source._Constants.GQL_INPUTTYPE_PREFIX;
+
+import lombok.Getter;
+import lombok.val;
+import lombok.experimental.UtilityClass;
+
+import graphql.Scalars;
+import graphql.schema.GraphQLArgument;
+import graphql.schema.GraphQLFieldDefinition;
+import graphql.schema.GraphQLInputObjectType;
+import graphql.schema.GraphQLList;
+import graphql.schema.GraphQLObjectType;
+import graphql.schema.GraphQLOutputType;
+import graphql.schema.GraphQLType;
+import graphql.schema.GraphQLTypeReference;
import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition;
import static graphql.schema.GraphQLInputObjectField.newInputObjectField;
import static graphql.schema.GraphQLInputObjectType.newInputObject;
import static graphql.schema.GraphQLNonNull.nonNull;
import static graphql.schema.GraphQLObjectType.newObject;
-
import static graphql.schema.GraphQLTypeReference.typeRef;
-import static
org.apache.causeway.viewer.graphql.viewer.source._Constants.GQL_INPUTTYPE_PREFIX;
/**
* A wrapper around {@link ObjectSpecification}
@@ -94,26 +92,17 @@ public class GqlvObjectStructure {
final GraphQLObjectType.Builder mutatorsTypeBuilder;
- private final _BiMap<OneToOneAssociation, GraphQLFieldDefinition>
propertyToField = new _BiMap<>();
- private final _BiMap<OneToManyAssociation, GraphQLFieldDefinition>
collectionToField = new _BiMap<>();
- private final _BiMap<ObjectAction, GraphQLFieldDefinition>
safeActionToField = new _BiMap<>();
- private final _BiMap<ObjectAction, GraphQLFieldDefinition>
mutatorActionToField = new _BiMap<>();
+ private final List<GqlvProperty> properties = new ArrayList<>();
+ public List<GqlvProperty> getProperties() {return
Collections.unmodifiableList(properties);}
- Map<OneToOneAssociation, GraphQLFieldDefinition> getProperties() {
- return propertyToField.getForwardMapAsImmutable();
- }
+ private final List<GqlvCollection> collections = new ArrayList<>();
+ public List<GqlvCollection> getCollections() {return
Collections.unmodifiableList(collections);}
- Map<OneToManyAssociation, GraphQLFieldDefinition> getCollections() {
- return collectionToField.getForwardMapAsImmutable();
- }
-
- Map<ObjectAction, GraphQLFieldDefinition> getSafeActions() {
- return safeActionToField.getForwardMapAsImmutable();
- }
+ private final List<GqlvAction> safeActions = new ArrayList<>();
+ public List<GqlvAction> getSafeActions() {return
Collections.unmodifiableList(safeActions);}
- Map<ObjectAction, GraphQLFieldDefinition> getMutatorActions() {
- return mutatorActionToField.getForwardMapAsImmutable();
- }
+ private final List<GqlvAction> mutatorActions = new ArrayList<>();
+ public List<GqlvAction> getMutatorActions() {return
Collections.unmodifiableList(mutatorActions);}
/**
* Built using {@link #buildGqlObjectType()}
@@ -123,6 +112,7 @@ public class GqlvObjectStructure {
/**
* Built lazily using {@link #buildMutatorsTypeIfAny()}
*/
+ @SuppressWarnings("OptionalUsedAsFieldOrParameterType")
private Optional<GraphQLObjectType> mutatorsTypeIfAny;
public GqlvObjectStructure(final ObjectSpecification objectSpec) {
@@ -197,7 +187,7 @@ public class GqlvObjectStructure {
break;
}
if (fieldDefinition != null) {
- propertyToField.put(otoa, fieldDefinition);
+ properties.add(new GqlvProperty(otoa, fieldDefinition));
}
}
@@ -232,7 +222,7 @@ public class GqlvObjectStructure {
}
if (fieldDefinition != null) {
- collectionToField.put(otom, fieldDefinition);
+ collections.add(new GqlvCollection(otom, fieldDefinition));
}
}
@@ -281,18 +271,18 @@ public class GqlvObjectStructure {
final ObjectAction objectAction,
final GraphQLFieldDefinition fieldDefinition) {
getGqlObjectTypeBuilder().field(fieldDefinition);
- safeActionToField.put(objectAction, fieldDefinition);
+ safeActions.add(new GqlvAction(objectAction, fieldDefinition));
}
public void addNonSafeActionAsMutatorField(
final ObjectAction objectAction,
final GraphQLFieldDefinition fieldDefinition) {
mutatorsTypeBuilder.field(fieldDefinition);
- mutatorActionToField.put(objectAction, fieldDefinition);
+ mutatorActions.add(new GqlvAction(objectAction, fieldDefinition));
}
boolean hasMutators() {
- return !mutatorActionToField.isEmpty();
+ return !mutatorActions.isEmpty();
}