Skip to content

Commit

Permalink
chore: introduce CtsManager
Browse files Browse the repository at this point in the history
  • Loading branch information
eunjae-lee committed May 12, 2022
1 parent de0c770 commit e532455
Show file tree
Hide file tree
Showing 5 changed files with 164 additions and 52 deletions.
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.algolia.codegen.cts;

import com.algolia.codegen.Utils;
import com.algolia.codegen.cts.CtsManager;
import com.algolia.codegen.cts.CtsManagerFactory;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
Expand All @@ -23,6 +25,7 @@ public class AlgoliaCtsGenerator extends DefaultCodegen {
private String language;
private String client;
private String packageName;
private CtsManager ctsManager;

/**
* Configures the type of generator.
Expand Down Expand Up @@ -64,6 +67,7 @@ public void processOpts() {
language = (String) additionalProperties.get("language");
client = (String) additionalProperties.get("client");
packageName = (String) additionalProperties.get("packageName");
ctsManager = CtsManagerFactory.getManager(language);

JsonNode config = Utils.readJsonFile("config/clients.config.json");
TestConfig testConfig = null;
Expand All @@ -90,11 +94,7 @@ public void processOpts() {
)
);

if (language.equals("javascript")) {
supportingFiles.add(
new SupportingFile("package.mustache", ".", "package.json")
);
}
ctsManager.addSupportingFiles(supportingFiles);
}

@Override
Expand Down Expand Up @@ -143,28 +143,6 @@ private Map<String, String> getPackageVersionMap() {
return packageVersionMap;
}

private String getJavaScriptUtilsPackageVersion() {
JsonNode openApiToolsConfig = Utils.readJsonFile(
"config/openapitools.json"
);
JsonNode clientsConfig = Utils.readJsonFile("config/clients.config.json");

String mainPackage = clientsConfig
.get("javascript")
.get("mainPackage")
.asText();

String utilsPackageVersion = openApiToolsConfig
.get("generator-cli")
.get("generators")
.get(mainPackage)
.get("additionalProperties")
.get("utilsPackageVersion")
.asText();

return utilsPackageVersion;
}

@Override
public Map<String, Object> postProcessSupportingFileData(
Map<String, Object> objs
Expand Down Expand Up @@ -198,13 +176,8 @@ public Map<String, Object> postProcessSupportingFileData(
bundle.put("hasRegionalHost", hasRegionalHost);
bundle.put("defaultRegion", client.equals("predict") ? "ew" : "us");
bundle.put("lambda", lambda);
bundle.put("packageVersionMap", this.getPackageVersionMap());
if (language.equals("javascript")) {
bundle.put(
"utilsPackageVersion",
this.getJavaScriptUtilsPackageVersion()
);
}
bundle.put("packageDependencies", ctsManager.getPackageDependencies());
ctsManager.addExtraToBundle(bundle);

List<Object> blocks = new ArrayList<>();
ParametersWithDataType paramsType = new ParametersWithDataType(
Expand Down
42 changes: 42 additions & 0 deletions generators/src/main/java/com/algolia/codegen/cts/CtsManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.algolia.codegen.cts;

import com.algolia.codegen.Utils;
import com.fasterxml.jackson.databind.JsonNode;
import java.util.*;
import org.openapitools.codegen.SupportingFile;

abstract class CtsManager {

public abstract void addSupportingFiles(List<SupportingFile> supportingFiles);

public abstract String getPackageDependencies();

public void addExtraToBundle(Map<String, Object> bundle) {}

protected Map<String, String> getFilteredPackageVersionMap(
List<String> packages
) {
HashMap<String, String> result = new HashMap<>();
JsonNode openApiToolsConfig = Utils.readJsonFile(
"config/openapitools.json"
);

Iterator<JsonNode> generatorIterator = openApiToolsConfig
.get("generator-cli")
.get("generators")
.elements();
while (generatorIterator.hasNext()) {
JsonNode generator = generatorIterator.next();
JsonNode additionalProperties = generator.get("additionalProperties");
String packageName = additionalProperties.get("packageName").asText();
String packageVersion = additionalProperties
.get("packageVersion")
.asText();
if (packages.contains(packageName)) {
result.put(packageName, packageVersion);
}
}

return result;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
package com.algolia.codegen.cts;

import com.algolia.codegen.Utils;
import com.algolia.codegen.cts.CtsManager;
import com.fasterxml.jackson.databind.JsonNode;
import java.util.*;
import org.openapitools.codegen.SupportingFile;

public class CtsManagerFactory {

public static CtsManager getManager(String language) {
if (language == null) {
return null;
}
switch (language) {
case "javascript":
return new JavaScriptCtsManager();
case "java":
return new JavaCtsManager();
case "php":
return new PhpCtsManager();
}
return null;
}

public static class JavaScriptCtsManager extends CtsManager {

public void addSupportingFiles(List<SupportingFile> supportingFiles) {
supportingFiles.add(
new SupportingFile("package.mustache", ".", "package.json")
);
}

public String getPackageDependencies() {
return String.join(
",\n",
this.getFilteredPackageVersionMap(
List.of(
"@experimental-api-clients-automation/algoliasearch-lite",
"@experimental-api-clients-automation/client-abtesting",
"@experimental-api-clients-automation/client-analytics",
"@experimental-api-clients-automation/client-common",
"@experimental-api-clients-automation/client-insights",
"@experimental-api-clients-automation/client-personalization",
"@experimental-api-clients-automation/client-predict",
"@experimental-api-clients-automation/client-query-suggestions",
"@experimental-api-clients-automation/client-search",
"@experimental-api-clients-automation/client-sources",
"@experimental-api-clients-automation/recommend",
"@experimental-api-clients-automation/requester-node-http"
)
)
.entrySet()
.stream()
.map(entry -> {
return (
" \"" + entry.getKey() + "\": \"" + entry.getValue() + "\""
);
})
.toArray(String[]::new)
);
}

public void addExtraToBundle(Map<String, Object> bundle) {
bundle.put("utilsPackageVersion", this.getUtilsPackageVersion());
}

private String getUtilsPackageVersion() {
JsonNode openApiToolsConfig = Utils.readJsonFile(
"config/openapitools.json"
);
JsonNode clientsConfig = Utils.readJsonFile("config/clients.config.json");

String mainPackage = clientsConfig
.get("javascript")
.get("mainPackage")
.asText();

String utilsPackageVersion = openApiToolsConfig
.get("generator-cli")
.get("generators")
.get(mainPackage)
.get("additionalProperties")
.get("utilsPackageVersion")
.asText();

return utilsPackageVersion;
}
}

public static class JavaCtsManager extends CtsManager {

public void addSupportingFiles(List<SupportingFile> supportingFiles) {}

public String getPackageDependencies() {
return null;
}
}

public static class PhpCtsManager extends CtsManager {

public void addSupportingFiles(List<SupportingFile> supportingFiles) {}

public String getPackageDependencies() {
return null;
}
}
}
13 changes: 1 addition & 12 deletions tests/CTS/methods/requests/templates/javascript/package.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,9 @@
"test": "jest"
},
"dependencies": {
{{#packageVersionMap}}
"@experimental-api-clients-automation/algoliasearch-lite": "{{@experimental-api-clients-automation/algoliasearch-lite}}",
"@experimental-api-clients-automation/client-abtesting": "{{@experimental-api-clients-automation/client-abtesting}}",
"@experimental-api-clients-automation/client-analytics": "{{@experimental-api-clients-automation/client-analytics}}",
{{{packageDependencies}}},
"@experimental-api-clients-automation/client-common": "{{utilsPackageVersion}}",
"@experimental-api-clients-automation/client-insights": "{{@experimental-api-clients-automation/client-insights}}",
"@experimental-api-clients-automation/client-personalization": "{{@experimental-api-clients-automation/client-personalization}}",
"@experimental-api-clients-automation/client-predict": "{{@experimental-api-clients-automation/client-predict}}",
"@experimental-api-clients-automation/client-query-suggestions": "{{@experimental-api-clients-automation/client-query-suggestions}}",
"@experimental-api-clients-automation/client-search": "{{@experimental-api-clients-automation/client-search}}",
"@experimental-api-clients-automation/client-sources": "{{@experimental-api-clients-automation/client-sources}}",
"@experimental-api-clients-automation/recommend": "{{@experimental-api-clients-automation/recommend}}",
"@experimental-api-clients-automation/requester-node-http": "{{utilsPackageVersion}}"
{{/packageVersionMap}}
},
"devDependencies": {
"@types/jest": "27.4.1",
Expand Down
12 changes: 6 additions & 6 deletions tests/output/javascript/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,17 @@
"test": "jest"
},
"dependencies": {
"@experimental-api-clients-automation/client-insights": "0.2.0",
"@experimental-api-clients-automation/recommend": "0.2.0",
"@experimental-api-clients-automation/client-search": "0.2.0",
"@experimental-api-clients-automation/algoliasearch-lite": "0.2.0",
"@experimental-api-clients-automation/client-sources": "0.2.0",
"@experimental-api-clients-automation/client-personalization": "0.2.0",
"@experimental-api-clients-automation/client-abtesting": "0.2.0",
"@experimental-api-clients-automation/client-analytics": "0.2.0",
"@experimental-api-clients-automation/client-common": "0.2.0",
"@experimental-api-clients-automation/client-insights": "0.2.0",
"@experimental-api-clients-automation/client-personalization": "0.2.0",
"@experimental-api-clients-automation/client-predict": "0.2.0",
"@experimental-api-clients-automation/client-query-suggestions": "0.2.0",
"@experimental-api-clients-automation/client-search": "0.2.0",
"@experimental-api-clients-automation/client-sources": "0.2.0",
"@experimental-api-clients-automation/recommend": "0.2.0",
"@experimental-api-clients-automation/client-common": "0.2.0",
"@experimental-api-clients-automation/requester-node-http": "0.2.0"
},
"devDependencies": {
Expand Down

0 comments on commit e532455

Please sign in to comment.