package cz.habarta.typescript.generator.gradle;
import cz.habarta.typescript.generator.*;
import cz.habarta.typescript.generator.Input;
import java.io.*;
import java.net.*;
import java.util.*;
import org.gradle.api.*;
import org.gradle.api.tasks.*;
public class GenerateTask extends DefaultTask {
public String outputFile;
public TypeScriptFileType outputFileType;
public TypeScriptOutputKind outputKind;
public String module;
public String namespace;
public boolean mapPackagesToNamespaces;
public String umdNamespace;
public List<String> classes;
public List<String> classPatterns;
public String classesFromJaxrsApplication;
public boolean classesFromAutomaticJaxrsApplication;
public List<String> excludeClasses;
public List<String> excludeClassPatterns;
public List<String> includePropertyAnnotations;
public JsonLibrary jsonLibrary;
public boolean declarePropertiesAsOptional;
public boolean declarePropertiesAsReadOnly;
public String removeTypeNamePrefix;
public String removeTypeNameSuffix;
public String addTypeNamePrefix;
public String addTypeNameSuffix;
public List<String> customTypeNaming;
public String customTypeNamingFunction;
public List<String> referencedFiles;
public List<String> importDeclarations;
public List<String> customTypeMappings;
public DateMapping mapDate;
public EnumMapping mapEnum;
public ClassMapping mapClasses;
public boolean disableTaggedUnions;
public boolean ignoreSwaggerAnnotations;
public boolean generateJaxrsApplicationInterface;
public boolean generateJaxrsApplicationClient;
public JaxrsNamespacing jaxrsNamespacing;
public String jaxrsNamespacingAnnotation;
public String restResponseType;
public String restOptionsType;
public String customTypeProcessor;
public boolean sortDeclarations;
public boolean sortTypeDeclarations;
public boolean noFileComment;
public List<File> javadocXmlFiles;
public List<String> extensionClasses;
public List<String> optionalAnnotations;
public boolean generateNpmPackageJson;
public String npmName;
public String npmVersion;
public StringQuotes stringQuotes;
public boolean displaySerializerWarning = true;
public boolean disableJackson2ModuleDiscovery;
@TaskAction
public void generate() throws Exception {
if (outputKind == null) {
throw new RuntimeException("Please specify 'outputKind' property.");
}
if (jsonLibrary == null) {
throw new RuntimeException("Please specify 'jsonLibrary' property.");
}
TypeScriptGenerator.printVersion();
// class loader
final List<URL> urls = new ArrayList<>();
for (Task task : getProject().getTasksByName("compileJava", false)) {
for (File file : task.getOutputs().getFiles()) {
urls.add(file.toURI().toURL());
}
}
for (File file : getProject().getConfigurations().getAt("compile").getFiles()) {
urls.add(file.toURI().toURL());
}
final URLClassLoader classLoader = new URLClassLoader(urls.toArray(new URL[0]), Thread.currentThread().getContextClassLoader());
// Settings
final Settings settings = new Settings();
if (outputFileType != null) {
settings.outputFileType = outputFileType;
}
settings.outputKind = outputKind;
settings.module = module;
settings.namespace = namespace;
settings.mapPackagesToNamespaces = mapPackagesToNamespaces;
settings.umdNamespace = umdNamespace;
settings.setExcludeFilter(excludeClasses, excludeClassPatterns);
settings.jsonLibrary = jsonLibrary;
settings.declarePropertiesAsOptional = declarePropertiesAsOptional;
settings.declarePropertiesAsReadOnly = declarePropertiesAsReadOnly;
settings.removeTypeNamePrefix = removeTypeNamePrefix;
settings.removeTypeNameSuffix = removeTypeNameSuffix;
settings.addTypeNamePrefix = addTypeNamePrefix;
settings.addTypeNameSuffix = addTypeNameSuffix;
settings.customTypeNaming = Settings.convertToMap(customTypeNaming);
settings.customTypeNamingFunction = customTypeNamingFunction;
settings.referencedFiles = referencedFiles;
settings.importDeclarations = importDeclarations;
settings.customTypeMappings = Settings.convertToMap(customTypeMappings);
settings.mapDate = mapDate;
settings.mapEnum = mapEnum;
settings.mapClasses = mapClasses;
settings.disableTaggedUnions = disableTaggedUnions;
settings.ignoreSwaggerAnnotations = ignoreSwaggerAnnotations;
settings.generateJaxrsApplicationInterface = generateJaxrsApplicationInterface;
settings.generateJaxrsApplicationClient = generateJaxrsApplicationClient;
settings.jaxrsNamespacing = jaxrsNamespacing;
settings.setJaxrsNamespacingAnnotation(classLoader, jaxrsNamespacingAnnotation);
settings.restResponseType = restResponseType;
settings.setRestOptionsType(restOptionsType);
settings.loadCustomTypeProcessor(classLoader, customTypeProcessor);
settings.sortDeclarations = sortDeclarations;
settings.sortTypeDeclarations = sortTypeDeclarations;
settings.noFileComment = noFileComment;
settings.javadocXmlFiles = javadocXmlFiles;
settings.loadExtensions(classLoader, extensionClasses);
settings.loadIncludePropertyAnnotations(classLoader, includePropertyAnnotations);
settings.loadOptionalAnnotations(classLoader, optionalAnnotations);
settings.generateNpmPackageJson = generateNpmPackageJson;
settings.npmName = npmName != null && generateNpmPackageJson ? getProject().getName() : npmName;
settings.npmVersion = npmVersion != null && generateNpmPackageJson ? settings.getDefaultNpmVersion() : npmVersion;
settings.setStringQuotes(stringQuotes);
settings.displaySerializerWarning = displaySerializerWarning;
settings.disableJackson2ModuleDiscovery = disableJackson2ModuleDiscovery;
settings.classLoader = classLoader;
final File output = outputFile != null
? getProject().file(outputFile)
: new File(new File(getProject().getBuildDir(), "typescript-generator"), getProject().getName() + settings.getExtension());
settings.validateFileName(output);
// TypeScriptGenerator
new TypeScriptGenerator(settings).generateTypeScript(
Input.fromClassNamesAndJaxrsApplication(classes, classPatterns, classesFromJaxrsApplication, classesFromAutomaticJaxrsApplication, settings.getExcludeFilter(), classLoader),
Output.to(output)
);
}
}