Moved date/time formatters to utils class

This commit is contained in:
Erik C. Thauvin 2023-03-21 07:21:24 -07:00
parent 05c1bd3f2a
commit 5ea5727a4a
15 changed files with 66 additions and 48 deletions

1
.gitignore vendored
View file

@ -40,7 +40,6 @@
/**/.idea/**/libraries /**/.idea/**/libraries
/**/.idea/**/mongoSettings.xml /**/.idea/**/mongoSettings.xml
/**/.idea/**/replstate.xml /**/.idea/**/replstate.xml
/**/.idea/**/shelf
/**/.idea/**/shelf/ /**/.idea/**/shelf/
/**/.idea/**/sqlDataSources.xml /**/.idea/**/sqlDataSources.xml
/**/.idea/**/tasks.xml /**/.idea/**/tasks.xml

View file

@ -13,7 +13,7 @@ plugins {
id("com.github.ben-manes.versions") version "0.46.0" id("com.github.ben-manes.versions") version "0.46.0"
} }
val rifeVersion by rootProject.extra { "1.5.0" } val rifeVersion by rootProject.extra { "1.5.2" }
group = "com.uwyn.rife2" group = "com.uwyn.rife2"
version = "0.9.0-SNAPSHOT" version = "0.9.0-SNAPSHOT"

View file

@ -45,7 +45,7 @@ public class Abbreviate implements ValueRenderer {
@Override @Override
public String render(Template template, String valueId, String differentiator) { public String render(Template template, String valueId, String differentiator) {
var mark = "..."; var mark = "...";
var max = 0; var max = -1;
if (template.hasDefaultValue(valueId)) { if (template.hasDefaultValue(valueId)) {
var properties = new Properties(); var properties = new Properties();
try { try {

View file

@ -42,6 +42,9 @@ public class Capitalize implements ValueRenderer {
@Override @Override
public String render(Template template, String valueId, String differentiator) { public String render(Template template, String valueId, String differentiator) {
var value = template.getValueOrAttribute(differentiator); var value = template.getValueOrAttribute(differentiator);
if (value == null || value.isBlank()) {
return value;
}
return value.substring(0, 1).toUpperCase(Localization.getLocale()) + value.substring(1); return value.substring(0, 1).toUpperCase(Localization.getLocale()) + value.substring(1);
} }
} }

View file

@ -19,10 +19,8 @@ package rife.render;
import rife.template.Template; import rife.template.Template;
import rife.template.ValueRenderer; import rife.template.ValueRenderer;
import rife.tools.Localization;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
/** /**
* <p>Return the current date in ISO 8601 format.</p> * <p>Return the current date in ISO 8601 format.</p>
@ -39,17 +37,11 @@ import java.time.format.DateTimeFormatter;
* @since 1.0 * @since 1.0
*/ */
public class DateIso implements ValueRenderer { public class DateIso implements ValueRenderer {
/**
* ISO 8601 date and time formatter.
*/
static public final DateTimeFormatter iso8601Formatter =
DateTimeFormatter.ofPattern("yyyy-MM-dd").withLocale(Localization.getLocale());
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@Override @Override
public String render(Template template, String valueId, String differentiator) { public String render(Template template, String valueId, String differentiator) {
return ZonedDateTime.now().format(iso8601Formatter); return ZonedDateTime.now().format(RenderUtils.ISO_8601_DATE_FORMATTER);
} }
} }

View file

@ -19,13 +19,11 @@ package rife.render;
import rife.template.Template; import rife.template.Template;
import rife.template.ValueRenderer; import rife.template.ValueRenderer;
import rife.tools.Localization;
import java.io.IOException; import java.io.IOException;
import java.io.StringReader; import java.io.StringReader;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Properties; import java.util.Properties;
/** /**
@ -43,12 +41,6 @@ import java.util.Properties;
* @since 1.0 * @since 1.0
*/ */
public class DateTimeIso implements ValueRenderer { public class DateTimeIso implements ValueRenderer {
/**
* ISO 8601 date and time formatter.
*/
static public final DateTimeFormatter iso8601Formatter =
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXXXX").withLocale(Localization.getLocale());
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@ -61,13 +53,13 @@ public class DateTimeIso implements ValueRenderer {
properties.load(new StringReader(template.getDefaultValue(valueId))); properties.load(new StringReader(template.getDefaultValue(valueId)));
if (properties.containsKey(tz)) { if (properties.containsKey(tz)) {
return ZonedDateTime.now().format( return ZonedDateTime.now().format(
DateTimeIso.iso8601Formatter.withZone(ZoneId.of(properties.getProperty(tz)))); RenderUtils.ISO_8601_FORMATTER.withZone(ZoneId.of(properties.getProperty(tz))));
} }
} catch (IOException ignore) { } catch (IOException ignore) {
// do nothing // do nothing
} }
} }
return ZonedDateTime.now().format(iso8601Formatter); return ZonedDateTime.now().format(RenderUtils.ISO_8601_FORMATTER);
} }
} }

View file

@ -19,10 +19,8 @@ package rife.render;
import rife.template.Template; import rife.template.Template;
import rife.template.ValueRenderer; import rife.template.ValueRenderer;
import rife.tools.Localization;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
/** /**
* <p>Return the current date and time in RFC 2822 format.</p> * <p>Return the current date and time in RFC 2822 format.</p>
@ -39,17 +37,11 @@ import java.time.format.DateTimeFormatter;
* @since 1.0 * @since 1.0
*/ */
public class DateTimeRfc2822 implements ValueRenderer { public class DateTimeRfc2822 implements ValueRenderer {
/**
* RFC 2822 date and time formatter.
*/
static public final DateTimeFormatter rfc2822Formatter =
DateTimeFormatter.ofPattern("EEE, d MMM yyyy HH:mm:ss zzz").withLocale(Localization.getLocale());
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@Override @Override
public String render(Template template, String valueId, String differentiator) { public String render(Template template, String valueId, String differentiator) {
return ZonedDateTime.now().format(rfc2822Formatter); return ZonedDateTime.now().format(RenderUtils.RFC_2822_FORMATTER);
} }
} }

View file

@ -41,6 +41,10 @@ public class Lowercase implements ValueRenderer {
*/ */
@Override @Override
public String render(Template template, String valueId, String differentiator) { public String render(Template template, String valueId, String differentiator) {
return template.getValueOrAttribute(differentiator).toLowerCase(Localization.getLocale()); var value = template.getValueOrAttribute(differentiator);
if (value == null || value.isBlank()) {
return value;
}
return value.toLowerCase(Localization.getLocale());
} }
} }

