Audio and Video Asset bugfixes

pull/10/head
Jens Pelzetter 2021-07-10 17:30:50 +02:00
parent 0f44e9d70c
commit 719d386410
7 changed files with 142 additions and 35 deletions

View File

@ -49,6 +49,7 @@ import javax.enterprise.context.RequestScoped;
import javax.inject.Inject; import javax.inject.Inject;
import javax.mvc.Controller; import javax.mvc.Controller;
import javax.mvc.Models; import javax.mvc.Models;
import javax.servlet.http.HttpServletRequest;
import javax.transaction.Transactional; import javax.transaction.Transactional;
import javax.ws.rs.Consumes; import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam; import javax.ws.rs.FormParam;
@ -56,6 +57,7 @@ import javax.ws.rs.GET;
import javax.ws.rs.POST; import javax.ws.rs.POST;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.PathParam; import javax.ws.rs.PathParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.MultivaluedMap;
@ -78,6 +80,9 @@ public class AudioAssetEditStep extends AbstractMvcAssetEditStep {
AudioAssetEditStep.class AudioAssetEditStep.class
); );
@Context
private HttpServletRequest request;
@Inject @Inject
private AssetStepsDefaultMessagesBundle messageBundle; private AssetStepsDefaultMessagesBundle messageBundle;
@ -116,7 +121,7 @@ public class AudioAssetEditStep extends AbstractMvcAssetEditStep {
super.init(); super.init();
if (getAsset() instanceof AudioAsset) { if (getAsset() instanceof AudioAsset) {
editStepModel.setDescriptionValues( editStepModel.setDescriptionValues(
getAudioAsset() getAudioAsset()
.getDescription() .getDescription()
.getValues() .getValues()
@ -169,6 +174,17 @@ public class AudioAssetEditStep extends AbstractMvcAssetEditStep {
} }
editStepModel.setLegalMetadata(getAudioAsset().getLegalMetadata()); editStepModel.setLegalMetadata(getAudioAsset().getLegalMetadata());
final StringBuilder baseUrlBuilder = new StringBuilder();
editStepModel.setBaseUrl(
baseUrlBuilder
.append(request.getScheme())
.append("://")
.append(request.getServerName())
.append(addServerPortToBaseUrl())
.append(addContextPathToBaseUrl())
.toString()
);
} else { } else {
throw new AssetNotFoundException( throw new AssetNotFoundException(
assetUi.showAssetNotFound( assetUi.showAssetNotFound(
@ -183,7 +199,7 @@ public class AudioAssetEditStep extends AbstractMvcAssetEditStep {
} }
} }
@GET @GET
@Path("/") @Path("/")
@AuthorizationRequired @AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
@ -212,7 +228,7 @@ public class AudioAssetEditStep extends AbstractMvcAssetEditStep {
} }
} }
@POST @POST
@Path("/description/add") @Path("/description/add")
@AuthorizationRequired @AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
@ -319,7 +335,7 @@ public class AudioAssetEditStep extends AbstractMvcAssetEditStep {
} }
} }
@POST @POST
@Path("/legalmetadata") @Path("/legalmetadata")
@AuthorizationRequired @AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
@ -458,12 +474,11 @@ public class AudioAssetEditStep extends AbstractMvcAssetEditStep {
} }
} }
public AudioAsset getAudioAsset() { public AudioAsset getAudioAsset() {
return (AudioAsset) getAsset(); return (AudioAsset) getAsset();
} }
private String getFileName(final MultivaluedMap<String, String> headers) { private String getFileName(final MultivaluedMap<String, String> headers) {
final String[] contentDisposition = headers final String[] contentDisposition = headers
.getFirst("Content-Disposition") .getFirst("Content-Disposition")
.split(";"); .split(";");
@ -485,4 +500,21 @@ public class AudioAssetEditStep extends AbstractMvcAssetEditStep {
return headers.getFirst("Content-Type"); return headers.getFirst("Content-Type");
} }
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();
}
}
} }

View File

