Skip to content

Commit 6ffbddd

Browse files
Add support for java.time (refs #159), remove support for org.joda.time
1 parent 6e525ce commit 6ffbddd

File tree

3 files changed

+92
-40
lines changed

3 files changed

+92
-40
lines changed

typescript-generator-core/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,12 @@
8686
<version>2.9.7</version>
8787
<scope>test</scope>
8888
</dependency>
89+
<!-- <dependency>
90+
<groupId>com.fasterxml.jackson.datatype</groupId>
91+
<artifactId>jackson-datatype-jsr310</artifactId>
92+
<version>2.8.6</version>
93+
<scope>test</scope>
94+
</dependency>-->
8995
</dependencies>
9096

9197
<build>

typescript-generator-core/src/main/java/cz/habarta/typescript/generator/DefaultTypeProcessor.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,12 @@ public class DefaultTypeProcessor implements TypeProcessor {
1313
@Override
1414
public Result processType(Type javaType, Context context) {
1515
if (KnownTypes.containsKey(javaType)) return new Result(KnownTypes.get(javaType));
16+
if (javaType instanceof Class) {
17+
final Class<?> javaClass = (Class<?>) javaType;
18+
if (JavaTimeTemporal != null && JavaTimeTemporal.isAssignableFrom(javaClass)) {
19+
return new Result(TsType.Date);
20+
}
21+
}
1622
// map JAX-RS standard types to `any`
1723
for (Class<?> cls : JaxrsApplicationParser.getStandardEntityClasses()) {
1824
final Class<?> rawClass = Utils.getRawClassOrNull(javaType);
@@ -126,17 +132,19 @@ private static Map<Type, TsType> getKnownTypes() {
126132
knownTypes.put(BigInteger.class, TsType.Number);
127133
knownTypes.put(Date.class, TsType.Date);
128134
knownTypes.put(UUID.class, TsType.String);
135+
return knownTypes;
136+
}
137+
138+
private static final Map<Type, TsType> KnownTypes = getKnownTypes();
129139

130-
// joda time (if present)
140+
private static Class<?> getTemporalIfAvailable() {
131141
try {
132-
final Class<?> jodaTimeClass = Class.forName("org.joda.time.DateTime");
133-
knownTypes.put(jodaTimeClass, TsType.Date);
142+
return Class.forName("java.time.temporal.Temporal");
134143
} catch (ClassNotFoundException e) {
135-
// ignore if joda time is not present
144+
return null;
136145
}
137-
return knownTypes;
138146
}
139147

140-
private static final Map<Type, TsType> KnownTypes = getKnownTypes();
148+
private static final Class<?> JavaTimeTemporal = getTemporalIfAvailable();
141149

142150
}
Lines changed: 72 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,21 @@
11

22
package cz.habarta.typescript.generator;
33

4+
import com.fasterxml.jackson.core.JsonProcessingException;
5+
import com.fasterxml.jackson.databind.ObjectMapper;
6+
import com.fasterxml.jackson.databind.SerializationFeature;
7+
//import java.time.*;
48
import java.util.*;
5-
6-
import org.joda.time.DateTime;
79
import org.junit.*;
810

911

1012
public class DateTest {
1113

1214
@Test
1315
public void testDate_forJavaUtilDate() {
14-
final String dts = new TypeScriptGenerator(settings(DateMapping.asDate, "AsDate"))
15-
.generateTypeScript(Input.from(Dates.class));
16+
final Settings settings = TestUtils.settings();
17+
settings.mapDate = DateMapping.asDate;
18+
final String dts = new TypeScriptGenerator(settings).generateTypeScript(Input.from(Dates.class));
1619
Assert.assertTrue(dts.contains("date: Date;"));
1720
Assert.assertTrue(dts.contains("dateList: Date[];"));
1821
Assert.assertTrue(dts.contains("datesMap: { [index: string]: Date[] };"));
@@ -21,8 +24,9 @@ public void testDate_forJavaUtilDate() {
2124

2225
@Test
2326
public void testDate_forJodaDateTime() {
24-
final String dts = new TypeScriptGenerator(settings(DateMapping.asDate, "AsDate"))
25-
.generateTypeScript(Input.from(JodaDates.class));
27+
final Settings settings = TestUtils.settings();
28+
settings.customTypeMappings.put("org.joda.time.DateTime", "Date");
29+
final String dts = new TypeScriptGenerator(settings).generateTypeScript(Input.from(JodaDates.class));
2630
Assert.assertTrue(dts.contains("date: Date;"));
2731
Assert.assertTrue(dts.contains("dateList: Date[];"));
2832
Assert.assertTrue(dts.contains("datesMap: { [index: string]: Date[] };"));
@@ -31,8 +35,9 @@ public void testDate_forJodaDateTime() {
3135

3236
@Test
3337
public void testDateAsNumber_forJavaUtilDate() {
34-
final String dts = new TypeScriptGenerator(settings(DateMapping.asNumber, "AsNumber"))
35-
.generateTypeScript(Input.from(Dates.class));
38+
final Settings settings = TestUtils.settings();
39+
settings.mapDate = DateMapping.asNumber;
40+
final String dts = new TypeScriptGenerator(settings).generateTypeScript(Input.from(Dates.class));
3641
Assert.assertTrue(dts.contains("date: DateAsNumber;"));
3742
Assert.assertTrue(dts.contains("dateList: DateAsNumber[];"));
3843
Assert.assertTrue(dts.contains("datesMap: { [index: string]: DateAsNumber[] };"));
@@ -42,19 +47,21 @@ public void testDateAsNumber_forJavaUtilDate() {
4247

4348
@Test
4449
public void testDateAsNumber_forJodaDateTime() {
45-
final String dts = new TypeScriptGenerator(settings(DateMapping.asNumber, "AsNumber"))
46-
.generateTypeScript(Input.from(JodaDates.class));
47-
Assert.assertTrue(dts.contains("date: DateAsNumber;"));
48-
Assert.assertTrue(dts.contains("dateList: DateAsNumber[];"));
49-
Assert.assertTrue(dts.contains("datesMap: { [index: string]: DateAsNumber[] };"));
50-
Assert.assertTrue(dts.contains("dates: DateAsNumber[];"));
51-
Assert.assertTrue(dts.contains("type DateAsNumber = number;"));
50+
final Settings settings = TestUtils.settings();
51+
settings.customTypeMappings.put("org.joda.time.DateTime", "number");
52+
final String dts = new TypeScriptGenerator(settings).generateTypeScript(Input.from(JodaDates.class));
53+
Assert.assertTrue(dts.contains("date: number;"));
54+
Assert.assertTrue(dts.contains("dateList: number[];"));
55+
Assert.assertTrue(dts.contains("datesMap: { [index: string]: number[] };"));
56+
Assert.assertTrue(dts.contains("dates: number[];"));
57+
Assert.assertTrue(!dts.contains("type DateAsNumber = number;"));
5258
}
5359

5460
@Test
5561
public void testDateAsString_forJavaUtilDate() {
56-
final String dts = new TypeScriptGenerator(settings(DateMapping.asString, "AsString"))
57-
.generateTypeScript(Input.from(Dates.class));
62+
final Settings settings = TestUtils.settings();
63+
settings.mapDate = DateMapping.asString;
64+
final String dts = new TypeScriptGenerator(settings).generateTypeScript(Input.from(Dates.class));
5865
Assert.assertTrue(dts.contains("date: DateAsString;"));
5966
Assert.assertTrue(dts.contains("dateList: DateAsString[];"));
6067
Assert.assertTrue(dts.contains("datesMap: { [index: string]: DateAsString[] };"));
@@ -64,22 +71,46 @@ public void testDateAsString_forJavaUtilDate() {
6471

6572
@Test
6673
public void testDateAsString_forJodaDateTime() {
67-
final String dts = new TypeScriptGenerator(settings(DateMapping.asString, "AsString"))
68-
.generateTypeScript(Input.from(JodaDates.class));
69-
Assert.assertTrue(dts.contains("date: DateAsString;"));
70-
Assert.assertTrue(dts.contains("dateList: DateAsString[];"));
71-
Assert.assertTrue(dts.contains("datesMap: { [index: string]: DateAsString[] };"));
72-
Assert.assertTrue(dts.contains("dates: DateAsString[];"));
73-
Assert.assertTrue(dts.contains("type DateAsString = string;"));
74-
}
75-
76-
private static Settings settings(DateMapping mapDate, String namespace) {
7774
final Settings settings = TestUtils.settings();
78-
settings.namespace = namespace;
79-
settings.mapDate = mapDate;
80-
return settings;
75+
settings.customTypeMappings.put("org.joda.time.DateTime", "string");
76+
final String dts = new TypeScriptGenerator(settings).generateTypeScript(Input.from(JodaDates.class));
77+
Assert.assertTrue(dts.contains("date: string;"));
78+
Assert.assertTrue(dts.contains("dateList: string[];"));
79+
Assert.assertTrue(dts.contains("datesMap: { [index: string]: string[] };"));
80+
Assert.assertTrue(dts.contains("dates: string[];"));
81+
Assert.assertTrue(!dts.contains("type DateAsString = string;"));
8182
}
8283

84+
// @Test
85+
// public void testDateAsString_forJava8DateTime() {
86+
// final Settings settings = TestUtils.settings();
87+
// settings.mapDate = DateMapping.asString;
88+
// final String dts = new TypeScriptGenerator(settings).generateTypeScript(Input.from(Java8Dates.class));
89+
// Assert.assertTrue(dts.contains("date: DateAsString;"));
90+
// Assert.assertTrue(dts.contains("dateList: DateAsString[];"));
91+
// Assert.assertTrue(dts.contains("datesMap: { [index: string]: DateAsString[] };"));
92+
// Assert.assertTrue(dts.contains("dates: DateAsString[];"));
93+
// Assert.assertTrue(dts.contains("type DateAsString = string;"));
94+
// }
95+
96+
// public static void main(String[] args) throws JsonProcessingException {
97+
// final ObjectMapper objectMapper = new ObjectMapper()
98+
// .findAndRegisterModules()
99+
// .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
100+
// final Clock clock = Clock.fixed(Instant.parse("2017-09-02T19:11:00Z"), ZoneId.systemDefault());
101+
// System.out.println(objectMapper.writeValueAsString(new Date()));
102+
// System.out.println(objectMapper.writeValueAsString(Calendar.getInstance()));
103+
// System.out.println(objectMapper.writeValueAsString(Instant.now(clock)));
104+
// System.out.println(objectMapper.writeValueAsString(LocalDate.now(clock)));
105+
// System.out.println(objectMapper.writeValueAsString(LocalDateTime.now(clock)));
106+
// System.out.println(objectMapper.writeValueAsString(LocalTime.now(clock)));
107+
// System.out.println(objectMapper.writeValueAsString(OffsetDateTime.now(clock)));
108+
// System.out.println(objectMapper.writeValueAsString(OffsetTime.now(clock)));
109+
// System.out.println(objectMapper.writeValueAsString(Year.now(clock)));
110+
// System.out.println(objectMapper.writeValueAsString(YearMonth.now(clock)));
111+
// System.out.println(objectMapper.writeValueAsString(ZonedDateTime.now(clock)));
112+
// }
113+
83114
}
84115

85116
class Dates {
@@ -90,8 +121,15 @@ class Dates {
90121
}
91122

92123
class JodaDates {
93-
public DateTime date;
94-
public List<DateTime> dateList;
95-
public Map<String, List<DateTime>> datesMap;
96-
public DateTime[] dates;
124+
public org.joda.time.DateTime date;
125+
public List<org.joda.time.DateTime> dateList;
126+
public Map<String, List<org.joda.time.DateTime>> datesMap;
127+
public org.joda.time.DateTime[] dates;
97128
}
129+
130+
//class Java8Dates {
131+
// public LocalDateTime date;
132+
// public List<LocalDateTime> dateList;
133+
// public Map<String, List<LocalDateTime>> datesMap;
134+
// public LocalDateTime[] dates;
135+
//}

0 commit comments

Comments
 (0)