Some bugfixes and improvements for the PageUrlModel

master
Jens Pelzetter 2023-05-15 19:17:52 +02:00
parent 7e023cfaa9
commit e228dc98ec
2 changed files with 129 additions and 7 deletions

View File

@ -66,6 +66,7 @@ import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam; import javax.ws.rs.QueryParam;
import javax.ws.rs.WebApplicationException; import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Context; import javax.ws.rs.core.Context;
import javax.ws.rs.core.PathSegment;
import javax.ws.rs.core.Response; import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo; import javax.ws.rs.core.UriInfo;
@ -835,7 +836,44 @@ public class PagesController {
} }
private void initPageUrlModel(final UriInfo uriInfo) { private void initPageUrlModel(final UriInfo uriInfo) {
pageUrlModel.setBasePath(uriInfo.getBaseUri().toString());
pageUrlModel.setBaseUri(uriInfo.getBaseUri());
pageUrlModel.setHost(uriInfo.getRequestUri().getHost()); pageUrlModel.setHost(uriInfo.getRequestUri().getHost());
final List<PathSegment> pathSegments = uriInfo.getPathSegments();
if (pathSegments.isEmpty()) {
throw new IllegalArgumentException("No page segements available.");
}
pageUrlModel.setPath(
pathSegments
.subList(0, pathSegments.size())
.stream()
.map(PathSegment::getPath)
.collect(Collectors.joining("/"))
);
final String pageSegment = pathSegments
.get(pathSegments.size() - 1)
.getPath();
final String[] pageTokens = pageSegment.split("\\.");
if (pageTokens.length != 3) {
throw new IllegalArgumentException(
String.format(
"Unexpected number of tokens for page segement of path."
+ "Expected 3 tokens, separated by '.', but got %d "
+ "tokens.",
pageTokens.length
)
);
}
final String pageName = pageTokens[0];
final String pageLocale = pageTokens[1];
final String pageFormat = pageTokens[2];
pageUrlModel.setPageName(pageName);
pageUrlModel.setPageLocale(pageLocale);
pageUrlModel.setPageFormat(pageFormat);
pageUrlModel.setPath(uriInfo.getPath()); pageUrlModel.setPath(uriInfo.getPath());
pageUrlModel.setPort(uriInfo.getRequestUri().getPort()); pageUrlModel.setPort(uriInfo.getRequestUri().getPort());
pageUrlModel.setProtocol(uriInfo.getRequestUri().getScheme()); pageUrlModel.setProtocol(uriInfo.getRequestUri().getScheme());

View File

@ -18,6 +18,7 @@
*/ */
package org.librecms.pages.models; package org.librecms.pages.models;
import java.net.URI;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -25,6 +26,7 @@ import java.util.stream.Collectors;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
import javax.inject.Named; import javax.inject.Named;
import javax.ws.rs.core.UriBuilder;
/** /**
* Model initialized by the Pages application containing information about the * Model initialized by the Pages application containing information about the
@ -42,10 +44,24 @@ public class PageUrlModel {
private int port; private int port;
private URI baseUri;
private String basePath;
private String path; private String path;
private String pageName;
private String pageLocale;
private String pageFormat;
private Map<String, String> queryParameters; private Map<String, String> queryParameters;
public PageUrlModel() {
queryParameters = new HashMap<>();
}
public String getProtocol() { public String getProtocol() {
return protocol; return protocol;
} }
@ -70,6 +86,22 @@ public class PageUrlModel {
this.port = port; this.port = port;
} }
public URI getBaseUri() {
return baseUri;
}
public void setBaseUri(final URI baseUri) {
this.baseUri = baseUri;
}
public String getBasePath() {
return basePath;
}
public void setBasePath(final String basePath) {
this.basePath = basePath;
}
public String getPath() { public String getPath() {
return path; return path;
} }
@ -78,8 +110,28 @@ public class PageUrlModel {
this.path = path; this.path = path;
} }
public PageUrlModel() { public String getPageName() {
queryParameters = new HashMap<>(); return pageName;
}
public void setPageName(String pageName) {
this.pageName = pageName;
}
public String getPageLocale() {
return pageLocale;
}
public void setPageLocale(String pageLocale) {
this.pageLocale = pageLocale;
}
public String getPageFormat() {
return pageFormat;
}
public void setPageFormat(String pageFormat) {
this.pageFormat = pageFormat;
} }
public Map<String, String> getQueryParameters() { public Map<String, String> getQueryParameters() {
@ -94,6 +146,38 @@ public class PageUrlModel {
this.queryParameters = new HashMap<>(queryParameters); this.queryParameters = new HashMap<>(queryParameters);
} }
public String getPageUrl() {
final UriBuilder uriBuilder = UriBuilder
.fromUri(baseUri)
.path(path)
.path(String.format("%s.%s.%s", pageName, pageLocale, pageFormat));
for(Map.Entry<String, String> parameter : queryParameters.entrySet()) {
uriBuilder.queryParam(
parameter.getKey(),
parameter.getValue()
);
}
return uriBuilder.toString();
}
public String getPageUrl(final String locale) {
final UriBuilder uriBuilder = UriBuilder
.fromUri(baseUri)
.path(path)
.path(String.format("%s.%s.%s", pageName, locale, pageFormat));
for(Map.Entry<String, String> parameter : queryParameters.entrySet()) {
uriBuilder.queryParam(
parameter.getKey(),
parameter.getValue()
);
}
return uriBuilder.build().toString();
}
public String getQueryString() { public String getQueryString() {
if (queryParameters == null || queryParameters.isEmpty()) { if (queryParameters == null || queryParameters.isEmpty()) {
return ""; return "";