Some bugfixes for the category model

master
Jens Pelzetter 2023-05-20 18:52:44 +02:00
parent e228dc98ec
commit 5089929d00
5 changed files with 138 additions and 115 deletions

View File

@ -66,7 +66,6 @@ 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;
@ -247,7 +246,7 @@ public class PagesController {
final Versions versions = generateFromPreviewParam(preview); final Versions versions = generateFromPreviewParam(preview);
final String language = determineLanguage(category, versions); final String language = determineLanguage(category, versions);
initPageUrlModel(uriInfo); pageUrlModel.init(uriInfo);
final String indexPage = String.format( final String indexPage = String.format(
"/index.%s.html%s", "/index.%s.html%s",
@ -278,7 +277,7 @@ public class PagesController {
final Versions versions = generateFromPreviewParam(preview); final Versions versions = generateFromPreviewParam(preview);
final String language = determineLanguage(category, versions); final String language = determineLanguage(category, versions);
initPageUrlModel(uriInfo); pageUrlModel.init(uriInfo);
final String itemPage = String.format( final String itemPage = String.format(
"/%s.%s.html%s", "/%s.%s.html%s",
@ -310,7 +309,7 @@ public class PagesController {
final Versions versions = generateFromPreviewParam(preview); final Versions versions = generateFromPreviewParam(preview);
final String language = determineLanguage(category, itemName, versions); final String language = determineLanguage(category, itemName, versions);
initPageUrlModel(uriInfo); pageUrlModel.init(uriInfo);
final String itemPage = String.format( final String itemPage = String.format(
"/%s.%s.html", itemName, language "/%s.%s.html", itemName, language
@ -418,7 +417,7 @@ public class PagesController {
final Versions versions = generateFromPreviewParam(preview); final Versions versions = generateFromPreviewParam(preview);
final String language = determineLanguage(category, versions); final String language = determineLanguage(category, versions);
initPageUrlModel(uriInfo); pageUrlModel.init(uriInfo);
final String redirectTo; final String redirectTo;
if (uriInfo.getPath().endsWith("/")) { if (uriInfo.getPath().endsWith("/")) {
@ -474,7 +473,7 @@ public class PagesController {
final Versions versions = generateFromPreviewParam(preview); final Versions versions = generateFromPreviewParam(preview);
final String language = determineLanguage(category, versions); final String language = determineLanguage(category, versions);
initPageUrlModel(uriInfo); pageUrlModel.init(uriInfo);
final String redirectTo; final String redirectTo;
if (uriInfo.getPath().endsWith("/")) { if (uriInfo.getPath().endsWith("/")) {
@ -550,7 +549,7 @@ public class PagesController {
.sorted() .sorted()
.collect(Collectors.toList()) .collect(Collectors.toList())
); );
initPageUrlModel(uriInfo); pageUrlModel.init(uriInfo);
siteInfoModel.setDomain(site.getDomainOfSite()); siteInfoModel.setDomain(site.getDomainOfSite());
siteInfoModel.setHost(domain); siteInfoModel.setHost(domain);
siteInfoModel.setName( siteInfoModel.setName(
@ -835,62 +834,60 @@ public class PagesController {
} }
} }
private void initPageUrlModel(final UriInfo uriInfo) { // private void pageUrlModel.init(final UriInfo uriInfo) {
pageUrlModel.setBasePath(uriInfo.getBaseUri().toString()); // pageUrlModel.setBasePath(uriInfo.getBaseUri().toString());
pageUrlModel.setBaseUri(uriInfo.getBaseUri()); // pageUrlModel.setBaseUri(uriInfo.getBaseUri());
pageUrlModel.setHost(uriInfo.getRequestUri().getHost()); // pageUrlModel.setHost(uriInfo.getRequestUri().getHost());
//
final List<PathSegment> pathSegments = uriInfo.getPathSegments(); // final List<PathSegment> pathSegments = uriInfo.getPathSegments();
if (pathSegments.isEmpty()) { // if (pathSegments.isEmpty()) {
throw new IllegalArgumentException("No page segements available."); // throw new IllegalArgumentException("No page segements available.");
} // }
pageUrlModel.setPath( // pageUrlModel.setPath(
pathSegments // pathSegments
.subList(0, pathSegments.size()) // .subList(0, pathSegments.size())
.stream() // .stream()
.map(PathSegment::getPath) // .map(PathSegment::getPath)
.collect(Collectors.joining("/")) // .collect(Collectors.joining("/"))
); // );
final String pageSegment = pathSegments // final String pageSegment = pathSegments
.get(pathSegments.size() - 1) // .get(pathSegments.size() - 1)
.getPath(); // .getPath();
final String[] pageTokens = pageSegment.split("\\."); // final String[] pageTokens = pageSegment.split("\\.");
if (pageTokens.length != 3) { // if (pageTokens.length != 3) {
throw new IllegalArgumentException( // throw new IllegalArgumentException(
String.format( // String.format(
"Unexpected number of tokens for page segement of path." // "Unexpected number of tokens for page segement of path."
+ "Expected 3 tokens, separated by '.', but got %d " // + "Expected 3 tokens, separated by '.', but got %d "
+ "tokens.", // + "tokens.",
pageTokens.length // pageTokens.length
) // )
); // );
} // }
final String pageName = pageTokens[0]; // final String pageName = pageTokens[0];
final String pageLocale = pageTokens[1]; // final String pageLocale = pageTokens[1];
final String pageFormat = pageTokens[2]; // final String pageFormat = pageTokens[2];
//
pageUrlModel.setPageName(pageName); // pageUrlModel.setPageName(pageName);
pageUrlModel.setPageLocale(pageLocale); // pageUrlModel.setPageLocale(pageLocale);
pageUrlModel.setPageFormat(pageFormat); // 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()); // pageUrlModel.setQueryParameters(
pageUrlModel.setQueryParameters( // uriInfo
uriInfo // .getQueryParameters()
.getQueryParameters() // .entrySet()
.entrySet() // .stream()
.stream() // .collect(
.collect( // Collectors.toMap(
Collectors.toMap( // entry -> entry.getKey(),
entry -> entry.getKey(), // entry -> entry.getValue().get(0)
entry -> entry.getValue().get(0) // )
) // )
) // );
); // }
}
/** /**
* Encapsulate the result of converting the value of the {@code preview} * Encapsulate the result of converting the value of the {@code preview}
* query parameter. * query parameter.

View File

@ -153,12 +153,14 @@ public class CategoryModel implements Serializable {
fromCategory.getDescription()) fromCategory.getDescription())
); );
node.setName(fromCategory.getName()); node.setName(fromCategory.getName());
node.setVisible(fromCategory.isVisible());
node.setSelected(fromCategory.getUuid().equals(category.getUuid())); node.setSelected(fromCategory.getUuid().equals(category.getUuid()));
node.setParentCategory(parent); node.setParentCategory(parent);
node.setSubCategories( node.setSubCategories(
fromCategory fromCategory
.getSubCategories() .getSubCategories()
.stream() .stream()
.filter(cat -> !cat.isAbstractCategory())
.sorted(Comparator.comparing(Category::getCategoryOrder)) .sorted(Comparator.comparing(Category::getCategoryOrder))
.map(cat -> buildTreeNode(cat, node)) .map(cat -> buildTreeNode(cat, node))
.collect(Collectors.toList()) .collect(Collectors.toList())

View File

@ -38,6 +38,8 @@ public class CategoryTreeNode {
private String categoryPath; private String categoryPath;
private boolean visible;
private boolean selected; private boolean selected;
private boolean subCategorySelected; private boolean subCategorySelected;
@ -96,6 +98,14 @@ public class CategoryTreeNode {
this.subCategories = new ArrayList<>(subCategories); this.subCategories = new ArrayList<>(subCategories);
} }
public boolean isVisible() {
return visible;
}
public void setVisible(boolean visible) {
this.visible = visible;
}
public boolean isSelected() { public boolean isSelected() {
return selected; return selected;
} }
@ -104,7 +114,6 @@ public class CategoryTreeNode {
this.selected = selected; this.selected = selected;
} }
public CategoryTreeNode getParentCategory() { public CategoryTreeNode getParentCategory() {
return parentCategory; return parentCategory;
} }
@ -117,7 +126,6 @@ public class CategoryTreeNode {
return subCategorySelected; return subCategorySelected;
} }
protected void setSubCategorySelected(final boolean subCategorySelected) { protected void setSubCategorySelected(final boolean subCategorySelected) {
this.subCategorySelected = subCategorySelected; this.subCategorySelected = subCategorySelected;
} }

View File

@ -21,12 +21,15 @@ package org.librecms.pages.models;
import java.net.URI; import java.net.URI;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; 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.PathSegment;
import javax.ws.rs.core.UriBuilder; import javax.ws.rs.core.UriBuilder;
import javax.ws.rs.core.UriInfo;
/** /**
* Model initialized by the Pages application containing information about the * Model initialized by the Pages application containing information about the
@ -62,78 +65,91 @@ public class PageUrlModel {
queryParameters = new HashMap<>(); queryParameters = new HashMap<>();
} }
public String getProtocol() { public void init(final UriInfo uriInfo) {
return protocol; basePath = uriInfo.getBaseUri().toString();
baseUri = uriInfo.getBaseUri();
host = uriInfo.getRequestUri().getHost();
final List<PathSegment> pathSegments = uriInfo.getPathSegments();
if (pathSegments.isEmpty()) {
throw new IllegalArgumentException("No page segements available.");
}
path = 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
)
);
}
pageName = pageTokens[0];
pageLocale = pageTokens[1];
pageFormat = pageTokens[2];
path = uriInfo.getPath();
port = uriInfo.getRequestUri().getPort();
protocol = uriInfo.getRequestUri().getScheme();
queryParameters.putAll(
uriInfo
.getQueryParameters()
.entrySet()
.stream()
.collect(
Collectors.toMap(
entry -> entry.getKey(),
entry -> entry.getValue().get(0)
)
)
);
} }
public void setProtocol(final String protocol) { public String getProtocol() {
this.protocol = protocol; return protocol;
} }
public String getHost() { public String getHost() {
return host; return host;
} }
public void setHost(final String host) {
this.host = host;
}
public int getPort() { public int getPort() {
return port; return port;
} }
public void setPort(final int port) {
this.port = port;
}
public URI getBaseUri() { public URI getBaseUri() {
return baseUri; return baseUri;
} }
public void setBaseUri(final URI baseUri) {
this.baseUri = baseUri;
}
public String getBasePath() { public String getBasePath() {
return basePath; return basePath;
} }
public void setBasePath(final String basePath) {
this.basePath = basePath;
}
public String getPath() { public String getPath() {
return path; return path;
} }
public void setPath(final String path) {
this.path = path;
}
public String getPageName() { public String getPageName() {
return pageName; return pageName;
} }
public void setPageName(String pageName) {
this.pageName = pageName;
}
public String getPageLocale() { public String getPageLocale() {
return pageLocale; return pageLocale;
} }
public void setPageLocale(String pageLocale) {
this.pageLocale = pageLocale;
}
public String getPageFormat() { public String getPageFormat() {
return pageFormat; return pageFormat;
} }
public void setPageFormat(String pageFormat) {
this.pageFormat = pageFormat;
}
public Map<String, String> getQueryParameters() { public Map<String, String> getQueryParameters() {
return Collections.unmodifiableMap(queryParameters); return Collections.unmodifiableMap(queryParameters);
} }