Skip to content

Commit

Permalink
Merge pull request #66 from damienbeaufils/replaceJodaTimeWithStandar…
Browse files Browse the repository at this point in the history
…dJavaTimeApi

[enhancement] Replace Joda-Time with standard Java 8 Time API
  • Loading branch information
arnaudlewis authored Jan 19, 2018
2 parents f4bc211 + 0989b6d commit 1ab7826
Show file tree
Hide file tree
Showing 10 changed files with 48 additions and 64 deletions.
5 changes: 0 additions & 5 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -133,11 +133,6 @@
<artifactId>jackson-databind</artifactId>
<version>2.9.3</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.9.9</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-collections4</artifactId>
Expand Down
25 changes: 14 additions & 11 deletions src/main/java/io/prismic/Document.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,17 @@

import com.fasterxml.jackson.databind.JsonNode;
import io.prismic.Fragment.Link;
import org.joda.time.DateTime;

import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;

public class Document extends WithFragments {

private static final DateTimeFormatter PUBLICATION_DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ");

private final String id;
private final String uid;
private final String href;
Expand All @@ -18,11 +21,11 @@ public class Document extends WithFragments {
private final String type;
private final String lang;
private final List<AlternateLanguage> alternateLanguages;
private final DateTime firstPublicationDate;
private final DateTime lastPublicationDate;
private final ZonedDateTime firstPublicationDate;
private final ZonedDateTime lastPublicationDate;
private final Map<String, Fragment> fragments;

public Document(String id, String uid, String type, String href, Set<String> tags, List<String> slugs, String lang, List<AlternateLanguage> alternateLanguages, DateTime firstPublicationDate, DateTime lastPublicationDate, Map<String,Fragment> fragments) {
public Document(String id, String uid, String type, String href, Set<String> tags, List<String> slugs, String lang, List<AlternateLanguage> alternateLanguages, ZonedDateTime firstPublicationDate, ZonedDateTime lastPublicationDate, Map<String, Fragment> fragments) {
this.id = id;
this.uid = uid;
this.type = type;
Expand Down Expand Up @@ -75,11 +78,11 @@ public List<AlternateLanguage> getAlternateLanguages() {
return alternateLanguages;
}

public DateTime getFirstPublicationDate() {
public ZonedDateTime getFirstPublicationDate() {
return firstPublicationDate;
}

public DateTime getLastPublicationDate() {
public ZonedDateTime getLastPublicationDate() {
return lastPublicationDate;
}

Expand Down Expand Up @@ -175,8 +178,8 @@ public static Document parse(JsonNode json) {
String href = json.path("href").asText();
String type = json.path("type").asText();
String lang = json.path("lang").asText();
DateTime firstPublicationDate = parseDateTime(json.path("first_publication_date"));
DateTime lastPublicationDate = parseDateTime(json.path("last_publication_date"));
ZonedDateTime firstPublicationDate = parseDateTime(json.path("first_publication_date"));
ZonedDateTime lastPublicationDate = parseDateTime(json.path("last_publication_date"));

Iterator<JsonNode> alternateLanguagesJson = json.withArray("alternate_languages").elements();
List<AlternateLanguage> alternateLanguages = new ArrayList<>();
Expand Down Expand Up @@ -211,9 +214,9 @@ public static Document parse(JsonNode json) {
return new Document(id, uid, type, href, tags, slugs, lang, alternateLanguages, firstPublicationDate, lastPublicationDate, fragments);
}

private static DateTime parseDateTime(JsonNode json) {
return json.asText().equals("null")
private static ZonedDateTime parseDateTime(JsonNode json) {
return "null".equals(json.asText())
? null
: DateTime.parse( json.asText() );
: ZonedDateTime.parse(json.asText(), PUBLICATION_DATE_FORMATTER);
}
}
24 changes: 12 additions & 12 deletions src/main/java/io/prismic/Fragment.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package io.prismic;

import com.fasterxml.jackson.databind.JsonNode;
import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

import java.time.LocalDate;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
Expand Down Expand Up @@ -60,18 +59,19 @@ public LocalDate getValue() {
}

public String asText(String pattern) {
return value.toString(pattern);
return value.format(DateTimeFormatter.ofPattern(pattern));
}

public String asHtml() {
return ("<time>" + value + "</time>");
}

// --
private static final DateTimeFormatter DATE_FRAGMENT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");

public static Date parse(JsonNode json) {
try {
return new Date(LocalDate.parse(json.asText(), DateTimeFormat.forPattern("yyyy-MM-dd")));
return new Date(LocalDate.parse(json.asText(), DATE_FRAGMENT_FORMATTER));
} catch(Exception e) {
return null;
}
Expand All @@ -85,18 +85,18 @@ public static Date parse(JsonNode json) {
* Timestamp fragment: date with time. For just date, see Date.
*/
class Timestamp implements Fragment {
private final DateTime value;
private final ZonedDateTime value;

public Timestamp(DateTime value) {
public Timestamp(ZonedDateTime value) {
this.value = value;
}

public DateTime getValue() {
public ZonedDateTime getValue() {
return value;
}

public String asText(String pattern) {
return value.toString(pattern);
return value.format(DateTimeFormatter.ofPattern(pattern));
}

public String asHtml() {
Expand All @@ -105,11 +105,11 @@ public String asHtml() {

// --

private static final DateTimeFormatter isoFormat = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ssZ");
private static final DateTimeFormatter TIMESTAMP_FRAGMENT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ");

public static Timestamp parse(JsonNode json) {
try {
return new Timestamp(DateTime.parse(json.asText(), isoFormat));
return new Timestamp(ZonedDateTime.parse(json.asText(), TIMESTAMP_FRAGMENT_FORMATTER));
} catch(Exception e) {
return null;
}
Expand Down
8 changes: 4 additions & 4 deletions src/main/java/io/prismic/Predicates.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.prismic;

import org.joda.time.DateTime;
import java.time.ZonedDateTime;

public class Predicates {

Expand Down Expand Up @@ -63,15 +63,15 @@ public static Predicate inRange(String fragment, Double lowerBound, Double upper
return new SimplePredicate("number.inRange", fragment, lowerBound, upperBound);
}

public static Predicate dateBefore(String fragment, DateTime before) {
public static Predicate dateBefore(String fragment, ZonedDateTime before) {
return new SimplePredicate("date.before", fragment, before);
}

public static Predicate dateAfter(String fragment, DateTime after) {
public static Predicate dateAfter(String fragment, ZonedDateTime after) {
return new SimplePredicate("date.after", fragment, after);
}

public static Predicate dateBetween(String fragment, DateTime lower, DateTime upper) {
public static Predicate dateBetween(String fragment, ZonedDateTime lower, ZonedDateTime upper) {
return new SimplePredicate("date.between", fragment, lower, upper);
}

Expand Down
9 changes: 5 additions & 4 deletions src/main/java/io/prismic/Ref.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
package io.prismic;

import com.fasterxml.jackson.databind.JsonNode;
import org.joda.time.DateTime;

import java.time.ZonedDateTime;

public class Ref {

final private String id;
final private String ref;
final private String label;
final private boolean masterRef;
final private DateTime scheduledAt;
final private ZonedDateTime scheduledAt;

public Ref(String id, String ref, String label, boolean masterRef, DateTime scheduledAt) {
public Ref(String id, String ref, String label, boolean masterRef, ZonedDateTime scheduledAt) {
this.id = id;
this.ref = ref;
this.label = label;
Expand All @@ -35,7 +36,7 @@ public boolean isMasterRef() {
return masterRef;
}

public DateTime getScheduledAt() {
public ZonedDateTime getScheduledAt() {
return scheduledAt;
}

Expand Down
6 changes: 3 additions & 3 deletions src/main/java/io/prismic/SimplePredicate.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.prismic;

import org.joda.time.DateTime;
import java.time.ZonedDateTime;

class SimplePredicate implements Predicate {

Expand Down Expand Up @@ -54,8 +54,8 @@ private static String serializeField(Object value) {
return ("\"" + capitalize(((Predicates.DayOfWeek) value).name()) + "\"");
} else if (value instanceof String) {
return ("\"" + value + "\"");
} else if (value instanceof DateTime) {
return Long.toString(((DateTime) value).getMillis());
} else if (value instanceof ZonedDateTime) {
return Long.toString(((ZonedDateTime) value).toInstant().toEpochMilli());
} else {
return value.toString();
}
Expand Down
25 changes: 5 additions & 20 deletions src/test/java/io/prismic/DocumentTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.junit.Assert;
import org.junit.Test;

import java.io.IOException;
import java.time.ZonedDateTime;
import java.util.List;

import static java.time.ZoneOffset.UTC;

public class DocumentTest {

private final LinkResolver linkResolver = new SimpleLinkResolver() {
Expand Down Expand Up @@ -124,15 +125,7 @@ public void testParseFirstPublicationDate() throws Exception {
Document doc = Document.parse(node);

Assert.assertEquals(
DateTime.now()
.withZone( DateTimeZone.UTC )
.withYear( 2017 )
.withMonthOfYear( 1 )
.withDayOfMonth( 13 )
.withHourOfDay( 11 )
.withMinuteOfHour( 45 )
.withSecondOfMinute( 21 )
.withMillisOfSecond( 0 ),
ZonedDateTime.of(2017, 1, 13, 11, 45, 21, 0, UTC),
doc.getFirstPublicationDate()
);
}
Expand All @@ -143,15 +136,7 @@ public void testParseLastPublicationDate() throws Exception {
Document doc = Document.parse(node);

Assert.assertEquals(
DateTime.now()
.withZone( DateTimeZone.UTC )
.withYear( 2017 )
.withMonthOfYear( 2 )
.withDayOfMonth( 21 )
.withHourOfDay( 16 )
.withMinuteOfHour( 5 )
.withSecondOfMinute( 19 )
.withMillisOfSecond( 0 ),
ZonedDateTime.of(2017, 2, 21, 16, 5, 19, 0, UTC),
doc.getLastPublicationDate()
);
}
Expand Down
2 changes: 1 addition & 1 deletion src/test/resources/fixtures/document_store.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"id": "UlfoxUnM0wkXYXbb", "type": "store", "href": "https://lesbonneschoses.prismic.io/api/documents/search?ref=UlfoxUnM08QWYXdl&q=%5B%5B%3Ad+%3D+at%28document.id%2C+%22UlfoxUnM0wkXYXbb%22%29+%5D%5D", "tags": [], "slugs": ["paris-saint-lazare"], "lang": "fr-fr", "alternate_languages":[], "first_publication_date": "2017-01-13T11:45:21.000Z", "last_publication_date": "2017-02-21T16:05:19.000Z", "linked_documents": [], "data": {
"id": "UlfoxUnM0wkXYXbb", "type": "store", "href": "https://lesbonneschoses.prismic.io/api/documents/search?ref=UlfoxUnM08QWYXdl&q=%5B%5B%3Ad+%3D+at%28document.id%2C+%22UlfoxUnM0wkXYXbb%22%29+%5D%5D", "tags": [], "slugs": ["paris-saint-lazare"], "lang": "fr-fr", "alternate_languages":[], "first_publication_date": "2017-01-13T11:45:21+0000", "last_publication_date": "2017-02-21T16:05:19+0000", "linked_documents": [], "data": {
"store": {
"name": {
"type": "StructuredText",
Expand Down
4 changes: 2 additions & 2 deletions src/test/resources/fixtures/language.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@
}
],
"linked_documents":[],
"first_publication_date": "2017-01-13T11:45:21.000Z",
"last_publication_date": "2017-02-21T16:05:19.000Z",
"first_publication_date": "2017-01-13T11:45:21+0000",
"last_publication_date": "2017-02-21T16:05:19+0000",
"data":{
"article":{}
}
Expand Down
4 changes: 2 additions & 2 deletions src/test/resources/fixtures/simple_slices.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
"slugs":["une-activite"],
"lang":"fr-fr",
"alternate_languages":[],
"first_publication_date": "2017-01-13T11:45:21.000Z",
"last_publication_date": "2017-02-21T16:05:19.000Z",
"first_publication_date": "2017-01-13T11:45:21+0000",
"last_publication_date": "2017-02-21T16:05:19+0000",
"linked_documents":[],
"data":{
"article":{
Expand Down

0 comments on commit 1ab7826

Please sign in to comment.