@ -37,6 +37,8 @@ import javax.inject.Named;
@Named("CmsAudioAssetEditStepModel") @Named("CmsAudioAssetEditStepModel")
public class AudioAssetEditStepModel { public class AudioAssetEditStepModel {
private String baseUrl;
private Map<String, String> descriptionValues; private Map<String, String> descriptionValues;
private List<String> unusedDescriptionLocales; private List<String> unusedDescriptionLocales;
@ -51,6 +53,14 @@ public class AudioAssetEditStepModel {
private LegalMetadata legalMetadata; private LegalMetadata legalMetadata;
public String getBaseUrl() {
return baseUrl;
}
protected void setBaseUrl(final String baseUrl) {
this.baseUrl = baseUrl;
}
public Map<String, String> getDescriptionValues() { public Map<String, String> getDescriptionValues() {
return Collections.unmodifiableMap(descriptionValues); return Collections.unmodifiableMap(descriptionValues);
} }

View File

@ -49,6 +49,7 @@ import javax.enterprise.context.RequestScoped;
import javax.inject.Inject; import javax.inject.Inject;
import javax.mvc.Controller; import javax.mvc.Controller;
import javax.mvc.Models; import javax.mvc.Models;
import javax.servlet.http.HttpServletRequest;
import javax.transaction.Transactional; import javax.transaction.Transactional;
import javax.ws.rs.Consumes; import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam; import javax.ws.rs.FormParam;
@ -56,6 +57,7 @@ import javax.ws.rs.GET;
import javax.ws.rs.POST; import javax.ws.rs.POST;
import javax.ws.rs.Path; import javax.ws.rs.Path;
import javax.ws.rs.PathParam; import javax.ws.rs.PathParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.core.MultivaluedMap;
@ -74,9 +76,13 @@ import javax.ws.rs.core.MultivaluedMap;
) )
public class VideoAssetEditStep extends AbstractMvcAssetEditStep { public class VideoAssetEditStep extends AbstractMvcAssetEditStep {
private static final Logger LOGGER = LogManager.getLogger(VideoAssetEditStep.class private static final Logger LOGGER = LogManager.getLogger(
VideoAssetEditStep.class
); );
@Context
private HttpServletRequest request;
@Inject @Inject
private AssetStepsDefaultMessagesBundle messageBundle; private AssetStepsDefaultMessagesBundle messageBundle;
@ -115,7 +121,7 @@ public class VideoAssetEditStep extends AbstractMvcAssetEditStep {
super.init(); super.init();
if (getAsset() instanceof VideoAsset) { if (getAsset() instanceof VideoAsset) {
editStepModel.setDescriptionValues( editStepModel.setDescriptionValues(
getVideoAsset() getVideoAsset()
.getDescription() .getDescription()
.getValues() .getValues()
@ -168,6 +174,17 @@ public class VideoAssetEditStep extends AbstractMvcAssetEditStep {
} }
editStepModel.setLegalMetadata(getVideoAsset().getLegalMetadata()); editStepModel.setLegalMetadata(getVideoAsset().getLegalMetadata());
final StringBuilder baseUrlBuilder = new StringBuilder();
editStepModel.setBaseUrl(
baseUrlBuilder
.append(request.getScheme())
.append("://")
.append(request.getServerName())
.append(addServerPortToBaseUrl())
.append(addContextPathToBaseUrl())
.toString()
);
} else { } else {
throw new AssetNotFoundException( throw new AssetNotFoundException(
assetUi.showAssetNotFound( assetUi.showAssetNotFound(
@ -182,7 +199,7 @@ public class VideoAssetEditStep extends AbstractMvcAssetEditStep {
} }
} }
@GET @GET
@Path("/") @Path("/")
@AuthorizationRequired @AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
@ -211,7 +228,7 @@ public class VideoAssetEditStep extends AbstractMvcAssetEditStep {
} }
} }
@POST @POST
@Path("/description/add") @Path("/description/add")
@AuthorizationRequired @AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
@ -318,7 +335,7 @@ public class VideoAssetEditStep extends AbstractMvcAssetEditStep {
} }
} }
@POST @POST
@Path("/legalmetadata") @Path("/legalmetadata")
@AuthorizationRequired @AuthorizationRequired
@Transactional(Transactional.TxType.REQUIRED) @Transactional(Transactional.TxType.REQUIRED)
@ -457,12 +474,11 @@ public class VideoAssetEditStep extends AbstractMvcAssetEditStep {
} }
} }
public VideoAsset getVideoAsset() { public VideoAsset getVideoAsset() {
return (VideoAsset) getAsset(); return (VideoAsset) getAsset();
} }
private String getFileName(final MultivaluedMap<String, String> headers) { private String getFileName(final MultivaluedMap<String, String> headers) {
final String[] contentDisposition = headers final String[] contentDisposition = headers
.getFirst("Content-Disposition") .getFirst("Content-Disposition")
.split(";"); .split(";");
@ -484,4 +500,21 @@ public class VideoAssetEditStep extends AbstractMvcAssetEditStep {
return headers.getFirst("Content-Type"); return headers.getFirst("Content-Type");
} }
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();
}
}
} }

View File

