GUI -- Added Locale and Time Zone decorators to TimeFormatter.
- Fixed unit test to be insensitive to the zone and locale in which it is run. Change-Id: Ib79c1840c5543ec1a6016d4345b7d60f0e9f65a4
Showing
3 changed files
with
51 additions
and
13 deletions
... | @@ -18,27 +18,55 @@ | ... | @@ -18,27 +18,55 @@ |
18 | package org.onosproject.ui.table.cell; | 18 | package org.onosproject.ui.table.cell; |
19 | 19 | ||
20 | import org.joda.time.DateTime; | 20 | import org.joda.time.DateTime; |
21 | +import org.joda.time.DateTimeZone; | ||
21 | import org.joda.time.format.DateTimeFormat; | 22 | import org.joda.time.format.DateTimeFormat; |
22 | import org.joda.time.format.DateTimeFormatter; | 23 | import org.joda.time.format.DateTimeFormatter; |
23 | -import org.onosproject.ui.table.CellFormatter; | 24 | + |
25 | +import java.util.Locale; | ||
24 | 26 | ||
25 | /** | 27 | /** |
26 | * Formats time values using {@link DateTimeFormatter}. | 28 | * Formats time values using {@link DateTimeFormatter}. |
27 | */ | 29 | */ |
28 | public final class TimeFormatter extends AbstractCellFormatter { | 30 | public final class TimeFormatter extends AbstractCellFormatter { |
29 | 31 | ||
30 | - private static final DateTimeFormatter DTF = DateTimeFormat.longTime(); | 32 | + private DateTimeFormatter dtf; |
31 | 33 | ||
32 | - // non-instantiable | 34 | + // NOTE: Unlike other formatters in this package, this one is not |
33 | - private TimeFormatter() { } | 35 | + // implemented as a Singleton, because instances may be |
36 | + // decorated with alternate locale and/or timezone. | ||
34 | 37 | ||
35 | - @Override | 38 | + /** |
36 | - protected String nonNullFormat(Object value) { | 39 | + * Constructs a time formatter that uses the default locale and timezone. |
37 | - return DTF.print((DateTime) value); | 40 | + */ |
41 | + public TimeFormatter() { | ||
42 | + dtf = DateTimeFormat.longTime(); | ||
38 | } | 43 | } |
39 | 44 | ||
40 | /** | 45 | /** |
41 | - * An instance of this class. | 46 | + * Sets the locale to use for formatting the time. |
47 | + * | ||
48 | + * @param locale locale to use for formatting | ||
49 | + * @return self, for chaining | ||
42 | */ | 50 | */ |
43 | - public static final CellFormatter INSTANCE = new TimeFormatter(); | 51 | + public TimeFormatter withLocale(Locale locale) { |
52 | + dtf = dtf.withLocale(locale); | ||
53 | + return this; | ||
54 | + } | ||
55 | + | ||
56 | + /** | ||
57 | + * Sets the time zone to use for formatting the time. | ||
58 | + * | ||
59 | + * @param zone time zone to use | ||
60 | + * @return self, for chaining | ||
61 | + */ | ||
62 | + public TimeFormatter withZone(DateTimeZone zone) { | ||
63 | + dtf = dtf.withZone(zone); | ||
64 | + return this; | ||
65 | + } | ||
66 | + | ||
67 | + @Override | ||
68 | + protected String nonNullFormat(Object value) { | ||
69 | + return dtf.print((DateTime) value); | ||
70 | + } | ||
71 | + | ||
44 | } | 72 | } | ... | ... |
... | @@ -18,9 +18,12 @@ | ... | @@ -18,9 +18,12 @@ |
18 | package org.onosproject.ui.table.cell; | 18 | package org.onosproject.ui.table.cell; |
19 | 19 | ||
20 | import org.joda.time.DateTime; | 20 | import org.joda.time.DateTime; |
21 | +import org.joda.time.DateTimeZone; | ||
21 | import org.junit.Test; | 22 | import org.junit.Test; |
22 | import org.onosproject.ui.table.CellFormatter; | 23 | import org.onosproject.ui.table.CellFormatter; |
23 | 24 | ||
25 | +import java.util.Locale; | ||
26 | + | ||
24 | import static org.junit.Assert.assertEquals; | 27 | import static org.junit.Assert.assertEquals; |
25 | 28 | ||
26 | /** | 29 | /** |
... | @@ -28,10 +31,17 @@ import static org.junit.Assert.assertEquals; | ... | @@ -28,10 +31,17 @@ import static org.junit.Assert.assertEquals; |
28 | */ | 31 | */ |
29 | public class TimeFormatterTest { | 32 | public class TimeFormatterTest { |
30 | 33 | ||
31 | - private static final DateTime TIME = DateTime.parse("2010-06-30T01:20"); | 34 | + private static final Locale LOCALE = Locale.ENGLISH; |
32 | - private static final String EXP_OUTPUT = "1:20:00 AM PDT"; | 35 | + private static final DateTimeZone ZONE = DateTimeZone.UTC; |
36 | + | ||
37 | + private static final DateTime TIME = new DateTime(2015, 5, 4, 15, 30, ZONE); | ||
38 | + private static final String EXP_OUTPUT = "3:30:00 PM UTC"; | ||
33 | 39 | ||
34 | - private CellFormatter fmt = TimeFormatter.INSTANCE; | 40 | + // Have to use explicit Locale and TimeZone for the unit test, so that |
41 | + // irrespective of which locale and time zone the test is run in, it | ||
42 | + // always produces the same result... | ||
43 | + private CellFormatter fmt = | ||
44 | + new TimeFormatter().withLocale(LOCALE).withZone(ZONE); | ||
35 | 45 | ||
36 | @Test | 46 | @Test |
37 | public void basic() { | 47 | public void basic() { | ... | ... |
... | @@ -74,7 +74,7 @@ public class ClusterViewMessageHandler extends UiMessageHandler { | ... | @@ -74,7 +74,7 @@ public class ClusterViewMessageHandler extends UiMessageHandler { |
74 | protected TableModel createTableModel() { | 74 | protected TableModel createTableModel() { |
75 | TableModel tm = super.createTableModel(); | 75 | TableModel tm = super.createTableModel(); |
76 | tm.setComparator(TCP_PORT, IntComparator.INSTANCE); | 76 | tm.setComparator(TCP_PORT, IntComparator.INSTANCE); |
77 | - tm.setFormatter(UPDATED, TimeFormatter.INSTANCE); | 77 | + tm.setFormatter(UPDATED, new TimeFormatter()); |
78 | return tm; | 78 | return tm; |
79 | } | 79 | } |
80 | 80 | ... | ... |
-
Please register or login to post a comment