mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-21 21:25:38 +00:00
Merge branch 'master' into bug5809
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user