diff --git a/api-openbis-java/build.gradle b/api-openbis-java/build.gradle index 690fdc1c482bcfdc0cb743adf0e5d1c7d6f03966..65d444cc040cf09a07455dce5f9b50d253ed96eb 100644 --- a/api-openbis-java/build.gradle +++ b/api-openbis-java/build.gradle @@ -82,8 +82,9 @@ generateTypeScript { "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') + new ConfiguredExtension(className: 'ch.empa.tsprocessor.AddMethodsExtension', configuration: ['asyncClasses': "[\"ch.ethz.sis.openbis.generic.OpenBIS\"]"]), + new ConfiguredExtension(className: 'ch.empa.tsprocessor.RemovePropertiesExtension'), + new ConfiguredExtension(className: 'ch.empa.tsprocessor.AddOpenBISModuleExtension') ] jackson2ModuleDiscovery = true outputFile = file('../api-openbis-javascript/src/v3/openbis.d.ts') diff --git a/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/MethodExtension.java b/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/AddMethodsExtension.java similarity index 95% rename from lib-typescriptprocessor/source/java/ch/empa/tsprocessor/MethodExtension.java rename to lib-typescriptprocessor/source/java/ch/empa/tsprocessor/AddMethodsExtension.java index 3a5cbfa91772b1df003d17e7fe24dc336804114a..2c5aa557545c39c027808e7506c09967181e4472 100644 --- a/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/MethodExtension.java +++ b/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/AddMethodsExtension.java @@ -77,7 +77,7 @@ class ProcessingContext { * * @author Simone Baffelli */ -public class MethodExtension extends Extension { +public class AddMethodsExtension extends Extension { //Classes whose methods should return a promise instead of a value. This is useful for methods that are called through a REST API/RPC //Perhaps an alternative would be to use an annotation to mark the methods that should return a promise @@ -88,7 +88,7 @@ public class MethodExtension extends Extension { private List<String> asnycClasses = new ArrayList<>(); - public MethodExtension() { + public AddMethodsExtension() { } /** @@ -96,7 +96,7 @@ public class MethodExtension extends Extension { * * @param asyncClasses a json string with the list of classes whose methods should return a promise */ - public MethodExtension(List<String> asyncClasses) { + public AddMethodsExtension(List<String> asyncClasses) { this.asnycClasses = asyncClasses; } @@ -178,10 +178,10 @@ public class MethodExtension extends Extension { private static TsBeanModel addFunctions(TsBeanModel bean, TsModel model, ProcessingContext processingContext, MethodProcessor processor) { Class<?> origin = bean.getOrigin(); - Stream<TsMethodModel> params = Arrays.stream(origin.getMethods()).filter(MethodExtension::filterMethods).map(method -> propertyModelToMethodModel(processor.makeFunction(method, model, processingContext))).flatMap(it -> it.map(Stream::of).orElse(Stream.empty())); + Stream<TsMethodModel> params = Arrays.stream(origin.getMethods()).filter(AddMethodsExtension::filterMethods).map(method -> propertyModelToMethodModel(processor.makeFunction(method, model, processingContext))).flatMap(it -> it.map(Stream::of).orElse(Stream.empty())); Stream<TsMethodModel> constructors = Arrays.stream(origin.getDeclaredConstructors()).map(constructor -> makeConstructor(constructor, bean, model, processingContext)); List<TsMethodModel> allMethods = Stream.of(params, constructors).flatMap(it -> it).collect(Collectors.toList()); - return bean.withProperties(bean.getProperties()).withMethods(allMethods); + return bean.withProperties(Collections.emptyList()).withMethods(allMethods); } @@ -222,9 +222,9 @@ public class MethodExtension extends Extension { //Add table of mapped types Stream<TsBeanModel> processedBeans = model.getBeans().stream().map(bean -> { if (asnycClasses.contains(bean.getOrigin().getName())) { - return addFunctions(bean, model, processingContext, MethodExtension::makePromiseReturningFunction); + return addFunctions(bean, model, processingContext, AddMethodsExtension::makePromiseReturningFunction); } else { - return addFunctions(bean, model, processingContext, MethodExtension::makeFunction); + return addFunctions(bean, model, processingContext, AddMethodsExtension::makeFunction); } }); return model.withBeans(processedBeans.collect(Collectors.toList())); diff --git a/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/OpenBISModuleExtension.java b/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/AddOpenBISModuleExtension.java similarity index 97% rename from lib-typescriptprocessor/source/java/ch/empa/tsprocessor/OpenBISModuleExtension.java rename to lib-typescriptprocessor/source/java/ch/empa/tsprocessor/AddOpenBISModuleExtension.java index df4c9e48313401c46c6de68bcd1731626922e503..9bf4ac382aa01af9e5cf09a11bc6d255674b8b8f 100644 --- a/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/OpenBISModuleExtension.java +++ b/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/AddOpenBISModuleExtension.java @@ -15,7 +15,7 @@ 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 +public class AddOpenBISModuleExtension extends Extension { @Override public EmitterExtensionFeatures getFeatures() { diff --git a/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/RemovePropertiesExtension.java b/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/RemovePropertiesExtension.java new file mode 100644 index 0000000000000000000000000000000000000000..7a6672518c527b11c7df4a2ef8eb1e4816d0442f --- /dev/null +++ b/lib-typescriptprocessor/source/java/ch/empa/tsprocessor/RemovePropertiesExtension.java @@ -0,0 +1,39 @@ +package ch.empa.tsprocessor; + +import java.util.Collections; +import java.util.List; + +import cz.habarta.typescript.generator.Extension; +import cz.habarta.typescript.generator.compiler.ModelCompiler; +import cz.habarta.typescript.generator.compiler.TsModelTransformer; +import cz.habarta.typescript.generator.emitter.EmitterExtensionFeatures; +import cz.habarta.typescript.generator.emitter.TsBeanModel; + +public class RemovePropertiesExtension 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(); + + for (TsBeanModel bean : beans) + { + bean.withProperties(Collections.emptyList()); + } + + return model.withBeans(beans); + })); + } + +} diff --git a/lib-typescriptprocessor/sourceTest/java/ch/empa/tsprocessor/MethodExtensionTest.java b/lib-typescriptprocessor/sourceTest/java/ch/empa/tsprocessor/AddMethodsExtensionTest.java similarity index 95% rename from lib-typescriptprocessor/sourceTest/java/ch/empa/tsprocessor/MethodExtensionTest.java rename to lib-typescriptprocessor/sourceTest/java/ch/empa/tsprocessor/AddMethodsExtensionTest.java index 3917ed9b17af335f2321b0200ed93e3cc6d42806..36910e8e92db73389bd8193961c3d272ce1eabad 100644 --- a/lib-typescriptprocessor/sourceTest/java/ch/empa/tsprocessor/MethodExtensionTest.java +++ b/lib-typescriptprocessor/sourceTest/java/ch/empa/tsprocessor/AddMethodsExtensionTest.java @@ -25,7 +25,8 @@ import org.testng.annotations.Test; import java.util.List; -public class MethodExtensionTest { +public class AddMethodsExtensionTest +{ interface GenericTestClass<A> { A get(); @@ -58,7 +59,7 @@ public class MethodExtensionTest { public void setSettings(){ settings.outputKind = (TypeScriptOutputKind.module); settings.jsonLibrary = JsonLibrary.jackson2; - settings.extensions = List.of(new MethodExtension()); + settings.extensions = List.of(new AddMethodsExtension()); }