Skip to content
Draft
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
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@

package cwms.cda.api.rating;

import static com.codahale.metrics.MetricRegistry.name;
import static cwms.cda.api.Controllers.AT;
import static cwms.cda.api.Controllers.BEGIN;
import static cwms.cda.api.Controllers.CREATE;
Expand All @@ -39,8 +38,6 @@
import static cwms.cda.api.Controllers.OFFICE;
import static cwms.cda.api.Controllers.RATING_ID;
import static cwms.cda.api.Controllers.REPLACE_BASE_CURVE;
import static cwms.cda.api.Controllers.RESULTS;
import static cwms.cda.api.Controllers.SIZE;
import static cwms.cda.api.Controllers.STATUS_200;
import static cwms.cda.api.Controllers.STATUS_201;
import static cwms.cda.api.Controllers.STATUS_404;
Expand All @@ -55,12 +52,11 @@
import static cwms.cda.api.Controllers.requiredParam;
import static cwms.cda.data.dao.JooqDao.getDslContext;

import com.codahale.metrics.Histogram;
import com.codahale.metrics.MetricRegistry;
import com.codahale.metrics.Timer;
import cwms.cda.api.BaseCrudHandler;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import cwms.cda.api.Controllers;
import com.google.common.flogger.FluentLogger;
import cwms.cda.api.BaseCrudHandler;
import cwms.cda.api.errors.CdaError;
import cwms.cda.api.errors.ExceptionTraceSupport;
import cwms.cda.data.dao.JsonRatingUtils;
Expand All @@ -79,7 +75,6 @@
import cwms.cda.helpers.DateUtils;
import hec.data.RatingException;
import hec.data.cwmsRating.RatingSet;
import io.javalin.apibuilder.CrudHandler;
import io.javalin.core.util.Header;
import io.javalin.core.validation.JavalinValidation;
import io.javalin.http.Context;
Expand All @@ -92,10 +87,8 @@
import io.javalin.plugin.openapi.annotations.OpenApiResponse;
import java.io.IOException;
import java.time.Instant;
import com.google.common.flogger.FluentLogger;
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 @@ -353,9 +346,17 @@ public void getAll(@NotNull Context ctx) {
end, timezone);

ctx.status(HttpServletResponse.SC_OK);
ctx.result(results);
addDeprecatedContentTypeWarning(ctx, contentType);
updateResultSize(results.length());

byte[] bytes = results.getBytes();
ctx.header(Header.CONTENT_LENGTH, String.valueOf(bytes.length));
ctx.res.getOutputStream().write(bytes);
} catch (IOException e) {
CdaError re = ExceptionTraceSupport.buildError(ctx,
"Failed to process request to retrieve Ratings", e);
logger.atInfo().withCause(e).log("%s", re);
ctx.status(HttpServletResponse.SC_INTERNAL_SERVER_ERROR).json(re);
}
}

