Skip to content

Commit 9ed64e0

Browse files
committed
fixing tests
-added boolean method to check if object is a primitive type or a wrapper of an primitive type -added all needed tests
1 parent 5158f0d commit 9ed64e0

File tree

11 files changed

+472
-25
lines changed

11 files changed

+472
-25
lines changed

.vscode/eclipse-java-google-style.xml

Lines changed: 337 additions & 0 deletions
Large diffs are not rendered by default.

pom.xml

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
<project xmlns="http://maven.apache.org/POM/4.0.0"
2-
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3-
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
1+
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
42

53
<parent>
64
<groupId>info.unterrainer.commons</groupId>
@@ -46,6 +44,6 @@
4644
<groupId>com.windpanda.jmapper-framework</groupId>
4745
<artifactId>jmapper-core</artifactId>
4846
<version>1.6.3</version>
49-
</dependency>
47+
</dependency>
5048
</dependencies>
5149
</project>

src/main/java/info/unterrainer/commons/serialization/objectmapper/ObjectMapper.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
import static com.googlecode.jmapper.api.JMapperAPI.global;
44
import static com.googlecode.jmapper.api.JMapperAPI.mappedClass;
55

6+
import java.awt.geom.Arc2D.Float;
7+
import java.lang.reflect.InvocationTargetException;
8+
import java.util.Collection;
69
import java.util.HashMap;
710
import java.util.Map;
811
import java.util.function.BiConsumer;
@@ -12,6 +15,7 @@
1215
import com.googlecode.jmapper.exceptions.JMapperException;
1316

1417
import info.unterrainer.commons.serialization.objectmapper.exceptions.ObjectMapperMappingException;
18+
import info.unterrainer.commons.serialization.objectmapper.exceptions.ObjectMapperProcessingException;
1519
import info.unterrainer.commons.serialization.objectmapper.key.MappingKey;
1620
import lombok.NonNull;
1721

@@ -54,8 +58,23 @@ private <T, S> T mapWithBiConsumer(@NonNull final Class<S> sourceType, @NonNull
5458
return target;
5559
}
5660

61+
private <T> T constructObjectWithObjectType(final Class<T> targetType) {
62+
try {
63+
return targetType.getConstructor().newInstance();
64+
} catch (InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException
65+
| NoSuchMethodException | SecurityException e) {
66+
throw new ObjectMapperProcessingException("Error while instantiating target object", e);
67+
}
68+
}
69+
5770
private <T, S> T mapWithJMapper(@NonNull final Class<S> sourceType, @NonNull final Class<T> targetType,
5871
@NonNull final S source, final T target) {
72+
if (IsPrimitveIncludingWrapper(sourceType) || IsPrimitveIncludingWrapper(targetType)
73+
|| IsPrimitiveCollectionOrArrayIncludingWrapper(sourceType)
74+
|| IsPrimitiveCollectionOrArrayIncludingWrapper(targetType)) {
75+
return constructObjectWithObjectType(targetType);
76+
}
77+
5978
@SuppressWarnings("unchecked")
6079
JMapper<T, S> jMapper = (JMapper<T, S>) mappers.get(new MappingKey<>(sourceType, targetType));
6180
if (jMapper == null) {
@@ -74,5 +93,16 @@ private <T, S> T mapWithJMapper(@NonNull final Class<S> sourceType, @NonNull fin
7493
} catch (JMapperException e) {
7594
throw new ObjectMapperMappingException("Error mapping objects.", e);
7695
}
96+
97+
}
98+
99+
private boolean IsPrimitveIncludingWrapper(final Class<?> t) {
100+
return t.isPrimitive() || t == String.class || t == Short.class || t == Integer.class || t == Long.class
101+
|| t == Float.class || t == Double.class || t == Character.class || t == Boolean.class;
102+
}
103+
104+
private boolean IsPrimitiveCollectionOrArrayIncludingWrapper(final Class<?> t) {
105+
return t.isArray() && IsPrimitveIncludingWrapper(t.getComponentType()) || Collection.class.isAssignableFrom(t)
106+
|| Map.class.isAssignableFrom(t);
77107
}
78108
}

src/test/java/info/unterrainer/commons/serialization/objectmapper/ObjectMapperMappingTests.java

Lines changed: 49 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
package info.unterrainer.commons.serialization.objectmapper;
22

3+
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
34
import static org.junit.jupiter.api.Assertions.assertEquals;
5+
import static org.junit.jupiter.api.Assertions.assertSame;
46

