Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
A
App Blocks
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
Genesys PGR
App Blocks
Commits
72fb1734
Commit
72fb1734
authored
May 07, 2020
by
Maxym Borodenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
StringFilter with array of options
parent
4cc0a535
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
118 additions
and
14 deletions
+118
-14
core/src/main/java/org/genesys/blocks/model/filters/StringFilter.java
...n/java/org/genesys/blocks/model/filters/StringFilter.java
+42
-14
core/src/test/java/org/genesys/blocks/tests/filter/StringFilterTest.java
...ava/org/genesys/blocks/tests/filter/StringFilterTest.java
+76
-0
No files found.
core/src/main/java/org/genesys/blocks/model/filters/StringFilter.java
View file @
72fb1734
...
...
@@ -15,7 +15,18 @@
*/
package
org.genesys.blocks.model.filters
;
import
java.io.IOException
;
import
java.util.HashSet
;
import
java.util.Set
;
import
com.fasterxml.jackson.core.JsonParser
;
import
com.fasterxml.jackson.core.JsonToken
;
import
com.fasterxml.jackson.databind.DeserializationContext
;
import
com.fasterxml.jackson.databind.JsonDeserializer
;
import
com.fasterxml.jackson.databind.annotation.JsonDeserialize
;
import
com.google.common.collect.Sets
;
import
com.querydsl.core.BooleanBuilder
;
import
com.querydsl.core.types.Predicate
;
import
com.querydsl.core.types.dsl.StringPath
;
/**
...
...
@@ -24,13 +35,16 @@ import com.querydsl.core.types.dsl.StringPath;
public
class
StringFilter
{
/** Equal. */
public
String
eq
;
@JsonDeserialize
(
using
=
StringFilter
.
SetDeserializer
.
class
)
public
Set
<
String
>
eq
;
/** Contains substring. */
public
String
contains
;
@JsonDeserialize
(
using
=
StringFilter
.
SetDeserializer
.
class
)
public
Set
<
String
>
contains
;
/** Starts with. */
public
String
sw
;
@JsonDeserialize
(
using
=
StringFilter
.
SetDeserializer
.
class
)
public
Set
<
String
>
sw
;
/**
* Builds the query.
...
...
@@ -40,17 +54,14 @@ public class StringFilter {
*/
public
BooleanBuilder
buildQuery
(
final
StringPath
val
)
{
final
BooleanBuilder
and
=
new
BooleanBuilder
();
if
(
eq
!=
null
)
{
and
.
and
(
val
.
isNotNull
());
and
.
and
(
val
.
eq
(
eq
));
if
(
eq
!=
null
&&
!
eq
.
isEmpty
())
{
and
.
and
(
val
.
isNotNull
()).
and
(
val
.
in
(
eq
));
}
if
(
sw
!=
null
)
{
and
.
and
(
val
.
isNotNull
());
and
.
and
(
val
.
startsWith
(
sw
));
if
(
sw
!=
null
&&
!
sw
.
isEmpty
())
{
and
.
and
(
val
.
isNotNull
()).
andAnyOf
(
sw
.
stream
().
map
(
val:
:
startsWith
).
toArray
(
Predicate
[]::
new
));
}
if
(
contains
!=
null
)
{
and
.
and
(
val
.
isNotNull
());
and
.
and
(
val
.
contains
(
contains
));
if
(
contains
!=
null
&&
!
contains
.
isEmpty
())
{
and
.
and
(
val
.
isNotNull
()).
andAnyOf
(
contains
.
stream
().
map
(
val:
:
contains
).
toArray
(
Predicate
[]::
new
));
}
return
and
;
}
...
...
@@ -61,9 +72,26 @@ public class StringFilter {
* @param val the val
* @return the string filter
*/
public
static
StringFilter
eq
(
final
String
val
)
{
public
static
StringFilter
eq
(
final
String
...
val
)
{
final
StringFilter
filter
=
new
StringFilter
();
filter
.
eq
=
val
;
filter
.
eq
=
Sets
.
newHashSet
(
val
)
;
return
filter
;
}
static
class
SetDeserializer
extends
JsonDeserializer
<
Set
<
String
>>
{
@Override
public
Set
<
String
>
deserialize
(
JsonParser
jsonParser
,
DeserializationContext
deserializationContext
)
throws
IOException
{
final
Set
<
String
>
values
=
new
HashSet
<>();
if
(
jsonParser
.
getCurrentToken
()
==
JsonToken
.
START_ARRAY
)
{
while
(
jsonParser
.
getCurrentToken
()
!=
null
&&
jsonParser
.
getCurrentToken
()
!=
JsonToken
.
END_ARRAY
)
{
if
(
jsonParser
.
nextToken
()
==
JsonToken
.
VALUE_STRING
)
{
values
.
add
(
jsonParser
.
getText
());
}
}
}
else
if
(
jsonParser
.
getCurrentToken
()
==
JsonToken
.
VALUE_STRING
)
{
values
.
add
(
jsonParser
.
getText
());
}
return
values
;
}
}
}
core/src/test/java/org/genesys/blocks/tests/filter/StringFilterTest.java
0 → 100644
View file @
72fb1734
/*
* Copyright 2020 Global Crop Diversity Trust
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.genesys.blocks.tests.filter
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
org.genesys.blocks.model.filters.StringFilter
;
import
org.junit.Test
;
import
static
org
.
hamcrest
.
MatcherAssert
.
assertThat
;
import
static
org
.
hamcrest
.
Matchers
.
containsInAnyOrder
;
import
static
org
.
junit
.
Assert
.
assertEquals
;
import
static
org
.
junit
.
Assert
.
assertNotNull
;
import
java.util.Arrays
;
/**
* The Class StringFilterTest.
*/
public
class
StringFilterTest
{
private
static
ObjectMapper
objectMapper
=
new
ObjectMapper
();
@Test
public
void
testDeserializationOfEq
()
throws
JsonProcessingException
{
StringFilter
filter1
=
objectMapper
.
readValue
(
"{ \"eq\": \"AAA\" }"
,
StringFilter
.
class
);
assertNotNull
(
filter1
);
assertEquals
(
1
,
filter1
.
eq
.
size
());
assertEquals
(
"AAA"
,
filter1
.
eq
.
toArray
()[
0
]);
StringFilter
filter2
=
objectMapper
.
readValue
(
"{ \"eq\": [ \"AAA\", \"BBB\" ] }"
,
StringFilter
.
class
);
assertNotNull
(
filter2
);
assertEquals
(
2
,
filter2
.
eq
.
size
());
assertThat
(
Arrays
.
asList
(
"AAA"
,
"BBB"
),
containsInAnyOrder
(
filter2
.
eq
.
toArray
()));
}
@Test
public
void
testDeserializationOfContains
()
throws
JsonProcessingException
{
StringFilter
filter1
=
objectMapper
.
readValue
(
"{ \"contains\": \"AAA\" }"
,
StringFilter
.
class
);
assertNotNull
(
filter1
);
assertEquals
(
1
,
filter1
.
contains
.
size
());
assertEquals
(
"AAA"
,
filter1
.
contains
.
toArray
()[
0
]);
StringFilter
filter2
=
objectMapper
.
readValue
(
"{ \"contains\": [ \"AAA\", \"BBB\" ] }"
,
StringFilter
.
class
);
assertNotNull
(
filter2
);
assertEquals
(
2
,
filter2
.
contains
.
size
());
assertThat
(
Arrays
.
asList
(
"AAA"
,
"BBB"
),
containsInAnyOrder
(
filter2
.
contains
.
toArray
()));
}
@Test
public
void
testDeserializationOfStartsWith
()
throws
JsonProcessingException
{
StringFilter
filter1
=
objectMapper
.
readValue
(
"{ \"sw\": \"AAA\" }"
,
StringFilter
.
class
);
assertNotNull
(
filter1
);
assertEquals
(
1
,
filter1
.
sw
.
size
());
assertEquals
(
"AAA"
,
filter1
.
sw
.
toArray
()[
0
]);
StringFilter
filter2
=
objectMapper
.
readValue
(
"{ \"sw\": [ \"AAA\", \"BBB\" ] }"
,
StringFilter
.
class
);
assertNotNull
(
filter2
);
assertEquals
(
2
,
filter2
.
sw
.
size
());
assertThat
(
Arrays
.
asList
(
"AAA"
,
"BBB"
),
containsInAnyOrder
(
filter2
.
sw
.
toArray
()));
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment