Skip to content
Snippets Groups Projects
Commit 4ce8e936 authored by buczekp's avatar buczekp
Browse files

[LMS-1683] added ' & ' as conjunction separator

SVN: 17842
parent b500fa9c
No related branches found
No related tags found
No related merge requests found
...@@ -248,14 +248,38 @@ public class AlternativesStringFilter ...@@ -248,14 +248,38 @@ public class AlternativesStringFilter
} }
} }
static class ConjunctionMatcher implements Matcher
{
private Matcher m1;
private Matcher m2;
ConjunctionMatcher(Matcher m1, Matcher m2)
{
this.m1 = m1;
this.m2 = m2;
}
public boolean matches(String value)
{
return m1.matches(value) && m2.matches(value);
}
}
/** /**
* Sets a new filter <var>value</var>. * Sets a new filter <var>value</var>.
*/ */
public void setFilterValue(String value) public void setFilterValue(String value)
{ {
alternatives.clear(); alternatives.clear();
boolean conjunct = false;
for (String s : StringUtils.tokenize(value)) for (String s : StringUtils.tokenize(value))
{ {
if (s.equals("&") && alternatives.size() > 0)
{
conjunct = true;
continue;
}
final boolean negateValue = s.startsWith(PREFIX_NOT); final boolean negateValue = s.startsWith(PREFIX_NOT);
if (negateValue) if (negateValue)
{ {
...@@ -270,6 +294,11 @@ public class AlternativesStringFilter ...@@ -270,6 +294,11 @@ public class AlternativesStringFilter
{ {
matcher = new NegationMatcher(matcher); matcher = new NegationMatcher(matcher);
} }
if (conjunct)
{
Matcher previousMatcher = alternatives.remove(alternatives.size() - 1);
matcher = new ConjunctionMatcher(previousMatcher, matcher);
}
alternatives.add(matcher); alternatives.add(matcher);
} }
} }
......
...@@ -453,4 +453,25 @@ public class AlternativesStringFilterTest ...@@ -453,4 +453,25 @@ public class AlternativesStringFilterTest
assertTrue(filter.passes("!=10.3")); assertTrue(filter.passes("!=10.3"));
} }
@Test
public void testNumericalConjunction()
{
AlternativesStringFilter filter = prepare(">5 & <10");
assertFalse(filter.passes("4"));
assertTrue(filter.passes("7"));
assertFalse(filter.passes("12"));
}
@Test
public void testNonNumericalConjunction()
{
AlternativesStringFilter filter = prepare("ab & ba");
assertFalse(filter.passes("ab"));
assertFalse(filter.passes("abb"));
assertTrue(filter.passes("aba"));
assertTrue(filter.passes("bab"));
assertTrue(filter.passes("abba"));
assertFalse(filter.passes("ba"));
assertFalse(filter.passes("bba"));
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment