Search in sources :

Example 1 with ArgumentFileGenerator.createArgFile

use of com.linkedin.pegasus.gradle.internal.ArgumentFileGenerator.createArgFile in project rest.li by linkedin.

the class GenerateRestClientTask method generate.

@TaskAction
public void generate() {
    PegasusOptions.ClientOptions pegasusClientOptions = new PegasusOptions.ClientOptions();
    // idl input could include rest model jar files
    for (File input : getProject().files(_inputDir)) {
        if (input.isDirectory()) {
            for (File f : SharedFileUtils.getSuffixedFiles(getProject(), input, PegasusPlugin.IDL_FILE_SUFFIX)) {
                if (!pegasusClientOptions.hasRestModelFileName(f.getName())) {
                    pegasusClientOptions.addClientItem(f.getName(), "", false);
                    getProject().getLogger().lifecycle("Add interface file: {}", f.getPath());
                }
            }
        }
    }
    if (pegasusClientOptions.getClientItems().isEmpty()) {
        return;
    }
    getProject().getLogger().info("Generating REST client builders ...");
    String resolverPathStr = _resolverPath.getAsPath();
    _destinationDir.mkdirs();
    Map<String, List<String>> version1Files = new HashMap<>();
    Map<String, List<String>> version2Files = new HashMap<>();
    List<String> fluentApiFiles = new ArrayList<>();
    getProject().getLogger().lifecycle("Destination directory: {}", _destinationDir);
    getProject().getLogger().lifecycle("Generate fluent apis: {}", _generateFluentApi);
    for (PegasusOptions.ClientItem clientItem : pegasusClientOptions.getClientItems()) {
        getProject().getLogger().lifecycle("Generating rest client source files for: {}", clientItem.restModelFileName);
        String defaultPackage;
        if (clientItem.defaultPackage.equals("") && getProject().hasProperty("idlDefaultPackage")) {
            defaultPackage = (String) getProject().property("idlDefaultPackage");
        } else {
            defaultPackage = clientItem.defaultPackage;
        }
        String restModelFilePath = _inputDir.toString() + File.separatorChar + clientItem.restModelFileName;
        if (!_restli1FormatSuppressed) {
            version1Files.computeIfAbsent(defaultPackage, key -> new ArrayList<>()).add(restModelFilePath);
        }
        if (!_restli2FormatSuppressed) {
            version2Files.computeIfAbsent(defaultPackage, key -> new ArrayList<>()).add(restModelFilePath);
        }
        if (_generateFluentApi) {
            fluentApiFiles.add(restModelFilePath);
        }
    }
    String deprecatedVersion = _restli1BuildersDeprecated ? "2.0.0" : null;
    FileCollection _pathedCodegenClasspath;
    try {
        _pathedCodegenClasspath = PathingJarUtil.generatePathingJar(getProject(), getName(), _runtimeClasspath.plus(_codegenClasspath), false);
    } catch (IOException e) {
        throw new GradleException("Error occurred generating pathing JAR.", e);
    }
    version1Files.forEach((defaultPackage, files) -> getProject().javaexec(javaExecSpec -> {
        List<String> sources = files;
        String resolverPathArg = resolverPathStr;
        if (isEnableArgFile()) {
            sources = Collections.singletonList(getArgFileSyntax(createArgFile("v1_" + defaultPackage, files, getTemporaryDir())));
            resolverPathArg = ArgumentFileGenerator.getArgFileSyntax(ArgumentFileGenerator.createArgFile("generateRestClient_resolverPath_v1", Collections.singletonList(resolverPathArg), getTemporaryDir()));
        }
        javaExecSpec.setClasspath(_pathedCodegenClasspath);
        javaExecSpec.setMain("com.linkedin.restli.tools.clientgen.RestRequestBuilderGenerator");
        // RestRequestBuilderGenerator.run(resolverPath)
        javaExecSpec.jvmArgs("-Dgenerator.resolver.path=" + resolverPathArg);
        // RestRequestBuilderGenerator.run(defaultPackage)
        javaExecSpec.jvmArgs("-Dgenerator.default.package=" + defaultPackage);
        // RestRequestBuilderGenerator.run(generateImported)
        javaExecSpec.jvmArgs("-Dgenerator.generate.imported=false");
        // RestRequestBuilderGenerator.run(generateDataTemplates)
        javaExecSpec.jvmArgs("-Dgenerator.rest.generate.datatemplates=false");
        // RestRequestBuilderGenerator.run(version)
        javaExecSpec.jvmArgs("-Dgenerator.rest.generate.version=1.0.0");
        // RestRequestBuilderGenerator.run(deprecatedByVersion)
        javaExecSpec.jvmArgs("-Dgenerator.rest.generate.deprecated.version=" + deprecatedVersion);
        if (_generateLowercasePath != null) {
            // RestRequestBuilderGenerator.run(generateLowercasePath)
            javaExecSpec.jvmArgs("-Dgenerator.rest.generate.lowercase.path=" + _generateLowercasePath);
        }
        javaExecSpec.jvmArgs("-Droot.path=" + getProject().getRootDir().getPath());
        javaExecSpec.args(_destinationDir.getAbsolutePath());
        javaExecSpec.args(sources);
    }).assertNormalExitValue());
    version2Files.forEach((defaultPackage, files) -> getProject().javaexec(javaExecSpec -> {
        List<String> sources = files;
        String resolverPathArg = resolverPathStr;
        if (isEnableArgFile()) {
            sources = Collections.singletonList(getArgFileSyntax(createArgFile("v2_" + defaultPackage, files, getTemporaryDir())));
            resolverPathArg = ArgumentFileGenerator.getArgFileSyntax(ArgumentFileGenerator.createArgFile("generateRestClient_resolverPath_v2", Collections.singletonList(resolverPathArg), getTemporaryDir()));
        }
        javaExecSpec.setClasspath(_pathedCodegenClasspath);
        javaExecSpec.setMain("com.linkedin.restli.tools.clientgen.RestRequestBuilderGenerator");
        // RestRequestBuilderGenerator.run(resolverPath)
        javaExecSpec.jvmArgs("-Dgenerator.resolver.path=" + resolverPathArg);
        // RestRequestBuilderGenerator.run(defaultPackage)
        javaExecSpec.jvmArgs("-Dgenerator.default.package=" + defaultPackage);
        // RestRequestBuilderGenerator.run(generateImported)
        javaExecSpec.jvmArgs("-Dgenerator.generate.imported=false");
        // RestRequestBuilderGenerator.run(generateDataTemplates)
        javaExecSpec.jvmArgs("-Dgenerator.rest.generate.datatemplates=false");
        // RestRequestBuilderGenerator.run(version)
        javaExecSpec.jvmArgs("-Dgenerator.rest.generate.version=2.0.0");
        if (_generateLowercasePath != null) {
            // RestRequestBuilderGenerator.run(generateLowercasePath)
            javaExecSpec.jvmArgs("-Dgenerator.rest.generate.lowercase.path=" + _generateLowercasePath);
        }
        javaExecSpec.jvmArgs("-Droot.path=" + getProject().getRootDir().getPath());
        javaExecSpec.args(_destinationDir.getAbsolutePath());
        javaExecSpec.args(sources);
    }).assertNormalExitValue());
    // These are already generated by the request builder generators and will be reused.
    if (!fluentApiFiles.isEmpty()) {
        getProject().getLogger().lifecycle("Generating fluent client bindings for {} files.", fluentApiFiles.size());
        getProject().javaexec(javaExecSpec -> {
            List<String> sources = fluentApiFiles;
            String resolverPathArg = resolverPathStr;
            if (isEnableArgFile()) {
                sources = Collections.singletonList(getArgFileSyntax(createArgFile("fluent_", fluentApiFiles, getTemporaryDir())));
                resolverPathArg = getArgFileSyntax(createArgFile("generateRestClient_resolverPath_fluent", Collections.singletonList(resolverPathArg), getTemporaryDir()));
            }
            javaExecSpec.setClasspath(_pathedCodegenClasspath);
            javaExecSpec.setMain("com.linkedin.restli.tools.clientgen.FluentApiGenerator");
            javaExecSpec.args("--resolverPath", resolverPathArg);
            javaExecSpec.args("--rootPath", getProject().getRootDir().getPath());
            javaExecSpec.args("--targetDir", _destinationDir.getAbsolutePath());
            javaExecSpec.args(sources);
        }).assertNormalExitValue();
    }
}
Also used : SkipWhenEmpty(org.gradle.api.tasks.SkipWhenEmpty) InputDirectory(org.gradle.api.tasks.InputDirectory) HashMap(java.util.HashMap) FileCollection(org.gradle.api.file.FileCollection) OutputDirectory(org.gradle.api.tasks.OutputDirectory) ArrayList(java.util.ArrayList) ArgumentFileGenerator.getArgFileSyntax(com.linkedin.pegasus.gradle.internal.ArgumentFileGenerator.getArgFileSyntax) TaskAction(org.gradle.api.tasks.TaskAction) SharedFileUtils(com.linkedin.pegasus.gradle.SharedFileUtils) Map(java.util.Map) PathSensitivity(org.gradle.api.tasks.PathSensitivity) DefaultTask(org.gradle.api.DefaultTask) ArgumentFileGenerator.createArgFile(com.linkedin.pegasus.gradle.internal.ArgumentFileGenerator.createArgFile) Internal(org.gradle.api.tasks.Internal) PegasusOptions(com.linkedin.pegasus.gradle.PegasusOptions) PegasusPlugin(com.linkedin.pegasus.gradle.PegasusPlugin) Classpath(org.gradle.api.tasks.Classpath) PathingJarUtil(com.linkedin.pegasus.gradle.PathingJarUtil) IOException(java.io.IOException) Optional(org.gradle.api.tasks.Optional) File(java.io.File) List(java.util.List) GradleException(org.gradle.api.GradleException) CacheableTask(org.gradle.api.tasks.CacheableTask) PathSensitive(org.gradle.api.tasks.PathSensitive) Input(org.gradle.api.tasks.Input) Collections(java.util.Collections) ArgumentFileGenerator(com.linkedin.pegasus.gradle.internal.ArgumentFileGenerator) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) IOException(java.io.IOException) FileCollection(org.gradle.api.file.FileCollection) PegasusOptions(com.linkedin.pegasus.gradle.PegasusOptions) GradleException(org.gradle.api.GradleException) ArrayList(java.util.ArrayList) List(java.util.List) ArgumentFileGenerator.createArgFile(com.linkedin.pegasus.gradle.internal.ArgumentFileGenerator.createArgFile) File(java.io.File) TaskAction(org.gradle.api.tasks.TaskAction)

Aggregations

PathingJarUtil (com.linkedin.pegasus.gradle.PathingJarUtil)1 PegasusOptions (com.linkedin.pegasus.gradle.PegasusOptions)1 PegasusPlugin (com.linkedin.pegasus.gradle.PegasusPlugin)1 SharedFileUtils (com.linkedin.pegasus.gradle.SharedFileUtils)1 ArgumentFileGenerator (com.linkedin.pegasus.gradle.internal.ArgumentFileGenerator)1 ArgumentFileGenerator.createArgFile (com.linkedin.pegasus.gradle.internal.ArgumentFileGenerator.createArgFile)1 ArgumentFileGenerator.getArgFileSyntax (com.linkedin.pegasus.gradle.internal.ArgumentFileGenerator.getArgFileSyntax)1 File (java.io.File)1 IOException (java.io.IOException)1 ArrayList (java.util.ArrayList)1 Collections (java.util.Collections)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1 DefaultTask (org.gradle.api.DefaultTask)1 GradleException (org.gradle.api.GradleException)1 FileCollection (org.gradle.api.file.FileCollection)1 CacheableTask (org.gradle.api.tasks.CacheableTask)1 Classpath (org.gradle.api.tasks.Classpath)1 Input (org.gradle.api.tasks.Input)1