From 80cf9143eedb9218aee008d87805943778a52a9b Mon Sep 17 00:00:00 2001 From: Jens Pelzetter Date: Thu, 22 Jul 2021 21:17:26 +0200 Subject: [PATCH] Bugfixes for RelatedInfoStep --- .../assets/ExternalAudioAssetEditStep.java | 34 ++----- .../relatedinfo/AttachmentListDto.java | 1 - .../{ => relatedinfo}/ItemAttachmentDto.java | 17 +++- .../relatedinfo/LinkDetailsModel.java | 20 +++++ .../relatedinfo/RelatedInfoStep.java | 89 +++++++++++++++---- .../documents/relatedinfo-link-details.xhtml | 52 +++-------- .../documents/relatedinfo.xhtml | 4 +- .../ui/DefaultAuthoringStepsBundle.properties | 1 + .../DefaultAuthoringStepsBundle_de.properties | 1 + .../content-sections/cms-related-link.ts | 66 +++++++++++--- .../main/java/org/libreccm/ui/BaseUrl.java | 48 ++++++++++ 11 files changed, 234 insertions(+), 99 deletions(-) rename ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/{ => relatedinfo}/ItemAttachmentDto.java (87%) create mode 100644 ccm-core/src/main/java/org/libreccm/ui/BaseUrl.java diff --git a/ccm-cms/src/main/java/org/librecms/ui/contentsections/assets/ExternalAudioAssetEditStep.java b/ccm-cms/src/main/java/org/librecms/ui/contentsections/assets/ExternalAudioAssetEditStep.java index 42dc51e67..5ea51c1e4 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/contentsections/assets/ExternalAudioAssetEditStep.java +++ b/ccm-cms/src/main/java/org/librecms/ui/contentsections/assets/ExternalAudioAssetEditStep.java @@ -21,6 +21,7 @@ package org.librecms.ui.contentsections.assets; import org.libreccm.api.Identifier; import org.libreccm.api.IdentifierParser; import org.libreccm.security.AuthorizationRequired; +import org.libreccm.ui.BaseUrl; import org.librecms.assets.ExternalAudioAsset; import org.librecms.assets.LegalMetadata; import org.librecms.contentsection.AssetRepository; @@ -69,6 +70,9 @@ public class ExternalAudioAssetEditStep extends BookmarkEditStep { @Inject private AssetUi assetUi; + @Inject + private BaseUrl baseUrl; + @Inject private ExternalAudioAssetEditStepModel editStepModel; @@ -80,7 +84,7 @@ public class ExternalAudioAssetEditStep extends BookmarkEditStep { @Inject private Models models; - + @Override public Class getStepClass() { return ExternalAudioAssetEditStep.class; @@ -96,16 +100,7 @@ public class ExternalAudioAssetEditStep extends BookmarkEditStep { getExternalAudioAsset().getLegalMetadata() ); - final StringBuilder baseUrlBuilder = new StringBuilder(); - editStepModel.setBaseUrl( - baseUrlBuilder - .append(request.getScheme()) - .append("://") - .append(request.getServerName()) - .append(addServerPortToBaseUrl()) - .append(addContextPathToBaseUrl()) - .toString() - ); + editStepModel.setBaseUrl(baseUrl.getBaseUrl(request)); } else { throw new AssetNotFoundException( assetUi.showAssetNotFound( @@ -229,21 +224,4 @@ public class ExternalAudioAssetEditStep extends BookmarkEditStep { return "org/librecms/ui/contentsection/assets/external-audio-asset/legal-metadata-not-found.xhtml"; } - private String addServerPortToBaseUrl() { - if (request.getServerPort() == 80 || request.getServerPort() == 443) { - return ""; - } else { - return String.format(":%d", request.getServerPort()); - } - } - - private String addContextPathToBaseUrl() { - if (request.getServletContext().getContextPath() == null - || request.getServletContext().getContextPath().isEmpty()) { - return "/"; - } else { - return request.getServletContext().getContextPath(); - } - } - } diff --git a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/relatedinfo/AttachmentListDto.java b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/relatedinfo/AttachmentListDto.java index 74c94480a..fa7fac490 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/relatedinfo/AttachmentListDto.java +++ b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/relatedinfo/AttachmentListDto.java @@ -26,7 +26,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import org.librecms.ui.contentsections.documents.ItemAttachmentDto; /** * A data transfer object used by the template for the listing of the diff --git a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/ItemAttachmentDto.java b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/relatedinfo/ItemAttachmentDto.java similarity index 87% rename from ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/ItemAttachmentDto.java rename to ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/relatedinfo/ItemAttachmentDto.java index 02b579160..2a4c17e6d 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/ItemAttachmentDto.java +++ b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/relatedinfo/ItemAttachmentDto.java @@ -16,7 +16,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA */ -package org.librecms.ui.contentsections.documents; +package org.librecms.ui.contentsections.documents.relatedinfo; import org.libreccm.l10n.GlobalizationHelper; import org.librecms.contentsection.ItemAttachment; @@ -49,6 +49,11 @@ public class ItemAttachmentDto { */ private String assetType; + /** + * The UUID of the attachment asset. + */ + private String assetUuid; + /** * The title of the asset assigned to an content item. This value is * determined from the title of the asset using {@link GlobalizationHelper#getValueFromLocalizedString(org.libreccm.l10n.LocalizedString) @@ -106,8 +111,16 @@ public class ItemAttachmentDto { return internalLink; } - public void setLink(final boolean internalLink) { + public void setInternalLink(final boolean internalLink) { this.internalLink = internalLink; } + public String getAssetUuid() { + return assetUuid; + } + + public void setAssetUuid(final String assetUuid) { + this.assetUuid = assetUuid; + } + } diff --git a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/relatedinfo/LinkDetailsModel.java b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/relatedinfo/LinkDetailsModel.java index 7b7044812..82703dd8e 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/relatedinfo/LinkDetailsModel.java +++ b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/relatedinfo/LinkDetailsModel.java @@ -42,6 +42,8 @@ import javax.inject.Named; @Named("CmsLinkDetailsModel") public class LinkDetailsModel { + private String baseUrl; + /** * The identifier of the {@link AttachmentList} of the link. */ @@ -64,6 +66,8 @@ public class LinkDetailsModel { private String linkType; + private Map linkTypes; + /** * The UUID of the target item of the link. */ @@ -87,6 +91,14 @@ public class LinkDetailsModel { */ private String targetItemTitle; + public String getBaseUrl() { + return baseUrl; + } + + public void setBaseUrl(final String baseUrl) { + this.baseUrl = baseUrl; + } + public String getListIdentifier() { return listIdentifier; } @@ -216,4 +228,12 @@ public class LinkDetailsModel { this.targetItemTitle = targetItemTitle; } + public Map getLinkTypes() { + return Collections.unmodifiableMap(linkTypes); + } + + public void setLinkTypes(final Map linkTypes) { + this.linkTypes = new HashMap<>(linkTypes); + } + } diff --git a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/relatedinfo/RelatedInfoStep.java b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/relatedinfo/RelatedInfoStep.java index 85727bbf9..aae04d70b 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/relatedinfo/RelatedInfoStep.java +++ b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/relatedinfo/RelatedInfoStep.java @@ -22,8 +22,9 @@ import org.librecms.ui.contentsections.ContentSectionNotFoundException; import org.libreccm.api.Identifier; import org.libreccm.api.IdentifierParser; import org.libreccm.l10n.GlobalizationHelper; +import org.libreccm.l10n.LocalizedTextsUtil; import org.libreccm.security.PermissionChecker; -import org.librecms.assets.AssetTypeInfo; +import org.libreccm.ui.BaseUrl; import org.librecms.assets.AssetTypesManager; import org.librecms.assets.RelatedLink; import org.librecms.contentsection.Asset; @@ -58,14 +59,17 @@ import org.librecms.ui.contentsections.documents.AbstractMvcAuthoringStep; import org.librecms.ui.contentsections.documents.DefaultAuthoringStepConstants; import org.librecms.ui.contentsections.documents.DocumentNotFoundException; import org.librecms.ui.contentsections.documents.DocumentUi; -import org.librecms.ui.contentsections.documents.ItemAttachmentDto; import org.librecms.ui.contentsections.documents.MvcAuthoringStepDef; import org.librecms.ui.contentsections.documents.MvcAuthoringSteps; import java.util.Collections; +import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.core.Context; + /** * Authoring step for managing the {@link AttachmentList} and * {@link ItemAttachment}s assigned to a {@link ContentItem}. @@ -129,9 +133,15 @@ public class RelatedInfoStep extends AbstractMvcAuthoringStep { @Inject private AttachmentListRepository listRepo; + @Inject + private BaseUrl baseUrl; + @Inject private DocumentUi documentUi; + @Context + private HttpServletRequest request; + /** * Model for the details view of an internal {@link RelatedLink}. */ @@ -1139,7 +1149,7 @@ public class RelatedInfoStep extends AbstractMvcAuthoringStep { link.getBookmark().getDisplayName() ); linkDetailsModel.setBookmarkUuid(link.getBookmark().getUuid()); - } else if (link.getTargetItem() != null){ + } else if (link.getTargetItem() != null) { linkDetailsModel.setLinkType("internal"); linkDetailsModel.setTargetItemName( link.getTargetItem().getDisplayName() @@ -1153,9 +1163,28 @@ public class RelatedInfoStep extends AbstractMvcAuthoringStep { link.getTargetItem().getUuid() ); } else { - linkDetailsModel.setLinkType(""); + linkDetailsModel.setLinkType("--none--"); } + linkDetailsModel.setBaseUrl(baseUrl.getBaseUrl(request)); + + final LocalizedTextsUtil textsUtil = globalizationHelper + .getLocalizedTextsUtil(DefaultAuthoringStepConstants.BUNDLE); + final Map linkTypes = new LinkedHashMap<>(); + linkTypes.put( + "--none--", + textsUtil.getText("relatedinfo.links.type.none_selected") + ); + linkTypes.put( + "external", + textsUtil.getText("relatedinfo.links.type.external") + ); + linkTypes.put( + "internal", + textsUtil.getText("relatedinfo.links.type.internal") + ); + linkDetailsModel.setLinkTypes(linkTypes); + linkDetailsModel.setTitle( link .getTitle() @@ -1352,7 +1381,11 @@ public class RelatedInfoStep extends AbstractMvcAuthoringStep { assetRepo.save(link); return buildRedirectPathForStep( - String.format("/attachmentlists/%s/@details", list.getName()) + String.format( + "/attachmentlists/%s/links/%s/@details", + list.getName(), + link.getUuid() + ) ); } else { return documentUi.showAccessDenied( @@ -1435,7 +1468,11 @@ public class RelatedInfoStep extends AbstractMvcAuthoringStep { assetRepo.save(link); return buildRedirectPathForStep( - String.format("/attachmentlists/%s/@details", list.getName()) + String.format( + "/attachmentlists/%s/links/%s/@details", + list.getName(), + link.getUuid() + ) ); } else { return documentUi.showAccessDenied( @@ -1516,7 +1553,11 @@ public class RelatedInfoStep extends AbstractMvcAuthoringStep { assetRepo.save(link); return buildRedirectPathForStep( - String.format("/attachmentlists/%s/@details", list.getName()) + String.format( + "/attachmentlists/%s/links/%s/@details", + list.getName(), + link.getUuid() + ) ); } else { return documentUi.showAccessDenied( @@ -1945,25 +1986,39 @@ public class RelatedInfoStep extends AbstractMvcAuthoringStep { final ItemAttachment itemAttachment ) { final ItemAttachmentDto dto = new ItemAttachmentDto(); - final AssetTypeInfo assetTypeInfo = assetTypesManager - .getAssetTypeInfo(itemAttachment.getAsset().getClass()); dto.setAssetType( - globalizationHelper - .getLocalizedTextsUtil(assetTypeInfo.getLabelBundle()) - .getText(assetTypeInfo.getLabelKey()) + Optional + .ofNullable(itemAttachment.getAsset()) + .map(Asset::getClass) + .map(clazz -> assetTypesManager.getAssetTypeInfo(clazz)) + .map( + info -> globalizationHelper.getLocalizedTextsUtil( + info.getLabelBundle()).getText(info.getLabelKey()) + ).orElse("") + ); + dto.setAssetUuid( + Optional + .ofNullable(itemAttachment.getAsset()) + .map(Asset::getUuid) + .orElse(null) ); dto.setAttachmentId(itemAttachment.getAttachmentId()); - dto.setLink( - itemAttachment.getAsset() instanceof RelatedLink + dto.setInternalLink( + itemAttachment.getAsset() != null + && itemAttachment.getAsset() instanceof RelatedLink && ((RelatedLink) itemAttachment.getAsset()).getTargetItem() != null ); dto.setSortKey(itemAttachment.getSortKey()); dto.setTitle( - globalizationHelper - .getValueFromLocalizedString( - itemAttachment.getAsset().getTitle() + Optional + .ofNullable(itemAttachment.getAsset()) + .map( + asset -> globalizationHelper.getValueFromLocalizedString( + asset.getTitle() + ) ) + .orElse("") ); dto.setUuid(itemAttachment.getUuid()); return dto; diff --git a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/documents/relatedinfo-link-details.xhtml b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/documents/relatedinfo-link-details.xhtml index ce73a60a8..62040a23c 100644 --- a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/documents/relatedinfo-link-details.xhtml +++ b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/documents/relatedinfo-link-details.xhtml @@ -24,14 +24,14 @@ addDialogTitle="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.add_dialog.title']}" addDialogValueHelp="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.add.value.help']}" addDialogValueLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.add.value.label']}" - addMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@authoringSteps/relatedinfo/attachmentlists/#{CmsLinkDetailsModel.listIdentifier}/links/#{CmsLinkDetailsModel.uuid}/title/@add" + addMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@relatedinfo/attachmentlists/#{CmsLinkDetailsModel.listIdentifier}/links/#{CmsLinkDetailsModel.uuid}/title/@add" editButtonLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.button_label']}" editDialogCancelLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.cancel']}" editDialogSubmitLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.submit']}" editDialogTitle="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit_dialog.title']}" editDialogValueHelp="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.value.help']}" editDialogValueLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.edit.value.label']}" - editMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@authoringSteps/relatedinfo/attachmentlists/#{CmsLinkDetailsModel.listIdentifier}/links/#{CmsLinkDetailsModel.uuid}/title/@edit" + editMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@relatedinfo/attachmentlists/#{CmsLinkDetailsModel.listIdentifier}/links/#{CmsLinkDetailsModel.uuid}/title/@edit" editorId="link-title-editor" hasUnusedLocales="#{!CmsLinkDetailsModel.unusedTitleLocales.isEmpty()}" headingLevel="3" @@ -41,49 +41,23 @@ removeDialogSubmitLabel="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.remove.submit']}" removeDialogText="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.remove.text']}" removeDialogTitle="#{CmsDefaultStepsMessageBundle['contentsection.documents.relatedinfo.link.title.remove.title']}" - removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@authoringSteps/relatedinfo/attachmentlists/#{CmsLinkDetailsModel.listIdentifier}/links/#{CmsLinkDetailsModel.uuid}/title/@remove" + removeMethod="#{mvc.basePath}/#{ContentSectionModel.sectionName}/documents/#{CmsSelectedDocumentModel.itemPath}/@relatedinfo/attachmentlists/#{CmsLinkDetailsModel.listIdentifier}/links/#{CmsLinkDetailsModel.uuid}/title/@remove" title="#{CmsDefaultStepsMessageBundle['relatedinfo.link.details.title_editor.title']}" unusedLocales="#{CmsLinkDetailsModel.unusedTitleLocales}" values="#{CmsLinkDetailsModel.title}" />
-
-
- #{CmsDefaultStepsMessageBundle['relatedinfo.links.type.label']} -
-
- - -
-
- - -
-
- - #{CmsDefaultStepsMessageBundle['relatedinfo.links.type.help']} - -
-
+ - +

#{CmsDefaultStepsMessageBundle['relatedinfo.link.details.title.target']}