diff --git a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/AttachmentListDetailsModel.java b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/AttachmentListDetailsModel.java new file mode 100644 index 000000000..f6a907538 --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/AttachmentListDetailsModel.java @@ -0,0 +1,75 @@ +/* + * 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.documents; + +import org.librecms.contentsection.AttachmentList; + +import java.util.Collections; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Named; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@Named("CmsAttachmentListDetailsModel") +public class AttachmentListDetailsModel { + + + private String uuid; + + private String name; + + private Map titles; + + private Map descriptions; + + public String getUuid() { + return uuid; + } + + public Map getTitles() { + return Collections.unmodifiableMap(titles); + } + + public Map getDescriptions() { + return Collections.unmodifiableMap(descriptions); + } + + protected void setAttachmentList(final AttachmentList list) { + Objects.requireNonNull(list); + uuid = list.getUuid(); + name = list.getName(); + titles = list + .getTitle() + .getValues() + .entrySet() + .stream() + .collect( + Collectors.toMap( + entry -> entry.getKey().toString(), + entry -> entry.getValue() + ) + ); + descriptions = list + .getDescription() + .getValues() + .entrySet() + .stream() + .collect( + Collectors.toMap( + entry -> entry.getKey().toString(), + entry -> entry.getValue() + ) + ); + } + +} diff --git a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/InternalLinkDetailsModel.java b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/InternalLinkDetailsModel.java new file mode 100644 index 000000000..b1d22e23a --- /dev/null +++ b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/InternalLinkDetailsModel.java @@ -0,0 +1,93 @@ +/* + * 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.documents; + +import org.libreccm.l10n.GlobalizationHelper; +import org.librecms.assets.RelatedLink; + +import java.util.Collections; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + +import javax.enterprise.context.RequestScoped; +import javax.inject.Inject; +import javax.inject.Named; + +/** + * + * @author Jens Pelzetter + */ +@RequestScoped +@Named("CmsInternalLinkDetailsModel") +public class InternalLinkDetailsModel { + + @Inject + private GlobalizationHelper globalizationHelper; + + private String listIdentifier; + + private String uuid; + + private Map title; + + private String targetItemUuid; + + private String targetItemName; + + private String targetItemTitle; + + public String getListIdentifier() { + return listIdentifier; + } + + protected void setListIdentifier(final String listIdentifier) { + this.listIdentifier = listIdentifier; + } + + public String getUuid() { + return uuid; + } + + public Map getTitle() { + return Collections.unmodifiableMap(title); + } + + public String getTargetItemUuid() { + return targetItemUuid; + } + + public String getTargetItemName() { + return targetItemName; + } + + public String getTargetItemTitle() { + return targetItemTitle; + } + + protected void setInternalLink(final RelatedLink link) { + Objects.requireNonNull(link); + + uuid = link.getUuid(); + title = link + .getTitle() + .getValues() + .entrySet() + .stream() + .collect( + Collectors.toMap( + entry -> entry.getKey().toString(), + entry -> entry.getValue() + ) + ); + targetItemUuid = link.getTargetItem().getItemUuid(); + targetItemName = link.getTargetItem().getDisplayName(); + targetItemTitle = globalizationHelper.getValueFromLocalizedString( + link.getTargetItem().getTitle() + ); + } + +} 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/ItemAttachmentDto.java index b6a2e8d26..bd605e02e 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/ItemAttachmentDto.java @@ -20,6 +20,8 @@ public class ItemAttachmentDto { private String assetType; private String title; + + private boolean internalLink; public long getAttachmentId() { return attachmentId; @@ -61,4 +63,14 @@ public class ItemAttachmentDto { this.title = title; } + public boolean isInternalLink() { + return internalLink; + } + + public void setInternalLink(final boolean internalLink) { + this.internalLink = internalLink; + } + + + } diff --git a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/RelatedInfoStep.java b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/RelatedInfoStep.java index e0f24c426..7ab3fec98 100644 --- a/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/RelatedInfoStep.java +++ b/ccm-cms/src/main/java/org/librecms/ui/contentsections/documents/RelatedInfoStep.java @@ -36,6 +36,7 @@ import javax.mvc.Controller; import javax.mvc.Models; import javax.transaction.Transactional; import javax.ws.rs.FormParam; +import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; @@ -59,6 +60,9 @@ public class RelatedInfoStep implements MvcAuthoringStep { @Inject private AssetTypesManager assetTypesManager; + @Inject + private AttachmentListDetailsModel listDetailsModel; + @Inject private AttachmentListManager listManager; @@ -68,6 +72,9 @@ public class RelatedInfoStep implements MvcAuthoringStep { @Inject private AttachmentListRepository listRepo; + @Inject + private InternalLinkDetailsModel internalLinkDetailsModel; + @Inject private ContentItemRepository itemRepo; @@ -176,7 +183,8 @@ public class RelatedInfoStep implements MvcAuthoringStep { @Transactional(Transactional.TxType.REQUIRED) public String addAttachmentList( @FormParam("listName") final String name, - @FormParam("listTitle") final String title + @FormParam("listTitle") final String title, + @FormParam("listDescription") final String description ) { final AttachmentList list = listManager.createAttachmentList( document, name @@ -184,12 +192,61 @@ public class RelatedInfoStep implements MvcAuthoringStep { list.getTitle().addValue( globalizationHelper.getNegotiatedLocale(), title ); + list.getDescription().addValue( + globalizationHelper.getNegotiatedLocale(), description + ); listRepo.save(list); return String.format( - "redirect:/%s/@documents/%s/@authoringsteps/%s", + "redirect:/%s/@documents/%s/@authoringsteps/%s/attachmentslists/%s", section.getLabel(), getContentItemPath(), - PATH_FRAGMENT + PATH_FRAGMENT, + list.getName() + ); + } + + @GET + @Path("/attachmentlists/{attachmentListIdentifier}/@details") + @Transactional(Transactional.TxType.REQUIRED) + public String showAttachmentListDetails( + @PathParam("attachmentListIdentifier") final String listIdentifierParam + ) { + final Optional listResult = findAttachmentList( + listIdentifierParam + ); + if (!listResult.isPresent()) { + return showAttachmentListNotFound(listIdentifierParam); + } + + listDetailsModel.setAttachmentList(listResult.get()); + + return "org/librecms/ui/documents/relatedinfo-attachmentlist-details.xhtml"; + } + + @POST + @Path("/attachmentlists/{attachmentListIdentifier}/@remove") + @Transactional(Transactional.TxType.REQUIRED) + public String updateAttachmentList( + @PathParam("attachmentListIdentifier") final String listIdentifierParam, + @FormParam("listName") final String name + ) { + final Optional listResult = findAttachmentList( + listIdentifierParam + ); + if (!listResult.isPresent()) { + return showAttachmentListNotFound(listIdentifierParam); + } + + final AttachmentList list = listResult.get(); + list.setName(name); + listRepo.save(list); + + return String.format( + "redirect:/%s/@documents/%s/@authoringsteps/%s/attachmentslists/%s", + section.getLabel(), + getContentItemPath(), + PATH_FRAGMENT, + list.getName() ); } @@ -197,11 +254,9 @@ public class RelatedInfoStep implements MvcAuthoringStep { @Path("/attachmentlists/{attachmentListIdentifier}/@remove") @Transactional(Transactional.TxType.REQUIRED) public String removeAttachmentList( - @PathParam("attachmentListIdentifier") - final String listIdentifierParam, + @PathParam("attachmentListIdentifier") final String listIdentifierParam, @FormParam("confirm") final String confirm ) { - final Optional listResult = findAttachmentList( listIdentifierParam ); @@ -256,10 +311,29 @@ public class RelatedInfoStep implements MvcAuthoringStep { ); } - @POST - @Path("/attachmentlists/{attachmentListIdentifier}/internal-links") + @GET + @Path("/attachmentlists/{attachmentListIdentifier}/internal-links/@create") @Transactional(Transactional.TxType.REQUIRED) - public String createInteralLink( + public String createInternalLink( + @PathParam("attachmentListIdentifier") + final String listIdentifierParam + ) { + final Optional listResult = findAttachmentList( + listIdentifierParam + ); + if (!listResult.isPresent()) { + return showAttachmentListNotFound(listIdentifierParam); + } + final AttachmentList list = listResult.get(); + models.put("attachmentList", list.getName()); + + return "org/librecms/ui/documents/relatedinfo-create-internallink.xhtml"; + } + + @POST + @Path("/attachmentlists/{attachmentListIdentifier}/internal-links/@create") + @Transactional(Transactional.TxType.REQUIRED) + public String createInternalLink( @PathParam("attachmentListIdentifier") final String listIdentifierParam, @FormParam("targetItemUuid") final String targetItemUuid, @@ -295,12 +369,53 @@ public class RelatedInfoStep implements MvcAuthoringStep { PATH_FRAGMENT ); } + + @GET + @Path( + "/attachmentlists/{attachmentListIdentifier}/internal-links/{interalLinkUuid}/@details") + @Transactional(Transactional.TxType.REQUIRED) + public String showInternalLinkDetails( + @PathParam("attachmentListIdentifier") + final String listIdentifierParam, + @PathParam("internalLinkUuid") final String internalLinkUuid + ) { + final Optional listResult = findAttachmentList( + listIdentifierParam + ); + if (!listResult.isPresent()) { + return showAttachmentListNotFound(listIdentifierParam); + } + final AttachmentList list = listResult.get(); + + final Optional linkResult = list + .getAttachments() + .stream() + .map(ItemAttachment::getAsset) + .filter(asset -> asset instanceof RelatedLink) + .map(asset -> (RelatedLink) asset) + .filter(link -> link.getUuid().equals(internalLinkUuid)) + .findAny(); + + if (!linkResult.isPresent()) { + models.put("contentItem", itemManager.getItemPath(document)); + models.put("listIdentifier", listIdentifierParam); + models.put("internalLinkUuid", internalLinkUuid); + return "org/librecms/ui/documents/internal-link-asset-not-found.xhtml"; + } + + final RelatedLink link = linkResult.get(); + internalLinkDetailsModel.setListIdentifier(list.getName()); + internalLinkDetailsModel.setInternalLink(link); + + return "org/librecms/ui/documents/relatedinfo-create-internallink.xhtml"; + } + @POST @Path( "/attachmentlists/{attachmentListIdentifier}/internal-links/{interalLinkUuid}") @Transactional(Transactional.TxType.REQUIRED) - public String updateInteralLinkTarget( + public String updateInternalLinkTarget( @PathParam("attachmentListIdentifier") final String listIdentifierParam, @PathParam("internalLinkUuid") final String internalLinkUuid, @@ -339,7 +454,7 @@ public class RelatedInfoStep implements MvcAuthoringStep { } final RelatedLink link = linkResult.get(); - link.setTargetItem(document); + link.setTargetItem(itemResult.get()); assetRepo.save(link); return String.format( @@ -354,7 +469,7 @@ public class RelatedInfoStep implements MvcAuthoringStep { @Path( "/attachmentlists/{attachmentListIdentifier}/internal-links/{interalLinkUuid}/title/@add") @Transactional(Transactional.TxType.REQUIRED) - public String addInteralLinkTitle( + public String addInternalLinkTitle( @PathParam("attachmentListIdentifier") final String listIdentifierParam, @PathParam("internalLinkUuid") final String internalLinkUuid, @@ -402,7 +517,7 @@ public class RelatedInfoStep implements MvcAuthoringStep { @Path( "/attachmentlists/{attachmentListIdentifier}/internal-links/{interalLinkUuid}/title/@edit/{locale}") @Transactional(Transactional.TxType.REQUIRED) - public String updateInteralLinkTitle( + public String updateInternalLinkTitle( @PathParam("attachmentListIdentifier") final String listIdentifierParam, @PathParam("internalLinkUuid") final String internalLinkUuid, @@ -450,7 +565,7 @@ public class RelatedInfoStep implements MvcAuthoringStep { @Path( "/attachmentlists/{attachmentListIdentifier}/internal-links/{interalLinkUuid}/title/@edit/{locale}") @Transactional(Transactional.TxType.REQUIRED) - public String removeInteralLinkTitle( + public String removeInternalLinkTitle( @PathParam("attachmentListIdentifier") final String listIdentifierParam, @PathParam("internalLinkUuid") final String internalLinkUuid, @@ -739,6 +854,10 @@ public class RelatedInfoStep implements MvcAuthoringStep { .getText(assetTypeInfo.getLabelKey()) ); dto.setAttachmentId(itemAttachment.getAttachmentId()); + dto.setInternalLink( + itemAttachment.getAsset() instanceof RelatedLink + && ((RelatedLink) itemAttachment.getAsset()).getTargetItem() != null + ); dto.setSortKey(itemAttachment.getSortKey()); dto.setTitle( globalizationHelper diff --git a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/documents/categorization.xhtml b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/documents/categorization.xhtml index d69806451..506bfc62b 100644 --- a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/documents/categorization.xhtml +++ b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/documents/categorization.xhtml @@ -6,85 +6,87 @@ xmlns:ui="http://xmlns.jcp.org/jsf/facelets"> - -

#{tree.domainTitle}

+ + +

#{tree.domainTitle}

-
- #{CmsDefaultStepsMessageBundle['categorization.system.assigned.to']} - -
- + + + + + #{assigned} + + + + + + -
+
+
diff --git a/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/documents/relatedinfo.xhtml b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/documents/relatedinfo.xhtml new file mode 100644 index 000000000..6c14e9a94 --- /dev/null +++ b/ccm-cms/src/main/resources/WEB-INF/views/org/librecms/ui/contentsection/documents/relatedinfo.xhtml @@ -0,0 +1,262 @@ +]> + + + + + + + + + + + + +
+ +
+ + +
+ +
+ + + + + +
    + +
  • +
    + #{list.name} + + + + + + #{CmsDefaultStepsMessageBundle['relatedinfo.attachmentlists.row.details_link.label']} + + +
    + +
    +
    + +
    + +
    + +
  • +
    +
+ +
+ +
+