Skip to content
Merged

Scala #402

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,12 +1,7 @@
package io.github.kobylynskyi.graphql.codegen.gradle;

import com.kobylynskyi.graphql.codegen.GraphQLCodegen;
import com.kobylynskyi.graphql.codegen.model.ApiInterfaceStrategy;
import com.kobylynskyi.graphql.codegen.model.ApiNamePrefixStrategy;
import com.kobylynskyi.graphql.codegen.model.ApiRootInterfaceStrategy;
import com.kobylynskyi.graphql.codegen.model.GraphQLCodegenConfiguration;
import com.kobylynskyi.graphql.codegen.model.MappingConfig;
import com.kobylynskyi.graphql.codegen.model.MappingConfigConstants;
import com.kobylynskyi.graphql.codegen.model.*;
import com.kobylynskyi.graphql.codegen.supplier.JsonMappingConfigSupplier;
import com.kobylynskyi.graphql.codegen.supplier.MappingConfigSupplier;
import com.kobylynskyi.graphql.codegen.supplier.SchemaFinder;
Expand Down Expand Up @@ -90,6 +85,7 @@ public class GraphQLCodegenGradleTask extends DefaultTask implements GraphQLCode

private final ParentInterfacesConfig parentInterfaces = new ParentInterfacesConfig();
private String jsonConfigurationFile;
private GeneratedLanguage generatedLanguage = MappingConfigConstants.DEFAULT_GENERATED_LANGUAGE;

public GraphQLCodegenGradleTask() {
setGroup("codegen");
Expand Down Expand Up @@ -146,6 +142,8 @@ public void generate() throws Exception {
mappingConfig.setMutationResolverParentInterface(getMutationResolverParentInterface());
mappingConfig.setSubscriptionResolverParentInterface(getSubscriptionResolverParentInterface());

mappingConfig.setGeneratedLanguage(generatedLanguage);

new GraphQLCodegen(getActualSchemaPaths(), graphqlQueryIntrospectionResultPath, outputDir, mappingConfig, buildJsonSupplier()).generate();
}

Expand Down Expand Up @@ -717,4 +715,11 @@ public void setJsonConfigurationFile(String jsonConfigurationFile) {
this.jsonConfigurationFile = jsonConfigurationFile;
}

@Input
@Optional
@Override
public GeneratedLanguage getGeneratedLanguage() {
return generatedLanguage;
}

}
Original file line number Diff line number Diff line change
@@ -1,13 +1,7 @@
package io.github.kobylynskyi.graphql.codegen;

import com.kobylynskyi.graphql.codegen.GraphQLCodegen;
import com.kobylynskyi.graphql.codegen.model.ApiInterfaceStrategy;
import com.kobylynskyi.graphql.codegen.model.ApiNamePrefixStrategy;
import com.kobylynskyi.graphql.codegen.model.ApiRootInterfaceStrategy;
import com.kobylynskyi.graphql.codegen.model.GraphQLCodegenConfiguration;
import com.kobylynskyi.graphql.codegen.model.MappingConfig;
import com.kobylynskyi.graphql.codegen.model.MappingConfigConstants;
import com.kobylynskyi.graphql.codegen.model.RelayConfig;
import com.kobylynskyi.graphql.codegen.model.*;
import com.kobylynskyi.graphql.codegen.supplier.JsonMappingConfigSupplier;
import com.kobylynskyi.graphql.codegen.supplier.MappingConfigSupplier;
import com.kobylynskyi.graphql.codegen.supplier.SchemaFinder;
Expand Down Expand Up @@ -173,6 +167,9 @@ public class GraphQLCodegenMojo extends AbstractMojo implements GraphQLCodegenCo
@Parameter
private ParentInterfacesConfig parentInterfaces = new ParentInterfacesConfig();

@Parameter(defaultValue = MappingConfigConstants.DEFAULT_GENERATED_LANGUAGE_STRING)
private GeneratedLanguage generatedLanguage;

@Parameter
private String jsonConfigurationFile;

