Java part for the media authoring step.

pull/10/head
Jens Pelzetter 2021-08-04 20:32:52 +02:00
parent 90471ca4e3
commit f4b73670af
12 changed files with 2387 additions and 15 deletions

View File

@ -18,13 +18,14 @@
*/ */
package org.librecms.ui.contentsections.documents; package org.librecms.ui.contentsections.documents;
import org.librecms.ui.contentsections.documents.media.MediaStep;
import org.librecms.ui.contentsections.documents.media.MediaStepService;
import org.librecms.ui.contentsections.documents.relatedinfo.RelatedInfoStep; import org.librecms.ui.contentsections.documents.relatedinfo.RelatedInfoStep;
import org.librecms.ui.contentsections.documents.relatedinfo.RelatedInfoStepService; import org.librecms.ui.contentsections.documents.relatedinfo.RelatedInfoStepService;
import org.librecms.ui.contenttypes.MvcArticlePropertiesStep; import org.librecms.ui.contenttypes.MvcArticlePropertiesStep;
import org.librecms.ui.contenttypes.MvcArticleTextBodyStep; import org.librecms.ui.contenttypes.MvcArticleTextBodyStep;
import org.librecms.ui.contenttypes.MvcArticleTextBodyStepResources; import org.librecms.ui.contenttypes.MvcArticleTextBodyStepResources;
import java.util.HashSet;
import java.util.Set; import java.util.Set;
import javax.enterprise.context.ApplicationScoped; import javax.enterprise.context.ApplicationScoped;
@ -38,24 +39,23 @@ public class CmsMvcAuthoringSteps implements MvcAuthoringSteps {
@Override @Override
public Set<Class<?>> getClasses() { public Set<Class<?>> getClasses() {
final Set<Class<?>> classes = new HashSet<>(); return Set.of(
classes.add(ExampleAuthoringStep.class); ExampleAuthoringStep.class,
CategorizationStep.class,
classes.add(CategorizationStep.class); MediaStep.class,
classes.add(RelatedInfoStep.class); RelatedInfoStep.class,
classes.add(MvcArticlePropertiesStep.class); MvcArticlePropertiesStep.class,
classes.add(MvcArticleTextBodyStep.class); MvcArticleTextBodyStep.class
);
return classes;
} }
@Override @Override
public Set<Class<?>> getResourceClasses() { public Set<Class<?>> getResourceClasses() {
final Set<Class<?>> classes = new HashSet<>(); return Set.of(
classes.add(MvcArticleTextBodyStepResources.class); MediaStepService.class,
classes.add(RelatedInfoStepService.class); MvcArticleTextBodyStepResources.class,
RelatedInfoStepService.class
return classes; );
} }
} }

View File

@ -0,0 +1,122 @@
/*
* Copyright (C) 2021 LibreCCM Foundation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package org.librecms.ui.contentsections.documents.media;
/**
* A DTO for providing data about an {@link ItemAttachment} containing a media
* asset in a form suitable for a MVC view.
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class MediaAttachmentDto {
/**
* The ID of the attachment.
*/
private long attachmentId;
/**
* The UUID of the attachment.
*/
private String uuid;
/**
* The sort key of the attachment.
*/
private long sortKey;
/**
* The name of the asset type.
*/
private String assetType;
/**
* Label for the type of the asset of the attachment.
*/
private String assetTypeLabel;
/**
* The UUID of the attachment asset.
*/
private String assetUuid;
/**
* The title of the media asset assigned to an content item. This value is
* determined from the title of the asset using {@link GlobalizationHelper#getValueFromLocalizedString(org.libreccm.l10n.LocalizedString)
* }.
*/
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 getAssetTypeLabel() {
return assetTypeLabel;
}
public void setAssetTypeLabel(final String assetTypeLabel) {
this.assetTypeLabel = assetTypeLabel;
}
public String getTitle() {
return title;
}
public void setTitle(final String title) {
this.title = title;
}
public String getAssetUuid() {
return assetUuid;
}
public void setAssetUuid(final String assetUuid) {
this.assetUuid = assetUuid;
}
public String getAssetType() {
return assetType;
}
public void setAssetType(final String assetType) {
this.assetType = assetType;
}
}

View File

@ -0,0 +1,100 @@
/*
* Copyright (C) 2021 LibreCCM Foundation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package org.librecms.ui.contentsections.documents.media;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Named("CmsMediaDetailsModel")
public class MediaDetailsModel {
private String baseUrl;
/**
* The identifier of the {@link AttachmentList} of the link.
*/
private String listIdentifier;
/**
* The UUID of the link.
*/
private String uuid;
private String name;
private String sectionName;
private String mediaType;
public String getBaseUrl() {
return baseUrl;
}
public void setBaseUrl(final String baseUrl) {
this.baseUrl = baseUrl;
}
public String getListIdentifier() {
return listIdentifier;
}
public void setListIdentifier(final String listIdentifier) {
this.listIdentifier = listIdentifier;
}
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 String getSectionName() {
return sectionName;
}
public void setSectionName(final String sectionName) {
this.sectionName = sectionName;
}
public String getMediaType() {
return mediaType;
}
public void setMediaType(final String mediaType) {
this.mediaType = mediaType;
}
}

View File

@ -0,0 +1,156 @@
/*
* Copyright (C) 2021 LibreCCM Foundation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package org.librecms.ui.contentsections.documents.media;
import org.libreccm.l10n.GlobalizationHelper;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;
/**
* Model used by the media list details view.
*
* @see MediaStep
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Named("CmsMediaListDetailsModel")
public class MediaListDetailsModel {
/**
* The {@link GlobalizationHelper} is used here for retrieving some
* localized values. The purpose of this model is to provide the properties
* of an {@link AttachmentList} is a form that is directly usable in the
* template of the details view. The data of the model is provided by the
* {@link RelatedInfoStep}.
*/
@Inject
private GlobalizationHelper globalizationHelper;
private boolean canEdit;
/**
* UUID of the {@link AttachmentList} shown.
*/
private String uuid;
/**
* Name of the {@link AttachmentList} shown.
*/
private String name;
/**
* Preprocessed localized title values of the {@link AttachmentList}. This
* map is generated by transforming the locales the
* {@link AttachmentList#title} to a string using {@link Locale#toString()}.
*/
private Map<String, String> titles;
/**
* Preprocessed localized description values of the {@link AttachmentList}.
* This map is generated by transforming the locales the
* {@link AttachmentList#description} to a string using
* {@link Locale#toString()}.
*/
private Map<String, String> descriptions;
/**
* Not used locales for the title. These are the locales returned by
* {@link GlobalizationHelper#getAvailableLocales()} minus the locales
* returned by {@link LocalizedString#getAvailableLocales()} for
* {@link AttachmentList#title}.
*/
private List<String> unusedTitleLocales;
/**
* Not used locales for the description. These are the locales returned by
* {@link GlobalizationHelper#getAvailableLocales()} minus the locales
* returned by {@link LocalizedString#getAvailableLocales()} for
* {@link AttachmentList#description}.
*/
private List<String> unusedDescriptionLocales;
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 Map<String, String> getTitles() {
return Collections.unmodifiableMap(titles);
}
public void setTitles(final Map<String, String> titles) {
this.titles = new HashMap<>(titles);
}
public Map<String, String> getDescriptions() {
return Collections.unmodifiableMap(descriptions);
}
public void setDescriptions(final Map<String, String> descriptions) {
this.descriptions = new HashMap<>(descriptions);
}
public List<String> getUnusedTitleLocales() {
return Collections.unmodifiableList(unusedTitleLocales);
}
public void setUnusedTitleLocales(final List<String> unusedTitleLocales) {
this.unusedTitleLocales = new ArrayList<>(unusedTitleLocales);
}
public List<String> getUnusedDescriptionLocales() {
return Collections.unmodifiableList(unusedDescriptionLocales);
}
public void setUnusedDescriptionLocales(
final List<String> unusedDescriptionLocales
) {
this.unusedDescriptionLocales
= new ArrayList<>(unusedDescriptionLocales);
}
public boolean getCanEdit() {
return canEdit;
}
public void setCanEdit(final boolean canEdit) {
this.canEdit = canEdit;
}
}

