Skip to content

Commit 7522964

Browse files
JesperRossenlangecode
authored andcommitted
Added support for single element pages (#4)
* Update README.md To reflect the actual implementation regarding Sort. * Allow more charecters in select values * Added wildcards to select * Added test of wildcards * Changed logic in Elements to support single element size spans * Expanded test with now valid input * Simplified logic in getElement * Allow more charecters in select values * Allow more charecters in select values * Added test of wildcards * Changed logic in Elements to support single element size spans * Expanded test with now valid input * Simplified logic in getElement * Changed logic in Elements to support single element size spans * Simplified logic in getElement * Adjusted elements logic to allow same start and end, or only one element * Removed duplicated test * Added test for single element equal to 0
1 parent fed7a77 commit 7522964

File tree

4 files changed

+46
-36
lines changed

4 files changed

+46
-36
lines changed

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,11 @@ The maximum element count is 500.
132132

133133
returns elements 10 to 30.
134134

135+
https://banking.services.sample-bank.dk/accounts/1234-56789/transactions?elements="10|10"
136+
https://banking.services.sample-bank.dk/accounts/1234-56789/transactions?elements="10"
137+
138+
both returns element 10.
139+
135140
### Filtering API Capability
136141

137142
The Query parameters `filter` is used for requesting a dynamic projection. The service is not obliged to be able to support this, but may return

src/main/java/io/openapitools/api/capabilities/Element.java

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
*/
2020
public final class Element {
2121

22-
/** Maximum number of elements to return - currently 500 */
22+
/**
23+
* Maximum number of elements to return - currently 500
24+
*/
2325
public static final int MAX_ELEMENTS = 500;
2426

2527
private final int start;
@@ -30,46 +32,44 @@ private Element(int start, int end) {
3032
this.end = end;
3133
}
3234

33-
/**
34-
* @return the starting point for the desired sequence if returned instances
35-
*/
36-
public int getStart() {
37-
return start;
38-
}
39-
40-
/**
41-
* @return the last entry in the desired sequence if returned instances
42-
*/
43-
public int getEnd() {
44-
return end;
45-
}
46-
4735
/**
4836
* A span of elements.
49-
* The syntax supported is given by the regexp: {@code "^([0-9]+)?(\\|[0-9]+)?"}
37+
* The syntax supported is given by the regexp: {@code "^[0-9]+(\|[0-9]+)?"}
38+
*
5039
* @param element a string that follows the syntax given by the regexp above
5140
* @return an element set with a "include from element (start)" to "last included element (end)"
5241
*/
5342
public static Optional<Element> getElement(String element) {
54-
if (null == element) {
55-
return Optional.empty();
56-
}
57-
if (!element.matches("^([0-9]+)?(\\|[0-9]+)?")) {
58-
return Optional.empty();
59-
}
60-
String result = Sanitizer.sanitize(element, false);
61-
int pipe = result.indexOf('|');
62-
if (pipe > 0) {
63-
try {
43+
if (null != element && element.matches("^[0-9]+(\\|[0-9]+)?")) {
44+
String result = Sanitizer.sanitize(element, false);
45+
int pipe = result.indexOf('|');
46+
if (pipe > 0) {
6447
int s = Integer.parseInt(result.substring(0, pipe));
6548
int e = Integer.parseInt(result.substring(pipe + 1));
66-
if (e > s && s > 0 && e - s < MAX_ELEMENTS) {
49+
if (e >= s && s > 0 && e - s < MAX_ELEMENTS) {
6750
return Optional.of(new Element(s, e));
6851
}
69-
} catch (NumberFormatException e) {
70-
return Optional.empty();
52+
} else {
53+
int s = Integer.parseInt(result);
54+
if (s > 0) {
55+
return Optional.of(new Element(s, s));
56+
}
7157
}
7258
}
7359
return Optional.empty();
7460
}
61+
62+
/**
63+
* @return the starting point for the desired sequence if returned instances
64+
*/
65+
public int getStart() {
66+
return start;
67+
}
68+
69+
/**
70+
* @return the last entry in the desired sequence if returned instances
71+
*/
72+
public int getEnd() {
73+
return end;
74+
}
7575
}

src/test/java/io/openapitools/api/capabilities/ElementTest.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,9 @@ public void testNoElements() {
1818

1919
@Test
2020
public void testNonValidInput(){
21-
Optional<Element> element = Element.getElement("3");
21+
Optional<Element> element = Element.getElement("0|4");
2222
assertEquals(Optional.empty(), element);
23-
element = Element.getElement("0|4");
23+
element = Element.getElement("0");
2424
assertEquals(Optional.empty(), element);
2525
element = Element.getElement("|0");
2626
assertEquals(Optional.empty(), element);
@@ -32,12 +32,8 @@ public void testNonValidInput(){
3232
assertEquals(Optional.empty(), element);
3333
element = Element.getElement("1|+1");
3434
assertEquals(Optional.empty(), element);
35-
element = Element.getElement("4|4");
36-
assertEquals(Optional.empty(), element);
3735
element = Element.getElement("4|3");
3836
assertEquals(Optional.empty(), element);
39-
element = Element.getElement("501|501");
40-
assertEquals(Optional.empty(), element);
4137
element = Element.getElement("1|501");
4238
assertEquals(Optional.empty(), element);
4339
element = Element.getElement("501|500");
@@ -55,6 +51,9 @@ public void testValidInput(){
5551
Optional<Element> element = Element.getElement("3|4");
5652
assertEquals(3, element.isPresent() ? element.get().getStart() : Optional.empty());
5753
assertEquals(4, element.isPresent() ? element.get().getEnd() : Optional.empty());
54+
element = Element.getElement("1|1");
55+
assertEquals(1, element.isPresent() ? element.get().getStart() : Optional.empty());
56+
assertEquals(1, element.isPresent() ? element.get().getEnd() : Optional.empty());
5857
element = Element.getElement("10|14");
5958
assertEquals(10, element.isPresent() ? element.get().getStart() : Optional.empty());
6059
assertEquals(14, element.isPresent() ? element.get().getEnd() : Optional.empty());
@@ -64,9 +63,15 @@ public void testValidInput(){
6463
element = Element.getElement("4|30");
6564
assertEquals(4, element.isPresent() ? element.get().getStart() : Optional.empty());
6665
assertEquals(30, element.isPresent() ? element.get().getEnd() : Optional.empty());
66+
element = Element.getElement("501|501");
67+
assertEquals(501, element.isPresent() ? element.get().getStart() : Optional.empty());
68+
assertEquals(501, element.isPresent() ? element.get().getEnd() : Optional.empty());
6769
element = Element.getElement("501|502");
6870
assertEquals(501, element.isPresent() ? element.get().getStart() : Optional.empty());
6971
assertEquals(502, element.isPresent() ? element.get().getEnd() : Optional.empty());
72+
element = Element.getElement("501");
73+
assertEquals(501, element.isPresent() ? element.get().getStart() : Optional.empty());
74+
assertEquals(501, element.isPresent() ? element.get().getEnd() : Optional.empty());
7075
}
7176

7277
}

src/test/java/io/openapitools/api/capabilities/SelectTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ public void testIllegalSelections() {
175175
selections = Select.getSelections("v::g|f::j|u::iio|3::4");
176176
assertEquals(0, selections.size());
177177
}
178-
178+
179179
@Test
180180
public void testWildcards() {
181181
List<Select> selections = Select.getSelections("name::*loan|name::savings*");

0 commit comments

Comments
 (0)