View file

@ -17,6 +17,7 @@
package rife.render; package rife.render;
import rife.tools.Localization;
import rife.tools.StringUtils; import rife.tools.StringUtils;
import java.io.IOException; import java.io.IOException;
@ -26,6 +27,7 @@ import java.nio.charset.StandardCharsets;
import java.text.Normalizer; import java.text.Normalizer;
import java.time.ZoneId; import java.time.ZoneId;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoField; import java.time.temporal.ChronoField;
import java.util.Properties; import java.util.Properties;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -37,6 +39,26 @@ import java.util.concurrent.TimeUnit;
* @since 1.0 * @since 1.0
*/ */
public final class RenderUtils { public final class RenderUtils {
/**
* ISO 8601 date formatter.
*/
public static final DateTimeFormatter ISO_8601_DATE_FORMATTER =
DateTimeFormatter.ofPattern("yyyy-MM-dd").withLocale(Localization.getLocale());
/**
* ISO 8601 date and time formatter.
*/
public static final DateTimeFormatter ISO_8601_FORMATTER =
DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXXXX").withLocale(Localization.getLocale());
/**
* ISO 8601 time formatter.
*/
public static final DateTimeFormatter ISO_8601_TIME_FORMATTER =
DateTimeFormatter.ofPattern("HH:mm:ss").withLocale(Localization.getLocale());
/**
* RFC 2822 date and time formatter.
*/
public static final DateTimeFormatter RFC_2822_FORMATTER =
DateTimeFormatter.ofPattern("EEE, d MMM yyyy HH:mm:ss zzz").withLocale(Localization.getLocale());
private static final String DEFAULT_USER_AGENT = private static final String DEFAULT_USER_AGENT =
"Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/111.0"; "Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/111.0";

View file

@ -19,10 +19,8 @@ package rife.render;
import rife.template.Template; import rife.template.Template;
import rife.template.ValueRenderer; import rife.template.ValueRenderer;
import rife.tools.Localization;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
/** /**
* <p>Return the current time in ISO 8601 format.</p> * <p>Return the current time in ISO 8601 format.</p>
@ -39,17 +37,11 @@ import java.time.format.DateTimeFormatter;
* @since 1.0 * @since 1.0
*/ */
public class TimeIso implements ValueRenderer { public class TimeIso implements ValueRenderer {
/**
* ISO 8601 time formatter.
*/
static public final DateTimeFormatter iso8601Formatter =
DateTimeFormatter.ofPattern("HH:mm:ss").withLocale(Localization.getLocale());
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@Override @Override
public String render(Template template, String valueId, String differentiator) { public String render(Template template, String valueId, String differentiator) {
return ZonedDateTime.now().format(iso8601Formatter); return ZonedDateTime.now().format(RenderUtils.ISO_8601_TIME_FORMATTER);
} }
} }

View file

@ -40,6 +40,10 @@ public class Trim implements ValueRenderer {
*/ */
@Override @Override
public String render(Template template, String valueId, String differentiator) { public String render(Template template, String valueId, String differentiator) {
return template.getValueOrAttribute(differentiator).trim(); var value = template.getValueOrAttribute(differentiator);
if (value == null || value.isEmpty()) {
return value;
}
return value.trim();
} }
} }

View file

@ -42,6 +42,9 @@ public class Uncapitalize implements ValueRenderer {
@Override @Override
public String render(Template template, String valueId, String differentiator) { public String render(Template template, String valueId, String differentiator) {
var value = template.getValueOrAttribute(differentiator); var value = template.getValueOrAttribute(differentiator);
if (value == null || value.isBlank()) {
return value;
}
return value.substring(0, 1).toLowerCase(Localization.getLocale()) + value.substring(1); return value.substring(0, 1).toLowerCase(Localization.getLocale()) + value.substring(1);
} }
} }