View File

@ -0,0 +1,130 @@
/*
* Copyright (C) 2021 LibreCCM Foundation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package org.librecms.ui.contentsections.documents.media;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* A data transfer object used by the template for the listing of the
* {@link AttachmentList}s containing media attachments of a
* {@link ContentItem}.
*
* @see MediaStep
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class MediaListDto {
/**
* The ID of the list.
*/
private long listId;
/**
* The UUID of the list.
*/
private String uuid;
/**
* The name of the list.
*/
private String name;
/**
* The order value of the list.
*/
private long order;
/**
* The title of the list. This value is determined using
* {@link GlobalizationHelper#getValueFromLocalizedString(org.libreccm.l10n.LocalizedString)}.
*/
private String title;
/**
* The description of the list. This value is determined using
* {@link GlobalizationHelper#getValueFromLocalizedString(org.libreccm.l10n.LocalizedString)}.
*/
private String description;
/**
* The @link{ItemAttachment}s associated with the {@link AttachmentList}.
*/
private List<MediaAttachmentDto> 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<MediaAttachmentDto> getAttachments() {
return Collections.unmodifiableList(attachments);
}
public void setAttachments(final List<MediaAttachmentDto> attachments) {
this.attachments = new ArrayList<>(attachments);
}
}

View File

@ -0,0 +1,86 @@
/*
* Copyright (C) 2021 LibreCCM Foundation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package org.librecms.ui.contentsections.documents.media;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class MediaStepAttachmentOrder {
private List<String> attachmentListsOrder;
private Map<String, List<String>> attachmentsOrder;
private List<MovedAttachment> movedAttachments;
public List<String> getAttachmentListsOrder() {
return Collections.unmodifiableList(attachmentListsOrder);
}
public void setAttachmentListsOrder(final List<String> attachmentListsOrder) {
this.attachmentListsOrder = new ArrayList<>(attachmentListsOrder);
}
public Map<String, List<String>> getAttachmentsOrder() {
return Collections.unmodifiableMap(attachmentsOrder);
}
public void setAttachmentsOrder(
final Map<String, List<String>> attachmentsOrder
) {
this.attachmentsOrder = attachmentsOrder
.entrySet()
.stream()
.collect(
Collectors.toMap(
entry -> entry.getKey(),
entry -> new ArrayList<>(entry.getValue())
)
);
}
public List<MovedAttachment> getMovedAttachments() {
return Collections.unmodifiableList(movedAttachments);
}
public void setMovedAttachments(final List<MovedAttachment> movedAttachments) {
this.movedAttachments = new ArrayList<>(movedAttachments);
}
@Override
public String toString() {
return String.format(
"attachmentListsOrder = %s, "
+ "attachmentsOrder = %s, "
+ "movedAttachments = %s",
Objects.toString(attachmentListsOrder),
Objects.toString(attachmentsOrder),
Objects.toString(movedAttachments)
);
}
}

View File

@ -0,0 +1,110 @@
/*
* Copyright (C) 2021 LibreCCM Foundation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package org.librecms.ui.contentsections.documents.media;
import org.librecms.assets.AudioAsset;
import org.librecms.assets.ExternalAudioAsset;
import org.librecms.assets.ExternalVideoAsset;
import org.librecms.assets.Image;
import org.librecms.assets.VideoAsset;
import org.librecms.contentsection.AttachmentList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.enterprise.context.RequestScoped;
import javax.inject.Named;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Named("CmsMediaStep")
public class MediaStepModel {
private List<MediaListDto> mediaLists;
private String mediaAssetPickerBaseUrl;
private String sectionName;
/**
* Gets the {@link AttachmentList}s containing media assets of the current
* content item and converts them to {@link MediaListDto}s to make data
* about the lists available in the views.
*
* @return A list of the {@link AttachmentList} of the current content item.
*/
public List<MediaListDto> getMediaLists() {
return Collections.unmodifiableList(mediaLists);
}
public List<MediaListDto> getAttachmentsLists() {
return Collections.unmodifiableList(mediaLists);
}
public void setAttachmentsLists(List<MediaListDto> mediaLists) {
this.mediaLists = mediaLists;
}
protected void setMediaLists(
final List<MediaListDto> attachmentLists
) {
this.mediaLists = new ArrayList<>(attachmentLists);
}
public String getMediaAssetPickerBaseUrl() {
return mediaAssetPickerBaseUrl;
}
public void setMediaAssetPickerBaseUrl(final String mediaAssetPickerBaseUrl) {
this.mediaAssetPickerBaseUrl = mediaAssetPickerBaseUrl;
}
public String getSectionName() {
return sectionName;
}
public void setSectionName(final String sectionName) {
this.sectionName = sectionName;
}
public String getAudioAssetType() {
return AudioAsset.class.getName();
}
public String getExternalAudioAssetType() {
return ExternalAudioAsset.class.getName();
}
public String getExternalVideoAssetType() {
return ExternalVideoAsset.class.getName();
}
public String getImageType() {
return Image.class.getName();
}
public String getVideoAssetType() {
return VideoAsset.class.getName();
}
}

View File

@ -0,0 +1,196 @@
/*
* Copyright (C) 2021 LibreCCM Foundation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package org.librecms.ui.contentsections.documents.media;
import org.librecms.contentsection.AttachmentList;
import org.librecms.contentsection.AttachmentListRepository;
import org.librecms.contentsection.ContentItem;
import org.librecms.contentsection.ContentItemRepository;
import org.librecms.contentsection.ContentSection;
import org.librecms.contentsection.ItemAttachment;
import org.librecms.contentsection.ItemAttachmentManager;
import org.librecms.ui.contentsections.ContentSectionsUi;
import org.librecms.ui.contentsections.documents.MvcAuthoringSteps;
import java.util.List;
import java.util.Map;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.transaction.Transactional;
import javax.ws.rs.BadRequestException;
import javax.ws.rs.Consumes;
import javax.ws.rs.NotFoundException;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
@RequestScoped
@Path(MvcAuthoringSteps.PATH_PREFIX + "media-service")
public class MediaStepService {
@Inject
private AttachmentListRepository attachmentListRepo;
@Inject
private ItemAttachmentManager attachmentManager;
@Inject
private ContentItemRepository itemRepo;
@Inject
private ContentSectionsUi sectionsUi;
@POST
@Path("/save-order")
@Consumes(MediaType.APPLICATION_JSON)
@Transactional(Transactional.TxType.REQUIRED)
public Response saveOrder(
@PathParam(MvcAuthoringSteps.SECTION_IDENTIFIER_PATH_PARAM)
final String sectionIdentifier,
@PathParam(MvcAuthoringSteps.DOCUMENT_PATH_PATH_PARAM_NAME)
final String documentPath,
final MediaStepAttachmentOrder order
) {
final ContentSection contentSection = sectionsUi
.findContentSection(sectionIdentifier)
.orElseThrow(
() -> new NotFoundException(
String.format(
"No content identifed by %s found.",
sectionIdentifier
)
)
);
final ContentItem document = itemRepo
.findByPath(contentSection, documentPath)
.orElseThrow(
() -> new NotFoundException(
String.format(
"No document for path %s in section %s.",
documentPath,
contentSection.getLabel()
)
)
);
final List<AttachmentList> attachmentLists = document.getAttachments();
final List<String> attachmentListsOrder = order
.getAttachmentListsOrder();
if (attachmentListsOrder.size() != attachmentLists.size()) {
throw new BadRequestException(
String.format(
"Size of lists of attachment lists does not match list of "
+ "attachment order list. attachmentLists.size = %d, "
+ "attachmentListsOrder.size = %d.",
attachmentLists.size(),
attachmentListsOrder.size()
)
);
}
for (int i = 0; i < attachmentListsOrder.size(); i++) {
final String listUuid = attachmentListsOrder.get(i);
final AttachmentList attachmentList = attachmentLists
.stream()
.filter(list -> listUuid.equals(list.getUuid()))
.findAny()
.orElseThrow(
() -> new BadRequestException(
String.format(
"attachmentListsOrder has an entry for attachment "
+ "list %s, but there no attachment list with "
+ "that UUID.",
listUuid
)
)
);
attachmentList.setListOrder(i);
attachmentListRepo.save(attachmentList);
}
for (final Map.Entry<String, List<String>> attachmentsOrder : order
.getAttachmentsOrder().entrySet()) {
final AttachmentList attachmentList = document
.getAttachments()
.stream()
.filter(list -> attachmentsOrder.getKey().equals(list.getUuid()))
.findAny()
.orElseThrow(
() -> new BadRequestException(
String.format(
"attachmentsOrder contains an entry for "
+ "attachment list %s, but there no attachment "
+ "list with that UUID.",
attachmentsOrder.getKey()
)
)
);
final List<ItemAttachment<?>> attachments = attachmentList
.getAttachments();
if (attachments.size() != attachmentsOrder.getValue().size()) {
throw new BadRequestException(
String.format(
"Size of attachmentsOrder list does not match the size"
+ "of the attachments list. "
+ "attachmentsOrder.size = %d, "
+ "attachmentsList.size = %d",
attachmentsOrder.getValue().size(),
attachments.size()
)
);
}
for (int i = 0; i < attachmentsOrder.getValue().size(); i++) {
final String attachmentUuid = attachmentsOrder.getValue().get(i);
final ItemAttachment<?> attachment = attachments
.stream()
.filter(current -> attachmentUuid.equals(current.getUuid()))
.findAny()
.orElseThrow(
() -> new BadRequestException(
String.format(
"attachmentOrder order for attachment list %s "
+ "has an entry for attachment %s but "
+ "there is attachment with that UUID in "
+ "the list.",
attachmentList.getUuid(),
attachmentUuid
)
)
);
attachment.setSortKey(i);
attachmentManager.save(attachment);
}
}
return Response.ok().build();
}
}

View File

@ -0,0 +1,57 @@
/*
* Copyright (C) 2021 LibreCCM Foundation.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301 USA
*/
package org.librecms.ui.contentsections.documents.media;
/**
*
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/
public class MovedAttachment {
private String attachmentUuid;
private String fromListUuid;
private String toListUuid;
public String getAttachmentUuid() {
return attachmentUuid;
}
public void setAttachmentUuid(final String attachmentUuid) {
this.attachmentUuid = attachmentUuid;
}
public String getFromListUuid() {
return fromListUuid;
}
public void setFromListUuid(final String fromListUuid) {
this.fromListUuid = fromListUuid;
}
public String getToListUuid() {
return toListUuid;
}
public void setToListUuid(final String toListUuid) {
this.toListUuid = toListUuid;
}
}

View File

@ -533,3 +533,5 @@ videoasset.editstep.legelmetadata.remove.submit=Remove legal metadata
videoasset.editstep.legelmetadata.rightsholder=Rights Holder videoasset.editstep.legelmetadata.rightsholder=Rights Holder
videoasset.editstep.legelmetadata.creator=Creator videoasset.editstep.legelmetadata.creator=Creator
categorization.tree.expand=Expand/Hide subcategories categorization.tree.expand=Expand/Hide subcategories
authoringsteps.media.description=Add different media, for example images, videos or audio asset to a content item.
authoringsteps.media.label=Media

View File

@ -533,3 +533,5 @@ videoasset.editstep.legelmetadata.remove.submit=Rechtliche Informationen entfern
videoasset.editstep.legelmetadata.rightsholder=Rechteinhaber videoasset.editstep.legelmetadata.rightsholder=Rechteinhaber
videoasset.editstep.legelmetadata.creator=K\u00fcnstler videoasset.editstep.legelmetadata.creator=K\u00fcnstler
categorization.tree.expand=Unterkategorien anzeigen/verbergen categorization.tree.expand=Unterkategorien anzeigen/verbergen
authoringsteps.media.description=F\u00fcgen Sie Medien, z.B. Bilder, Videos oder Audio-Dateien einem Dokument hinzu.
authoringsteps.media.label=Medien