From 917b1fb85a1108e07f2811ebe25b537cc8ba4efb Mon Sep 17 00:00:00 2001 From: natan-cox-cognizone <81639894+natan-cox-cognizone@users.noreply.github.com> Date: Tue, 30 Aug 2022 09:34:22 +0200 Subject: [PATCH 1/2] fix #138 removed joda time from cube module --- .../cube/convertor/ModelToJsonConversion.java | 27 +++++++++---------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/cube/src/main/java/zone/cogni/asquare/cube/convertor/ModelToJsonConversion.java b/cube/src/main/java/zone/cogni/asquare/cube/convertor/ModelToJsonConversion.java index 8dd5cc9..a9f5f98 100644 --- a/cube/src/main/java/zone/cogni/asquare/cube/convertor/ModelToJsonConversion.java +++ b/cube/src/main/java/zone/cogni/asquare/cube/convertor/ModelToJsonConversion.java @@ -21,9 +21,6 @@ import org.apache.jena.rdf.model.Statement; import org.apache.jena.rdf.model.StmtIterator; import org.apache.jena.vocabulary.RDF; -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; -import org.joda.time.format.ISODateTimeFormat; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import zone.cogni.asquare.applicationprofile.model.basic.ApplicationProfile; @@ -33,6 +30,9 @@ import zone.cogni.libs.jena.utils.JenaUtils; import javax.annotation.Nonnull; +import java.time.LocalDate; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -214,7 +214,7 @@ private void processContext(Context context, Model model) { } private void reportMissedSubjects(Context context, String root) { - Set missedSubjects = context.subjectTypeMap.keySet(); + Set missedSubjects = new HashSet<>(context.subjectTypeMap.keySet()); missedSubjects.removeAll(context.alreadyProcessedResources); if (missedSubjects.size() > 1) { @@ -717,19 +717,18 @@ private void addToJsonAsSingle(ObjectNode jsonNode, String attribute, JsonNode v } private String literalToDate(Literal literal) { - return date2string(ISODateTimeFormat.dateTimeParser().parseDateTime(literal.getLexicalForm())); - } - - private String date2string(DateTime date) { - return date == null ? null : date.toString(ISODateTimeFormat.date()); + return LocalDate.parse(literal.getLexicalForm()).toString(); } + /** + * Tested on formats like 2016-01-01T00:00:00Z , 2021-02-11T08:19:21.489344Z and 2022-08-08T08:08:08.888+02:00 + * + * @param literal dateTime literal + * @return dateTime string as is but after format validation + */ private String literalToDateTime(Literal literal) { - return dateTime2string(ISODateTimeFormat.dateTimeParser().parseDateTime(literal.getLexicalForm())); - } - - private String dateTime2string(DateTime dateTime) { - return dateTime == null ? null : dateTime.withZone(DateTimeZone.UTC).toString(ISODateTimeFormat.dateTime()); + ZonedDateTime zonedDateTime = ZonedDateTime.parse(literal.getLexicalForm()); + return zonedDateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME); } private TextNode getTextNode(String value) { From a10d7c839026b056224e8ffd104085f2d35ce47d Mon Sep 17 00:00:00 2001 From: natan-cox-cognizone <81639894+natan-cox-cognizone@users.noreply.github.com> Date: Tue, 30 Aug 2022 09:39:33 +0200 Subject: [PATCH 2/2] fix #139 use sorted maps in ConversionProfile --- .../cube/convertor/json/ConversionProfile.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/cube/src/main/java/zone/cogni/asquare/cube/convertor/json/ConversionProfile.java b/cube/src/main/java/zone/cogni/asquare/cube/convertor/json/ConversionProfile.java index eb45fa3..8ca7801 100644 --- a/cube/src/main/java/zone/cogni/asquare/cube/convertor/json/ConversionProfile.java +++ b/cube/src/main/java/zone/cogni/asquare/cube/convertor/json/ConversionProfile.java @@ -12,7 +12,6 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Comparator; -import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -64,13 +63,13 @@ public static ConversionProfile read(InputStreamSource resource) { * simple classId lookup */ @JsonIgnore - private final Map classIdTypeMap = new HashMap<>(); + private final Map classIdTypeMap = new TreeMap<>(); /** * expanded classId lookup */ @JsonIgnore - private final Map expandedClassIdTypeMap = new HashMap<>(); + private final Map expandedClassIdTypeMap = new TreeMap<>(); /** @@ -84,10 +83,10 @@ public static ConversionProfile read(InputStreamSource resource) { private final List> typesByLevel = new ArrayList<>(); @JsonIgnore - private final Map rdfTypeTypeMap = new HashMap<>(); + private final Map rdfTypeTypeMap = new TreeMap<>(); @JsonIgnore - private final Map expandedRdfTypeTypeMap = new HashMap<>(); + private final Map expandedRdfTypeTypeMap = new TreeMap<>(); public Context getContext() { Objects.requireNonNull(context, "context cannot be null"); @@ -301,10 +300,10 @@ public static class Type { * all attributes */ @JsonIgnore - private final Map attributeIdMap = new HashMap<>(); + private final Map attributeIdMap = new TreeMap<>(); @JsonIgnore - private final Map attributeUriMap = new HashMap<>(); + private final Map attributeUriMap = new TreeMap<>(); public String getRootClassId() { return rootClassId;