Merge branch 'master' into bug5809

This commit is contained in:
Axel Uhl
2023-02-14 23:42:52 +01:00
126 changed files with 1879 additions and 815 deletions
@@ -3,6 +3,10 @@ package com.sap.sse.common.fileupload;
public interface FileUploadConstants {
String FILE_NAME = "file_name";
String FILE_URI = "file_uri";
String CONTENT_TYPE = "content_type";
String FILE_SIZE = "file_size";
String MEDIA_TYPE_HEIGHT = "media_type_height";
String MEDIA_TYPE_WIDTH = "media_type_width";
String MESSAGE = "message";
String STATUS = "status";
String PROGRESS_PERCENTAGE = "progress_percentage";
@@ -27,7 +27,7 @@ public enum MediaTagConstants {
public static final Iterable<String> videoTagSuggestions = Arrays.asList(new String[] { BIGSCREEN.getName(),
LIVESTREAM.getName(), HIGHLIGHT.getName(), FEATURED.getName(), STAGE.getName() });
public static final Set<MimeType> SUPPORTED_VIDEO_TYPES = new HashSet<>(Arrays.asList(MimeType.youtube,
MimeType.vimeo, MimeType.mp4, MimeType.mp4panorama, MimeType.mp4panoramaflip, MimeType.qt));
MimeType.vimeo, MimeType.mp4, MimeType.mp4panorama, MimeType.mp4panoramaflip, MimeType.mov, MimeType.qt));
private MediaTagConstants(String name, int minWidth, int maxWidth, int minHeight, int maxHeight) {
this.name = name;
@@ -1,24 +1,24 @@
package com.sap.sse.common.media;
import java.util.ArrayList;
import java.util.List;
public enum MimeType {
mp4(MediaType.video, MediaSubType.mp4, "mp4"),
ogv(MediaType.video, MediaSubType.ogg, "ogv"),
qt(MediaType.video, MediaSubType.quicktime, "qt|qtvr|qti|qtif"),
mp3(MediaType.audio, MediaSubType.mpeg, "mp3"),
ogg(MediaType.audio, MediaSubType.ogg, "ogg|oga|spx"),
aac(MediaType.audio, MediaSubType.aac, "acc"),
webm(MediaType.video, MediaSubType.webm, "webm"),
youtube(MediaType.video, MediaSubType.youtube, ""),
vimeo(MediaType.video, MediaSubType.vimeo, ""),
image(MediaType.image, MediaSubType.unknown, "jpg|jpeg|jpe|jif|jfif|jfi|png|gif|webp|tiff|tif|apng|avif|svg|bmp|ico|cur"),
unknown(MediaType.unknown, MediaSubType.unknown, ""),
mp4panorama(MediaType.video, MediaSubType.mp4, "mp4"),
mp4panoramaflip(MediaType.video, MediaSubType.mp4, "mp4"),
mp4(MediaType.video, MediaSubType.mp4, "mp4"),
ogv(MediaType.video, MediaSubType.ogg, "ogv"),
qt(MediaType.video, MediaSubType.mp4, "qt|qtvr|qti|qtif"),
mp3(MediaType.audio, MediaSubType.mpeg, "mp3"),
ogg(MediaType.audio, MediaSubType.ogg, "ogg|oga|spx"),
aac(MediaType.audio, MediaSubType.aac, "acc"),
webm(MediaType.video, MediaSubType.webm, "webm"),
youtube(MediaType.video, MediaSubType.youtube, ""),
vimeo(MediaType.video, MediaSubType.vimeo, ""),
image(MediaType.image, MediaSubType.unknown, "jpg|jpeg|jpe|jif|jfif|jfi|png|gif|webp|tiff|tif|apng|avif|svg|bmp|ico|cur"),
unknown(MediaType.unknown, MediaSubType.unknown, ""),
mp4panorama(MediaType.video, MediaSubType.mp4, "mp4"),
mp4panoramaflip(MediaType.video, MediaSubType.mp4, "mp4"),
mov(MediaType.video, MediaSubType.mp4, "mov|quicktime");
private final static String YOUTUBE_REGEX = "((http(s)?:\\/\\/)?)(www\\.)?((youtube\\.com\\/)|(youtu.be\\/))[\\S]+";
public final static String VIMEO_REGEX = "(?:http|https)?:?\\/?\\/?(?:www\\.)?(?:player\\.)?vimeo\\.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/(?:[^\\/]*)\\/videos\\/|video\\/|)(\\d+)(?:|\\/\\?)";
public final MediaType mediaType;
public final MediaSubType mediaSubType;
@@ -29,19 +29,27 @@ public enum MimeType {
this.mediaSubType = mediaSubType;
this.endingPattern = endingPattern;
}
public boolean isPanorama(){
public boolean isPanorama() {
return this == mp4panorama || this == mp4panoramaflip;
}
public boolean isFlippedPanorama(){
public boolean isFlippedPanorama() {
return this == mp4panoramaflip;
}
public String getEndingPattern() {
return endingPattern;
}
public boolean isImage() {
return mediaType == MediaType.image;
}
public boolean isVideo() {
return mediaType == MediaType.video;
}
public MediaSubType getMediaSubType() {
return mediaSubType;
}
@@ -62,21 +70,90 @@ public enum MimeType {
return null;
}
}
public static MimeType[] mp4MimeTypes() {
return new MimeType[] { mp4, mp4panorama, mp4panoramaflip, mov};
return new MimeType[] { mp4, mp4panorama, mp4panoramaflip, mov };
}
public static List<MimeType> byExtension(String extension) {
List<MimeType> result = new ArrayList<>();
if (extension != null) {
for (MimeType mimeType: MimeType.values()) {
if (mimeType.getEndingPattern().contains(extension.toLowerCase())) {
result.add(mimeType);
/**
* Parses a file name by it's extension and return the matching {@link MimeType}.
*
* @param fileName
* String of the file name
* @return the matching MimeTpye or else {@link MimeType#unknown}
*/
public static MimeType byExtension(String fileName) {
final MimeType result;
if (fileName == null) {
result = unknown;
} else {
int dotPos = fileName.trim().lastIndexOf('.');
if (dotPos >= 0) {
String fileEnding = fileName.trim().substring(dotPos + 1).toLowerCase();
MimeType bestMatch = unknown;
if (fileEnding != null) {
for (MimeType mimeType : MimeType.values()) {
if (!mimeType.getEndingPattern().isEmpty()) {
boolean matchFound = fileEnding.toLowerCase().matches(mimeType.endingPattern);
if (matchFound) {
bestMatch = mimeType;
break;
}
}
}
}
result = bestMatch;
} else {
result = unknown;
}
}
return result;
}
public static MimeType extractFromUrl(String url) {
final MimeType mimeType;
if (url == null) {
mimeType = MimeType.unknown;
} else if (url.trim().matches(YOUTUBE_REGEX)) {
mimeType = MimeType.youtube;
} else if (url.trim().matches(VIMEO_REGEX)) {
mimeType = MimeType.vimeo;
} else {
mimeType = byExtension(url);
}
return mimeType;
}
}
/**
* Gets a mime type based on content type, e.g. image/jpeg, video/mp4, ...
*
* The media type must always match (image, video, audio). Then it will compare the sub type first by mime type
* name, then by ending pattern and then by sub type name
*
* @param contentType
* the content type of the media in String form
* @return the matching {@link MimeType} or else {@link MimeType#unknown}
*/
public static MimeType byContentType(String contentType) {
final MimeType result;
if (contentType != null && contentType.contains("/")) {
String mediaType = contentType.split("/")[0];
String subType = contentType.split("/")[1];
MimeType bestMatch = unknown;
for (MimeType mimeType : MimeType.values()) {
if (mimeType.mediaType.name().equals(mediaType)
&& (mimeType.name().equals(subType)
|| mimeType.getEndingPattern().contains(subType.toLowerCase())
|| mimeType.getMediaSubType().name().equals(subType))) {
bestMatch = mimeType;
break;
}
}
result = bestMatch;
} else {
result = unknown;
}
return result;
}
}