Expand Down Expand Up @@ -426,9 +427,16 @@ public void getOne(@NotNull Context ctx, @NotNull String rating) {

String body = getRatingSetString(ctx, method, officeId, rating, beginInstant, endInstant, verticalDatum);
if (body != null) {
ctx.result(body);
ctx.status(HttpCode.OK);
byte[] bytes = body.getBytes();
ctx.header(Header.CONTENT_LENGTH, String.valueOf(bytes.length));
ctx.res.getOutputStream().write(bytes);
}
} catch (IOException e) {
CdaError re = ExceptionTraceSupport.buildError(ctx,
"Failed to process request to retrieve RatingSet", e);
logger.atInfo().withCause(e).log("%s", re);
ctx.status(HttpServletResponse.SC_INTERNAL_SERVER_ERROR).json(re);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
import com.codahale.metrics.Timer;
import cwms.cda.api.Controllers;
import cwms.cda.api.errors.CdaError;
import cwms.cda.api.errors.ExceptionTraceSupport;
import cwms.cda.data.dao.JooqDao;
import cwms.cda.data.dao.RatingSpecDao;
import cwms.cda.data.dto.rating.RatingSpec;
Expand All @@ -49,6 +50,8 @@
import io.javalin.plugin.openapi.annotations.OpenApiRequestBody;
import io.javalin.plugin.openapi.annotations.OpenApiResponse;

import java.io.IOException;
import java.io.OutputStream;
import java.util.Optional;

import com.google.common.flogger.FluentLogger;
Expand Down Expand Up @@ -135,9 +138,17 @@ public void getAll(Context ctx) {
ctx.contentType(contentType.toString());

String result = Formats.format(contentType, ratingSpecs);
ctx.result(result);
requestResultSize.update(result.length());
ctx.status(HttpServletResponse.SC_OK);

byte[] bytes = result.getBytes();
ctx.header(Header.CONTENT_LENGTH, String.valueOf(bytes.length));
ctx.res.getOutputStream().write(bytes);
} catch (IOException e) {
CdaError re = ExceptionTraceSupport.buildError(ctx,
"Failed to process request to retrieve Ratings", e);
logger.atInfo().log("%s%sfor request %s", re, System.lineSeparator(), ctx.fullUrl());
ctx.status(HttpServletResponse.SC_INTERNAL_SERVER_ERROR).json(re);
}

}
Expand All @@ -164,7 +175,7 @@ public void getAll(Context ctx) {
tags = {TAG}
)
@Override
public void getOne(Context ctx, String ratingId) {
public void getOne(Context ctx, @NotNull String ratingId) {
String formatHeader = ctx.header(Header.ACCEPT);
ContentType contentType = Formats.parseHeader(formatHeader, RatingSpec.class);

Expand All @@ -179,17 +190,30 @@ public void getOne(Context ctx, String ratingId) {
if (template.isPresent()) {
String result = Formats.format(contentType, template.get());

ctx.result(result);
ctx.contentType(contentType.toString());

requestResultSize.update(result.length());
ctx.status(HttpServletResponse.SC_OK);

byte[] bytes = result.getBytes();
ctx.header(Header.CONTENT_LENGTH, String.valueOf(bytes.length));
OutputStream os = ctx.res.getOutputStream();
if (os != null) {
os.write(bytes);
} else {
ctx.result(result);
}
} else {
CdaError re = new CdaError("Unable to find Rating Spec based on parameters "
+ "given");
logger.atInfo().log("%s%sfor request %s", re, System.lineSeparator(), ctx.fullUrl());
ctx.status(HttpServletResponse.SC_NOT_FOUND).json(re);
}
} catch (IOException e) {
CdaError re = ExceptionTraceSupport.buildError(ctx,
"Failed to process request to retrieve Ratings", e);
logger.atInfo().log("%s%sfor request %s", re, System.lineSeparator(), ctx.fullUrl());
ctx.status(HttpServletResponse.SC_INTERNAL_SERVER_ERROR).json(re);
}
}

Expand All @@ -215,7 +239,7 @@ protected RatingSpecDao getRatingSpecDao(DSLContext dsl) {
tags = {TAG}
)
@Override
public void create(Context ctx) {
public void create(@NotNull Context ctx) {
try (final Timer.Context ignored = markAndTime(CREATE)) {
DSLContext dsl = getDslContext(ctx);

Expand Down Expand Up @@ -247,7 +271,7 @@ public void create(Context ctx) {

@OpenApi(ignore = true)
@Override
public void update(Context ctx, String locationCode) {
public void update(Context ctx, @NotNull String locationCode) {
ctx.status(HttpServletResponse.SC_NOT_IMPLEMENTED).json(CdaError.notImplemented());
}

Expand All @@ -266,7 +290,7 @@ public void update(Context ctx, String locationCode) {
tags = {TAG}
)
@Override
public void delete(Context ctx, @NotNull String ratingSpecId) {
public void delete(@NotNull Context ctx, @NotNull String ratingSpecId) {
try (final Timer.Context ignored = markAndTime(DELETE)) {
DSLContext dsl = getDslContext(ctx);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,8 +132,15 @@ public void getAll(Context ctx) {
ctx.contentType(contentType.toString());

String result = Formats.format(contentType, ratingTemplates);
ctx.result(result);
requestResultSize.update(result.length());

byte[] bytes = result.getBytes();
ctx.header(Header.CONTENT_LENGTH, String.valueOf(bytes.length));
ctx.res.getOutputStream().write(bytes);
} catch (IOException ex) {
CdaError re = new CdaError("Error while writing response ");
logger.atInfo().log("%s%sfor request %s", re, System.lineSeparator(), ctx.fullUrl());
ctx.status(HttpServletResponse.SC_INTERNAL_SERVER_ERROR).json(re);
}

}
Expand Down Expand Up @@ -164,7 +171,7 @@ private RatingTemplateDao getRatingTemplateDao(DSLContext dsl) {
tags = {TAG}
)
@Override
public void getOne(Context ctx, String templateId) {
public void getOne(Context ctx, @NotNull String templateId) {
String formatHeader = ctx.header(Header.ACCEPT);
ContentType contentType = Formats.parseHeader(formatHeader, RatingTemplate.class);

Expand All @@ -180,17 +187,24 @@ public void getOne(Context ctx, String templateId) {
if (template.isPresent()) {
String result = Formats.format(contentType, template.get());

ctx.result(result);
ctx.contentType(contentType.toString());

requestResultSize.update(result.length());
ctx.status(HttpServletResponse.SC_OK);

byte[] bytes = result.getBytes();
ctx.header(Header.CONTENT_LENGTH, String.valueOf(bytes.length));
ctx.res.getOutputStream().write(bytes);
} else {
CdaError re = new CdaError("Unable to find Rating Template based on "
+ "parameters given");
logger.atInfo().log("%s%sfor request %s", re, System.lineSeparator(), ctx.fullUrl());
ctx.status(HttpServletResponse.SC_NOT_FOUND).json(re);
}
} catch (IOException ex) {
CdaError re = new CdaError("Error while writing response ");
logger.atInfo().log("%s%sfor request %s", re, System.lineSeparator(), ctx.fullUrl());
ctx.status(HttpServletResponse.SC_INTERNAL_SERVER_ERROR).json(re);
}
}

Expand All @@ -210,7 +224,7 @@ public void getOne(Context ctx, String templateId) {
tags = {TAG}
)
@Override
public void create(Context ctx) {
public void create(@NotNull Context ctx) {
try (final Timer.Context ignored = markAndTime(CREATE)){
DSLContext dsl = getDslContext(ctx);

Expand Down Expand Up @@ -252,7 +266,7 @@ private static String translateJsonToXml(String body) {

@OpenApi(ignore = true)
@Override
public void update(Context ctx, String locationCode) {
public void update(@NotNull Context ctx, @NotNull String locationCode) {
ctx.status(HttpServletResponse.SC_NOT_IMPLEMENTED).json(CdaError.notImplemented());
}

Expand All @@ -271,7 +285,7 @@ public void update(Context ctx, String locationCode) {
tags = {TAG}
)
@Override
public void delete(Context ctx, String ratingTemplateId) {
public void delete(@NotNull Context ctx, @NotNull String ratingTemplateId) {
try (final Timer.Context ignored = markAndTime(DELETE)){
DSLContext dsl = getDslContext(ctx);

Expand Down
Loading
Loading