Skip to content

Commit

Permalink
NET-432: refactor Response into Result.
Browse files Browse the repository at this point in the history
  • Loading branch information
msqr committed Feb 1, 2025
1 parent dd77ae5 commit 9fe9dc6
Show file tree
Hide file tree
Showing 41 changed files with 607 additions and 585 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,10 @@
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import net.solarnetwork.domain.Result;
import net.solarnetwork.service.PingTest;
import net.solarnetwork.service.PingTestResult;
import net.solarnetwork.service.PingTestResultDisplay;
import net.solarnetwork.web.jakarta.domain.Response;

/**
* A web controller for running a set of {@link PingTest} tests and returning
Expand Down Expand Up @@ -116,8 +116,8 @@ public PingTest.Result call() throws Exception {

@RequestMapping(value = "", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public Response<PingResults> executePingTest() {
return Response.response(executeTests());
public Result<PingResults> executePingTest() {
return Result.success(executeTests());
}

@RequestMapping(value = "", method = RequestMethod.GET, produces = MediaType.TEXT_HTML_VALUE)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

package net.solarnetwork.central.web.support;

import static net.solarnetwork.domain.Result.error;
import java.security.Principal;
import java.sql.SQLException;
import java.time.DateTimeException;
Expand All @@ -30,10 +31,6 @@
import java.util.Locale;
import java.util.Map;
import java.util.Map.Entry;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.ConstraintViolationException;
import jakarta.validation.Validator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanInstantiationException;
Expand Down Expand Up @@ -63,13 +60,16 @@
import org.springframework.web.multipart.MultipartException;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.ConstraintViolationException;
import jakarta.validation.Validator;
import net.solarnetwork.central.ValidationException;
import net.solarnetwork.central.support.ExceptionUtils;
import net.solarnetwork.central.web.GlobalExceptionRestController;
import net.solarnetwork.domain.Result;
import net.solarnetwork.security.AbstractAuthorizationBuilder;
import net.solarnetwork.util.StringUtils;
import net.solarnetwork.web.jakarta.domain.Response;

/**
* A base class to support web service style controllers.
Expand Down Expand Up @@ -241,11 +241,11 @@ public static String userPrincipalName(WebRequest request) {
@ExceptionHandler(BeanInstantiationException.class)
@ResponseBody
@ResponseStatus(code = HttpStatus.UNPROCESSABLE_ENTITY)
public Response<?> handleBeanInstantiationException(BeanInstantiationException e,
public Result<Void> handleBeanInstantiationException(BeanInstantiationException e,
WebRequest request) {
log.debug("BeanInstantiationException in request {}: {}", requestDescription(request),
e.getMessage(), e);
return new Response<Object>(Boolean.FALSE, "422", "Malformed request data.", null);
return error("422", "Malformed request data.");
}

/**
Expand All @@ -263,10 +263,10 @@ public Response<?> handleBeanInstantiationException(BeanInstantiationException e
@ExceptionHandler(TypeMismatchException.class)
@ResponseBody
@ResponseStatus(code = HttpStatus.UNPROCESSABLE_ENTITY)
public Response<?> handleTypeMismatchException(TypeMismatchException e, WebRequest request,
public Result<Void> handleTypeMismatchException(TypeMismatchException e, WebRequest request,
HttpServletResponse response) {
log.debug("TypeMismatchException in request {}", requestDescription(request), e);
return new Response<Object>(Boolean.FALSE, null, "Illegal argument: " + e.getMessage(), null);
return error(null, "Illegal argument: " + e.getMessage());
}

/**
Expand All @@ -283,10 +283,10 @@ public Response<?> handleTypeMismatchException(TypeMismatchException e, WebReque
@ExceptionHandler(UnsupportedOperationException.class)
@ResponseBody
@ResponseStatus(code = HttpStatus.NOT_FOUND)
public Response<?> handleUnsupportedOperationException(UnsupportedOperationException e,
public Result<Void> handleUnsupportedOperationException(UnsupportedOperationException e,
WebRequest request) {
log.debug("UnsupportedOperationException in request {}", requestDescription(request), e);
return new Response<Object>(Boolean.FALSE, "404", e.getMessage(), null);
return error("404", e.getMessage());
}

/**
Expand All @@ -303,10 +303,9 @@ public Response<?> handleUnsupportedOperationException(UnsupportedOperationExcep
@ExceptionHandler(JsonParseException.class)
@ResponseBody
@ResponseStatus(code = HttpStatus.UNPROCESSABLE_ENTITY)
public Response<?> handleJsonParseException(JsonProcessingException e, WebRequest request) {
public Result<Void> handleJsonParseException(JsonProcessingException e, WebRequest request) {
log.debug("JsonProcessingException in request {}", requestDescription(request), e);
return new Response<Object>(Boolean.FALSE, null, "Malformed JSON: " + e.getOriginalMessage(),
null);
return error(null, "Malformed JSON: " + e.getOriginalMessage());
}

/**
Expand All @@ -322,10 +321,9 @@ public Response<?> handleJsonParseException(JsonProcessingException e, WebReques
@ExceptionHandler(DateTimeParseException.class)
@ResponseBody
@ResponseStatus(code = HttpStatus.UNPROCESSABLE_ENTITY)
public Response<?> handleDateTimeParseException(DateTimeParseException e, WebRequest request) {
public Result<Void> handleDateTimeParseException(DateTimeParseException e, WebRequest request) {
log.debug("DateTimeParseException in request {}", requestDescription(request), e);
return new Response<Object>(Boolean.FALSE, null, "Malformed date string: " + e.getMessage(),
null);
return error(null, "Malformed date string: " + e.getMessage());
}

/**
Expand All @@ -341,9 +339,9 @@ public Response<?> handleDateTimeParseException(DateTimeParseException e, WebReq
@ExceptionHandler(DateTimeException.class)
@ResponseBody
@ResponseStatus(code = HttpStatus.UNPROCESSABLE_ENTITY)
public Response<?> handleDateTimeException(DateTimeException e, WebRequest request) {
public Result<Void> handleDateTimeException(DateTimeException e, WebRequest request) {
log.debug("DateTimeException in request {}", requestDescription(request), e);
return new Response<Object>(Boolean.FALSE, null, "Date exception: " + e.getMessage(), null);
return error(null, "Date exception: " + e.getMessage());
}

/**
Expand All @@ -360,7 +358,7 @@ public Response<?> handleDateTimeException(DateTimeException e, WebRequest reque
@ExceptionHandler(HttpMessageNotReadableException.class)
@ResponseBody
@ResponseStatus(code = HttpStatus.UNPROCESSABLE_ENTITY)
public Response<?> handleHttpMessageNotReadableException(HttpMessageNotReadableException e,
public Result<Void> handleHttpMessageNotReadableException(HttpMessageNotReadableException e,
WebRequest request) {
Throwable t = e.getMostSpecificCause();
if ( t instanceof JsonProcessingException ) {
Expand All @@ -370,7 +368,7 @@ public Response<?> handleHttpMessageNotReadableException(HttpMessageNotReadableE
}
log.warn("HttpMessageNotReadableException in request {}: {}", requestDescription(request),
e.toString());
return new Response<Object>(Boolean.FALSE, null, "Malformed request: " + e.getMessage(), null);
return error(null, "Malformed request: " + e.getMessage());
}

/**
Expand All @@ -388,7 +386,7 @@ public Response<?> handleHttpMessageNotReadableException(HttpMessageNotReadableE
@ExceptionHandler(DataIntegrityViolationException.class)
@ResponseBody
@ResponseStatus(code = HttpStatus.UNPROCESSABLE_ENTITY)
public Response<?> handleDataIntegrityViolationException(DataIntegrityViolationException e,
public Result<Void> handleDataIntegrityViolationException(DataIntegrityViolationException e,
WebRequest request, Locale locale, HttpServletRequest servletRequest) {
log.warn("DataIntegrityViolationException in request {}: {}", requestDescription(request),
e.toString());
Expand Down Expand Up @@ -442,7 +440,7 @@ public Response<?> handleDataIntegrityViolationException(DataIntegrityViolationE
if ( messageSource != null ) {
msg = messageSource.getMessage(msgKey, params, msg, locale);
}
return new Response<Object>(Boolean.FALSE, code, msg, null);
return error(code, msg);
}

/**
Expand All @@ -460,7 +458,7 @@ public Response<?> handleDataIntegrityViolationException(DataIntegrityViolationE
@ExceptionHandler(DataRetrievalFailureException.class)
@ResponseBody
@ResponseStatus(code = HttpStatus.NOT_FOUND)
public Response<?> handleDataRetrievalFailureException(DataRetrievalFailureException e,
public Result<Void> handleDataRetrievalFailureException(DataRetrievalFailureException e,
WebRequest request, Locale locale) {
log.debug("DataRetrievalFailureException in request {}, user [{}]", requestDescription(request),
userPrincipalName(request), e);
Expand All @@ -474,7 +472,7 @@ public Response<?> handleDataRetrievalFailureException(DataRetrievalFailureExcep
msg = messageSource.getMessage(msgKey,
new Object[] { e.getMostSpecificCause().getMessage() }, msg, locale);
}
return new Response<Object>(Boolean.FALSE, code, msg, null);
return error(code, msg);
}

/**
Expand All @@ -492,7 +490,7 @@ public Response<?> handleDataRetrievalFailureException(DataRetrievalFailureExcep
@ExceptionHandler(InvalidDataAccessResourceUsageException.class)
@ResponseBody
@ResponseStatus
public Response<?> handleInvalidDataAccessResourceUsageException(
public Result<Void> handleInvalidDataAccessResourceUsageException(
InvalidDataAccessResourceUsageException e, WebRequest request, Locale locale) {
log.error("InvalidDataAccessResourceUsageException in request {}", requestDescription(request),
e.getMostSpecificCause());
Expand All @@ -503,7 +501,7 @@ public Response<?> handleInvalidDataAccessResourceUsageException(
msg = messageSource.getMessage(msgKey,
new Object[] { e.getMostSpecificCause().getMessage() }, msg, locale);
}
return new Response<Object>(Boolean.FALSE, code, msg, null);
return error(code, msg);
}

/**
Expand Down Expand Up @@ -540,7 +538,7 @@ public Result<Void> handleConstraintViolationException(ConstraintViolationExcept
@ExceptionHandler(BindException.class)
@ResponseBody
@ResponseStatus(HttpStatus.UNPROCESSABLE_ENTITY)
public Result<?> handleBindException(BindException e, WebRequest request, Locale locale) {
public Result<Void> handleBindException(BindException e, WebRequest request, Locale locale) {
log.debug("BindException in request {}: {}", requestDescription(request), e.toString());
return ExceptionUtils.generateErrorsResult(e, "VAL.00004", locale, messageSource);
}
Expand Down Expand Up @@ -575,11 +573,11 @@ private String generateErrorsMessage(Errors e, Locale locale, MessageSource msgS
@ExceptionHandler(InvalidPropertyException.class)
@ResponseBody
@ResponseStatus(HttpStatus.UNPROCESSABLE_ENTITY)
public Result<?> handleInvalidPropertyException(InvalidPropertyException e, WebRequest request,
public Result<Void> handleInvalidPropertyException(InvalidPropertyException e, WebRequest request,
Locale locale) {
log.info("InvalidPropertyException in request {}: {}", requestDescription(request),
e.toString());
return Result.error("VAL.00005", messageSource.getMessage("error.invalidProperty",
return error("VAL.00005", messageSource.getMessage("error.invalidProperty",
new Object[] { e.getMessage() }, "Invalid request syntax", locale));
}

Expand All @@ -597,12 +595,12 @@ public Result<?> handleInvalidPropertyException(InvalidPropertyException e, WebR
@ExceptionHandler(ValidationException.class)
@ResponseBody
@ResponseStatus(code = HttpStatus.UNPROCESSABLE_ENTITY)
public Response<?> handleValidationException(ValidationException e, WebRequest request,
public Result<Void> handleValidationException(ValidationException e, WebRequest request,
Locale locale) {
log.debug("ValidationException in request {}: {}", requestDescription(request), e.toString());
String msg = generateErrorsMessage(e.getErrors(), locale,
e.getMessageSource() != null ? e.getMessageSource() : messageSource);
return new Response<Object>(Boolean.FALSE, null, msg, null);
return error(null, msg);
}

/**
Expand All @@ -618,7 +616,7 @@ public Response<?> handleValidationException(ValidationException e, WebRequest r
@ExceptionHandler(MultipartException.class)
@ResponseBody
@ResponseStatus(code = HttpStatus.UNPROCESSABLE_ENTITY)
public Response<?> handleMultipartException(MultipartException e, WebRequest request) {
public Result<Void> handleMultipartException(MultipartException e, WebRequest request) {
log.info("MultipartException in request {}; user [{}]: {}", requestDescription(request),
userPrincipalName(request), e.toString());
StringBuilder buf = new StringBuilder();
Expand All @@ -627,7 +625,7 @@ public Response<?> handleMultipartException(MultipartException e, WebRequest req
if ( msg != null && !msg.isEmpty() ) {
buf.append(": ").append(msg);
}
return new Response<Object>(Boolean.FALSE, "422", buf.toString(), null);
return error("422", buf.toString());
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import net.solarnetwork.web.jakarta.domain.Response;
import net.solarnetwork.domain.Result;

/**
* Web controller for "are you there" type requests.
Expand All @@ -41,10 +41,10 @@ public class PingController {
* @return map of properties
*/
@RequestMapping("/ping")
public Response<Map<String, ?>> ping() {
public Result<Map<String, ?>> ping() {
Map<String, Object> data = new LinkedHashMap<>();
data.put("allGood", true);
return Response.response(data);
return Result.success(data);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@
import net.solarnetwork.central.security.AuthenticatedNode;
import net.solarnetwork.codec.JsonUtils;
import net.solarnetwork.domain.InstructionStatus.InstructionState;
import net.solarnetwork.domain.Result;
import net.solarnetwork.domain.datum.Datum;
import net.solarnetwork.domain.datum.StreamDatum;
import net.solarnetwork.web.jakarta.domain.Response;

/**
* JSON implementation of bulk upload service.
Expand All @@ -62,8 +62,8 @@
* @version 3.3
*/
@Controller
@RequestMapping(value = { "/solarin/bulkCollector.do",
"/solarin/u/bulkCollector.do" }, consumes = "application/json")
@RequestMapping(value = { "/solarin/bulkCollector.do", "/solarin/u/bulkCollector.do" },
consumes = "application/json")
public class BulkJsonDataCollector extends AbstractDataCollector {

/** The JSON field name for an "object type". */
Expand Down Expand Up @@ -119,9 +119,9 @@ public BulkJsonDataCollector(DataCollectorBiz dataCollectorBiz, SolarNodeDao sol
*/
@ExceptionHandler(RuntimeException.class)
@ResponseBody
public Response<?> handleRuntimeException(RuntimeException e, HttpServletResponse response) {
public Result<?> handleRuntimeException(RuntimeException e, HttpServletResponse response) {
log.error("RuntimeException in {} controller", getClass().getSimpleName(), e);
return new Response<Object>(Boolean.FALSE, null, "Internal error", null);
return new Result<Object>(Boolean.FALSE, null, "Internal error", null);
}

/**
Expand All @@ -145,7 +145,7 @@ public Response<?> handleRuntimeException(RuntimeException e, HttpServletRespons
*/
@ResponseBody
@RequestMapping(method = RequestMethod.POST)
public Response<BulkUploadResult> postData(
public Result<BulkUploadResult> postData(
@RequestHeader(value = "Content-Encoding", required = false) String encoding, InputStream in,
Model model) throws IOException {
AuthenticatedNode authNode = getAuthenticatedNode(true);
Expand Down Expand Up @@ -234,7 +234,7 @@ public Response<BulkUploadResult> postData(
}
}

return new Response<BulkUploadResult>(result);
return new Result<BulkUploadResult>(result);
}

private Object handleNode(JsonNode node) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

package net.solarnetwork.central.in.web;

import static net.solarnetwork.domain.Result.error;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Expand All @@ -42,7 +43,6 @@
import net.solarnetwork.central.dao.EntityMatch;
import net.solarnetwork.central.in.biz.DataCollectorBiz;
import net.solarnetwork.central.support.SourceLocationFilter;
import net.solarnetwork.web.jakarta.domain.Response;

/**
* Web access to PriceLocation data.
Expand Down Expand Up @@ -135,8 +135,7 @@ public void initBinder(WebDataBinder binder) {
@ExceptionHandler({ BindException.class, RuntimeException.class })
public ModelAndView handleRuntimeException(Exception e) {
log.error("BindException in {} controller", getClass().getSimpleName(), e);
ModelAndView mv = new ModelAndView(getViewName(), MODEL_KEY_RESULT,
new Response<Object>(false, null, e.getMessage(), null));
ModelAndView mv = new ModelAndView(getViewName(), MODEL_KEY_RESULT, error(null, e.getMessage()));
return mv;
}

Expand All @@ -149,8 +148,8 @@ public ModelAndView handleRuntimeException(Exception e) {
* the model
* @return the result view name
*/
@RequestMapping(method = RequestMethod.GET, value = { "/solarin/locationSearch.*",
"/solarin/u/locationSearch.*" })
@RequestMapping(method = RequestMethod.GET,
value = { "/solarin/locationSearch.*", "/solarin/u/locationSearch.*" })
public String searchForLocations(@Valid GenericSourceLocationFilter criteria, Model model) {
List<? extends EntityMatch> matches = getDataCollectorBiz()
.findLocations(criteria.getLocation());
Expand Down
Loading

0 comments on commit 9fe9dc6

Please sign in to comment.