Some refactoring

Former-commit-id: d24f46e0088ec14a1c887b41f74a629dd968a305
pull/10/head
Jens Pelzetter 2021-03-01 19:51:24 +01:00
parent 84949ba099
commit d2ddfac6e8
4 changed files with 280 additions and 93 deletions

View File

@ -7,8 +7,6 @@ package org.librecms.ui.contentsections;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.libreccm.api.Identifier;
import org.libreccm.api.IdentifierParser;
import org.libreccm.l10n.GlobalizationHelper;
import org.libreccm.security.AuthorizationRequired;
import org.libreccm.security.PermissionChecker;
@ -48,6 +46,7 @@ import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
@ -78,6 +77,9 @@ public class AssetFolderController {
@Inject
private ContentSectionRepository sectionRepo;
@Inject
private ContentSectionsUi sectionsUi;
@Inject
private CurrentUserAssetPermissions currentUserPermissions;
@ -93,9 +95,6 @@ public class AssetFolderController {
@Inject
private GrantedAssetPrivileges grantedPrivileges;
@Inject
private IdentifierParser identifierParser;
@Inject
private Models models;
@ -104,7 +103,7 @@ public class AssetFolderController {
@Inject
private PermissionManager permissionManager;
@Inject
private RoleRepository roleRepo;
@ -138,21 +137,18 @@ public class AssetFolderController {
@QueryParam("firstResult") @DefaultValue("0") final int firstResult,
@QueryParam("maxResults") @DefaultValue("20") final int maxResults
) {
final Optional<ContentSection> sectionResult = retrieveContentSection(
sectionIdentifier
);
final Optional<ContentSection> sectionResult = sectionsUi
.findContentSection(sectionIdentifier);
if (!sectionResult.isPresent()) {
models.put("sectionIdentifier", sectionIdentifier);
return "org/librecms/ui/contentsection/contentsection-not-found.xhtml";
return sectionsUi.showContentSectionNotFound(sectionIdentifier);
}
final ContentSection section = sectionResult.get();
if (!permissionChecker.isPermitted(
AssetPrivileges.EDIT, section.getRootAssetsFolder()
)) {
models.put("sectionidentifier", sectionIdentifier);
return "org/librecms/ui/contentsection/access-denied.xhtml";
sectionsUi.showAccessDenied("sectionIdentifier", sectionIdentifier);
}
contentSectionModel.setSection(section);
@ -170,19 +166,17 @@ public class AssetFolderController {
);
if (folderResult.isPresent()) {
folder = folderResult.get();
assetFolderModel.setBreadcrumbs(buildBreadcrumbs(folderPath));
} else {
models.put("contentSection", section.getLabel());
models.put("folderPath", folderPath);
return "org/librecms/ui/contentsection/assetfolder/asssetfolder-not-found.xhtml";
return showAssetFolderNotFound(section, folderPath);
}
}
if (!permissionChecker.isPermitted(AssetPrivileges.EDIT, folder)) {
models.put("sectionidentifier", sectionIdentifier);
models.put("folderPath", folderPath);
return "org/librecms/ui/contentsection/access-denied.xhtml";
return sectionsUi.showAccessDenied(
"sectionIdentifier", sectionIdentifier,
"folderPath", folderPath
);
}
final List<AssetFolderEntry> folderEntries = folderRepo
@ -246,21 +240,22 @@ public class AssetFolderController {
@PathParam("parentFolderPath") final String parentFolderPath,
@FormParam("folderName") final String folderName
) {
final Optional<ContentSection> sectionResult = retrieveContentSection(
sectionIdentifier
);
final RetrieveResult<ContentSection> sectionResult = sectionsUi
.retrieveContentSection(sectionIdentifier);
if (!sectionResult.isPresent()) {
models.put("sectionIdentifier", sectionIdentifier);
return "org/librecms/ui/contentsection/contentsection-not-found.xhtml";
final ContentSection section;
if (sectionResult.isSuccessful()) {
section = sectionResult.getResult();
} else {
return sectionResult.getFailedResponseTemplate();
}
final ContentSection section = sectionResult.get();
if (!permissionChecker.isPermitted(
AssetPrivileges.EDIT, section.getRootAssetsFolder()
)) {
models.put("sectionidentifier", sectionIdentifier);
return "org/librecms/ui/contentsection/access-denied.xhtml";
return sectionsUi.showAccessDenied(
"sectionIdentifier", sectionIdentifier
);
}
final Folder parentFolder;
@ -285,9 +280,10 @@ public class AssetFolderController {
if (!permissionChecker.isPermitted(
AssetPrivileges.CREATE_NEW, parentFolder
)) {
models.put("sectionidentifier", sectionIdentifier);
models.put("folderPath", parentFolderPath);
return "org/librecms/ui/contentsection/access-denied.xhtml";
return sectionsUi.showAccessDenied(
"sectionIdentifier", sectionIdentifier,
"folderPath", parentFolderPath
);
}
folderManager.createFolder(folderName, parentFolder);
@ -323,15 +319,15 @@ public class AssetFolderController {
@PathParam("role") final String roleParam,
@FormParam("permissions") final List<String> permissions
) {
final Optional<ContentSection> sectionResult = retrieveContentSection(
sectionIdentifier
);
if (!sectionResult.isPresent()) {
models.put("sectionIdentifier", sectionIdentifier);
return "org/librecms/ui/contentsection/contentsection-not-found.xhtml";
}
final ContentSection section = sectionResult.get();
final RetrieveResult<ContentSection> sectionResult = sectionsUi
.retrieveContentSection(sectionIdentifier);
final ContentSection section;
if (sectionResult.isSuccessful()) {
section = sectionResult.getResult();
} else {
return sectionResult.getFailedResponseTemplate();
}
if (!permissionChecker.isPermitted(
AssetPrivileges.EDIT, section.getRootAssetsFolder()
)) {
@ -409,15 +405,14 @@ public class AssetFolderController {
@PathParam("folderPath") final String folderPath,
@FormParam("folderName") final String folderName
) {
final Optional<ContentSection> sectionResult = retrieveContentSection(
sectionIdentifier
);
if (!sectionResult.isPresent()) {
models.put("sectionIdentifier", sectionIdentifier);
return "org/librecms/ui/contentsection/contentsection-not-found.xhtml";
final RetrieveResult<ContentSection> sectionResult = sectionsUi
.retrieveContentSection(sectionIdentifier);
final ContentSection section;
if (sectionResult.isSuccessful()) {
section = sectionResult.getResult();
} else {
return sectionResult.getFailedResponseTemplate();
}
final ContentSection section = sectionResult.get();
if (!permissionChecker.isPermitted(
AssetPrivileges.EDIT, section.getRootAssetsFolder()
)) {
@ -464,30 +459,37 @@ public class AssetFolderController {
);
}
private Optional<ContentSection> retrieveContentSection(
final String sectionIdentifier
// private Optional<ContentSection> retrieveContentSection(
// final String sectionIdentifier
// ) {
// final Identifier identifier = identifierParser.parseIdentifier(
// sectionIdentifier
// );
//
// final Optional<ContentSection> sectionResult;
// switch (identifier.getType()) {
// case ID:
// sectionResult = sectionRepo.findById(
// Long.parseLong(identifier.getIdentifier())
// );
// break;
// case UUID:
// sectionResult = sectionRepo.findByUuid(identifier
// .getIdentifier());
// break;
// default:
// sectionResult = sectionRepo.findByLabel(identifier
// .getIdentifier());
// break;
// }
// return sectionResult;
// }
private String showAssetFolderNotFound(
final ContentSection section, final String folderPath
) {
final Identifier identifier = identifierParser.parseIdentifier(
sectionIdentifier
);
final Optional<ContentSection> sectionResult;
switch (identifier.getType()) {
case ID:
sectionResult = sectionRepo.findById(
Long.parseLong(identifier.getIdentifier())
);
break;
case UUID:
sectionResult = sectionRepo.findByUuid(identifier
.getIdentifier());
break;
default:
sectionResult = sectionRepo.findByLabel(identifier
.getIdentifier());
break;
}
return sectionResult;
models.put("contentSection", section.getLabel());
models.put("folderPath", folderPath);
return "org/librecms/ui/contentsection/assetfolder/asssetfolder-not-found.xhtml";
}
private List<FolderBreadcrumbsModel> buildBreadcrumbs(

View File

@ -251,7 +251,7 @@ public class CategoriesController {
categoryPathParam
);
} else {
return result.getResponseTemplate();
return result.getFailedResponseTemplate();
}
}
@ -303,7 +303,7 @@ public class CategoriesController {
categoryPathParam
);
} else {
return result.getResponseTemplate();
return result.getFailedResponseTemplate();
}
}
@ -352,7 +352,7 @@ public class CategoriesController {
categoryPathParam
);
} else {
return result.getResponseTemplate();
return result.getFailedResponseTemplate();
}
}
@ -404,7 +404,7 @@ public class CategoriesController {
categoryPathParam
);
} else {
return result.getResponseTemplate();
return result.getFailedResponseTemplate();
}
}
@ -458,7 +458,7 @@ public class CategoriesController {
categoryPathParam
);
} else {
return result.getResponseTemplate();
return result.getFailedResponseTemplate();
}
}
@ -511,7 +511,7 @@ public class CategoriesController {
categoryPathParam
);
} else {
return result.getResponseTemplate();
return result.getFailedResponseTemplate();
}
}
@ -549,7 +549,7 @@ public class CategoriesController {
categoryName
);
} else {
return result.getResponseTemplate();
return result.getFailedResponseTemplate();
}
}
@ -604,7 +604,7 @@ public class CategoriesController {
categoryPath
);
} else {
return result.getResponseTemplate();
return result.getFailedResponseTemplate();
}
}
@ -630,7 +630,7 @@ public class CategoriesController {
categoryPath
);
} else {
return result.getResponseTemplate();
return result.getFailedResponseTemplate();
}
}
@ -693,7 +693,7 @@ public class CategoriesController {
categoryPath
);
} else {
return result.getResponseTemplate();
return result.getFailedResponseTemplate();
}
}
@ -730,7 +730,7 @@ public class CategoriesController {
categoryManager.getCategoryPath(parentCategory)
);
} else {
return result.getResponseTemplate();
return result.getFailedResponseTemplate();
}
}
@ -790,7 +790,7 @@ public class CategoriesController {
categoryManager.getCategoryPath(target)
);
} else {
return result.getResponseTemplate();
return result.getFailedResponseTemplate();
}
}
@ -851,7 +851,7 @@ public class CategoriesController {
pathFragment
);
} else {
return result.getResponseTemplate();
return result.getFailedResponseTemplate();
}
}
@ -919,7 +919,7 @@ public class CategoriesController {
categoryManager.getCategoryPath(category)
);
} else {
return result.getResponseTemplate();
return result.getFailedResponseTemplate();
}
}

