Skip to content
This repository has been archived by the owner on Nov 22, 2023. It is now read-only.

Commit

Permalink
Replace OffsetDateTime with long
Browse files Browse the repository at this point in the history
  • Loading branch information
alokmenghrajani committed Nov 10, 2015
1 parent 507b43d commit ffef55d
Show file tree
Hide file tree
Showing 30 changed files with 144 additions and 151 deletions.
37 changes: 20 additions & 17 deletions api/src/main/java/keywhiz/api/ApiDate.java
Expand Up @@ -24,9 +24,10 @@
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;

import java.io.IOException;
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;

/**
Expand All @@ -35,52 +36,54 @@
@JsonSerialize(using=ApiDate.ApiDateSerializer.class)
@JsonDeserialize(using=ApiDate.ApiDateDeserializer.class)
public class ApiDate {
private long epochSecond;

public long toEpochSecond() {
return epochSecond;
}

public ApiDate(long epochSecond) {
this.epochSecond = epochSecond;
}

static class ApiDateSerializer extends JsonSerializer<ApiDate> {
private static DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
@Override
public void serialize(ApiDate value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeString(formatter.format(value.offsetDateTime));
Instant i = Instant.ofEpochSecond(value.epochSecond);
gen.writeString(formatter.format(i.atOffset(ZoneOffset.UTC)));
}
}

static class ApiDateDeserializer extends JsonDeserializer<ApiDate> {
@Override
public ApiDate deserialize(JsonParser parser, DeserializationContext ctxt) throws IOException {
return new ApiDate(parser.readValueAs(OffsetDateTime.class));
OffsetDateTime odt = parser.readValueAs(OffsetDateTime.class);
return new ApiDate(odt.toEpochSecond());
}
}

public static ApiDate parse(String s) {
return new ApiDate(OffsetDateTime.parse(s));
OffsetDateTime odt = OffsetDateTime.parse(s);
return new ApiDate(odt.toEpochSecond());
}

public static ApiDate now() {
return new ApiDate(OffsetDateTime.now());
}

public long toEpochSecond() {
return this.offsetDateTime.toEpochSecond();
return new ApiDate(OffsetDateTime.now().toEpochSecond());
}

@Override
public boolean equals(Object obj) {
if (obj instanceof ApiDate) {
ApiDate that = (ApiDate) obj;
return this.offsetDateTime.equals(that.offsetDateTime);
return this.epochSecond == that.epochSecond;
}
return false;
}

@Override
public int hashCode() {
return this.offsetDateTime.hashCode();
return Long.hashCode(this.epochSecond);
}

public ApiDate(OffsetDateTime odt) {
this.offsetDateTime = odt;
}

public OffsetDateTime offsetDateTime;
}

Expand Up @@ -18,7 +18,6 @@

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import java.time.OffsetDateTime;
import keywhiz.api.model.Group;
import keywhiz.api.model.Secret;
import keywhiz.api.model.VersionGenerator;
Expand Down Expand Up @@ -68,7 +67,7 @@ public void serializesCorrectly() throws Exception {
0,
"Database_Password",
secret,
ApiDate.parse("2011-09-29T15:46:00.232Z"),
ApiDate.parse("2011-09-29T15:46:00.000Z"),
false,
ImmutableMap.of(),
ImmutableList.of());
Expand All @@ -79,7 +78,7 @@ public void serializesCorrectly() throws Exception {
33,
"General_Password..0be68f903f8b7d86",
secret,
ApiDate.parse("2011-09-29T15:46:00.312Z"),
ApiDate.parse("2011-09-29T15:46:00.000Z"),
true,
ImmutableMap.of(),
ImmutableList.of());
Expand All @@ -90,7 +89,7 @@ public void serializesCorrectly() throws Exception {
66,
"Nobody_PgPass",
secret,
ApiDate.parse("2011-09-29T15:46:00.232Z"),
ApiDate.parse("2011-09-29T15:46:00.000Z"),
false,
ImmutableMap.of("mode", "0400", "owner", "nobody"),
ImmutableList.of());
Expand Down
5 changes: 2 additions & 3 deletions api/src/test/java/keywhiz/api/GroupDetailResponseTest.java
Expand Up @@ -17,7 +17,6 @@
package keywhiz.api;

import com.google.common.collect.ImmutableList;
import java.time.OffsetDateTime;
import org.junit.Test;

import static keywhiz.testing.JsonHelpers.asJson;
Expand All @@ -30,8 +29,8 @@ public class GroupDetailResponseTest {
234,
"group-name",
"",
ApiDate.parse("2012-08-01T13:15:30.001Z"),
ApiDate.parse("2012-09-10T03:15:30.001Z"),
ApiDate.parse("2012-08-01T13:15:30.000Z"),
ApiDate.parse("2012-09-10T03:15:30.000Z"),
"creator-user",
"updater-user",
ImmutableList.of(),
Expand Down
7 changes: 3 additions & 4 deletions api/src/test/java/keywhiz/api/SecretDeliveryResponseTest.java
Expand Up @@ -17,7 +17,6 @@
package keywhiz.api;

import com.google.common.collect.ImmutableMap;
import java.time.OffsetDateTime;
import keywhiz.api.model.Secret;
import keywhiz.api.model.VersionGenerator;
import org.junit.Test;
Expand Down Expand Up @@ -61,7 +60,7 @@ public void serializesCorrectly() throws Exception {
"Database_Password",
secret,
decodedLength(secret),
ApiDate.parse("2011-09-29T15:46:00.232Z"),
ApiDate.parse("2011-09-29T15:46:00.000Z"),
false,
ImmutableMap.of());
assertThat(asJson(secretDeliveryResponse))
Expand All @@ -71,7 +70,7 @@ public void serializesCorrectly() throws Exception {
"General_Password..0be68f903f8b7d86",
secret,
decodedLength(secret),
ApiDate.parse("2011-09-29T15:46:00.312Z"),
ApiDate.parse("2011-09-29T15:46:00.000Z"),
true,
ImmutableMap.of());
assertThat(asJson(secretDeliveryResponseWithVersion))
Expand All @@ -81,7 +80,7 @@ public void serializesCorrectly() throws Exception {
"Nobody_PgPass",
secret,
decodedLength(secret),
ApiDate.parse("2011-09-29T15:46:00.232Z"),
ApiDate.parse("2011-09-29T15:46:00.000Z"),
false,
ImmutableMap.of("mode", "0400", "owner", "nobody"));
assertThat(asJson(secretDeliveryResponseWithMetadata))
Expand Down
Expand Up @@ -3,7 +3,7 @@
"name" : "Database_Password",
"secret" : "YXNkZGFz",
"secretLength" : 6,
"creationDate" : "2011-09-29T15:46:00.232Z",
"creationDate" : "2011-09-29T15:46:00.000Z",
"groups" : [],
"isVersioned" : false
}
Expand Up @@ -3,7 +3,7 @@
"name" : "Nobody_PgPass",
"secret" : "YXNkZGFz",
"secretLength" : 6,
"creationDate" : "2011-09-29T15:46:00.232Z",
"creationDate" : "2011-09-29T15:46:00.000Z",
"groups" : [],
"isVersioned" : false,
"mode" : "0400",
Expand Down
Expand Up @@ -3,7 +3,7 @@
"name" : "General_Password..0be68f903f8b7d86",
"secret" : "YXNkZGFz",
"secretLength" : 6,
"creationDate" : "2011-09-29T15:46:00.312Z",
"creationDate" : "2011-09-29T15:46:00.000Z",
"groups" : [],
"isVersioned" : true
}
4 changes: 2 additions & 2 deletions api/src/test/resources/fixtures/client.json
Expand Up @@ -2,9 +2,9 @@
"id" : 200,
"name" : "someClient",
"description" : "clientDesc",
"createdAt" : "2013-03-28T21:29:27.465Z",
"createdAt" : "2013-03-28T21:29:27.000Z",
"createdBy" : "keywhizAdmin",
"updatedAt" : "2013-03-28T21:29:27.465Z",
"updatedAt" : "2013-03-28T21:29:27.000Z",
"updatedBy" : "keywhizAdmin",
"enabled" : true,
"automationAllowed" : false
Expand Down
4 changes: 2 additions & 2 deletions api/src/test/resources/fixtures/clientDetailResponse.json
Expand Up @@ -2,8 +2,8 @@
"id" : 9875,
"name" : "Client Name",
"description" : "Client Description",
"creationDate" : "2012-08-01T13:15:30.001Z",
"updateDate" : "2012-09-10T03:15:30.001Z",
"creationDate" : "2012-08-01T13:15:30.000Z",
"updateDate" : "2012-09-10T03:15:30.000Z",
"createdBy" : "creator-user",
"updatedBy" : "updater-user",
"groups" : [],
Expand Down
4 changes: 2 additions & 2 deletions api/src/test/resources/fixtures/group.json
Expand Up @@ -2,8 +2,8 @@
"id" : 330,
"name" : "someGroup",
"description" : "groupDesc",
"createdAt" : "2013-03-28T21:29:27.465Z",
"createdAt" : "2013-03-28T21:29:27.000Z",
"createdBy" : "keywhizAdmin",
"updatedAt" : "2013-03-28T21:29:27.465Z",
"updatedAt" : "2013-03-28T21:29:27.000Z",
"updatedBy" : "keywhizAdmin"
}
4 changes: 2 additions & 2 deletions api/src/test/resources/fixtures/groupDetailResponse.json
Expand Up @@ -2,8 +2,8 @@
"id" : 234,
"name" : "group-name",
"description" : "",
"creationDate" : "2012-08-01T13:15:30.001Z",
"updateDate" : "2012-09-10T03:15:30.001Z",
"creationDate" : "2012-08-01T13:15:30.000Z",
"updateDate" : "2012-09-10T03:15:30.000Z",
"createdBy" : "creator-user",
"updatedBy" : "updater-user",
"secrets" : [],
Expand Down
4 changes: 2 additions & 2 deletions api/src/test/resources/fixtures/sanitizedSecret.json
Expand Up @@ -3,9 +3,9 @@
"name" : "trapdoor",
"version" : "0be6a2fc049ee349",
"description" : "v1",
"createdAt" : "2013-03-28T21:42:42.573Z",
"createdAt" : "2013-03-28T21:42:42.000Z",
"createdBy" : "keywhizAdmin",
"updatedAt" : "2013-03-28T21:42:42.573Z",
"updatedAt" : "2013-03-28T21:42:42.000Z",
"updatedBy" : "keywhizAdmin",
"metadata" : {
"owner" : "the king"
Expand Down
Expand Up @@ -2,6 +2,6 @@
"name" : "Database_Password",
"secret" : "YXNkZGFz",
"secretLength" : 6,
"creationDate" : "2011-09-29T15:46:00.232Z",
"creationDate" : "2011-09-29T15:46:00.000Z",
"isVersioned" : false
}
Expand Up @@ -2,7 +2,7 @@
"name" : "Nobody_PgPass",
"secret" : "YXNkZGFz",
"secretLength" : 6,
"creationDate" : "2011-09-29T15:46:00.232Z",
"creationDate" : "2011-09-29T15:46:00.000Z",
"isVersioned" : false,
"mode" : "0400",
"owner" : "nobody"
Expand Down
Expand Up @@ -2,6 +2,6 @@
"name" : "General_Password..0be68f903f8b7d86",
"secret" : "YXNkZGFz",
"secretLength" : 6,
"creationDate" : "2011-09-29T15:46:00.312Z",
"creationDate" : "2011-09-29T15:46:00.000Z",
"isVersioned" : true
}
6 changes: 3 additions & 3 deletions api/src/test/resources/fixtures/secretDetailResponse.json
Expand Up @@ -4,7 +4,7 @@
"description" : "desc",
"createdAt" : "2013-03-28T21:23:00.000Z",
"createdBy" : "keywhizAdmin",
"updatedAt" : "2013-03-28T21:23:04.159Z",
"updatedAt" : "2013-03-28T21:23:04.000Z",
"updatedBy" : "keywhizAdmin",
"isVersioned" : true,
"metadata" : {
Expand All @@ -15,9 +15,9 @@
"id" : 2000,
"name" : "someGroup",
"description" : "groupDesc",
"createdAt" : "2013-03-28T21:29:27.465Z",
"createdAt" : "2013-03-28T21:29:27.000Z",
"createdBy" : "keywhizAdmin",
"updatedAt" : "2013-03-28T21:29:27.465Z",
"updatedAt" : "2013-03-28T21:29:27.000Z",
"updatedBy" : "keywhizAdmin"
}
],
Expand Down
8 changes: 4 additions & 4 deletions api/src/test/resources/fixtures/secretsResponse.json
Expand Up @@ -5,9 +5,9 @@
"name" : "trapdoor",
"version" : "0be6a2fc049ee349",
"description" : "v1",
"createdAt" : "2013-03-28T21:42:42.573Z",
"createdAt" : "2013-03-28T21:42:42.000Z",
"createdBy" : "keywhizAdmin",
"updatedAt" : "2013-03-28T21:42:42.573Z",
"updatedAt" : "2013-03-28T21:42:42.000Z",
"updatedBy" : "keywhizAdmin",
"metadata" : {
"owner" : "the king"
Expand All @@ -22,9 +22,9 @@
"name" : "anotherSecret",
"version" : "",
"description" : "",
"createdAt" : "2013-04-28T21:42:42.573Z",
"createdAt" : "2013-04-28T21:42:42.000Z",
"createdBy" : "keywhizAdmin",
"updatedAt" : "2013-04-28T21:42:42.573Z",
"updatedAt" : "2013-04-28T21:42:42.000Z",
"updatedBy" : "keywhizAdmin",
"metadata" : {},
"type" : "upload",
Expand Down
8 changes: 4 additions & 4 deletions model/pom.xml
Expand Up @@ -179,9 +179,9 @@
<!-- Registers custom types -->
<customTypes>
<customType>
<name>OffsetDateTime</name>
<type>java.time.OffsetDateTime</type>
<converter>keywhiz.model.OffsetDateTimeConverter</converter>
<name>keywhiz.model.TimestampConverter</name>
<type>Long</type>
<converter>keywhiz.model.TimestampConverter</converter>
</customType>
<customType>
<name>java.lang.Boolean</name>
Expand All @@ -196,7 +196,7 @@
<!-- Forces JOOQ to use custom types in generated code -->
<forcedTypes>
<forcedType>
<name>OffsetDateTime</name>
<name>keywhiz.model.TimestampConverter</name>
<types>(?i:timestamp.*)</types>
</forcedType>
<forcedType>
Expand Down
Expand Up @@ -17,27 +17,26 @@
package keywhiz.model;

import java.sql.Timestamp;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.Instant;
import org.jooq.Converter;

/**
* Converts SQL timestamps to java OffsetDateTime objects in UTC.
* Converts SQL timestamps to long
*/
public class OffsetDateTimeConverter implements Converter<Timestamp, OffsetDateTime> {
@Override public OffsetDateTime from(Timestamp timestamp) {
return timestamp.toLocalDateTime().atOffset(ZoneOffset.UTC);
public class TimestampConverter implements Converter<Timestamp, Long> {
@Override public Long from(Timestamp timestamp) {
return timestamp.toInstant().getEpochSecond();
}

@Override public Timestamp to(OffsetDateTime offsetDateTime) {
return Timestamp.valueOf(offsetDateTime.toLocalDateTime());
@Override public Timestamp to(Long value) {
return Timestamp.from(Instant.ofEpochSecond(value));
}

@Override public Class<Timestamp> fromType() {
return Timestamp.class;
}

@Override public Class<OffsetDateTime> toType() {
return OffsetDateTime.class;
@Override public Class<Long> toType() {
return Long.class;
}
}

0 comments on commit ffef55d

Please sign in to comment.