Skip to content
Snippets Groups Projects
Commit 39a9d0a9 authored by piotr.kupczyk@id.ethz.ch's avatar piotr.kupczyk@id.ethz.ch
Browse files

BIS-757 : Write Translator to TypeScript - expose types also with their full...

BIS-757 : Write Translator to TypeScript - expose types also with their full name (i.e. JsonObject value) with dots converted to underscores (e.g. as_dto_sample_Sample) - this is helpful for cases where we have duplicated simple names
parent c77b7280
No related branches found
No related tags found
1 merge request!40SSDM-13578 : 2PT : Database and V3 Implementation - include the new AFS "free"...
...@@ -76,23 +76,13 @@ console.log(' return exported') ...@@ -76,23 +76,13 @@ console.log(' return exported')
console.log('}') console.log('}')
dtos.forEach(dto => { dtos.forEach(dto => {
var package = exported
dto.pathWithSlashes.split('/').slice(0,-1).forEach(pathPart => {
if(!package[pathPart]){
package[pathPart] = {}
}
package = package[pathPart]
})
if(exported[dto.name] === undefined){ if(exported[dto.name] === undefined){
exported[dto.name] = "$$" + dto.pathWithUnderscores + "$$" exported[dto.name] = "$$" + dto.pathWithUnderscores + "$$"
}else{ }else{
// for duplicated simple names use null to avoid accidental mistakes where one DTOs is used instead of another // for duplicated simple names do not export anything via a simple name to avoid accidental mistakes where one DTOs is used instead of another
exported[dto.name] = null delete exported[dto.name]
} }
exported[dto.pathWithUnderscores] = "$$" + dto.pathWithUnderscores + "$$"
package[dto.name] = "$$" + dto.pathWithUnderscores + "$$"
}) })
// remove quotes after JSON.stringify, the quotes to remove have $$ (e.g. "$$as_dto_sample_Sample$$" => as_dto_sample_Sample) // remove quotes after JSON.stringify, the quotes to remove have $$ (e.g. "$$as_dto_sample_Sample$$" => as_dto_sample_Sample)
......
apply from: '../build/javaproject.gradle' apply from: '../build/javaproject.gradle'
dependencies { dependencies {
implementation 'fasterxml:jackson-core:2.9.10', 'fasterxml:jackson-databind:2.9.10.8', 'com.google.guava:guava:31.1-jre', 'cz.habarta.typescript-generator:typescript-generator-core:3.2.1263' implementation 'fasterxml:jackson-core:2.9.10', 'fasterxml:jackson-databind:2.9.10.8', 'com.google.guava:guava:31.1-jre', 'cz.habarta.typescript-generator:typescript-generator-core:3.2.1263', 'sis:sis-base:23.06.0'
testImplementation 'testng:testng:6.8-CISD', 'javax.activation:javax.activation-api:1.2.0' testImplementation 'testng:testng:6.8-CISD', 'javax.activation:javax.activation-api:1.2.0'
} }
...@@ -25,6 +25,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; ...@@ -25,6 +25,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.reflect.TypeToken; import com.google.common.reflect.TypeToken;
import ch.systemsx.cisd.base.annotation.JsonObject;
import cz.habarta.typescript.generator.*; import cz.habarta.typescript.generator.*;
import cz.habarta.typescript.generator.compiler.ModelCompiler; import cz.habarta.typescript.generator.compiler.ModelCompiler;
import cz.habarta.typescript.generator.compiler.Symbol; import cz.habarta.typescript.generator.compiler.Symbol;
...@@ -151,7 +152,9 @@ public class AddMethodsExtension extends Extension ...@@ -151,7 +152,9 @@ public class AddMethodsExtension extends Extension
return tsType; return tsType;
} }
private static List<TsType.GenericVariableType> resolveTypeParameters(TsBeanModel bean, TsModel model, ProcessingContext processingContext, boolean withBounds){ private static List<TsType.GenericVariableType> resolveTypeParameters(TsBeanModel bean, TsModel model, ProcessingContext processingContext,
boolean withBounds)
{
TypeVariable<? extends Class<?>>[] typeParameters = bean.getOrigin().getTypeParameters(); TypeVariable<? extends Class<?>>[] typeParameters = bean.getOrigin().getTypeParameters();
return Arrays.stream(typeParameters).map(t -> return Arrays.stream(typeParameters).map(t ->
{ {
...@@ -388,13 +391,51 @@ public class AddMethodsExtension extends Extension ...@@ -388,13 +391,51 @@ public class AddMethodsExtension extends Extension
@Override public void emitElements(final Writer writer, final Settings settings, final boolean exportKeyword, final TsModel model) @Override public void emitElements(final Writer writer, final Settings settings, final boolean exportKeyword, final TsModel model)
{ {
Set<String> constructors = new HashSet<>();
model.getBeans().forEach(bean -> model.getBeans().forEach(bean ->
{ {
if (bean.getName().getSimpleName().endsWith("Constructor")) if (bean.getName().getSimpleName().endsWith("Constructor"))
{ {
String originalBeanName = String originalBeanName =
bean.getName().getSimpleName().substring(0, bean.getName().getSimpleName().lastIndexOf("Constructor")); bean.getName().getSimpleName().substring(0, bean.getName().getSimpleName().lastIndexOf("Constructor"));
writer.writeIndentedLine("export const " + originalBeanName + ":" + bean.getName().getSimpleName()); writer.writeIndentedLine("export const " + originalBeanName + ":" + bean.getName().getSimpleName());
JsonObject jsonObjectAnnotation = bean.getOrigin().getAnnotation(JsonObject.class);
if (jsonObjectAnnotation != null)
{
writer.writeIndentedLine(
"export const " + jsonObjectAnnotation.value().replaceAll("\\.", "_") + ":" + bean.getName().getSimpleName());
}
constructors.add(bean.getName().getSimpleName());
}
});
model.getBeans().forEach(bean ->
{
if (!bean.getName().getSimpleName().endsWith("Constructor") && constructors.contains(bean.getName().getSimpleName() + "Constructor"))
{
JsonObject jsonObjectAnnotation = bean.getOrigin().getAnnotation(JsonObject.class);
if (jsonObjectAnnotation != null)
{
if (bean.getTypeParameters() == null || bean.getTypeParameters().isEmpty())
{
writer.writeIndentedLine(
"type " + jsonObjectAnnotation.value().replaceAll("\\.", "_") + " = " + bean.getName().getSimpleName());
} else
{
List<String> typeNames = bean.getTypeParameters().stream().map(p -> p.name.split(" ")[0]).collect(Collectors.toList());
List<String> typeParameters = bean.getTypeParameters().stream().map(TsType::toString).collect(Collectors.toList());
writer.writeIndentedLine(
"type " + jsonObjectAnnotation.value().replaceAll("\\.", "_") + "<" + String.join(", ", typeParameters) + "> = "
+ bean.getName()
.getSimpleName() + "<" + String.join(", ", typeNames) + ">");
}
}
} }
}); });
} }
......
...@@ -5,6 +5,7 @@ import java.util.HashSet; ...@@ -5,6 +5,7 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import ch.systemsx.cisd.base.annotation.JsonObject;
import cz.habarta.typescript.generator.Extension; import cz.habarta.typescript.generator.Extension;
import cz.habarta.typescript.generator.Settings; import cz.habarta.typescript.generator.Settings;
import cz.habarta.typescript.generator.TsType; import cz.habarta.typescript.generator.TsType;
...@@ -53,8 +54,16 @@ public class AddOpenBISModuleExtension extends Extension ...@@ -53,8 +54,16 @@ public class AddOpenBISModuleExtension extends Extension
if (hasConstructor) if (hasConstructor)
{ {
JsonObject jsonObjectAnnotation = bean.getOrigin().getAnnotation(JsonObject.class);
properties.add(new TsPropertyModel(bean.getName().getSimpleName(), properties.add(new TsPropertyModel(bean.getName().getSimpleName(),
new TsType.ReferenceType(new Symbol(bean.getName().getSimpleName() + "Constructor")), null, true, null)); new TsType.ReferenceType(new Symbol(bean.getName().getSimpleName() + "Constructor")), null, true, null));
if (jsonObjectAnnotation != null)
{
properties.add(new TsPropertyModel(jsonObjectAnnotation.value().replaceAll("\\.", "_"),
new TsType.ReferenceType(new Symbol(bean.getName().getSimpleName() + "Constructor")), null, true, null));
}
} }
} }
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment