use of cz.habarta.typescript.generator.emitter.TsModel in project typescript-generator by vojtechhabarta.
the class ModelCompilerTest method testIntermediateInterfacesWithoutTypeParams.
@Test
public void testIntermediateInterfacesWithoutTypeParams() throws Exception {
final Settings settings = TestUtils.settings();
final Jackson2Parser jacksonParser = new Jackson2Parser(settings, new DefaultTypeProcessor());
final Model model = jacksonParser.parseModel(Implementation.class);
final ModelCompiler modelCompiler = new TypeScriptGenerator(settings).getModelCompiler();
final TsModel result = modelCompiler.javaToTypeScript(model);
Assert.assertThat(result.getBean(WithoutTypeParam.class).getProperties().get(0).tsType, CoreMatchers.instanceOf(TsType.UnionType.class));
}
use of cz.habarta.typescript.generator.emitter.TsModel in project typescript-generator by vojtechhabarta.
the class EnumConstantsExtensionTest method basicTest.
@Test
public void basicTest() {
final List<String> lines = new ArrayList<>();
final EmitterExtension.Writer writer = new EmitterExtension.Writer() {
@Override
public void writeIndentedLine(String line) {
lines.add(line);
}
};
final Settings settings = new Settings();
settings.sortDeclarations = true;
final TypeProcessor typeProcessor = new DefaultTypeProcessor();
final Model model = new Jackson2Parser(settings, typeProcessor).parseModel(Direction.class);
final TsModel tsModel = new ModelCompiler(settings, typeProcessor).javaToTypeScript(model);
new EnumConstantsExtension().emitElements(writer, settings, false, tsModel);
String indent = settings.indentString;
Assert.assertEquals(7, lines.size());
Assert.assertEquals("", lines.get(0));
Assert.assertEquals("const Direction = {", lines.get(1));
Assert.assertEquals(indent + "North: <Direction>\"North\",", lines.get(2));
Assert.assertEquals(indent + "East: <Direction>\"East\",", lines.get(3));
Assert.assertEquals(indent + "South: <Direction>\"South\",", lines.get(4));
Assert.assertEquals(indent + "West: <Direction>\"West\",", lines.get(5));
Assert.assertEquals("}", lines.get(6));
}
use of cz.habarta.typescript.generator.emitter.TsModel in project openremote by openremote.
the class AssetModelInfoExtension method emitElements.
@SuppressWarnings("rawtypes")
@Override
public void emitElements(Writer writer, Settings settings, boolean exportKeyword, TsModel model) {
Map<String, String> assetMap = new HashMap<>();
Map<String, String> otherMap = new HashMap<>();
Arrays.stream(ValueUtil.getAssetInfos(null)).forEach(assetModelInfo -> {
String assetDescriptorName = assetModelInfo.getAssetDescriptor().getName();
assetMap.put(assetDescriptorName.toUpperCase(Locale.ROOT), assetDescriptorName);
// Store attributes
Arrays.stream(assetModelInfo.getAttributeDescriptors()).forEach(attributeDescriptor -> {
String attributeName = attributeDescriptor.getName();
otherMap.put(attributeName.toUpperCase(Locale.ROOT), attributeName);
});
});
emitEnum(writer, "WellknownAssets", assetMap);
writer.writeIndentedLine("");
emitEnum(writer, "WellknownAttributes", otherMap);
otherMap.clear();
Arrays.stream(ValueUtil.getMetaItemDescriptors()).forEach(metaItemDescriptor -> {
String metaName = metaItemDescriptor.getName();
otherMap.put(metaName.toUpperCase(Locale.ROOT), metaName);
});
writer.writeIndentedLine("");
emitEnum(writer, "WellknownMetaItems", otherMap);
otherMap.clear();
Arrays.stream(ValueUtil.getValueDescriptors()).forEach(valueDescriptor -> {
String valueTypeName = valueDescriptor.getName();
otherMap.put(valueTypeName.toUpperCase(Locale.ROOT).replaceAll("[^A-Z0-9]", ""), valueTypeName);
});
writer.writeIndentedLine("");
emitEnum(writer, "WellknownValueTypes", otherMap);
otherMap.clear();
Arrays.stream(Constants.class.getFields()).filter(f -> f.getName().startsWith("UNITS_")).forEach(unitField -> {
String unitName = unitField.getName().substring(6);
try {
otherMap.put(unitName.toUpperCase(Locale.ROOT), (String) unitField.get(null));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
});
writer.writeIndentedLine("");
emitEnum(writer, "WellknownUnitTypes", otherMap);
otherMap.clear();
Arrays.stream(Ruleset.class.getFields()).filter(f -> f.getType() == MetaItemDescriptor.class).forEach(rulesetMeta -> {
try {
MetaItemDescriptor metaItemDescriptor = (MetaItemDescriptor) rulesetMeta.get(null);
otherMap.put(metaItemDescriptor.getName().toUpperCase(Locale.ROOT).replaceAll("[^A-Z0-9]", ""), metaItemDescriptor.getName());
} catch (IllegalAccessException e) {
e.printStackTrace();
}
});
writer.writeIndentedLine("");
emitEnum(writer, "WellknownRulesetMetaItems", otherMap);
}
use of cz.habarta.typescript.generator.emitter.TsModel in project openremote by openremote.
the class JsonSerializeExtension method getTransformers.
@Override
public List<cz.habarta.typescript.generator.Extension.TransformerDefinition> getTransformers() {
return Arrays.asList(new cz.habarta.typescript.generator.Extension.TransformerDefinition(ModelCompiler.TransformationPhase.BeforeTsModel, new ModelTransformer() {
@Override
public TsModel transformModel(SymbolTable symbolTable, TsModel model) {
return model;
}
@Override
public Model transformModel(SymbolTable symbolTable, Model model) {
// Look for @JsonSerialize annotation and modify the property type accordingly
List<BeanModel> beans = model.getBeans();
beans.replaceAll(bean -> {
AtomicBoolean modified = new AtomicBoolean(false);
List<PropertyModel> properties = bean.getProperties().stream().map(p -> {
Member member = p.getOriginalMember();
JsonSerialize jsonSerialize = null;
if (member instanceof Field) {
Field field = (Field) member;
jsonSerialize = field.getAnnotation(JsonSerialize.class);
} else if (member instanceof Method) {
Method method = (Method) member;
jsonSerialize = method.getAnnotation(JsonSerialize.class);
}
if (jsonSerialize != null) {
// TODO: Add support for other options
if (jsonSerialize.as() != Void.class) {
modified.set(true);
return new PropertyModel(p.getName(), jsonSerialize.as(), p.isOptional(), p.getAccess(), p.getOriginalMember(), p.getPullProperties(), p.getContext(), p.getComments());
}
if (jsonSerialize.converter() != Converter.None.class) {
// Type info is not accessible with reflection so instantiate the converter
Method convertMethod = Arrays.stream(jsonSerialize.converter().getMethods()).filter(m -> m.getName().equals("convert")).findFirst().orElse(null);
if (convertMethod != null) {
modified.set(true);
return new PropertyModel(p.getName(), convertMethod.getGenericReturnType(), p.isOptional(), p.getAccess(), p.getOriginalMember(), p.getPullProperties(), p.getContext(), p.getComments());
}
}
}
return p;
}).collect(Collectors.toList());
if (modified.get()) {
return new BeanModel(bean.getOrigin(), bean.getParent(), bean.getTaggedUnionClasses(), bean.getDiscriminantProperty(), bean.getDiscriminantLiteral(), bean.getInterfaces(), properties, bean.getComments());
}
return bean;
});
return model;
}
}));
}
use of cz.habarta.typescript.generator.emitter.TsModel in project typescript-generator by vojtechhabarta.
the class ModelCompilerTest method testIntermediateInterfacesWithTypeParams.
@Test
public void testIntermediateInterfacesWithTypeParams() throws Exception {
final Settings settings = TestUtils.settings();
final Jackson2Parser jacksonParser = new Jackson2Parser(settings, new DefaultTypeProcessor());
final Model model = jacksonParser.parseModel(Implementation.class);
final ModelCompiler modelCompiler = new TypeScriptGenerator(settings).getModelCompiler();
final TsModel result = modelCompiler.javaToTypeScript(model);
Assert.assertThat(result.getBean(WithTypeParam.class).getProperties().get(0).tsType, CoreMatchers.instanceOf(TsType.UnionType.class));
}
Aggregations