57
import java.time.LocalDate;
8+
import java.util.Arrays;
69

710
import org.junit.jupiter.api.BeforeEach;
811
import org.junit.jupiter.api.Test;
912

1013
import info.unterrainer.commons.serialization.objectmapper.models.ComplexUser;
14+
import info.unterrainer.commons.serialization.objectmapper.models.ObjectWithArray;
15+
import info.unterrainer.commons.serialization.objectmapper.models.ObjectWithObject;
16+
import info.unterrainer.commons.serialization.objectmapper.models.OtherObjectWithArray;
1117
import info.unterrainer.commons.serialization.objectmapper.models.OtherSimpleUser;
1218
import info.unterrainer.commons.serialization.objectmapper.models.SimpleUser;
1319

@@ -32,10 +38,32 @@ public void beforeEach() {
3238
x.setFirstName(y.getFirstName());
3339
x.setLastName(y.getSurName());
3440
});
41+
oMapper.registerMapping(SimpleUser.class, OtherSimpleUser.class, (x, y) -> {
42+
y.setFirstName(x.getFirstName());
43+
y.setSurName(x.getLastName());
44+
}, (y, x) -> {
45+
x.setFirstName(y.getFirstName());
46+
x.setLastName(y.getSurName());
47+
});
48+
oMapper.registerMapping(String[].class, ObjectWithArray.class, (x, y) -> {
49+
y.setObjects(x);
50+
}, (y, x) -> {
51+
x = Arrays.copyOf(y.getObjects(), y.getObjects().length, x.getClass());
52+
});
53+
oMapper.registerMapping(ObjectWithArray.class, OtherObjectWithArray.class, (x, y) -> {
54+
y.setObjects(Arrays.copyOf(x.getObjects(), x.getObjects().length, x.getObjects().getClass()));
55+
}, (y, x) -> {
56+
x.setObjects(Arrays.copyOf(y.getObjects(), y.getObjects().length, y.getObjects().getClass()));
57+
});
58+
oMapper.registerMapping(Integer.class, ObjectWithObject.class, (x, y) -> {
59+
y.setObject(x);
60+
}, (y, x) -> {
61+
x = Integer.parseInt(String.valueOf(y));
62+
});
3563
}
3664

3765
@Test
38-
public void mappingComplexUserToSimpleUserUsingMappingWorks() {
66+
public void mappingComplexUserToSimpleUserWorks() {
3967
ComplexUser cu = ComplexUser.builder().build();
4068
cu.setFirstName("Danijel");
4169
cu.setLastName("Balog");
@@ -48,7 +76,7 @@ public void mappingComplexUserToSimpleUserUsingMappingWorks() {
4876
}
4977

5078
@Test
51-
public void mappingComplexUserToOtherSimpleUserUsingMappingWorks() {
79+
public void mappingComplexUserToOtherSimpleUserWorks() {
5280
ComplexUser cu = ComplexUser.builder().build();
5381
cu.setFirstName("Danijel");
5482
cu.setLastName("Balog");
@@ -61,7 +89,7 @@ public void mappingComplexUserToOtherSimpleUserUsingMappingWorks() {
6189
}
6290

6391
@Test
64-
public void mappingOtherSimpleUserToComplexUserUsingMappingWorks() {
92+
public void mappingOtherSimpleUserToComplexUserWorks() {
6593
OtherSimpleUser su = OtherSimpleUser.builder().build();
6694
su.setFirstName("Danijel");
6795
su.setSurName("Balog");
@@ -73,16 +101,31 @@ public void mappingOtherSimpleUserToComplexUserUsingMappingWorks() {
73101

74102
@Test
75103
public void mappingObjectWithArrayWorks() {
76-
104+
String[] array = new String[] {
105+
"Danijel",
106+
"Balog",
107+
"Hallo"
108+
};
109+
ObjectWithArray oArray = oMapper.map(String[].class, ObjectWithArray.class, array);
110+
assertArrayEquals(array, oArray.getObjects());
77111
}
78112

79113
@Test
80114
public void mappingObjectWithArrayOfObjectsWorks() {
81-
115+
ObjectWithArray array = new ObjectWithArray(new Object[] {
116+
"Danijel",
117+
500,
118+
"Balog",
119+
"Hallo"
120+
});
121+
OtherObjectWithArray oArray = oMapper.map(ObjectWithArray.class, OtherObjectWithArray.class, array);
122+
assertArrayEquals(array.getObjects(), oArray.getObjects());
82123
}
83124

84125
@Test
85126
public void mappingObjectWithinObjectWorks() {
86-
127+
Integer i = 1234;
128+
ObjectWithObject oWO = oMapper.map(Integer.class, ObjectWithObject.class, i);
129+
assertEquals(i, oWO.getObject());
87130
}
88131
}

src/test/java/info/unterrainer/commons/serialization/objectmapper/ObjectMapperSimpleTests.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import info.unterrainer.commons.serialization.objectmapper.models.Car;
1111
import info.unterrainer.commons.serialization.objectmapper.models.CarDto;
1212
import info.unterrainer.commons.serialization.objectmapper.models.SimpleUser;
13+
import info.unterrainer.commons.serialization.objectmapper.models.SmallCarDto;
1314

1415
public class ObjectMapperSimpleTests {
1516
public ObjectMapper oMapper;
@@ -21,31 +22,32 @@ public void beforeEach() {
2122

2223
@Test
2324
public void mappingCarToCarDtoWorks() {
24-
Car car = Car.builder().build();
25-
car.setDoorCount(2);
26-
car.setMakeOfYear("1929");
25+
Car car = new Car(2, "1929");
2726
CarDto carDto = oMapper.map(Car.class, CarDto.class, car);
2827
assertEquals(car.getDoorCount(), carDto.getDoorCount());
2928
assertEquals(car.getMakeOfYear(), carDto.getMakeOfYear());
3029
}
3130

3231
@Test
3332
public void mappingCarToSmallCarDtoWorks() {
34-
// im Target fehlt ein Feld
35-
// ... ev. gibt es eine Einstellung dafür...
36-
// ... ev. beim Erzeugen der JMapperAPI.
33+
Car car = new Car(2, "1929");
34+
SmallCarDto smallCarDto = oMapper.map(Car.class, SmallCarDto.class, car);
35+
assertEquals(car.getDoorCount(), smallCarDto.getDoorCount());
3736
}
3837

3938
@Test
4039
public void mappingSmallCarDtoToCarWorks() {
41-
// im Source fehlt ein Feld
40+
SmallCarDto smallCarDto = new SmallCarDto(2);
41+
Car car = oMapper.map(SmallCarDto.class, Car.class, smallCarDto);
42+
assertEquals(smallCarDto.getDoorCount(), car.getDoorCount());
4243
}
4344

4445
@Test
4546
public void mappingCarDtoToSimpleUserThrowsException() {
4647
assertThrows(ObjectMapperMappingException.class, () -> {
4748
CarDto car = new CarDto(4, "1975");
48-
SimpleUser u = oMapper.map(CarDto.class, SimpleUser.class, car);
49+
oMapper.map(CarDto.class, SimpleUser.class, car);
4950
});
5051
}
52+
5153
}

src/test/java/info/unterrainer/commons/serialization/objectmapper/models/Car.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package info.unterrainer.commons.serialization.objectmapper.models;
22

3+
import lombok.AllArgsConstructor;
34
import lombok.Data;
4-
import lombok.experimental.SuperBuilder;
5+
import lombok.NoArgsConstructor;
56

67
@Data
7-
@SuperBuilder
8+
@NoArgsConstructor
9+
@AllArgsConstructor
810
public class Car {
911
private int doorCount;
1012
private String makeOfYear;
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package info.unterrainer.commons.serialization.objectmapper.models;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
import lombok.NoArgsConstructor;
6+
7+
@Data
8+
@AllArgsConstructor
9+
@NoArgsConstructor
10+
public class ObjectWithArray {
11+
Object[] objects;
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package info.unterrainer.commons.serialization.objectmapper.models;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
import lombok.NoArgsConstructor;
6+
7+
@Data
8+
@AllArgsConstructor
9+
@NoArgsConstructor
10+
public class ObjectWithObject {
11+
Object object;
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package info.unterrainer.commons.serialization.objectmapper.models;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
import lombok.NoArgsConstructor;
6+
7+
@Data
8+
@AllArgsConstructor
9+
@NoArgsConstructor
10+
public class OtherObjectWithArray {
11+
Object[] objects;
12+
}
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package info.unterrainer.commons.serialization.objectmapper.models;
22

3+
import lombok.AllArgsConstructor;
34
import lombok.Data;
4-
import lombok.experimental.SuperBuilder;
5+
import lombok.NoArgsConstructor;
56

67
@Data
7-
@SuperBuilder
8+
@NoArgsConstructor
9+
@AllArgsConstructor
810
public class SmallCarDto {
911
private int doorCount;
1012
}

0 commit comments

Comments
 (0)