@ -37,6 +37,8 @@ import javax.inject.Named;
@Named("CmsVideoAssetEditStepModel") @Named("CmsVideoAssetEditStepModel")
public class VideoAssetEditStepModel { public class VideoAssetEditStepModel {
private String baseUrl;
private Map<String, String> descriptionValues; private Map<String, String> descriptionValues;
private List<String> unusedDescriptionLocales; private List<String> unusedDescriptionLocales;
@ -51,6 +53,14 @@ public class VideoAssetEditStepModel {
private LegalMetadata legalMetadata; private LegalMetadata legalMetadata;
public String getBaseUrl() {
return baseUrl;
}
protected void setBaseUrl(final String baseUrl) {
this.baseUrl = baseUrl;
}
public Map<String, String> getDescriptionValues() { public Map<String, String> getDescriptionValues() {
return Collections.unmodifiableMap(descriptionValues); return Collections.unmodifiableMap(descriptionValues);
} }

View File

@ -112,7 +112,8 @@
</c:if> </c:if>
<c:choose> <c:choose>
<c:when test="#{CmsAudioAssetEditStepModel.dataAvailable}"> <c:when test="#{CmsAudioAssetEditStepModel.dataAvailable}">
<audio controls="controls" <audio class="mt-3"
controls="controls"
src="#{mvc.basePath}/#{ContentSectionModel.sectionName}/assets/#{CmsSelectedAssetModel.assetPath}/@audioasset-edit-download"> src="#{mvc.basePath}/#{ContentSectionModel.sectionName}/assets/#{CmsSelectedAssetModel.assetPath}/@audioasset-edit-download">
</audio> </audio>
<dl> <dl>
@ -136,6 +137,16 @@
</c:choose> </c:choose>
<h3>#{CmsAssetsStepsDefaultMessagesBundle['audioasset.editstep.legalmetadata.title']}</h3> <h3>#{CmsAssetsStepsDefaultMessagesBundle['audioasset.editstep.legalmetadata.title']}</h3>
<librecms:assetPicker
actionUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/assets/#{CmsSelectedAssetModel.assetPath}/@audioasset-edit/legalmetadata"
assetType="#{CmsAudioAssetEditStepModel.legalMetadataType}"
assetPickerId="legalmetadata-picker"
baseUrl="#{CmsAudioAssetEditStepModel.baseUrl}"
contentSection="#{ContentSectionModel.sectionName}"
formParamName="legalMetadataIdentifier"
/>
<c:choose> <c:choose>
<c:when test="#{CmsAudioAssetEditStepModel.legalMetadata == null}"> <c:when test="#{CmsAudioAssetEditStepModel.legalMetadata == null}">
<div class="text-right"> <div class="text-right">

View File

@ -139,14 +139,14 @@
</c:choose> </c:choose>
<h3>#{CmsAssetsStepsDefaultMessagesBundle['image.editstep.legalmetadata.title']}</h3> <h3>#{CmsAssetsStepsDefaultMessagesBundle['image.editstep.legalmetadata.title']}</h3>
<librecms:assetPicker <librecms:assetPicker
actionUrl="#{actionBaseUrl}/legalmetadata" actionUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/assets/#{CmsSelectedAssetModel.assetPath}/@image-edit/legalmetadata"
assetType="#{CmsImageEditStepModel.legalMetadataType}" assetType="#{CmsImageEditStepModel.legalMetadataType}"
assetPickerId="legalmetadata-picker" assetPickerId="legalmetadata-picker"
baseUrl="#{CmsImageEditStepModel.baseUrl}" baseUrl="#{CmsImageEditStepModel.baseUrl}"
contentSection="#{ContentSectionModel.sectionName}" contentSection="#{ContentSectionModel.sectionName}"
formParamName="legalMetadataIdentifier" formParamName="legalMetadataIdentifier"
/> />
<c:choose> <c:choose>

View File

@ -110,9 +110,10 @@
</div> </div>
</div> </div>
</c:if> </c:if>
<c:choose> <c:choose>
<c:when test="#{CmsVideoAssetEditStepModel.dataAvailable}"> <c:when test="#{CmsVideoAssetEditStepModel.dataAvailable}">
<video controls="controls" <video class="mt-3"
controls="controls"
src="#{mvc.basePath}/#{ContentSectionModel.sectionName}/assets/#{CmsSelectedAssetModel.assetPath}/@videoasset-edit-download" src="#{mvc.basePath}/#{ContentSectionModel.sectionName}/assets/#{CmsSelectedAssetModel.assetPath}/@videoasset-edit-download"
width="320"> width="320">
</video> </video>
@ -137,6 +138,16 @@
</c:choose> </c:choose>
<h3>#{CmsAssetsStepsDefaultMessagesBundle['videoasset.editstep.legalmetadata.title']}</h3> <h3>#{CmsAssetsStepsDefaultMessagesBundle['videoasset.editstep.legalmetadata.title']}</h3>
<librecms:assetPicker
actionUrl="#{mvc.basePath}/#{ContentSectionModel.sectionName}/assets/#{CmsSelectedAssetModel.assetPath}/@videoasset-edit/legalmetadata"
assetType="#{CmsVideoAssetEditStepModel.legalMetadataType}"
assetPickerId="legalmetadata-picker"
baseUrl="#{CmsVideoAssetEditStepModel.baseUrl}"
contentSection="#{ContentSectionModel.sectionName}"
formParamName="legalMetadataIdentifier"
/>
<c:choose> <c:choose>
<c:when test="#{CmsVideoAssetEditStepModel.legalMetadata == null}"> <c:when test="#{CmsVideoAssetEditStepModel.legalMetadata == null}">
<div class="text-right"> <div class="text-right">