Skip to content

Commit b2251aa

Browse files
committed
DATACMNS-621 - Polishing.
Simplified implementation of Path conversion. Inlined helper domain types to not to pollute the packages with types that are only used within that very one test class. Original pull request: #111.
1 parent 95bda86 commit b2251aa

File tree

5 files changed

+42
-105
lines changed

5 files changed

+42
-105
lines changed

src/main/java/org/springframework/data/querydsl/QSort.java

+16-15
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,15 @@
1919
import java.util.ArrayList;
2020
import java.util.Arrays;
2121
import java.util.List;
22-
import java.util.Stack;
2322

2423
import org.springframework.data.domain.Sort;
2524
import org.springframework.util.Assert;
25+
import org.springframework.util.StringUtils;
2626

2727
import com.mysema.query.types.Expression;
2828
import com.mysema.query.types.OrderSpecifier;
2929
import com.mysema.query.types.Path;
30+
import com.mysema.query.types.PathMetadata;
3031

3132
/**
3233
* Sort option for queries that wraps a querydsl {@link OrderSpecifier}.
@@ -145,24 +146,24 @@ public QSort and(OrderSpecifier<?>... orderSpecifiers) {
145146
return and(Arrays.asList(orderSpecifiers));
146147
}
147148

149+
/**
150+
* Recursively creates a dot-separated path for the property path.
151+
*
152+
* @param path must not be {@literal null}.
153+
* @return
154+
*/
148155
private static String preparePropertyPath(Path<?> path) {
149156

150-
Stack<String> stack = new Stack<String>();
151-
Path<?> pathElement = path;
152-
while (pathElement.getMetadata() != null && pathElement.getMetadata().getParent() != null) {
157+
PathMetadata<?> metadata = path.getMetadata();
158+
Path<?> parent = metadata.getParent();
153159

154-
stack.push(pathElement.getMetadata().getElement().toString());
155-
pathElement = pathElement.getMetadata().getParent();
160+
if (parent == null) {
161+
return "";
156162
}
157163

158-
StringBuilder sb = new StringBuilder();
159-
while (!stack.isEmpty()) {
160-
sb.append(stack.pop());
161-
if (!stack.isEmpty()) {
162-
sb.append(".");
163-
}
164-
}
165-
return sb.toString();
166-
}
164+
String basPath = preparePropertyPath(parent);
165+
String element = metadata.getElement().toString();
167166

167+
return StringUtils.hasText(basPath) ? basPath.concat(".").concat(element) : basPath.concat(element);
168+
}
168169
}

src/test/java/org/springframework/data/querydsl/QSortUnitTests.java

+26-5
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@
1717

1818
import static org.hamcrest.Matchers.*;
1919
import static org.junit.Assert.*;
20+
import static org.springframework.data.querydsl.QQSortUnitTests_WrapperToWrapWrapperForUserWrapper.*;
21+
import static org.springframework.data.querydsl.QQSortUnitTests_WrapperToWrapWrapperForUserWrapper_WrapperForUserWrapper.*;
22+
import static org.springframework.data.querydsl.QQSortUnitTests_WrapperToWrapWrapperForUserWrapper_WrapperForUserWrapper_UserWrapper.*;
2023

2124
import java.util.List;
2225

@@ -26,6 +29,7 @@
2629
import org.springframework.data.domain.Sort.Direction;
2730
import org.springframework.data.domain.Sort.Order;
2831

32+
import com.mysema.query.annotations.QueryInit;
2933
import com.mysema.query.types.OrderSpecifier;
3034

3135
/**
@@ -171,7 +175,7 @@ public void shouldSupportSortByOperatorExpressions() {
171175
@Test
172176
public void shouldCreateSortForNestedPathCorrectly() {
173177

174-
QSort sort = new QSort(QUserWrapper.userWrapper.user.firstname.asc());
178+
QSort sort = new QSort(userWrapper.user.firstname.asc());
175179

176180
assertThat(sort, hasItems(new Order(Direction.ASC, "user.firstname")));
177181
}
@@ -182,7 +186,7 @@ public void shouldCreateSortForNestedPathCorrectly() {
182186
@Test
183187
public void shouldCreateSortForDeepNestedPathCorrectly() {
184188

185-
QSort sort = new QSort(QWrapperForUserWrapper.wrapperForUserWrapper.wrapper.user.firstname.asc());
189+
QSort sort = new QSort(wrapperForUserWrapper.wrapper.user.firstname.asc());
186190

187191
assertThat(sort, hasItems(new Order(Direction.ASC, "wrapper.user.firstname")));
188192
}
@@ -193,10 +197,27 @@ public void shouldCreateSortForDeepNestedPathCorrectly() {
193197
@Test
194198
public void shouldCreateSortForReallyDeepNestedPathCorrectly() {
195199

196-
QSort sort = new QSort(
197-
QWrapperToWrapWrapperForUserWrapper.wrapperToWrapWrapperForUserWrapper.wrapperForUserWrapper.wrapper.user.firstname
198-
.asc());
200+
QSort sort = new QSort(wrapperToWrapWrapperForUserWrapper.wrapperForUserWrapper.wrapper.user.firstname.asc());
199201

200202
assertThat(sort, hasItems(new Order(Direction.ASC, "wrapperForUserWrapper.wrapper.user.firstname")));
201203
}
204+
205+
@com.mysema.query.annotations.QueryEntity
206+
static class WrapperToWrapWrapperForUserWrapper {
207+
208+
@QueryInit("wrapper.user")//
209+
WrapperForUserWrapper wrapperForUserWrapper;
210+
211+
@com.mysema.query.annotations.QueryEntity
212+
static class WrapperForUserWrapper {
213+
214+
UserWrapper wrapper;
215+
216+
@com.mysema.query.annotations.QueryEntity
217+
static class UserWrapper {
218+
219+
User user;
220+
}
221+
}
222+
}
202223
}

src/test/java/org/springframework/data/querydsl/UserWrapper.java

-28
This file was deleted.

src/test/java/org/springframework/data/querydsl/WrapperForUserWrapper.java

-28
This file was deleted.

src/test/java/org/springframework/data/querydsl/WrapperToWrapWrapperForUserWrapper.java

-29
This file was deleted.

0 commit comments

Comments
 (0)