From b6e1dd25f441361ac30d9cd20ed22b3d3015979e Mon Sep 17 00:00:00 2001 From: pkupczyk <piotr.kupczyk@id.ethz.ch> Date: Mon, 27 Nov 2023 14:34:20 +0100 Subject: [PATCH] BIS-757 : Write Translator to TypeScript - extension for the openbis module exported by default --- api-openbis-java/build.gradle | 12 ++++- .../tsprocessor/OpenBISModuleExtension.java | 52 +++++++++++++++++++ 2 files changed, 62 insertions(+), 2 deletions(-) create mode 100644 lib-typescriptprocessor/source/java/ch/empa/tsprocessor/OpenBISModuleExtension.java diff --git a/api-openbis-java/build.gradle b/api-openbis-java/build.gradle index dc3bb8dec87..690fdc1c482 100644 --- a/api-openbis-java/build.gradle +++ b/api-openbis-java/build.gradle @@ -73,10 +73,18 @@ generateTypeScript { "ch.ethz.sis.openbis.generic.asapi.v3.dto.externaldms.search.ExternalDmsSearchCriteria", "ch.ethz.sis.openbis.generic.dssapi.v3.dto.common.operation.IOperationResult", "ch.ethz.sis.openbis.generic.dssapi.v3.dto.service.execute.AbstractExecutionOptionsWithParameters"] + mapClasses = "asInterfaces" outputKind = 'module' outputFileType = 'declarationFile' - customTypeNaming = ["ch.ethz.sis.openbis.generic.asapi.v3.dto.externaldms.search.ExternalDmsSearchCriteria:ExternalDmsSearchCriteria", "ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.search.ExternalDmsSearchCriteria:DSExternalDmsSearchCriteria"] - extensionsWithConfiguration = [new ConfiguredExtension(className: 'ch.empa.tsprocessor.MethodExtension', configuration: ['asyncClasses': "[\"ch.ethz.sis.openbis.generic.OpenBIS\"]"])] + customTypeNaming = [ + "ch.ethz.sis.openbis.generic.OpenBIS:facade", + "ch.ethz.sis.openbis.generic.asapi.v3.dto.externaldms.search.ExternalDmsSearchCriteria:ExternalDmsSearchCriteria", + "ch.ethz.sis.openbis.generic.asapi.v3.dto.dataset.search.ExternalDmsSearchCriteria:DSExternalDmsSearchCriteria" + ] + extensionsWithConfiguration = [ + new ConfiguredExtension(className: 'ch.empa.tsprocessor.MethodExtension', configuration: ['asyncClasses': "[\"ch.ethz.sis.openbis.generic.OpenBIS\"]"]), + new ConfiguredExtension(className: 'ch.empa.tsprocessor.OpenBISModuleExtension') + ] jackson2ModuleDiscovery = true outputFile = file('../api-openbis-javascript/src/v3/openbis.d.ts') } diff --git a/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/OpenBISModuleExtension.java b/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/OpenBISModuleExtension.java new file mode 100644 index 00000000000..df4c9e48313 --- /dev/null +++ b/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/OpenBISModuleExtension.java @@ -0,0 +1,52 @@ +package ch.empa.tsprocessor; + +import java.util.ArrayList; +import java.util.List; + +import cz.habarta.typescript.generator.Extension; +import cz.habarta.typescript.generator.Settings; +import cz.habarta.typescript.generator.TsType; +import cz.habarta.typescript.generator.compiler.ModelCompiler; +import cz.habarta.typescript.generator.compiler.Symbol; +import cz.habarta.typescript.generator.compiler.TsModelTransformer; +import cz.habarta.typescript.generator.emitter.EmitterExtensionFeatures; +import cz.habarta.typescript.generator.emitter.TsBeanCategory; +import cz.habarta.typescript.generator.emitter.TsBeanModel; +import cz.habarta.typescript.generator.emitter.TsModel; +import cz.habarta.typescript.generator.emitter.TsPropertyModel; + +public class OpenBISModuleExtension extends Extension +{ + @Override public EmitterExtensionFeatures getFeatures() + { + final EmitterExtensionFeatures features = new EmitterExtensionFeatures(); + features.generatesRuntimeCode = false; + features.generatesModuleCode = true; + features.worksWithPackagesMappedToNamespaces = true; + features.generatesJaxrsApplicationClient = false; + return features; + } + + @Override public List<TransformerDefinition> getTransformers() + { + return List.of(new TransformerDefinition(ModelCompiler.TransformationPhase.AfterDeclarationSorting, (TsModelTransformer) (context, model) -> + { + List<TsBeanModel> beans = model.getBeans(); + List<TsPropertyModel> properties = new ArrayList<>(); + + for (TsBeanModel bean : beans) + { + properties.add(new TsPropertyModel(bean.getName().getSimpleName(), new TsType.ReferenceType(bean.getName()), null, true, null)); + } + + beans.add(new TsBeanModel(null, TsBeanCategory.Data, false, new Symbol("openbis"), null, null, null, null, properties, null, null, null)); + + return model.withBeans(beans); + })); + } + + @Override public void emitElements(final Writer writer, final Settings settings, final boolean exportKeyword, final TsModel model) + { + writer.writeIndentedLine("export default openbis"); + } +} -- GitLab