Expand Down Expand Up @@ -234,6 +231,8 @@ public void execute() throws MojoExecutionException {
mappingConfig.setMutationResolverParentInterface(getMutationResolverParentInterface());
mappingConfig.setSubscriptionResolverParentInterface(getSubscriptionResolverParentInterface());

mappingConfig.setGeneratedLanguage(getGeneratedLanguage());

MappingConfigSupplier mappingConfigSupplier = buildJsonSupplier(jsonConfigurationFile);

try {
Expand Down Expand Up @@ -518,6 +517,11 @@ public String getResolverParentInterface() {
return parentInterfaces.getResolver();
}

@Override
public GeneratedLanguage getGeneratedLanguage() {
return generatedLanguage;
}

public ParentInterfacesConfig getParentInterfaces() {
return parentInterfaces;
}
Expand Down Expand Up @@ -562,4 +566,4 @@ private static Map<String, String> convertToMap(Properties properties) {
return result;
}

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import java.util

import com.kobylynskyi.graphql.codegen.model.{ ApiInterfaceStrategy, ApiNamePrefixStrategy, ApiRootInterfaceStrategy, RelayConfig }
import sbt._
import com.kobylynskyi.graphql.codegen.model.GeneratedLanguage

/**
*
Expand Down Expand Up @@ -113,6 +114,8 @@ trait GraphQLCodegenKeys {

val relayConfig = settingKey[RelayConfig]("Can be used to supply a custom configuration for Relay support.")

val generatedLanguage = settingKey[GeneratedLanguage]("Generate code with language, like java/scala.")

//for version
val javaxValidationApiVersion = settingKey[Option[String]]("javax-validation-api version")
val graphqlJavaCodegenVersion = settingKey[Option[String]]("graphql java codegen version")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ class GraphQLCodegenPlugin(configuration: Configuration, private[codegen] val co
//With the implementation of some other plugins, initialization is not necessary,
//but maybe should be related to the dependency of key. For convenience, this is a conservative operation
override lazy val globalSettings: Seq[Def.Setting[_]] = Seq(
generatedLanguage := MappingConfigConstants.DEFAULT_GENERATED_LANGUAGE,
graphqlQueryIntrospectionResultPath := None,
graphqlSchemas := schemaFinderConfig,
jsonConfigurationFile := None,
Expand Down Expand Up @@ -162,8 +163,9 @@ class GraphQLCodegenPlugin(configuration: Configuration, private[codegen] val co
mappingConfig.setGenerateApisWithThrowsException((generateApisWithThrowsException in GraphQLCodegenConfig).value)
mappingConfig.setResponseProjectionMaxDepth((responseProjectionMaxDepth in GraphQLCodegenConfig).value)
mappingConfig.setRelayConfig((relayConfig in GraphQLCodegenConfig).value)
mappingConfig.setGeneratedLanguage((generatedLanguage in GraphQLCodegenConfig).value)

sLog.value.debug(s"Current mapping config is <$mappingConfig>")
// sLog.value.debug(s"Current mapping config is <$mappingConfig>") // NO toString
mappingConfig
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.kobylynskyi.graphql.codegen;

import com.kobylynskyi.graphql.codegen.model.GeneratedLanguage;
import com.kobylynskyi.graphql.codegen.model.exception.UnableToLoadFreeMarkerTemplateException;
import freemarker.ext.beans.BeansWrapper;
import freemarker.template.Configuration;
Expand All @@ -8,20 +9,13 @@
import freemarker.template.Version;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

class FreeMarkerTemplatesRegistry {

private static final Version FREEMARKER_TEMPLATE_VERSION = Configuration.VERSION_2_3_30;

static final Template typeTemplate;
static final Template enumTemplate;
static final Template unionTemplate;
static final Template requestTemplate;
static final Template responseTemplate;
static final Template interfaceTemplate;
static final Template operationsTemplate;
static final Template parametrizedInputTemplate;
static final Template responseProjectionTemplate;
private static final Map<String, Map<String, Template>> templateMap = new HashMap<>();

static {
BeansWrapper beansWrapper = new BeansWrapper(FREEMARKER_TEMPLATE_VERSION);
Expand All @@ -34,15 +28,31 @@ class FreeMarkerTemplatesRegistry {
configuration.setSharedVariable("statics", beansWrapper.getStaticModels());

try {
typeTemplate = configuration.getTemplate("templates/javaClassGraphqlType.ftl");
enumTemplate = configuration.getTemplate("templates/javaClassGraphqlEnum.ftl");
unionTemplate = configuration.getTemplate("templates/javaClassGraphqlUnion.ftl");
requestTemplate = configuration.getTemplate("templates/javaClassGraphqlRequest.ftl");
responseTemplate = configuration.getTemplate("templates/javaClassGraphqlResponse.ftl");
interfaceTemplate = configuration.getTemplate("templates/javaClassGraphqlInterface.ftl");
operationsTemplate = configuration.getTemplate("templates/javaClassGraphqlOperations.ftl");
parametrizedInputTemplate = configuration.getTemplate("templates/javaClassGraphqlParametrizedInput.ftl");
responseProjectionTemplate = configuration.getTemplate("templates/javaClassGraphqlResponseProjection.ftl");
Map<String, Template> javaTemplates = new HashMap<>();
javaTemplates.put("typeTemplate", configuration.getTemplate("templates/javaClassGraphqlType.ftl"));
javaTemplates.put("enumTemplate", configuration.getTemplate("templates/javaClassGraphqlEnum.ftl"));
javaTemplates.put("unionTemplate", configuration.getTemplate("templates/javaClassGraphqlUnion.ftl"));
javaTemplates.put("requestTemplate", configuration.getTemplate("templates/javaClassGraphqlRequest.ftl"));
javaTemplates.put("responseTemplate", configuration.getTemplate("templates/javaClassGraphqlResponse.ftl"));
javaTemplates.put("interfaceTemplate", configuration.getTemplate("templates/javaClassGraphqlInterface.ftl"));
javaTemplates.put("operationsTemplate", configuration.getTemplate("templates/javaClassGraphqlOperations.ftl"));
javaTemplates.put("parametrizedInputTemplate", configuration.getTemplate("templates/javaClassGraphqlParametrizedInput.ftl"));
javaTemplates.put("responseProjectionTemplate", configuration.getTemplate("templates/javaClassGraphqlResponseProjection.ftl"));
templateMap.put(GeneratedLanguage.JAVA.name(), javaTemplates);

Map<String, Template> scalaTemplates = new HashMap<>();
scalaTemplates.put("typeTemplate", configuration.getTemplate("templates/scala-lang/scalaClassGraphqlType.ftl"));
scalaTemplates.put("enumTemplate", configuration.getTemplate("templates/scala-lang/scalaClassGraphqlEnum.ftl"));
scalaTemplates.put("unionTemplate", configuration.getTemplate("templates/scala-lang/scalaClassGraphqlUnion.ftl"));
scalaTemplates.put("requestTemplate", configuration.getTemplate("templates/scala-lang/scalaClassGraphqlRequest.ftl"));
scalaTemplates.put("responseTemplate", configuration.getTemplate("templates/scala-lang/scalaClassGraphqlResponse.ftl"));
scalaTemplates.put("interfaceTemplate", configuration.getTemplate("templates/scala-lang/scalaClassGraphqlInterface.ftl"));
scalaTemplates.put("operationsTemplate", configuration.getTemplate("templates/scala-lang/scalaClassGraphqlOperations.ftl"));
scalaTemplates.put("parametrizedInputTemplate", configuration.getTemplate("templates/scala-lang/scalaClassGraphqlParametrizedInput.ftl"));
scalaTemplates.put("responseProjectionTemplate", configuration.getTemplate("templates/scala-lang/scalaClassGraphqlResponseProjection.ftl"));
templateMap.put(GeneratedLanguage.SCALA.name(), scalaTemplates);


} catch (IOException e) {
throw new UnableToLoadFreeMarkerTemplateException(e);
}
Expand All @@ -51,4 +61,8 @@ class FreeMarkerTemplatesRegistry {
private FreeMarkerTemplatesRegistry() {
}

public static Template getTemplateWithLang(GeneratedLanguage generatedLanguage, String templateName) {
return templateMap.get(generatedLanguage.name()).get(templateName);
}

}
Loading