Skip to content

Commit 8c4188a

Browse files
initial working version
1 parent 35a7319 commit 8c4188a

File tree

17 files changed

+835
-0
lines changed

17 files changed

+835
-0
lines changed

pom.xml

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
5+
<groupId>cz.habarta.typescript-generator</groupId>
6+
<artifactId>typescript-generator</artifactId>
7+
<packaging>pom</packaging>
8+
<version>1.0-SNAPSHOT</version>
9+
<name>typescript-generator</name>
10+
11+
<modules>
12+
<module>typescript-generator-core</module>
13+
<module>typescript-generator-maven-plugin</module>
14+
</modules>
15+
16+
<properties>
17+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
18+
</properties>
19+
20+
<build>
21+
22+
<plugins>
23+
<plugin>
24+
<groupId>org.apache.maven.plugins</groupId>
25+
<artifactId>maven-compiler-plugin</artifactId>
26+
<version>3.2</version>
27+
<configuration>
28+
<source>1.7</source>
29+
<target>1.7</target>
30+
<showWarnings>true</showWarnings>
31+
<showDeprecation>true</showDeprecation>
32+
<compilerArgument>-Xlint</compilerArgument>
33+
</configuration>
34+
</plugin>
35+
<plugin>
36+
<groupId>org.apache.maven.plugins</groupId>
37+
<artifactId>maven-surefire-plugin</artifactId>
38+
<version>2.17</version>
39+
</plugin>
40+
<plugin>
41+
<groupId>org.apache.maven.plugins</groupId>
42+
<artifactId>maven-jar-plugin</artifactId>
43+
<version>2.5</version>
44+
</plugin>
45+
</plugins>
46+
47+
</build>
48+
49+
</project>

