Skip to content

[scala][akka-http] fix non-default packages for api, model and invoker #6129

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
May 2, 2020
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -563,4 +563,8 @@ public String toOperationId(String operationId) {
return operationId;
}

public void setInvokerPackage(String invokerPackage) {
this.invokerPackage = invokerPackage;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,6 @@ public ScalaAkkaClientCodegen() {
"trait", "try", "true", "type", "val", "var", "while", "with", "yield")
);

additionalProperties.put(CodegenConstants.INVOKER_PACKAGE, invokerPackage);
additionalProperties.put(CodegenConstants.GROUP_ID, groupId);
additionalProperties.put(CodegenConstants.ARTIFACT_ID, artifactId);
additionalProperties.put(CodegenConstants.ARTIFACT_VERSION, artifactVersion);
Expand All @@ -112,7 +111,6 @@ public ScalaAkkaClientCodegen() {
additionalProperties.put("fnCapitalize", new CapitalizeLambda());
additionalProperties.put("fnCamelize", new CamelizeLambda(false));
additionalProperties.put("fnEnumEntry", new EnumEntryLambda());
additionalProperties.put("mainPackage", mainPackage);

importMapping.remove("Seq");
importMapping.remove("List");
Expand Down Expand Up @@ -146,16 +144,25 @@ public ScalaAkkaClientCodegen() {
@Override
public void processOpts() {
super.processOpts();
if (additionalProperties.containsKey(CodegenConstants.INVOKER_PACKAGE)) {
this.setInvokerPackage((String) additionalProperties.get(CodegenConstants.INVOKER_PACKAGE));
}
if (additionalProperties.containsKey("mainPackage")) {
setMainPackage((String) additionalProperties.get("mainPackage"));
additionalProperties.replace("configKeyPath", this.configKeyPath);
apiPackage = mainPackage + ".api";
modelPackage = mainPackage + ".model";
invokerPackage = mainPackage + ".core";
additionalProperties.put("apiPackage", apiPackage);
additionalProperties.put("modelPackage", modelPackage);
additionalProperties.put("invokerPackage", invokerPackage);
if (!additionalProperties.containsKey(CodegenConstants.API_PACKAGE)){
apiPackage = mainPackage + ".api";
additionalProperties.put(CodegenConstants.API_PACKAGE, apiPackage);
}
if (!additionalProperties.containsKey(CodegenConstants.MODEL_PACKAGE)){
modelPackage = mainPackage + ".model";
additionalProperties.put(CodegenConstants.MODEL_PACKAGE, modelPackage);
}
if (!additionalProperties.containsKey(CodegenConstants.INVOKER_PACKAGE)){
invokerPackage = mainPackage + ".core";
}
}
additionalProperties.put(CodegenConstants.INVOKER_PACKAGE, invokerPackage);

supportingFiles.add(new SupportingFile("README.mustache", "", "README.md"));
supportingFiles.add(new SupportingFile("pom.mustache", "", "pom.xml"));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ package {{package}}
{{#imports}}
import {{import}}
{{/imports}}
import {{mainPackage}}.core._
import {{mainPackage}}.core.CollectionFormats._
import {{mainPackage}}.core.ApiKeyLocations._
import {{invokerPackage}}._
import {{invokerPackage}}.CollectionFormats._
import {{invokerPackage}}.ApiKeyLocations._

{{#operations}}
object {{classname}} {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{{>licenseInfo}}
package {{{mainPackage}}}.core
package {{invokerPackage}}

import java.io.File

Expand Down Expand Up @@ -72,8 +72,8 @@ trait UnitJSONSupport {

class ApiInvoker(formats: Formats)(implicit system: ActorSystem) extends CustomContentTypes with Json4sSupport {

import {{{mainPackage}}}.core.ApiInvoker._
import {{{mainPackage}}}.core.ParametersMap._
import {{{invokerPackage}}}.ApiInvoker._
import {{{invokerPackage}}}.ParametersMap._

implicit val ec: ExecutionContextExecutor = system.dispatcher
implicit val jsonFormats: Formats = formats
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{{>licenseInfo}}
package {{{mainPackage}}}.core
package {{invokerPackage}}

sealed trait ResponseState

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{{>licenseInfo}}
package {{{mainPackage}}}.core
package {{invokerPackage}}

import java.util.concurrent.TimeUnit

Expand All @@ -14,7 +14,7 @@ import scala.concurrent.duration.FiniteDuration
class ApiSettings(config: Config) extends Extension {
def this(system: ExtendedActorSystem) = this(system.settings.config)

private def cfg = config.getConfig("{{{mainPackage}}}.apiRequest")
private def cfg = config.getConfig("{{configKeyPath}}.{{configKey}}")

val alwaysTrustCertificates: Boolean = cfg.getBoolean("trust-certificates")
val defaultHeaders: List[RawHeader] = cfg.getConfig("default-headers").entrySet.asScala.toList.map(c => RawHeader(c.getKey, c.getValue.render))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ package {{package}}
{{#imports}}
import {{import}}
{{/imports}}
import {{mainPackage}}.core.ApiModel
import {{invokerPackage}}.ApiModel

{{#models}}
{{#model}}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{{>licenseInfo}}
package {{mainPackage}}.core
package {{invokerPackage}}

import java.io.File
import java.net.URLEncoder
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ package {{package}}
{{#imports}}
import {{import}}
{{/imports}}
import {{mainPackage}}.core._
import {{invokerPackage}}._
import alias._
import sttp.client._
import sttp.model.Method
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{{>licenseInfo}}
package {{{mainPackage}}}.core
package {{invokerPackage}}

import org.json4s._
import sttp.client._
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ package {{package}}
{{#imports}}
import {{import}}
{{/imports}}
import {{mainPackage}}.core.ApiModel
import {{invokerPackage}}.ApiModel

{{#models}}
{{#model}}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{{>licenseInfo}}
package {{mainPackage}}.core
package {{invokerPackage}}

import sttp.client.{Identity, RequestT, ResponseError}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -419,4 +419,67 @@ public void stripModelNameTest() throws Exception {
Assert.assertEquals(cm.classFilename, "NonStrippedModelName");

}

@Test(description = "override only mainPackage")
public void mainPackageTest() throws Exception {
Map<String, Object> properties = new HashMap<>();
properties.put("mainPackage", "hello.world");

File output = Files.createTempDirectory("test").toFile();
output.deleteOnExit();

final DefaultCodegen codegen = new ScalaAkkaClientCodegen();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName(codegen.getName())
.setAdditionalProperties(properties)
.setInputSpec("src/test/resources/3_0/scala_reserved_words.yaml")
.setOutputDir(output.getAbsolutePath().replace("\\", "/"));

final ClientOptInput clientOptInput = configurator.toClientOptInput();
MockDefaultGenerator generator = new MockDefaultGenerator();
Generator gen = generator.opts(clientOptInput);
gen.generate();

Map<String, String> generatedFiles = generator.getFiles();
Assert.assertEquals(generatedFiles.size(), 14);

String outputPath = output.getAbsolutePath().replace("\\", "/");

Assert.assertTrue(generatedFiles.containsKey(outputPath + "/src/main/scala/hello/world/model/SomeObj.scala"));
Assert.assertTrue(generatedFiles.containsKey(outputPath + "/src/main/scala/hello/world/core/ApiSettings.scala"));
Assert.assertTrue(generatedFiles.containsKey(outputPath + "/src/main/scala/hello/world/api/PingApi.scala"));
}

@Test(description = "override api packages")
public void overridePackagesTest() throws Exception {
Map<String, Object> properties = new HashMap<>();
properties.put("mainPackage", "hello.world");
properties.put("apiPackage", "hello.world.api.package");
properties.put("modelPackage", "hello.world.model.package");
properties.put("invokerPackage", "hello.world.package.invoker");

File output = Files.createTempDirectory("test").toFile();
output.deleteOnExit();

final DefaultCodegen codegen = new ScalaAkkaClientCodegen();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName(codegen.getName())
.setAdditionalProperties(properties)
.setInputSpec("src/test/resources/3_0/scala_reserved_words.yaml")
.setOutputDir(output.getAbsolutePath().replace("\\", "/"));

final ClientOptInput clientOptInput = configurator.toClientOptInput();
MockDefaultGenerator generator = new MockDefaultGenerator();
Generator gen = generator.opts(clientOptInput);
gen.generate();

Map<String, String> generatedFiles = generator.getFiles();
Assert.assertEquals(generatedFiles.size(), 14);

String outputPath = output.getAbsolutePath().replace("\\", "/");

Assert.assertTrue(generatedFiles.containsKey(outputPath + "/src/main/scala/hello/world/model/package/SomeObj.scala"), "Model package is correct");
Assert.assertTrue(generatedFiles.containsKey(outputPath + "/src/main/scala/hello/world/package/invoker/ApiSettings.scala"), "Invoker package is correct");
Assert.assertTrue(generatedFiles.containsKey(outputPath + "/src/main/scala/hello/world/api/package/PingApi.scala"), "Api package is correct");
}
}