View File

@ -0,0 +1,123 @@
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package org.librecms.ui.contentsections;
import org.libreccm.api.Identifier;
import org.libreccm.api.IdentifierParser;
import org.librecms.contentsection.ContentSection;
import org.librecms.contentsection.ContentSectionRepository;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.mvc.Models;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
class ContentSectionsUi {
@Inject
private ContentSectionRepository sectionRepo;
@Inject
private IdentifierParser identifierParser;
private Models models;
public Optional<ContentSection> findContentSection(
final String identifierParam
) {
final Identifier sectionIdentifier = identifierParser.parseIdentifier(
identifierParam
);
switch (sectionIdentifier.getType()) {
case ID:
return sectionRepo.findById(
Long.parseLong(
sectionIdentifier.getIdentifier()
)
);
case UUID:
return sectionRepo.findByUuid(
sectionIdentifier.getIdentifier()
);
default:
return sectionRepo.findByLabel(
sectionIdentifier.getIdentifier()
);
}
}
public String showAccessDenied(final String... identifiers) {
if (identifiers.length % 2 != 0) {
throw new IllegalArgumentException(
"The length of the identifiers must be even."
);
}
for (int i = 1; i < identifiers.length; i = +2) {
models.put(identifiers[i - 1], identifiers[i]);
}
return "org/librecms/ui/contentsection/contentsection-not-found.xhtml";
}
public String showAccessDenied(final Map<String, String> identifiers) {
for (final Map.Entry<String, String> entry : identifiers.entrySet()) {
models.put(entry.getKey(), entry.getValue());
}
return "org/librecms/ui/contentsection/access-denied.xhtml";
}
public String showContentSectionNotFound(final String sectionIdentifier) {
models.put("sectionIdentifier", sectionIdentifier);
return "org/librecms/ui/contentsection/contentsection-not-found.xhtml";
}
public RetrieveResult<ContentSection> retrieveContentSection(
final String identifierParam
) {
final Identifier sectionIdentifier = identifierParser.parseIdentifier(
identifierParam
);
final Optional<ContentSection> sectionResult;
switch (sectionIdentifier.getType()) {
case ID:
sectionResult = sectionRepo.findById(
Long.parseLong(
sectionIdentifier.getIdentifier()
)
);
break;
case UUID:
sectionResult = sectionRepo.findByUuid(
sectionIdentifier.getIdentifier()
);
break;
default:
sectionResult = sectionRepo.findByLabel(
sectionIdentifier.getIdentifier()
);
break;
}
if (sectionResult.isPresent()) {
return RetrieveResult.successful(sectionResult.get());
} else {
models.put("sectionIdentifier", sectionIdentifier);
return RetrieveResult.failed(
"org/librecms/ui/contentsection/contentsection-not-found.xhtml"
);
}
}
}

