aboutsummaryrefslogtreecommitdiff
path: root/juick-core/src
diff options
context:
space:
mode:
Diffstat (limited to 'juick-core/src')
-rw-r--r--juick-core/src/main/java/com/juick/util/DateFormatter.java38
-rw-r--r--juick-core/src/main/java/com/juick/util/DateFormattersHolder.java43
-rw-r--r--juick-core/src/main/java/com/juick/util/MessageUtils.java2
-rw-r--r--juick-core/src/main/java/com/juick/xml/adapters/SimpleDateAdapter.java23
-rw-r--r--juick-core/src/test/java/com/juick/FormatterTest.java45
5 files changed, 132 insertions, 19 deletions
diff --git a/juick-core/src/main/java/com/juick/util/DateFormatter.java b/juick-core/src/main/java/com/juick/util/DateFormatter.java
new file mode 100644
index 00000000..34585c63
--- /dev/null
+++ b/juick-core/src/main/java/com/juick/util/DateFormatter.java
@@ -0,0 +1,38 @@
+package com.juick.util;
+
+import org.apache.commons.lang3.StringUtils;
+
+import java.time.LocalDateTime;
+import java.time.ZoneOffset;
+import java.time.format.DateTimeFormatter;
+import java.util.Date;
+
+/**
+ * Created by aalexeev on 12/7/16.
+ */
+public class DateFormatter {
+ private final DateTimeFormatter formatter;
+
+ DateFormatter(String pattern) {
+ formatter = DateTimeFormatter.ofPattern(pattern);
+ }
+
+ public String format(final Date date) {
+ if (date == null)
+ return null;
+
+ LocalDateTime ldt = LocalDateTime.ofInstant(date.toInstant(), ZoneOffset.UTC);
+
+ return ldt.format(formatter);
+ }
+
+
+ public Date parse(final String v) {
+ if (StringUtils.isBlank(v))
+ return null;
+
+ LocalDateTime ldt = LocalDateTime.parse(v, formatter);
+
+ return Date.from(ldt.toInstant(ZoneOffset.UTC));
+ }
+}
diff --git a/juick-core/src/main/java/com/juick/util/DateFormattersHolder.java b/juick-core/src/main/java/com/juick/util/DateFormattersHolder.java
new file mode 100644
index 00000000..79414808
--- /dev/null
+++ b/juick-core/src/main/java/com/juick/util/DateFormattersHolder.java
@@ -0,0 +1,43 @@
+package com.juick.util;
+
+/**
+ * Created by aalexeev on 12/7/16.
+ */
+public class DateFormattersHolder {
+
+ private DateFormattersHolder() {
+ throw new IllegalStateException();
+ }
+
+ private static volatile DateFormatter messageFormatter;
+
+ public static DateFormatter getMessageFormatterInstance() {
+ DateFormatter localInstance = messageFormatter;
+
+ if (localInstance == null) {
+ synchronized (DateFormatter.class) {
+ localInstance = messageFormatter;
+
+ if (localInstance == null)
+ messageFormatter = localInstance = new DateFormatter("yyyy-MM-dd HH:mm:ss");
+ }
+ }
+ return localInstance;
+ }
+
+ private static volatile DateFormatter rssFormatter;
+
+ public static DateFormatter getRssFormatterInstance() {
+ DateFormatter localInstance = rssFormatter;
+
+ if (localInstance == null) {
+ synchronized (DateFormatter.class) {
+ localInstance = rssFormatter;
+
+ if (localInstance == null)
+ rssFormatter = localInstance = new DateFormatter("EEE, d MMM yyyy HH:mm:ss");
+ }
+ }
+ return localInstance;
+ }
+}
diff --git a/juick-core/src/main/java/com/juick/util/MessageUtils.java b/juick-core/src/main/java/com/juick/util/MessageUtils.java
index 12ae71c1..96d650a8 100644
--- a/juick-core/src/main/java/com/juick/util/MessageUtils.java
+++ b/juick-core/src/main/java/com/juick/util/MessageUtils.java
@@ -24,6 +24,7 @@ public class MessageUtils {
return result;
}
+
private static Pattern regexLinks2 = Pattern.compile("((?<=\\s)|(?<=\\A))([\\[\\{]|&lt;)((?:ht|f)tps?://(?:www\\.)?([^\\/\\s\\\"\\)\\!]+)/?(?:[^\\]\\}](?<!&gt;))*)([\\]\\}]|&gt;)");
public static String formatMessageCode(String msg) {
@@ -48,6 +49,7 @@ public class MessageUtils {
return "<pre>" + msg + "</pre>";
}
+
public static String formatMessage(String msg) {
msg = msg.replaceAll("&", "&amp;");
msg = msg.replaceAll("<", "&lt;");
diff --git a/juick-core/src/main/java/com/juick/xml/adapters/SimpleDateAdapter.java b/juick-core/src/main/java/com/juick/xml/adapters/SimpleDateAdapter.java
index 1093e47a..382db45a 100644
--- a/juick-core/src/main/java/com/juick/xml/adapters/SimpleDateAdapter.java
+++ b/juick-core/src/main/java/com/juick/xml/adapters/SimpleDateAdapter.java
@@ -1,10 +1,9 @@
package com.juick.xml.adapters;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.TimeZone;
+import com.juick.util.DateFormattersHolder;
import javax.xml.bind.annotation.adapters.XmlAdapter;
+import java.util.Date;
/**
* Created by vitalyster on 15.11.2016.
@@ -12,27 +11,13 @@ import javax.xml.bind.annotation.adapters.XmlAdapter;
public class SimpleDateAdapter extends XmlAdapter<String, Date> {
- private final SimpleDateFormat dateFormat;
- public SimpleDateAdapter() {
- dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
- }
-
@Override
public String marshal(Date v) throws Exception {
- if (v == null) {
- return null;
- }
- synchronized (dateFormat) {
- return dateFormat.format(v);
- }
+ return DateFormattersHolder.getMessageFormatterInstance().format(v);
}
@Override
public Date unmarshal(String v) throws Exception {
- synchronized (dateFormat) {
- return dateFormat.parse(v);
- }
+ return DateFormattersHolder.getMessageFormatterInstance().parse(v);
}
-
}
diff --git a/juick-core/src/test/java/com/juick/FormatterTest.java b/juick-core/src/test/java/com/juick/FormatterTest.java
new file mode 100644
index 00000000..d246c369
--- /dev/null
+++ b/juick-core/src/test/java/com/juick/FormatterTest.java
@@ -0,0 +1,45 @@
+package com.juick;
+
+import com.juick.util.DateFormattersHolder;
+import org.apache.commons.lang3.RandomUtils;
+import org.junit.Test;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.*;
+
+/**
+ * Created by aalexeev on 12/7/16.
+ */
+public class FormatterTest {
+
+ @Test
+ public void forAnyDateFormatterShouldReturnNotEmptyString() throws Exception {
+ Date date = new Date();
+
+ assertThat(DateFormattersHolder.getMessageFormatterInstance().format(date), not(isEmptyOrNullString()));
+ assertThat(DateFormattersHolder.getRssFormatterInstance().format(date), not(isEmptyOrNullString()));
+
+ date = new Date(RandomUtils.nextLong(1, Long.MAX_VALUE / 10000));
+
+ assertThat(DateFormattersHolder.getMessageFormatterInstance().format(date), not(isEmptyOrNullString()));
+ assertThat(DateFormattersHolder.getRssFormatterInstance().format(date), not(isEmptyOrNullString()));
+ }
+
+ @Test
+ public void forConcreteDateShouldReturnCorrectString() throws Exception {
+ Calendar calendar = GregorianCalendar.getInstance();
+
+ calendar.set(2012, 0, 1, 0, 0, 0);
+ calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
+
+ Date date = calendar.getTime();
+
+ assertThat(DateFormattersHolder.getMessageFormatterInstance().format(date), equalTo("2012-01-01 00:00:00"));
+ assertThat(DateFormattersHolder.getRssFormatterInstance().format(date), equalTo("Sun, 1 Jan 2012 00:00:00"));
+ }
+}