blob: 8f688d4c967e9399a9dc64c76e33debb76325fee [file] [log] [blame]
/*
* 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.unomi.graphql.providers.sample;
import graphql.Scalars;
import graphql.annotations.processor.GraphQLAnnotations;
import graphql.schema.DataFetcher;
import graphql.schema.FieldCoordinates;
import graphql.schema.GraphQLArgument;
import graphql.schema.GraphQLCodeRegistry;
import graphql.schema.GraphQLFieldDefinition;
import graphql.schema.visibility.BlockedFields;
import graphql.schema.visibility.GraphqlFieldVisibility;
import org.apache.unomi.graphql.providers.GraphQLAdditionalTypesProvider;
import org.apache.unomi.graphql.providers.GraphQLCodeRegistryProvider;
import org.apache.unomi.graphql.providers.GraphQLExtensionsProvider;
import org.apache.unomi.graphql.providers.GraphQLFieldVisibilityProvider;
import org.apache.unomi.graphql.providers.GraphQLMutationProvider;
import org.apache.unomi.graphql.providers.GraphQLProvider;
import org.apache.unomi.graphql.providers.GraphQLQueryProvider;
import org.apache.unomi.graphql.types.output.CDPProfile;
import org.apache.unomi.graphql.types.output.RootMutation;
import org.apache.unomi.graphql.types.output.RootQuery;
import org.osgi.framework.BundleContext;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
@Component(immediate = true, service = GraphQLProvider.class)
public class CDPProviderSample
implements GraphQLExtensionsProvider, GraphQLMutationProvider, GraphQLQueryProvider, GraphQLCodeRegistryProvider, GraphQLAdditionalTypesProvider, GraphQLFieldVisibilityProvider {
private boolean isActivated;
@Activate
public void activate(final BundleContext context) {
this.isActivated = true;
}
@Deactivate
public void deactivate() {
this.isActivated = false;
}
@Override
public Set<Class<?>> getExtensions() {
return Collections.singleton(CDPProfileExtension.class);
}
@Override
public Set<GraphQLFieldDefinition> getMutations(GraphQLAnnotations graphQLAnnotations) {
final Set<GraphQLFieldDefinition> mutations = new HashSet<>();
mutations.add(GraphQLFieldDefinition.newFieldDefinition()
.type(Scalars.GraphQLBoolean)
.name("mutation1")
.build());
return mutations;
}
@Override
public Set<GraphQLFieldDefinition> getQueries(GraphQLAnnotations graphQLAnnotations) {
final Set<GraphQLFieldDefinition> queries = new HashSet<>();
queries.add(GraphQLFieldDefinition.newFieldDefinition()
.type(graphQLAnnotations.object(SampleType.class))
.name("query1")
.build());
queries.add(GraphQLFieldDefinition.newFieldDefinition()
.type(graphQLAnnotations.object(SampleType.class))
.name("query2")
.argument(GraphQLArgument.newArgument()
.type(Scalars.GraphQLString)
.name("param")
.build())
.build());
return queries;
}
@Override
public GraphQLCodeRegistry.Builder getCodeRegistry(final GraphQLCodeRegistry codeRegistry) {
return GraphQLCodeRegistry
.newCodeRegistry(codeRegistry)
.dataFetcher(FieldCoordinates.coordinates(RootQuery.TYPE_NAME, "query1"),
(DataFetcher<SampleType>) environment -> {
SampleType sampleType = new SampleType();
sampleType.field = "I'm a result of query1";
return sampleType;
})
.dataFetcher(FieldCoordinates.coordinates(RootQuery.TYPE_NAME, "query2"),
(DataFetcher<SampleType>) environment -> {
SampleType sampleType = new SampleType();
sampleType.field = "I'm a result of query2";
return sampleType;
})
.dataFetcher(FieldCoordinates.coordinates(RootMutation.TYPE_NAME, "mutation1"),
(DataFetcher<Boolean>) environment -> true)
.dataFetcher(FieldCoordinates.coordinates(CDPProfile.TYPE_NAME, "extensionField"),
(DataFetcher<String>) environment -> "Hello " + ((CDPProfile) environment.getSource()).getProfile().getItemId() + " :)");
}
@Override
public Set<Class<?>> getAdditionalOutputTypes() {
final Set<Class<?>> types = new HashSet<>();
types.add(MyEvent.class);
types.add(SampleType.class);
return types;
}
@Override
public Set<Class<?>> getAdditionalInputTypes() {
final Set<Class<?>> types = new HashSet<>();
types.add(MyEventInput.class);
types.add(MyEventFilterInput.class);
types.add(VENDOR_PageViewEventInput.class);
return types;
}
@Override
public GraphqlFieldVisibility getGraphQLFieldVisibility() {
// Blocks fields based on patterns
return BlockedFields.newBlock()
.addPattern("CDP_SegmentInput.name")
.addPattern(".*\\.delete.*") // regular expressions allowed
.build();
}
}