Skip to content

Commit

Permalink
Add and adjust methods to use HtmxResponseHeader instead of String to…
Browse files Browse the repository at this point in the history
… set a header
  • Loading branch information
xhaggi committed May 2, 2024
1 parent 381de86 commit eb12958
Showing 1 changed file with 25 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -59,106 +59,110 @@ private void setHxLocation(HttpServletResponse response, Method method) {
if (methodAnnotation != null) {
var location = convertToLocation(methodAnnotation);
if (location.hasContextData()) {
setHeaderJsonValue(response, HtmxResponseHeader.HX_LOCATION.getValue(), location);
setHeaderJsonValue(response, HtmxResponseHeader.HX_LOCATION, location);
} else {
response.setHeader(HtmxResponseHeader.HX_LOCATION.getValue(), location.getPath());
setHeader(response, HtmxResponseHeader.HX_LOCATION, location.getPath());
}
}
}

private void setHxPushUrl(HttpServletResponse response, Method method) {
HxPushUrl methodAnnotation = AnnotatedElementUtils.findMergedAnnotation(method, HxPushUrl.class);
if (methodAnnotation != null) {
response.setHeader(HX_PUSH_URL.getValue(), methodAnnotation.value());
setHeader(response, HX_PUSH_URL, methodAnnotation.value());
}
}

private void setHxRedirect(HttpServletResponse response, Method method) {
HxRedirect methodAnnotation = AnnotatedElementUtils.findMergedAnnotation(method, HxRedirect.class);
if (methodAnnotation != null) {
response.setHeader(HX_REDIRECT.getValue(), methodAnnotation.value());
setHeader(response, HX_REDIRECT, methodAnnotation.value());
}
}

private void setHxReplaceUrl(HttpServletResponse response, Method method) {
HxReplaceUrl methodAnnotation = AnnotatedElementUtils.findMergedAnnotation(method, HxReplaceUrl.class);
if (methodAnnotation != null) {
response.setHeader(HX_REPLACE_URL.getValue(), methodAnnotation.value());
setHeader(response, HX_REPLACE_URL, methodAnnotation.value());
}
}

private void setHxReswap(HttpServletResponse response, Method method) {
HxReswap methodAnnotation = AnnotatedElementUtils.findMergedAnnotation(method, HxReswap.class);
if (methodAnnotation != null) {
response.setHeader(HX_RESWAP.getValue(), convertToReswap(methodAnnotation));
setHeader(response, HX_RESWAP, convertToReswap(methodAnnotation));
}
}

private void setHxRetarget(HttpServletResponse response, Method method) {
HxRetarget methodAnnotation = AnnotatedElementUtils.findMergedAnnotation(method, HxRetarget.class);
if (methodAnnotation != null) {
response.setHeader(HX_RETARGET.getValue(), methodAnnotation.value());
setHeader(response, HX_RETARGET, methodAnnotation.value());
}
}

private void setHxReselect(HttpServletResponse response, Method method) {
HxReselect methodAnnotation = AnnotatedElementUtils.findMergedAnnotation(method, HxReselect.class);
if (methodAnnotation != null) {
response.setHeader(HX_RESELECT.getValue(), methodAnnotation.value());
setHeader(response, HX_RESELECT, methodAnnotation.value());
}
}

private void setHxTrigger(HttpServletResponse response, Method method) {
HxTrigger methodAnnotation = AnnotatedElementUtils.findMergedAnnotation(method, HxTrigger.class);
if (methodAnnotation != null) {
setHeader(response, getHeaderName(methodAnnotation.lifecycle()), methodAnnotation.value());
setHeader(response, convertToHeader(methodAnnotation.lifecycle()), methodAnnotation.value());
}
}

private void setHxTriggerAfterSettle(HttpServletResponse response, Method method) {
HxTriggerAfterSettle methodAnnotation = AnnotatedElementUtils.findMergedAnnotation(method, HxTriggerAfterSettle.class);
if (methodAnnotation != null) {
setHeader(response, HtmxResponseHeader.HX_TRIGGER_AFTER_SETTLE.getValue(), methodAnnotation.value());
setHeader(response, HtmxResponseHeader.HX_TRIGGER_AFTER_SETTLE, methodAnnotation.value());
}
}

private void setHxTriggerAfterSwap(HttpServletResponse response, Method method) {
HxTriggerAfterSwap methodAnnotation = AnnotatedElementUtils.findMergedAnnotation(method, HxTriggerAfterSwap.class);
if (methodAnnotation != null) {
setHeader(response, HtmxResponseHeader.HX_TRIGGER_AFTER_SWAP.getValue(), methodAnnotation.value());
setHeader(response, HtmxResponseHeader.HX_TRIGGER_AFTER_SWAP, methodAnnotation.value());
}
}

private void setHxRefresh(HttpServletResponse response, Method method) {
HxRefresh methodAnnotation = AnnotatedElementUtils.findMergedAnnotation(method, HxRefresh.class);
if (methodAnnotation != null) {
response.setHeader(HX_REFRESH.getValue(), "true");
setHeader(response, HX_REFRESH, HtmxValue.TRUE);
}
}

private String getHeaderName(HxTriggerLifecycle lifecycle) {
private HtmxResponseHeader convertToHeader(HxTriggerLifecycle lifecycle) {
switch (lifecycle) {
case RECEIVE:
return HX_TRIGGER.getValue();
return HX_TRIGGER;
case SETTLE:
return HX_TRIGGER_AFTER_SETTLE.getValue();
return HX_TRIGGER_AFTER_SETTLE;
case SWAP:
return HX_TRIGGER_AFTER_SWAP.getValue();
return HX_TRIGGER_AFTER_SWAP;
default:
throw new IllegalArgumentException("Unknown lifecycle:" + lifecycle);
}
}

private void setHeaderJsonValue(HttpServletResponse response, String name, Object value) {
private void setHeaderJsonValue(HttpServletResponse response, HtmxResponseHeader header, Object value) {
try {
response.setHeader(name, objectMapper.writeValueAsString(value));
response.setHeader(header.getValue(), objectMapper.writeValueAsString(value));
} catch (JsonProcessingException e) {
throw new IllegalArgumentException("Unable to set header " + name + " to " + value, e);
throw new IllegalArgumentException("Unable to set header " + header.getValue() + " to " + value, e);
}
}

private void setHeader(HttpServletResponse response, String name, String[] values) {
response.setHeader(name, String.join(",", values));
private void setHeader(HttpServletResponse response, HtmxResponseHeader header, String value) {
response.setHeader(header.getValue(), value);
}

private void setHeader(HttpServletResponse response, HtmxResponseHeader header, String[] values) {
response.setHeader(header.getValue(), String.join(",", values));
}

private HtmxLocation convertToLocation(HxLocation annotation) {
Expand Down

0 comments on commit eb12958

Please sign in to comment.