View file

@ -41,6 +41,10 @@ public class Uppercase implements ValueRenderer {
*/ */
@Override @Override
public String render(Template template, String valueId, String differentiator) { public String render(Template template, String valueId, String differentiator) {
return template.getValueOrAttribute(differentiator).toUpperCase(Localization.getLocale()); var value = template.getValueOrAttribute(differentiator);
if (value == null || value.isBlank()) {
return value;
}
return value.toUpperCase(Localization.getLocale());
} }
} }

View file

@ -33,26 +33,26 @@ class TestDateTime {
@Test @Test
void testDateIso() { void testDateIso() {
var t = TemplateFactory.HTML.get("dateIso"); var t = TemplateFactory.HTML.get("dateIso");
assertThatCode(() -> DateIso.iso8601Formatter.parse(t.getContent())).doesNotThrowAnyException(); assertThatCode(() -> RenderUtils.ISO_8601_DATE_FORMATTER.parse(t.getContent())).doesNotThrowAnyException();
} }
@Test @Test
void testDateTimeIso() { void testDateTimeIso() {
var t = TemplateFactory.HTML.get("dateTimeIso"); var t = TemplateFactory.HTML.get("dateTimeIso");
assertThatCode(() -> DateTimeIso.iso8601Formatter.parse(t.getContent())).doesNotThrowAnyException(); assertThatCode(() -> RenderUtils.ISO_8601_FORMATTER.parse(t.getContent())).doesNotThrowAnyException();
} }
@Test @Test
void testDateTimeRfc2822() { void testDateTimeRfc2822() {
var t = TemplateFactory.HTML.get("dateTimeRfc2822"); var t = TemplateFactory.HTML.get("dateTimeRfc2822");
assertThatCode(() -> DateTimeRfc2822.rfc2822Formatter.parse(t.getContent())).doesNotThrowAnyException(); assertThatCode(() -> RenderUtils.RFC_2822_FORMATTER.parse(t.getContent())).doesNotThrowAnyException();
} }
@Test @Test
void testDateTimeUtc() { void testDateTimeUtc() {
var t = TemplateFactory.HTML.get("dateTimeUtc"); var t = TemplateFactory.HTML.get("dateTimeUtc");
var content = t.getContent(); var content = t.getContent();
assertThatCode(() -> DateTimeIso.iso8601Formatter.parse(content)).doesNotThrowAnyException(); assertThatCode(() -> RenderUtils.ISO_8601_FORMATTER.parse(content)).doesNotThrowAnyException();
assertThat(content).endsWith("Z"); assertThat(content).endsWith("Z");
} }
@ -60,7 +60,7 @@ class TestDateTime {
@Test @Test
void testTimeIso() { void testTimeIso() {
var t = TemplateFactory.HTML.get("timeIso"); var t = TemplateFactory.HTML.get("timeIso");
assertThatCode(() -> TimeIso.iso8601Formatter.parse(t.getContent())).doesNotThrowAnyException(); assertThatCode(() -> RenderUtils.ISO_8601_TIME_FORMATTER.parse(t.getContent())).doesNotThrowAnyException();
} }
@Test @Test

View file

@ -54,6 +54,17 @@ class TestRenderUtils {
assertThat(RenderUtils.normalize(SAMPLE_GERMAN)).isEqualTo("mochten-sie-ein-paar-apfel"); assertThat(RenderUtils.normalize(SAMPLE_GERMAN)).isEqualTo("mochten-sie-ein-paar-apfel");
} }
@Test
void testSwapCase() {
assertThat(RenderUtils.swapCase(SAMPLE_GERMAN)).isEqualTo("mÖCHTEN sIE EIN PAAR äPFEL?");
}
@Test
void testHtmlEntities() {
assertThat(RenderUtils.htmlEntities(SAMPLE_GERMAN))
.isEqualTo("&#77;&#246;&#99;&#104;&#116;&#101;&#110;&#32;&#83;&#105;&#101;&#32;&#101;&#105;&#110;&#32;&#112;&#97;&#97;&#114;&#32;&#196;&#112;&#102;&#101;&#108;&#63;");
}
@Test @Test
void testRot13() { void testRot13() {
var encoded = "Zöpugra Fvr rva cnne Äcsry?"; var encoded = "Zöpugra Fvr rva cnne Äcsry?";