Skip to content

Commit a3768ee

Browse files
committed
Apply fjtirado suggestions
Signed-off-by: Matheus Cruz <matheuscruz.dev@gmail.com>
1 parent 2d1b65a commit a3768ee

File tree

3 files changed

+49
-20
lines changed

3 files changed

+49
-20
lines changed

experimental/model/src/main/java/io/serverlessworkflow/impl/model/func/JavaModel.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,29 @@ public Optional<Number> asNumber() {
6464
return object instanceof Number value ? Optional.of(value) : Optional.empty();
6565
}
6666

67+
@Override
68+
@SuppressWarnings("unchecked")
69+
protected <T> Optional<T> asNumber(Class<?> targetNumberClass) {
70+
if (!(object instanceof Number num)) {
71+
return Optional.empty();
72+
}
73+
if (targetNumberClass == Integer.class) {
74+
return (Optional<T>) Optional.of(num.intValue());
75+
} else if (targetNumberClass == Long.class) {
76+
return (Optional<T>) Optional.of(num.longValue());
77+
} else if (targetNumberClass == Double.class) {
78+
return (Optional<T>) Optional.of(num.doubleValue());
79+
} else if (targetNumberClass == Float.class) {
80+
return (Optional<T>) Optional.of(num.floatValue());
81+
} else if (targetNumberClass == Short.class) {
82+
return (Optional<T>) Optional.of(num.shortValue());
83+
} else if (targetNumberClass == Byte.class) {
84+
return (Optional<T>) Optional.of(num.byteValue());
85+
} else {
86+
return (Optional<T>) Optional.of(num);
87+
}
88+
}
89+
6790
@Override
6891
public Optional<Map<String, Object>> asMap() {
6992
return object instanceof Map ? Optional.of((Map<String, Object>) object) : Optional.empty();

impl/core/src/main/java/io/serverlessworkflow/impl/AbstractWorkflowModel.java

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ public abstract class AbstractWorkflowModel implements WorkflowModel {
2424

2525
protected abstract <T> Optional<T> convert(Class<T> clazz);
2626

27+
protected abstract <T> Optional<T> asNumber(Class<?> targetNumberClass);
28+
2729
@Override
2830
public <T> Optional<T> as(Class<T> clazz) {
2931
if (WorkflowModel.class.isAssignableFrom(clazz)) {
@@ -35,7 +37,7 @@ public <T> Optional<T> as(Class<T> clazz) {
3537
} else if (OffsetDateTime.class.isAssignableFrom(clazz)) {
3638
return (Optional<T>) asDate();
3739
} else if (Number.class.isAssignableFrom(clazz)) {
38-
return asNumber().map(num -> convertNumber(num, clazz));
40+
return asNumber(clazz);
3941
} else if (Collection.class.isAssignableFrom(clazz)) {
4042
Collection<?> collection = asCollection();
4143
return collection.isEmpty() ? Optional.empty() : (Optional<T>) Optional.of(collection);
@@ -45,23 +47,4 @@ public <T> Optional<T> as(Class<T> clazz) {
4547
return convert(clazz);
4648
}
4749
}
48-
49-
@SuppressWarnings("unchecked")
50-
private <T> T convertNumber(Number num, Class<T> clazz) {
51-
if (clazz == Integer.class) {
52-
return (T) Integer.valueOf(num.intValue());
53-
} else if (clazz == Long.class) {
54-
return (T) Long.valueOf(num.longValue());
55-
} else if (clazz == Double.class) {
56-
return (T) Double.valueOf(num.doubleValue());
57-
} else if (clazz == Float.class) {
58-
return (T) Float.valueOf(num.floatValue());
59-
} else if (clazz == Short.class) {
60-
return (T) Short.valueOf(num.shortValue());
61-
} else if (clazz == Byte.class) {
62-
return (T) Byte.valueOf(num.byteValue());
63-
} else {
64-
return (T) num;
65-
}
66-
}
6750
}

impl/model/src/main/java/io/serverlessworkflow/impl/model/jackson/JacksonModel.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,29 @@ public Optional<Number> asNumber() {
6969
return node.isNumber() ? Optional.of(node.asLong()) : Optional.empty();
7070
}
7171

72+
@Override
73+
@SuppressWarnings("unchecked")
74+
protected <T> Optional<T> asNumber(Class<?> targetNumberClass) {
75+
if (!node.isNumber()) {
76+
return Optional.empty();
77+
}
78+
if (targetNumberClass == Integer.class) {
79+
return (Optional<T>) Optional.of(node.asInt());
80+
} else if (targetNumberClass == Long.class) {
81+
return (Optional<T>) Optional.of(node.asLong());
82+
} else if (targetNumberClass == Double.class) {
83+
return (Optional<T>) Optional.of(node.asDouble());
84+
} else if (targetNumberClass == Float.class) {
85+
return (Optional<T>) Optional.of((float) node.asDouble());
86+
} else if (targetNumberClass == Short.class) {
87+
return (Optional<T>) Optional.of((short) node.asInt());
88+
} else if (targetNumberClass == Byte.class) {
89+
return (Optional<T>) Optional.of((byte) node.asInt());
90+
} else {
91+
return (Optional<T>) Optional.of(node.numberValue());
92+
}
93+
}
94+
7295
@Override
7396
public String toString() {
7497
return node.toPrettyString();

0 commit comments

Comments
 (0)