View File

@ -8,22 +8,44 @@ package org.librecms.ui.contentsections;
import java.util.Objects;
/**
* This class can be used by controller methods to either return an entity, for
* example a content section, or the path to an error response if the identity
* for the provided identifier was not found.
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
* @param <T>
* @param <T> The entity class contained by an instance of this class if it was
* retrived successfully.
*/
public class RetrieveResult<T> {
/**
* The retrieved entity if the it was retrieved successfully.
*/
private T result;
private String responseTemplate;
/**
* The path of the response template to show when the entity was <em>no</em>
* retrived successfully.
*/
private String failedResponseTemplate;
/**
* Indicates if the entity was retrieved succesfully.
*/
private boolean successful;
private RetrieveResult() {
}
/**
* Creates a successful {@code RetrieveResult} instance.
*
* @param <R> The type of the retrieved entity.
* @param result The retrieved entity. Can't be null.
*
* @return The new {@code RetrieveResult}.
*/
public static <R> RetrieveResult<R> successful(final R result) {
final RetrieveResult<R> retrieveResult = new RetrieveResult<>();
retrieveResult.setResult(Objects.requireNonNull(result));
@ -31,35 +53,75 @@ public class RetrieveResult<T> {
return retrieveResult;
}
/**
* Creates a failed {@code RetrieveResult} instance.
*
* @param <R> The type of the entity to retrieve.
* @param responseTemplate The template to show.
*
* @return The new {@code RetrieveResult}.
*/
public static <R> RetrieveResult<R> failed(final String responseTemplate) {
final RetrieveResult<R> retrieveResult = new RetrieveResult<>();
retrieveResult.setResponseTemplate(
retrieveResult.setFailedResponseTemplate(
Objects.requireNonNull(responseTemplate)
);
retrieveResult.setSuccessful(false);
return retrieveResult;
}
/**
* Gets the result.
*
* @return The retrieved entity.
*/
public T getResult() {
return result;
}
/**
* Private setter for the result entity.
*
* @param result The retrieved entity.
*/
private void setResult(final T result) {
this.result = result;
}
public String getResponseTemplate() {
return responseTemplate;
/**
* Gets the failed result template.
*
* @return The path of the template to show.
*/
public String getFailedResponseTemplate() {
return failedResponseTemplate;
}
private void setResponseTemplate(final String responseTemplate) {
this.responseTemplate = responseTemplate;
/**
* Private setter for the failed response template.
*
* @param failedResponseTemplate Path of the template to show.
*/
private void setFailedResponseTemplate(final String failedResponseTemplate) {
this.failedResponseTemplate = failedResponseTemplate;
}
/**
* Indicates if the entity was retrieve succesfully.
*
* @return {@code true} if the enity was retrieved successfully,
* {@code false} otherwise.
*/
public boolean isSuccessful() {
return successful;
}
/**
* Private setter for {@link #successful}.
*
* @param successful {@code true} if the enity was retrieved successfully,
* {@code false} otherwise.
*/
private void setSuccessful(final boolean successful) {
this.successful = successful;
}