package org.gcube.data.publishing.ckan2zenodo; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoField; import java.time.temporal.TemporalAccessor; import java.util.List; import org.gcube.data.publishing.ckan2zenodo.commons.Parsing; import org.gcube.data.publishing.ckan2zenodo.model.zenodo.Commons; import com.jayway.jsonpath.DocumentContext; import com.jayway.jsonpath.JsonPath; import lombok.extern.slf4j.Slf4j; @Slf4j public class Fixer { private static DateTimeFormatter INCOMING_FORMATTER=null; private static DateTimeFormatter INTERNAL_FORMATTER=null; static { INCOMING_FORMATTER=DateTimeFormatter.ofPattern("[yyyy-MM-dd['T'HH:mm:ss[.SSSSSS[z][Z][XXX]]]]"); INTERNAL_FORMATTER=DateTimeFormatter.ofPattern(Commons.ISO_DATE_PATTERN); } public static final String fixIncoming(String toFix) { DocumentContext ctx=JsonPath.using(Parsing.JSON_PATH_ALWAYS_LIST_CONFIG).parse(toFix); DocumentContext pathCtx=JsonPath.using(Parsing.JSON_PATH_PATHS_CONFIGURATION).parse(toFix); ctx=fixIncomingDate(ctx,pathCtx, "$.created"); ctx=fixIncomingDate(ctx,pathCtx, "$.modified"); ctx=fixIncomingDate(ctx,pathCtx, "$..publication_date"); ctx=fixIncomingDate(ctx,pathCtx, "$..embargo_date"); return ctx.jsonString(); } /** * It seems never used to me - by Francesco M. * @param toFix * @return */ public static String fixSending(String toFix) { DocumentContext ctx=JsonPath.using(Parsing.JSON_PATH_ALWAYS_LIST_CONFIG).parse(toFix); DocumentContext pathCtx=JsonPath.using(Parsing.JSON_PATH_PATHS_CONFIGURATION).parse(toFix); ctx=fixOutgoingDate(ctx,pathCtx, "$.created"); ctx=fixOutgoingDate(ctx,pathCtx, "$.modified"); ctx=fixOutgoingDate(ctx,pathCtx, "$..publication_date"); ctx=fixOutgoingDate(ctx,pathCtx, "$..embargo_date"); return ctx.jsonString(); } //*** INCOMINGs private static final DocumentContext fixIncomingDate(DocumentContext valuesCtx,DocumentContext pathCtx,String toFixPath) { try { List values=valuesCtx.read(toFixPath); List paths=pathCtx.read(toFixPath); if(values!=null) for(int i=0;i values=valuesCtx.read(toFixPath); List paths=pathCtx.read(toFixPath); if(values!=null) for(int i=0;i