Skip to content

Commit

Permalink
Get rid of java.sql.Timestamp and use java.time everywhere (#71)
Browse files Browse the repository at this point in the history
* [graph] DateTimeValueFactory - itCanCorrectlyParseTimestampWithTimezone

* Replace Timestamp for Instant everywhere

* Keep Time attribute

---------

Co-authored-by: Tomáš Čížek <tomascizek@gmail.com>
  • Loading branch information
clickout and tomcizek authored Jul 17, 2023
1 parent bc09f9a commit 62d991b
Show file tree
Hide file tree
Showing 50 changed files with 369 additions and 294 deletions.
8 changes: 7 additions & 1 deletion common/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,13 @@
<artifactId>jackson-annotations</artifactId>
<version>2.15.1</version>
</dependency>

<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.15.1</version>
</dependency>


<!--compile-->
<dependency>
<groupId>org.jetbrains</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

import ai.stapi.serialization.classNameProvider.GenericClassNameProvider;
import ai.stapi.serialization.classNameProvider.specific.SpecificClassNameProvider;
import ai.stapi.serialization.jackson.JavaTimeConfigurer;
import ai.stapi.serialization.jackson.SerializableObjectConfigurer;
import ai.stapi.serialization.jackson.TimestampConfigurer;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.List;
import org.springframework.boot.autoconfigure.AutoConfiguration;
Expand Down Expand Up @@ -41,7 +41,7 @@ public ObjectMapper commonObjectMapper(
SerializableObjectConfigurer serializableObjectConfigurer
) {
serializableObjectConfigurer.configure(objectMapper);
TimestampConfigurer.configureTimestampModule(objectMapper);
JavaTimeConfigurer.configureJavaTimeModule(objectMapper);
return objectMapper;
}
}
Original file line number Diff line number Diff line change
@@ -1,23 +1,22 @@
package ai.stapi.objectRenderer.infrastructure.objectToJsonStringRenderer;

import ai.stapi.serialization.jackson.TimestampConfigurer;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import ai.stapi.objectRenderer.infrastructure.objectToJsonStringRenderer.ObjectToJSonStringOptions.RenderFeature;
import ai.stapi.objectRenderer.model.ObjectRenderer;
import ai.stapi.objectRenderer.model.RenderOutput;
import ai.stapi.objectRenderer.model.RendererOptions;
import ai.stapi.serialization.AbstractSerializableObject;
import ai.stapi.serialization.jackson.JavaTimeConfigurer;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.springframework.stereotype.Service;

