Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The RatingsDocument should be added as the from = in the requestBody specification in the headers

Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@

import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.Timer;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.google.common.flogger.FluentLogger;
import cwms.cda.api.BaseCrudHandler;
Expand All @@ -68,6 +69,7 @@
import cwms.cda.data.dto.StatusResponse;
import cwms.cda.data.dto.VerticalDatumInfo;
import cwms.cda.data.dto.rating.Ratings;
import cwms.cda.data.dto.rating.document.RatingsDocument;
import cwms.cda.formatters.ContentType;
import cwms.cda.formatters.Formats;
import cwms.cda.formatters.annotations.FormattableWith;
Expand All @@ -92,7 +94,6 @@
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import javax.xml.transform.TransformerException;
import mil.army.usace.hec.cwms.rating.io.xml.RatingXmlFactory;
import mil.army.usace.hec.metadata.VerticalDatumException;
import org.jetbrains.annotations.NotNull;
Expand Down Expand Up @@ -157,7 +158,8 @@ public void create(@NotNull Context ctx) {
DSLContext dsl = getDslContext(ctx);
RatingDao ratingDao = getRatingDao(dsl);
boolean storeTemplate = ctx.queryParamAsClass(STORE_TEMPLATE, Boolean.class).getOrDefault(true);
String ratingSet = deserializeRatingSet(ctx, storeTemplate);
RatingsDocument ratings = deserializeRatingSet(ctx, storeTemplate);
String ratingSet = JsonRatingUtils.writeXml(ratings);
String datum = ctx.queryParam(DATUM);
VerticalDatum vd = null;
if(datum != null) {
Expand All @@ -181,7 +183,7 @@ public void create(@NotNull Context ctx) {
}
}

private String deserializeRatingSet(Context ctx, boolean storeTemplate) throws IOException, RatingException {
private RatingsDocument deserializeRatingSet(Context ctx, boolean storeTemplate) throws IOException {
String formatHeader = ctx.req.getContentType();
//Using placeholder CwmsDTOBase.class since we do not have a RatingSet DTO
//The contentType will match against the standard listing of Formats constants
Expand All @@ -191,33 +193,29 @@ private String deserializeRatingSet(Context ctx, boolean storeTemplate) throws I
}

//Package private for unit testing
String deserializeRatingSet(String body, String contentType, boolean storeTemplate) throws IOException {
String retval;
if (Formats.XML.equals(contentType)) {
retval = body;
} else if (Formats.JSON.equals(contentType)) {
retval = translateJsonToXml(body);
} else {
throw new IOException("Unexpected format:" + contentType);
RatingsDocument deserializeRatingSet(String body, String contentType, boolean storeTemplate) throws IOException {
RatingsDocument retval;
try {
if (Formats.XML.equals(contentType)) {
retval = JsonRatingUtils.readXml(body);
} else if (Formats.JSON.equals(contentType)) {
retval = JsonRatingUtils.readJson(body);
} else {
throw new IOException("Unexpected format:" + contentType);
}
} catch (JsonProcessingException ex) {
throw new IllegalArgumentException("Failed to parse request into a rating set", ex);
}
if (!storeTemplate) {
retval = removeTemplate(retval);
}
return retval;
}

private static String translateJsonToXml(String body) {
String retval;
try {
retval = JsonRatingUtils.jsonToXml(body);
} catch (IOException | TransformerException ex) {
throw new IllegalArgumentException("Failed to translate request into rating spec XML", ex);
retval = removeTemplates(retval);
}
return retval;
}

private String removeTemplate(String xml) {
return xml.replaceAll("(?s)<rating-template.*?</rating-template>", "");
private static RatingsDocument removeTemplates(RatingsDocument ratings) {
return new RatingsDocument.Builder(ratings)
.withRatingTemplates(null)
.build();
}

@OpenApi(
Expand Down Expand Up @@ -588,7 +586,8 @@ public void update(@NotNull Context ctx, @NotNull String ratingId) {
.getOrDefault(true);
boolean replaceBaseCurve = ctx.queryParamAsClass(REPLACE_BASE_CURVE, Boolean.class)
.getOrDefault(false);
String ratingSet = deserializeRatingSet(ctx, storeTemplate);
RatingsDocument ratings = deserializeRatingSet(ctx, storeTemplate);
String ratingSet = JsonRatingUtils.writeXml(ratings);
String datum = ctx.queryParam(DATUM);
VerticalDatum vd = null;
if(datum != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
import cwms.cda.api.errors.CdaError;
import cwms.cda.api.errors.ExceptionTraceSupport;
import cwms.cda.data.dao.JsonRatingUtils;
import cwms.cda.data.dto.rating.document.RatingsDocument;
import cwms.cda.data.dao.RatingDao;
import cwms.cda.data.dao.RatingSetDao;
import cwms.cda.formatters.ContentType;
Expand Down Expand Up @@ -134,7 +135,8 @@ private String getLatestRatingSet(Context ctx, String officeId, String rating, C
ratingSet = ratingDao.retrieveLatestXML(officeId, rating);

if (contentType.toString().equals(Formats.JSONV2)) {
ratingSet = JsonRatingUtils.xmlToJson(ratingSet);
RatingsDocument ratings = JsonRatingUtils.readXml(ratingSet);
ratingSet = JsonRatingUtils.writeJson(ratings);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,15 @@
import com.codahale.metrics.Histogram;
import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.Timer;
import com.fasterxml.jackson.core.JsonProcessingException;
import cwms.cda.api.Controllers;
import cwms.cda.api.errors.CdaError;
import cwms.cda.data.dao.JooqDao;
import cwms.cda.data.dao.JsonRatingUtils;
import cwms.cda.data.dao.RatingTemplateDao;
import cwms.cda.data.dto.rating.RatingTemplate;
import cwms.cda.data.dto.rating.RatingTemplates;
import cwms.cda.data.dto.rating.document.RatingsDocument;
import cwms.cda.formatters.ContentType;
import cwms.cda.formatters.Formats;
import io.javalin.apibuilder.CrudHandler;
Expand All @@ -53,7 +55,6 @@
import java.util.Optional;
import com.google.common.flogger.FluentLogger;
import javax.servlet.http.HttpServletResponse;
import javax.xml.transform.TransformerException;
import org.jetbrains.annotations.NotNull;
import org.jooq.DSLContext;

Expand Down Expand Up @@ -255,13 +256,12 @@ private static String translateToXml(String body, String contentType) {
}

private static String translateJsonToXml(String body) {
String retval;
try {
retval = JsonRatingUtils.jsonToXml(body);
} catch (IOException | TransformerException ex) {
throw new IllegalArgumentException("Failed to translate request into rating spec XML", ex);
RatingsDocument ratings = JsonRatingUtils.readJson(body);
return JsonRatingUtils.writeXml(ratings);
} catch (JsonProcessingException ex) {
throw new IllegalArgumentException("Failed to translate request into rating template XML", ex);
}
return retval;
}

@OpenApi(ignore = true)
Expand Down
Loading
Loading