diff --git a/projects/typetools/src/main/java/org/nohope/Matchers.java b/projects/typetools/src/main/java/org/nohope/Matchers.java index 2b48751..9031599 100644 --- a/projects/typetools/src/main/java/org/nohope/Matchers.java +++ b/projects/typetools/src/main/java/org/nohope/Matchers.java @@ -1,5 +1,6 @@ package org.nohope; +import org.apache.commons.lang3.ObjectUtils; import org.nohope.typetools.TStr; import javax.annotation.Nonnull; @@ -69,4 +70,21 @@ public String toString() { } }; } + + public static IMatcher eq(final T obj) { + return new EqualsMatcher<>(obj); + } + + public static class EqualsMatcher implements IMatcher { + private final T obj; + + public EqualsMatcher(final T obj) { + this.obj = obj; + } + + @Override + public boolean matches(final T obj) { + return ObjectUtils.equals(this.obj, obj); + } + } } diff --git a/projects/typetools/src/main/java/org/nohope/typetools/TTime.java b/projects/typetools/src/main/java/org/nohope/typetools/TTime.java index 6f93a08..060f9ee 100644 --- a/projects/typetools/src/main/java/org/nohope/typetools/TTime.java +++ b/projects/typetools/src/main/java/org/nohope/typetools/TTime.java @@ -61,46 +61,46 @@ public static XMLGregorianCalendar toXmlUtcCalendar(final Date date) { return toXmlCalendar(date, UTC_ID); } - private static IMatcher matcher(final int i) { - return new IMatcher() { - @Override - public boolean matches(final Integer obj) { - return obj == i; - } - }; + /** Creates {@link XMLGregorianCalendar XMLGregorianCalendar} for given date in given timezone. */ + public static XMLGregorianCalendar toXmlCalendar(final Date date, final String timezoneId) { + final GregorianCalendar calendar = new GregorianCalendar(); + calendar.setTimeZone(TimeZone.getTimeZone(timezoneId)); + calendar.setTime(date); + return LazyDataTypeFactorySingleton.getFactory().newXMLGregorianCalendar(calendar); } public static boolean ne(@Nonnull final XMLGregorianCalendar c1, @Nonnull final XMLGregorianCalendar c2) { - return compare(c1, c2, Matchers.not(matcher(DatatypeConstants.EQUAL))); + return compare(c1, c2, Matchers.not(Matchers.eq(DatatypeConstants.EQUAL))); } public static boolean eq(@Nonnull final XMLGregorianCalendar c1, @Nonnull final XMLGregorianCalendar c2) { - return compare(c1, c2, matcher(DatatypeConstants.EQUAL)); + return compare(c1, c2, Matchers.eq(DatatypeConstants.EQUAL)); } public static boolean lte(@Nonnull final XMLGregorianCalendar c1, @Nonnull final XMLGregorianCalendar c2) { - return compare(c1, c2, Matchers.or(matcher(DatatypeConstants.LESSER), matcher(DatatypeConstants.EQUAL))); + return compare(c1, c2, Matchers.or(Matchers.eq(DatatypeConstants.LESSER), + Matchers.eq(DatatypeConstants.EQUAL))); } public static boolean lt(@Nonnull final XMLGregorianCalendar c1, @Nonnull final XMLGregorianCalendar c2) { - return compare(c1, c2, matcher(DatatypeConstants.LESSER)); + return compare(c1, c2, Matchers.eq(DatatypeConstants.LESSER)); } public static boolean gte(@Nonnull final XMLGregorianCalendar c1, @Nonnull final XMLGregorianCalendar c2) { return compare(c1, c2, Matchers.or( - matcher(DatatypeConstants.GREATER), - matcher(DatatypeConstants.EQUAL) + Matchers.eq(DatatypeConstants.GREATER), + Matchers.eq(DatatypeConstants.EQUAL) )); } public static boolean gt(@Nonnull final XMLGregorianCalendar c1, @Nonnull final XMLGregorianCalendar c2) { - return compare(c1, c2, matcher(DatatypeConstants.GREATER)); + return compare(c1, c2, Matchers.eq(DatatypeConstants.GREATER)); } public static boolean compare(@Nonnull final XMLGregorianCalendar c1, @@ -109,14 +109,6 @@ public static boolean compare(@Nonnull final XMLGregorianCalendar c1, return compareResultMatcher.matches(c1.compare(c2)); } - /** Creates {@link XMLGregorianCalendar XMLGregorianCalendar} for given date in given timezone. */ - public static XMLGregorianCalendar toXmlCalendar(final Date date, final String timezoneId) { - final GregorianCalendar calendar = new GregorianCalendar(); - calendar.setTimeZone(TimeZone.getTimeZone(timezoneId)); - calendar.setTime(date); - return LazyDataTypeFactorySingleton.getFactory().newXMLGregorianCalendar(calendar); - } - public static class LazyDataTypeFactorySingleton { private static final DatatypeFactory datatypeFactory; static { diff --git a/projects/typetools/src/test/java/org/nohope/MatchersTest.java b/projects/typetools/src/test/java/org/nohope/MatchersTest.java index 7d425e0..b38eb7c 100644 --- a/projects/typetools/src/test/java/org/nohope/MatchersTest.java +++ b/projects/typetools/src/test/java/org/nohope/MatchersTest.java @@ -4,9 +4,9 @@ import org.nohope.test.UtilitiesTestSupport; import static org.junit.Assert.assertEquals; -import static org.nohope.Matchers.and; -import static org.nohope.Matchers.not; -import static org.nohope.Matchers.or; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.nohope.Matchers.*; import static org.nohope.reflection.ModifierMatcher.ABSTRACT; import static org.nohope.reflection.ModifierMatcher.FINAL; import static org.nohope.reflection.ModifierMatcher.PUBLIC; @@ -21,6 +21,14 @@ protected Class getUtilityClass() { return Matchers.class; } + @Test + public void equals() { + assertTrue(eq(1).matches(1)); + assertTrue(eq(null).matches(null)); + assertFalse(eq("test").matches(null)); + assertFalse(eq(null).matches("test")); + } + @Test public void reprTest() { assertEquals("!((PUBLIC && ABSTRACT) || FINAL)", not(or(and(PUBLIC, ABSTRACT), FINAL)).toString());