Skip to content

Commit 716cbff

Browse files
jonpereiradevJonathan Pereira
authored andcommitted
DiffOrder Implementation and throw discover exception.
1 parent d621e0d commit 716cbff

3 files changed

Lines changed: 31 additions & 6 deletions

File tree

src/main/java/com/github/jonpereiradev/diffobjects/builder/DiffConfigurationImpl.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,21 @@
11
package com.github.jonpereiradev.diffobjects.builder;
22

3+
import com.github.jonpereiradev.diffobjects.annotation.DiffOrder;
34
import com.github.jonpereiradev.diffobjects.strategy.DiffMetadata;
45

56
import java.util.ArrayList;
7+
import java.util.Collections;
68
import java.util.List;
79
import java.util.Map;
810

911
final class DiffConfigurationImpl implements DiffConfiguration {
1012

1113
private final Map<String, DiffMetadata> metadatas;
14+
private final List<DiffMetadata> diffMetadatas;
1215

1316
DiffConfigurationImpl(Map<String, DiffMetadata> metadatas) {
1417
this.metadatas = metadatas;
18+
this.diffMetadatas = new ArrayList<>(metadatas.keySet().size());
1519
}
1620

1721
/**
@@ -21,7 +25,26 @@ final class DiffConfigurationImpl implements DiffConfiguration {
2125
*/
2226
@Override
2327
public List<DiffMetadata> build() {
24-
return new ArrayList<>(metadatas.values());
28+
if (diffMetadatas.isEmpty()) {
29+
boolean isSortable = false;
30+
31+
for (Map.Entry<String, DiffMetadata> entry : metadatas.entrySet()) {
32+
DiffOrder annotation = entry.getValue().getMethod().getAnnotation(DiffOrder.class);
33+
34+
if (annotation != null) {
35+
entry.getValue().setOrder(annotation.value());
36+
isSortable = true;
37+
}
38+
39+
diffMetadatas.add(entry.getValue());
40+
}
41+
42+
if (isSortable) {
43+
Collections.sort(diffMetadatas);
44+
}
45+
}
46+
47+
return diffMetadatas;
2548
}
2649

2750
}

src/main/java/com/github/jonpereiradev/diffobjects/builder/DiffMappingBuilderImpl.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,10 +81,6 @@ public DiffQueryBuilder mapping(String field, String value) {
8181
Method method = DiffReflections.discoverGetter(classMap, field);
8282
DiffStrategyType diffStrategyType = DiffStrategyType.SINGLE;
8383

84-
if (method == null) {
85-
throw new DiffException("Method " + field + " not found in class " + classMap.getName());
86-
}
87-
8884
if (!Modifier.isPublic(method.getModifiers()) || method.getParameterTypes().length > 0) {
8985
throw new DiffException("Method " + method.getName() + " must be public and no-args.");
9086
}

src/main/java/com/github/jonpereiradev/diffobjects/strategy/DiffReflections.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,13 @@ public static Method discoverGetter(Class<?> diffClass, String fieldOrMethodName
7575
possibleAccessMethodName = "get" + StringUtils.capitalize(fieldOrMethodName);
7676
}
7777

78-
return MethodUtils.getMatchingAccessibleMethod(diffClass, possibleAccessMethodName, null);
78+
Method method = MethodUtils.getMatchingAccessibleMethod(diffClass, possibleAccessMethodName, null);
79+
80+
if (method == null) {
81+
throw new DiffException("Method " + possibleAccessMethodName + " not found in class " + diffClass.getName());
82+
}
83+
84+
return method;
7985
}
8086

8187
/**

0 commit comments

Comments
 (0)