First part of authoring step for related info

pull/10/head
Jens Pelzetter 2021-03-25 20:07:43 +01:00
parent 1e3c3c3f61
commit c2bce08eef
5 changed files with 443 additions and 1 deletions

View File

@ -46,7 +46,8 @@ import javax.persistence.OneToMany;
import javax.persistence.OrderBy;
import javax.persistence.Table;
import static org.librecms.CmsConstants.*;
import static org.librecms.CmsConstants.DB_SCHEMA;
/**
* A list of assets attached a {@link ContentItem}. Each {@link ContentItem} may

View File

@ -0,0 +1,50 @@
/*
* 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.contentsection;
import org.libreccm.core.AbstractEntityRepository;
import java.util.UUID;
import javax.enterprise.context.Dependent;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@Dependent
public class AttachmentListRepository
extends AbstractEntityRepository<Long, AttachmentList> {
private static final long serialVersionUID = 1L;
@Override
public Class<AttachmentList> getEntityClass() {
return AttachmentList.class;
}
@Override
public String getIdAttributeName() {
return "listId";
}
@Override
public Long getIdOfEntity(final AttachmentList entity) {
return entity.getListId();
}
@Override
public boolean isNew(final AttachmentList entity) {
return entity.getListId() == 0;
}
@Override
protected void initNewEntity(final AttachmentList entity) {
super.initNewEntity(entity);
entity.setUuid(UUID.randomUUID().toString());
}
}

View File

@ -0,0 +1,90 @@
/*
* 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 java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class AttachmentListDto {
private long listId;
private String uuid;
private String name;
private long order;
private String title;
private String description;
private List<ItemAttachmentDto> attachments;
public long getListId() {
return listId;
}
public void setListId(final long listId) {
this.listId = listId;
}
public String getUuid() {
return uuid;
}
public void setUuid(final String uuid) {
this.uuid = uuid;
}
public String getName() {
return name;
}
public void setName(final String name) {
this.name = name;
}
public long getOrder() {
return order;
}
public void setOrder(long order) {
this.order = order;
}
public String getTitle() {
return title;
}
public void setTitle(final String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(final String description) {
this.description = description;
}
public List<ItemAttachmentDto> getAttachments() {
return Collections.unmodifiableList(attachments);
}
public void setAttachments(final List<ItemAttachmentDto> attachments) {
this.attachments = new ArrayList<>(attachments);
}
}

View File

@ -0,0 +1,64 @@
/*
* 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;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class ItemAttachmentDto {
private long attachmentId;
private String uuid;
private long sortKey;
private String assetType;
private String title;
public long getAttachmentId() {
return attachmentId;
}
public void setAttachmentId(final long attachmentId) {
this.attachmentId = attachmentId;
}
public String getUuid() {
return uuid;
}
public void setUuid(final String uuid) {
this.uuid = uuid;
}
public long getSortKey() {
return sortKey;
}
public void setSortKey(long sortKey) {
this.sortKey = sortKey;
}
public String getAssetType() {
return assetType;
}
public void setAssetType(final String assetType) {
this.assetType = assetType;
}
public String getTitle() {
return title;
}
public void setTitle(final String title) {
this.title = title;
}
}

View File

@ -0,0 +1,237 @@
/*
* 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.AssetTypeInfo;
import org.librecms.assets.AssetTypesManager;
import org.librecms.contentsection.AttachmentList;
import org.librecms.contentsection.AttachmentListL10NManager;
import org.librecms.contentsection.AttachmentListManager;
import org.librecms.contentsection.AttachmentListRepository;
import org.librecms.contentsection.ContentItem;
import org.librecms.contentsection.ContentItemManager;
import org.librecms.contentsection.ContentSection;
import org.librecms.contentsection.ItemAttachment;
import org.librecms.contentsection.ItemAttachmentManager;
import java.util.List;
import java.util.stream.Collectors;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;
import javax.mvc.Controller;
import javax.transaction.Transactional;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Controller
@Path("/")
@AuthoringStepPathFragment(RelatedInfoStep.PATH_FRAGMENT)
@Named("CmsRelatedInfoStep")
public class RelatedInfoStep implements MvcAuthoringStep {
static final String PATH_FRAGMENT = "relatedinfo";
@Inject
private AssetTypesManager assetTypesManager;
@Inject
private AttachmentListManager listManager;
@Inject
private AttachmentListL10NManager listL10NManager;
@Inject
private AttachmentListRepository listRepo;
@Inject
private ContentItemManager itemManager;
@Inject
private GlobalizationHelper globalizationHelper;
@Inject
private ItemAttachmentManager attachmentManager;
private ContentItem document;
private ContentSection section;
@Override
public Class<? extends ContentItem> supportedDocumentType() {
return ContentItem.class;
}
@Override
public String getLabel() {
return globalizationHelper
.getLocalizedTextsUtil(getBundle())
.getText("authoringsteps.relatedinfo.label");
}
@Override
public String getDescription() {
return globalizationHelper
.getLocalizedTextsUtil(getBundle())
.getText("authoringsteps.relatedinfo.description");
}
@Override
public String getBundle() {
return DefaultAuthoringStepConstants.BUNDLE;
}
@Override
public ContentSection getContentSection() {
return section;
}
@Override
public void setContentSection(final ContentSection section) {
this.section = section;
}
@Override
public String getContentSectionLabel() {
return section.getLabel();
}
@Override
public String getContentSectionTitle() {
return globalizationHelper
.getValueFromLocalizedString(section.getTitle());
}
@Override
public ContentItem getContentItem() {
return document;
}
@Override
public void setContentItem(final ContentItem document) {
this.document = document;
}
@Override
public String getContentItemPath() {
return itemManager.getItemPath(document);
}
@Override
public String getContentItemTitle() {
return globalizationHelper
.getValueFromLocalizedString(document.getTitle());
}
@Override
public String showStep() {
return "org/librecms/ui/contenttypes/relatedinfo.xhtml";
}
@Transactional
public List<AttachmentListDto> getAttachmentLists() {
return document
.getAttachments()
.stream()
.filter(list -> !list.getName().startsWith("."))
.map(this::buildAttachmentListDto)
.collect(Collectors.toList());
}
@POST
@Path("/attachmentlists/@add")
@Transactional(Transactional.TxType.REQUIRED)
public String addAttachmentList(
@FormParam("listName") final String name,
@FormParam("listTitle") final String title
) {
final AttachmentList list = listManager.createAttachmentList(
document, name
);
list.getTitle().addValue(
globalizationHelper.getNegotiatedLocale(), title
);
listRepo.save(list);
return String.format(
"redirect:/%s/@documents/%s/@authoringsteps/%s",
section.getLabel(),
getContentItemPath(),
PATH_FRAGMENT
);
}
// ToDo Remove Attachment List
// Add attachment (attach asset)
// Add internal link
// Remove attachment
// ToDo Move attachment list to first position
// ToDo Move attachment list up
// ToDo Move attachment list down
// ToDo Move item attachment to first position
// ToDo Move item attachment up
// ToDo Move item attachment down
private AttachmentListDto buildAttachmentListDto(
final AttachmentList attachmentList
) {
final AttachmentListDto dto = new AttachmentListDto();
dto.setAttachments(
attachmentList
.getAttachments()
.stream()
.map(this::buildItemAttachmentDto)
.collect(Collectors.toList())
);
dto.setDescription(
globalizationHelper
.getValueFromLocalizedString(
attachmentList.getDescription()
)
);
dto.setListId(attachmentList.getListId());
dto.setName(attachmentList.getName());
dto.setOrder(attachmentList.getOrder());
dto.setTitle(
globalizationHelper
.getValueFromLocalizedString(
attachmentList.getTitle()
)
);
dto.setUuid(attachmentList.getUuid());
return dto;
}
private ItemAttachmentDto buildItemAttachmentDto(
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())
);
dto.setAttachmentId(itemAttachment.getAttachmentId());
dto.setSortKey(itemAttachment.getSortKey());
dto.setTitle(
globalizationHelper
.getValueFromLocalizedString(
itemAttachment.getAsset().getTitle()
)
);
dto.setUuid(itemAttachment.getUuid());
return dto;
}
}