public class ObjectToJsonStringRenderer implements ObjectRenderer {

Expand Down Expand Up @@ -80,7 +79,7 @@ public RenderOutput render(

private ObjectMapper getMapper(ObjectToJSonStringOptions options) {
var mapper = new ObjectMapper();
TimestampConfigurer.configureTimestampModule(mapper);
JavaTimeConfigurer.configureJavaTimeModule(mapper);
var shouldRenderGetters = options.getFeatures()
.contains(ObjectToJSonStringOptions.RenderFeature.RENDER_GETTERS);

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package ai.stapi.serialization.jackson;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;

public class JavaTimeConfigurer {

private JavaTimeConfigurer() {
}

public static void configureJavaTimeModule(ObjectMapper objectMapper) {
objectMapper.registerModule(new JavaTimeModule());
objectMapper.configure(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE, false);
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
}
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -53,11 +53,11 @@ public class JsonSchemaMapper {
CodeAttributeValue.SERIALIZATION_TYPE,
DateAttributeValue.SERIALIZATION_TYPE,
DateTimeAttributeValue.SERIALIZATION_TYPE,
TimeAttributeValue.SERIALIZATION_TYPE,
IdAttributeValue.SERIALIZATION_TYPE,
InstantAttributeValue.SERIALIZATION_TYPE,
MarkdownAttributeValue.SERIALIZATION_TYPE,
OidAttributeValue.SERIALIZATION_TYPE,
TimeAttributeValue.SERIALIZATION_TYPE,
UriAttributeValue.SERIALIZATION_TYPE,
UrlAttributeValue.SERIALIZATION_TYPE,
UuidAttributeValue.SERIALIZATION_TYPE,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,6 @@
"title" : "positiveInt",
"type" : "number"
},
"exampleTimeField" : {
"description" : "",
"title" : "time",
"type" : "string"
},
"exampleUnsignedIntegerField" : {
"description" : "",
"title" : "unsignedInt",
Expand All @@ -90,5 +85,5 @@
"type" : "string"
}
},
"required" : [ "exampleBase64Field", "exampleCanonicalField", "exampleCodeField", "exampleDateField", "exampleDateTimeField", "exampleDecimalField", "exampleIdField", "exampleInstantField", "exampleMarkdownField", "exampleOidField", "examplePositiveIntegerField", "exampleTimeField", "exampleUnsignedIntegerField", "exampleUriField", "exampleUrlField", "exampleUuidField", "exampleXhtmlField" ]
"required" : [ "exampleBase64Field", "exampleCanonicalField", "exampleCodeField", "exampleDateField", "exampleDateTimeField", "exampleDecimalField", "exampleIdField", "exampleInstantField", "exampleMarkdownField", "exampleOidField", "examplePositiveIntegerField", "exampleUnsignedIntegerField", "exampleUriField", "exampleUrlField", "exampleUuidField", "exampleXhtmlField" ]
}
Original file line number Diff line number Diff line change
Expand Up @@ -150,19 +150,6 @@
],
"targetProfileRef": []
},
{
"name": "exampleTimeField",
"use": "in",
"min": 1,
"max": "1",
"type": "time",
"referencedFrom": [
{
"source": "DomainResource.exampleTimeField"
}
],
"targetProfileRef": []
},
{
"name": "exampleUnsignedIntegerField",
"use": "in",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,6 @@

import ai.stapi.graphoperations.graphLanguage.graphDescription.GraphDescription;
import ai.stapi.graphoperations.graphLanguage.graphDescription.graphDescriptionBuilder.exception.GraphDescriptionBuilderException;
import ai.stapi.graphoperations.graphLanguage.graphDescription.graphDescriptionBuilder.specificDescriptionBuilders.query.AttributeQueryDescriptionBuilder;
import ai.stapi.graphoperations.graphLanguage.graphDescription.specific.positive.AbstractAttributeDescription;
import ai.stapi.graphoperations.graphLanguage.graphDescription.specific.positive.PositiveGraphDescription;
import ai.stapi.graphoperations.graphLanguage.graphDescription.specific.positive.UuidIdentityDescription;
import ai.stapi.graphoperations.graphLanguage.graphDescription.specific.removal.RemovalGraphDescription;
import ai.stapi.graphoperations.graphLanguage.graphDescription.graphDescriptionBuilder.specificDescriptionBuilders.SpecificGraphDescriptionBuilder;
import ai.stapi.graphoperations.graphLanguage.graphDescription.graphDescriptionBuilder.specificDescriptionBuilders.positive.AbstractAttributeDescriptionBuilder;
import ai.stapi.graphoperations.graphLanguage.graphDescription.graphDescriptionBuilder.specificDescriptionBuilders.positive.AbstractAttributeValueDescriptionBuilder;
Expand Down Expand Up @@ -41,12 +36,16 @@
import ai.stapi.graphoperations.graphLanguage.graphDescription.graphDescriptionBuilder.specificDescriptionBuilders.positive.UuidAttributeValueDescriptionBuilder;
import ai.stapi.graphoperations.graphLanguage.graphDescription.graphDescriptionBuilder.specificDescriptionBuilders.positive.UuidSpecificDescriptionBuilder;
import ai.stapi.graphoperations.graphLanguage.graphDescription.graphDescriptionBuilder.specificDescriptionBuilders.positive.XhtmlAttributeValueDescriptionBuilder;
import ai.stapi.graphoperations.graphLanguage.graphDescription.graphDescriptionBuilder.specificDescriptionBuilders.query.AttributeQueryDescriptionBuilder;
import ai.stapi.graphoperations.graphLanguage.graphDescription.graphDescriptionBuilder.specificDescriptionBuilders.removal.AbstractRemovalDescriptionBuilder;
import ai.stapi.graphoperations.graphLanguage.graphDescription.graphDescriptionBuilder.specificDescriptionBuilders.removal.RemovalEdgeDescriptionBuilder;
import ai.stapi.graphoperations.graphLanguage.graphDescription.graphDescriptionBuilder.specificDescriptionBuilders.removal.RemovalNodeDescriptionBuilder;
import ai.stapi.graphoperations.graphLanguage.graphDescription.specific.positive.AbstractAttributeDescription;
import ai.stapi.graphoperations.graphLanguage.graphDescription.specific.positive.PositiveGraphDescription;
import ai.stapi.graphoperations.graphLanguage.graphDescription.specific.positive.UuidIdentityDescription;
import ai.stapi.graphoperations.graphLanguage.graphDescription.specific.removal.RemovalGraphDescription;
import ai.stapi.graphoperations.graphbuilder.specific.positive.EdgeDirection;
import ai.stapi.utils.Classifier;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ public TimeAttributeValueDescription copyWithNewChildren(
public TimeAttributeValueDescriptionBuilder getCopy() {
var builder = new TimeAttributeValueDescriptionBuilder();
builder.setChildren(this.getChildren().stream()
.map(SpecificGraphDescriptionBuilder::getCopy)
.collect(Collectors.toCollection(ArrayList::new)));
.map(SpecificGraphDescriptionBuilder::getCopy)
.collect(Collectors.toCollection(ArrayList::new)));
return builder;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,17 @@
import ai.stapi.graph.NodeIdAndType;
import ai.stapi.graph.NodeRepository;
import ai.stapi.graph.exceptions.GraphException;
import ai.stapi.identity.UniqueIdentifier;
import ai.stapi.graph.inMemoryGraph.InMemoryGraphRepository;
import ai.stapi.graph.inMemoryGraph.EdgeBuilder;
import ai.stapi.graph.graphelements.Edge;
import ai.stapi.graph.graphelements.Node;
import ai.stapi.graph.inMemoryGraph.EdgeBuilder;
import ai.stapi.graph.inMemoryGraph.InMemoryGraphRepository;
import ai.stapi.graph.traversableGraphElements.TraversableEdge;
import ai.stapi.graph.traversableGraphElements.TraversableNode;
import ai.stapi.graphoperations.synchronization.nodeIdentificator.NodeIdentifyingFiltersResolver;
import ai.stapi.graphoperations.graphLoader.GraphLoader;
import ai.stapi.graphoperations.graphLoader.inmemory.InMemoryGenericSearchOptionResolver;
import ai.stapi.graphoperations.graphLoader.inmemory.InMemoryGraphLoader;
import ai.stapi.graphoperations.synchronization.nodeIdentificator.NodeIdentifyingFiltersResolver;
import ai.stapi.identity.UniqueIdentifier;
import ai.stapi.schema.structureSchemaProvider.StructureSchemaFinder;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
Expand Down Expand Up @@ -211,8 +211,7 @@ private void synchronizeEdges(
potentiallyRottenEdge.getNodeFromId(),
potentiallyRottenEdge.getNodeFromId()
);
var fixedNodeFrom =
new Node(fixedNodeFromId, potentiallyRottenEdge.getNodeFromType());
var fixedNodeFrom = new Node(fixedNodeFromId, potentiallyRottenEdge.getNodeFromType());
var fixedNodeToId = nodeIdChangeMap.getOrDefault(
potentiallyRottenEdge.getNodeToId(),
potentiallyRottenEdge.getNodeToId()
Expand All @@ -237,8 +236,7 @@ private void synchronizeEdges(
new Edge(
foundEdge.getId(),
foundEdge.getType(),
new Node(foundEdge.getNodeFrom().getId(),
foundEdge.getNodeFrom().getType()),
new Node(foundEdge.getNodeFrom().getId(), foundEdge.getNodeFrom().getType()),
new Node(foundEdge.getNodeTo().getId(), foundEdge.getNodeTo().getType()),
foundEdge.getVersionedAttributes()
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
"text": "Medical Record Number"
},
"period": {
"start": "2022-01-01T00:00:00",
"end": "2023-12-31T00:00:00"
"start": "2022-01-01T00:00:00Z",
"end": "2023-12-31T00:00:00Z"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
"metaData" : {
"createdAt" : [ {
"serializationType" : "instant",
"value" : "2023-05-04 21:00:55.68332646"
"value" : "2023-05-04T21:00:55.683326460Z"
} ]
},
"values" : [ {
Expand All @@ -30,7 +30,7 @@
"metaData" : {
"createdAt" : [ {
"serializationType" : "instant",
"value" : "2023-05-04 21:00:55.68332646"
"value" : "2023-05-04T21:00:55.683326460Z"
} ]
},
"values" : [ {
Expand All @@ -48,7 +48,7 @@
"metaData" : {
"createdAt" : [ {
"serializationType" : "instant",
"value" : "2023-05-04 21:00:55.68332646"
"value" : "2023-05-04T21:00:55.683326460Z"
} ]
},
"values" : [ {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
"metaData" : {
"createdAt" : [ {
"serializationType" : "instant",
"value" : "2023-05-04 21:00:55.68332646"
"value" : "2023-05-04T21:00:55.683326460Z"
} ]
}
} ]
Expand All @@ -29,7 +29,7 @@
"metaData" : {
"createdAt" : [ {
"serializationType" : "instant",
"value" : "2023-05-04 21:00:55.68332646"
"value" : "2023-05-04T21:00:55.683326460Z"
} ]
}
} ]
Expand All @@ -49,7 +49,7 @@
"metaData" : {
"createdAt" : [ {
"serializationType" : "instant",
"value" : "2023-05-04 21:00:55.68332646"
"value" : "2023-05-04T21:00:55.683326460Z"
} ]
}
} ]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
package ai.stapi.graphoperations.serializableGraph;

import ai.stapi.test.schemaintegration.SchemaIntegrationTestCase;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import ai.stapi.graph.Graph;
import ai.stapi.graph.NodeIdAndType;
import ai.stapi.graph.attribute.CreatedAtMetaData;
import ai.stapi.graph.attribute.LeafAttribute;
import ai.stapi.graph.attribute.attributeValue.InstantAttributeValue;
import ai.stapi.graph.attribute.attributeValue.StringAttributeValue;
import ai.stapi.graph.Graph;
import ai.stapi.graph.graphelements.Edge;
import ai.stapi.graph.graphelements.Node;
import ai.stapi.identity.UniqueIdentifier;
import ai.stapi.identity.UniversallyUniqueIdentifier;
import java.sql.Timestamp;
import ai.stapi.test.schemaintegration.SchemaIntegrationTestCase;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.time.Instant;
import java.util.List;
import java.util.Map;
import org.junit.jupiter.api.Test;
Expand Down Expand Up @@ -42,7 +42,7 @@ void itCanBeCreatedFromInMemoryGraph() {
);
var attribute = new LeafAttribute<>(
"attribute_name",
Timestamp.valueOf("2023-05-04 21:00:55.68332646"),
Instant.parse("2023-05-04T21:00:55.68332646Z"),
new StringAttributeValue("attribute value")
);

Expand Down Expand Up @@ -74,7 +74,7 @@ void itCanBeAutomaticallySerializedFromInMemoryGraphWithObjectMapper() throws Js
);
var attribute = new LeafAttribute<>(
"attribute_name",
Timestamp.valueOf("2023-05-04 21:00:55.68332646"),
Instant.parse("2023-05-04T21:00:55.68332646Z"),
new StringAttributeValue("attribute value")
);

Expand Down Expand Up @@ -104,7 +104,7 @@ void itCanBeDeserializedToInMemoryGraph() throws JsonProcessingException {
CreatedAtMetaData.NAME, List.of(
new SerializableAttributeValue(
InstantAttributeValue.SERIALIZATION_TYPE,
"2023-05-04 21:00:55.68332646"
"2023-05-04T21:00:55.68332646Z"
)
)
)
Expand Down
Loading

0 comments on commit 62d991b

Please sign in to comment.