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 260d8e94f078b6fc5bdd2c3b00e39f16dc1b902b Author: danhaywood <[email protected]> AuthorDate: Tue Jan 23 17:41:20 2024 +0000 CAUSEWAY-3676: removes ActionSimple --- .../graphql/model/domain/GqlvActionSimple.java | 192 --------------------- 1 file changed, 192 deletions(-) diff --git a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionSimple.java b/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionSimple.java deleted file mode 100644 index a62856081a..0000000000 --- a/incubator/viewers/graphql/model/src/main/java/org/apache/causeway/viewer/graphql/model/domain/GqlvActionSimple.java +++ /dev/null @@ -1,192 +0,0 @@ -package org.apache.causeway.viewer.graphql.model.domain; - -import java.util.Map; -import java.util.stream.Collectors; - -import org.springframework.lang.Nullable; - -import org.apache.causeway.commons.collections.Can; -import org.apache.causeway.core.metamodel.consent.InteractionInitiatedBy; -import org.apache.causeway.core.metamodel.facets.actcoll.typeof.TypeOfFacet; -import org.apache.causeway.core.metamodel.interactions.managed.ActionInteractionHead; -import org.apache.causeway.core.metamodel.object.ManagedObject; -import org.apache.causeway.core.metamodel.spec.ObjectSpecification; -import org.apache.causeway.core.metamodel.spec.feature.ObjectAction; -import org.apache.causeway.core.metamodel.spec.feature.ObjectActionParameter; -import org.apache.causeway.viewer.graphql.model.types.ScalarMapper; -import org.apache.causeway.viewer.graphql.model.util.TypeNames; - -import lombok.val; -import lombok.extern.log4j.Log4j2; - -import graphql.Scalars; -import graphql.schema.DataFetchingEnvironment; -import graphql.schema.GraphQLArgument; -import graphql.schema.GraphQLCodeRegistry; -import graphql.schema.GraphQLFieldDefinition; -import graphql.schema.GraphQLList; -import graphql.schema.GraphQLOutputType; -import graphql.schema.GraphQLType; -import graphql.schema.GraphQLTypeReference; - -import static graphql.schema.GraphQLFieldDefinition.newFieldDefinition; -import static graphql.schema.GraphQLNonNull.nonNull; - -@Log4j2 -public class GqlvActionSimple extends GqlvMember<ObjectAction, GqlvActionHolder> { - - public GqlvActionSimple( - final GqlvActionHolder holder, - final ObjectAction objectAction, - final GraphQLCodeRegistry.Builder codeRegistryBuilder - ) { - super(holder, objectAction, fieldDefinition(objectAction, holder), codeRegistryBuilder); - } - - private static GraphQLFieldDefinition fieldDefinition( - final ObjectAction objectAction, - final GqlvActionHolder holder) { - - GraphQLFieldDefinition fieldDefinition = null; - GraphQLOutputType type = typeFor(objectAction); - - if (type != null) { - val fieldBuilder = newFieldDefinition() - .name(objectAction.getId()) - .type(type); - addGqlArguments(objectAction, fieldBuilder); - fieldDefinition = fieldBuilder.build(); - - holder.addField(fieldDefinition); - } - return fieldDefinition; - } - - @Nullable - private static GraphQLOutputType typeFor(final ObjectAction objectAction){ - ObjectSpecification objectSpecification = objectAction.getReturnType(); - switch (objectSpecification.getBeanSort()){ - - case COLLECTION: - - TypeOfFacet facet = objectAction.getFacet(TypeOfFacet.class); - if (facet == null) { - log.warn("Unable to locate TypeOfFacet for {}", objectAction.getFeatureIdentifier().getFullIdentityString()); - return null; - } - ObjectSpecification objectSpecificationForElementWhenCollection = facet.elementSpec(); - GraphQLType wrappedType = outputTypeFor(objectSpecificationForElementWhenCollection); - if (wrappedType == null) { - log.warn("Unable to create wrapped type of for {} for action {}", - objectSpecificationForElementWhenCollection.getFullIdentifier(), - objectAction.getFeatureIdentifier().getFullIdentityString()); - return null; - } - return GraphQLList.list(wrappedType); - - case VALUE: - case ENTITY: - case VIEW_MODEL: - default: - // TODO: this cast is suspicious - return (GraphQLOutputType) outputTypeFor(objectSpecification); - - } - } - - @Nullable - private static GraphQLType outputTypeFor(final ObjectSpecification objectSpecification){ - - switch (objectSpecification.getBeanSort()){ - case ABSTRACT: - case ENTITY: - case VIEW_MODEL: - return GraphQLTypeReference.typeRef(TypeNames.objectTypeNameFor(objectSpecification)); - - case VALUE: - return ScalarMapper.typeFor(objectSpecification.getCorrespondingClass()); - - case COLLECTION: - // should be noop - return null; - - default: - // for now - return Scalars.GraphQLString; - } - } - - public ObjectAction getObjectAction() { - return getObjectMember(); - } - - public void addDataFetcher() { - GraphQLFieldDefinition fieldDefinition = getField(); - codeRegistryBuilder.dataFetcher( - getHolder().coordinatesFor(fieldDefinition), - this::invoke - ); - } - - private Object invoke( - final DataFetchingEnvironment dataFetchingEnvironment) { - final ObjectAction objectAction = getObjectAction(); - - Object source = dataFetchingEnvironment.getSource(); - Object domainObjectInstance; - if (source instanceof GqlvMutations.Fetcher) { - GqlvMutations.Fetcher fetcher = (GqlvMutations.Fetcher) source; - domainObjectInstance = fetcher.getTargetPojo(); - } else { - domainObjectInstance = source; - } - - Class<?> domainObjectInstanceClass = domainObjectInstance.getClass(); - ObjectSpecification specification = specificationLoader - .loadSpecification(domainObjectInstanceClass); - if (specification == null) { - // not expected - return null; - } - - ManagedObject owner = ManagedObject.adaptSingular(specification, domainObjectInstance); - - - ActionInteractionHead actionInteractionHead = objectAction.interactionHead(owner); - - Map<String, Object> arguments = dataFetchingEnvironment.getArguments(); - Can<ObjectActionParameter> parameters = objectAction.getParameters(); - Can<ManagedObject> canOfParams = parameters - .map(oap -> { - Object argumentValue = arguments.get(oap.getId()); - return ManagedObject.adaptParameter(oap, argumentValue); - }); - - ManagedObject managedObject = objectAction - .execute(actionInteractionHead, canOfParams, InteractionInitiatedBy.USER); - - return managedObject.getPojo(); - } - - static void addGqlArguments( - final ObjectAction objectAction, - final GraphQLFieldDefinition.Builder builder) { - - Can<ObjectActionParameter> parameters = objectAction.getParameters(); - - if (parameters.isNotEmpty()) { - builder.arguments(parameters.stream() - .map(GqlvActionSimple::gqlArgumentFor) - .collect(Collectors.toList())); - } - } - - private static GraphQLArgument gqlArgumentFor(final ObjectActionParameter objectActionParameter) { - return GraphQLArgument.newArgument() - .name(objectActionParameter.getId()) - .type(objectActionParameter.isOptional() - ? GqlvActionParameter.inputTypeFor(objectActionParameter) - : nonNull(GqlvActionParameter.inputTypeFor(objectActionParameter))) - .build(); - } -}