typescript-generator-core/pom.xml

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
3+
<modelVersion>4.0.0</modelVersion>
4+
5+
<parent>
6+
<groupId>cz.habarta.typescript-generator</groupId>
7+
<artifactId>typescript-generator</artifactId>
8+
<version>1.0-SNAPSHOT</version>
9+
</parent>
10+
11+
<artifactId>typescript-generator-core</artifactId>
12+
<packaging>jar</packaging>
13+
<name>typescript-generator-core</name>
14+
15+
<dependencies>
16+
<!--compile dependencies-->
17+
<dependency>
18+
<groupId>org.codehaus.jackson</groupId>
19+
<artifactId>jackson-mapper-asl</artifactId>
20+
<version>1.9.13</version>
21+
</dependency>
22+
<!--test dependencies-->
23+
<dependency>
24+
<groupId>junit</groupId>
25+
<artifactId>junit</artifactId>
26+
<version>4.11</version>
27+
<scope>test</scope>
28+
</dependency>
29+
</dependencies>
30+
31+
</project>
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
2+
package cz.habarta.typescript.generator;
3+
4+
import java.util.List;
5+
6+
7+
public class BeanModel {
8+
9+
private final String name;
10+
private final List<PropertyModel> properties;
11+
12+
public BeanModel(String name, List<PropertyModel> properties) {
13+
this.name = name;
14+
this.properties = properties;
15+
}
16+
17+
public String getName() {
18+
return name;
19+
}
20+
21+
public List<PropertyModel> getProperties() {
22+
return properties;
23+
}
24+
25+
@Override
26+
public String toString() {
27+
return "BeanModel{" + "name=" + name + ", properties=" + properties + '}';
28+
}
29+
30+
}
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
2+
package cz.habarta.typescript.generator;
3+
4+
import java.io.*;
5+
import java.util.logging.Logger;
6+
7+
8+
public class Emitter {
9+
10+
private final Logger logger;
11+
private final Settings settings;
12+
private final PrintWriter writer;
13+
private int indent = 0;
14+
15+
private Emitter(Logger logger, Settings settings, PrintWriter writer) {
16+
this.logger = logger;
17+
this.settings = settings;
18+
this.writer = writer;
19+
}
20+
21+
public static void emit(Logger logger, Settings settings, File outputFile, Model model) {
22+
try {
23+
final PrintWriter printWriter = new PrintWriter(outputFile);
24+
final Emitter emitter = new Emitter(logger, settings, printWriter);
25+
emitter.emitModule(model);
26+
printWriter.close();
27+
} catch (FileNotFoundException e) {
28+
throw new RuntimeException(e);
29+
}
30+
}
31+
32+
private void emitModule(Model model) {
33+
if (settings.moduleName != null) {
34+
writeNewLine();
35+
writeIndentedLine("declare module " + settings.moduleName + " {");
36+
indent++;
37+
emitInterfaces(model);
38+
indent--;
39+
writeNewLine();
40+
writeIndentedLine("}");
41+
} else {
42+
emitInterfaces(model);
43+
}
44+
}
45+
46+
private void emitInterfaces(Model model) {
47+
for (BeanModel bean : model.getBeans()) {
48+
writeNewLine();
49+
writeIndentedLine("export interface " + bean.getName() + " {");
50+
indent++;
51+
for (PropertyModel property : bean.getProperties()) {
52+
emitProperty(property);
53+
}
54+
indent--;
55+
writeIndentedLine("}");
56+
}
57+
}
58+
59+
private void emitProperty(PropertyModel property) {
60+
if (property.getComments() != null) {
61+
writeIndentedLine("/**");
62+
for (String comment : property.getComments()) {
63+
writeIndentedLine(" * " + comment);
64+
}
65+
writeIndentedLine(" */");
66+
}
67+
final TsType tsType = property.getTsType() instanceof TsType.EnumType ? TsType.String : property.getTsType();
68+
final String opt = settings.declarePropertiesAsOptional ? "?" : "";
69+
writeIndentedLine(property.getName() + opt + ": " + tsType + ";");
70+
}
71+
72+
private void writeIndentedLine(String line) {
73+
for (int i = 0; i < indent; i++) {
74+
writer.write(settings.indentString);
75+
}
76+
writer.write(line);
77+
writeNewLine();
78+
}
79+
80+
private void writeNewLine() {
81+
writer.write(settings.newline);
82+
}
83+
84+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
2+
package cz.habarta.typescript.generator;
3+
4+
import java.util.*;
5+
import java.util.logging.Logger;
6+
import org.codehaus.jackson.map.*;
7+
import org.codehaus.jackson.map.ser.*;
8+
import org.codehaus.jackson.type.JavaType;
9+
10+
11+
public class Jackson1Parser extends ModelParser {
12+
13+
private final ObjectMapper objectMapper = new ObjectMapper();
14+
15+
public Jackson1Parser(Logger logger, Settings settings) {
16+
super(logger, settings);
17+
}
18+
19+
@Override
20+
protected BeanModel parseBean(Class<?> beanClass) {
21+
try {
22+
final SerializationConfig serializationConfig = objectMapper.getSerializationConfig();
23+
final JavaType simpleType = objectMapper.constructType(beanClass);
24+
25+
final JsonSerializer<?> jsonSerializer = BeanSerializerFactory.instance.createSerializer(serializationConfig, simpleType, null);
26+
final BeanHelper beanHelper = new BeanHelper((BeanSerializer) jsonSerializer);
27+
28+
final List<PropertyModel> properties = new ArrayList<>();
29+
for (BeanPropertyWriter beanPropertyWriter : beanHelper.getProperties()) {
30+
properties.add(processTypeAndCreateProperty(beanPropertyWriter.getName(), beanPropertyWriter.getGenericPropertyType()));
31+
}
32+
return new BeanModel(getMappedName(beanClass), properties);
33+
} catch (JsonMappingException e) {
34+
throw new RuntimeException(e);
35+
}
36+
}
37+
38+
private static class BeanHelper extends BeanSerializer {
39+
40+
public BeanHelper(BeanSerializer src) {
41+
super(src);
42+
}
43+
44+
public BeanPropertyWriter[] getProperties() {
45+
return _props;
46+
}
47+
48+
}
49+
50+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
2+
package cz.habarta.typescript.generator;
3+
4+
import java.util.*;
5+
6+
7+
public class Model {
8+
9+
private final List<BeanModel> beans;
10+
11+
public Model(List<BeanModel> beans) {
12+
this.beans = beans;
13+
}
14+
15+
public List<BeanModel> getBeans() {
16+
return beans;
17+
}
18+
19+
}

0 commit comments

Comments
 (0)