Skip to content

Commit 259d8e5

Browse files
committed
[refactor] Switch to Elemental's Media Type Implementation
Closes eXist-db/exist#3608 Closes eXist-db/exist#5834
1 parent 4410a07 commit 259d8e5

File tree

259 files changed

+5200
-1587
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

259 files changed

+5200
-1587
lines changed

elemental-media-type/elemental-media-type-api/src/main/java/xyz/elemental/mediatype/MediaType.java

Lines changed: 82 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,34 +73,111 @@ public interface MediaType {
7373
StorageType getStorageType();
7474

7575
// <editor-fold desc="List of common Media Type Identifiers">
76+
String APPLICATION_ATOM = "application/atom+xml";
7677
String APPLICATION_BZIP2 = "application/x-bzip2";
77-
String APPLICATION_EXISTDB_COLLECTION_CONFIG_XML = "application/prs.existdb.collection-config+xml";
78+
String APPLICATION_DITA = "application/dita+xml";
79+
String APPLICATION_ELEMENTAL_DOCUMENT = "application/vnd.elemental.document";
80+
String APPLICATION_ELEMENTAL_DOCUMENT_BINARY = "application/vnd.elemental.document+binary";
81+
String APPLICATION_ELEMENTAL_DOCUMENT_XML = "application/vnd.elemental.document+xml";
82+
String APPLICATION_ELEMENTAL_COLLECTION = "application/vnd.elemental.collection";
7883
String APPLICATION_EXPATH_PACKAGE_ZIP = "application/prs.expath.package+zip";
84+
String APPLICATION_GML = "application/gml+xml";
7985
String APPLICATION_GZIP = "application/gzip";
86+
String APPLICATION_INVISIBLE_XML_GRAMMAR = "application/prs.invisible-xml.grammar";
87+
String APPLICATION_INVISIBLE_XML_GRAMMAR_XML = "application/prs.invisible-xml.grammar+xml";
8088
String APPLICATION_JAVA_ARCHIVE = "application/java-archive";
8189
String APPLICATION_JSON = "application/json";
90+
String APPLICATION_MADS = "application/mads+xml";
91+
String APPLICATION_MARC = "application/marcxml+xml";
92+
String APPLICATION_METS = "application/mets+xml";
93+
String APPLICATION_MODS = "application/mods+xml";
94+
String APPLICATION_NCX = "application/x-dtbncx+xml";
8295
String APPLICATION_OCTET_STREAM = "application/octet-stream";
96+
String APPLICATION_OEBPS_PACKAGE = "application/oebps-package+xml";
97+
String APPLICATION_OPENDOCUMENT_PRESENTATION = "application/vnd.oasis.opendocument.presentation";
98+
String APPLICATION_OPENDOCUMENT_TEXT = "application/vnd.oasis.opendocument.text";
99+
String APPLICATION_OPENDOCUMENT_SPREADSHEET = "application/vnd.oasis.opendocument.spreadsheet";
100+
String APPLICATION_OPENXML_PRESENTATION = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
101+
String APPLICATION_OPENXML_SPREADSHEET = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
102+
String APPLICATION_OPENXML_WORDPROCESSING = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
103+
String APPLICATION_PACK200 = "application/x-java-pack200";
83104
String APPLICATION_PDF = "application/pdf";
105+
String APPLICATION_RDF_XML = "application/rdf+xml";
84106
String APPLICATION_RELAXNG_COMPACT = "application/relax-ng-compact-syntax";
107+
String APPLICATION_RSS = "application/rss+xml";
108+
String APPLICATION_SCHEMATRON = "application/schematron+xml";
109+
String APPLICATION_SRU = "application/sru+xml";
85110
String APPLICATION_TAR = "application/x-tar";
111+
String APPLICATION_TEI = "application/tei+xml";
112+
String APPLICATION_WSDL = "application/wsdl+xml";
86113
String APPLICATION_WWW_FORM_URLENCODED = "application/x-www-form-urlencoded";
114+
String APPLICATION_XMI = "application/vnd.xmi+xml";
87115
String APPLICATION_XML = "application/xml";
88116
String APPLICATION_XML_DTD = "application/xml-dtd";
89-
String APPLICATION_XHTML_XML = "application/xhtml+xml";
90-
String APPLICATION_XPROC_XML = "application/xproc+xml";
91-
String APPLICATION_XSLT_XML = "application/xslt+xml";
117+
String APPLICATION_XHTML = "application/xhtml+xml";
118+
String APPLICATION_XPROC = "application/xproc+xml";
119+
String APPLICATION_XSLT = "application/xslt+xml";
92120
String APPLICATION_XQUERY = "application/xquery";
121+
String APPLICATION_XQUERY_XML = "application/xquery+xml";
93122
String APPLICATION_XZ = "application/x-xz";
94123
String APPLICATION_ZIP = "application/zip";
95124
String APPLICATION_ZSTD = "application/zstd";
96125

126+
String IMAGE_GIF = "image/gif";
127+
String IMAGE_JPEG = "image/jpeg";
128+
String IMAGE_PNG = "image/png";
129+
String IMAGE_SVG = "image/svg+xml";
130+
String IMAGE_SVG_GZIP = "image/svg+xml";
131+
// See: https://github.com/w3c/svgwg/issues/701
132+
// String IMAGE_SVG_GZIP = "image/x.svg+gzip";
133+
134+
String MULTIPART_ALTERNATIVE = "multipart/alternative";
135+
String MULTIPART_MIXED = "multipart/mixed";
136+
137+
String TEXT_CSS = "text/css";
97138
String TEXT_CSV = "text/csv";
98139
String TEXT_CSV_SCHEMA = "text/csv-schema";
99-
String TEXT_INVISIBLE_XML = "text/prs.ixml.grammar";
100140
String TEXT_HTML = "text/html";
101141
String TEXT_JAVASCRIPT = "text/javascript";
102142
String TEXT_MARKDOWN = "text/markdown";
143+
String TEXT_N3 = "text/n3";
103144
String TEXT_PLAIN = "text/plain";
145+
String TEXT_TURTLE = "text/turtle";
104146
String TEXT_URI_LIST = "text/uri-list";
147+
148+
/**
149+
* Expect for use within the type attribute of an XML Processing Instruction
150+
* this is probably not what you need, and you should likely use {@link #APPLICATION_XML} instead.
151+
*/
152+
@Deprecated
153+
String TEXT_XSL = "text/xsl";
154+
// </editor-fold>
155+
156+
// <editor-fold desc="Deprecated Media Type Identifiers">
157+
String APPLICATION_EXISTDB_COLLECTION_CONFIG_XML = "application/prs.existdb.collection-config+xml";
158+
159+
/**
160+
* Use {@link #APPLICATION_ELEMENTAL_DOCUMENT} instead.
161+
*/
162+
@Deprecated
163+
String APPLICATION_EXISTDB_DOCUMENT = "application/vnd.existdb.document";
164+
165+
/**
166+
* Use {@link #APPLICATION_ELEMENTAL_DOCUMENT_BINARY} instead.
167+
*/
168+
@Deprecated
169+
String APPLICATION_EXISTDB_DOCUMENT_BINARY = "application/vnd.existdb.document+binary";
170+
171+
/**
172+
* Use {@link #APPLICATION_ELEMENTAL_DOCUMENT_XML} instead.
173+
*/
174+
@Deprecated
175+
String APPLICATION_EXISTDB_DOCUMENT_XML = "application/vnd.existdb.document+xml";
176+
177+
/**
178+
* Use {@link #APPLICATION_ELEMENTAL_COLLECTION} instead.
179+
*/
180+
@Deprecated
181+
String APPLICATION_EXISTDB_COLLECTION = "application/vnd.existdb.collection";
105182
// </editor-fold>
106183
}

elemental-media-type/elemental-media-type-impl/src/main/java/xyz/elemental/mediatype/impl/MediaTypeImpl.java

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,12 +83,24 @@ public StorageType getStorageType() {
8383
return storageType;
8484
}
8585

86+
/**
87+
* Construct a new Media Type.
88+
*
89+
* @param identifier the Media Type identifier
90+
* @param storageType the database storage that should be used for resources of this Media Type
91+
*
92+
* @return a media type builder.
93+
*/
94+
public static MediaTypeImpl.Builder builder(final String identifier, final StorageType storageType) {
95+
return Builder.forMediaType(identifier, storageType);
96+
}
97+
8698
/**
8799
* Builder pattern which allows us to
88100
* ultimately construct an Immutable MediaTypeImpl.
89101
*/
90102
@NotThreadSafe
91-
static class Builder {
103+
public static class Builder {
92104
private final String identifier;
93105
private final StorageType storageType;
94106
private final LinearSet<String> knownFileExtensions = new LinearSet<>();
@@ -114,7 +126,7 @@ static Builder forMediaType(final String identifier, final StorageType storageTy
114126
* @param fileExtension a file extension
115127
* @return this
116128
*/
117-
Builder addFileExtension(final String fileExtension) {
129+
public Builder addFileExtension(final String fileExtension) {
118130
knownFileExtensions.add(fileExtension);
119131
return this;
120132
}
@@ -124,7 +136,7 @@ Builder addFileExtension(final String fileExtension) {
124136
*
125137
* @return an immutable MediaType.
126138
*/
127-
MediaType build() {
139+
public MediaType build() {
128140
final String[] aryKnownFileExtensions = knownFileExtensions.size() > 0 ? knownFileExtensions.toArray(size -> new String[size]) : null;
129141
return new MediaTypeImpl(identifier, aryKnownFileExtensions, storageType);
130142
}

elemental-media-type/elemental-media-type-impl/src/main/java/xyz/elemental/mediatype/impl/MediaTypeResolverFactoryImpl.java

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,7 @@
5050
*/
5151
public class MediaTypeResolverFactoryImpl implements MediaTypeResolverFactory {
5252

53-
/**
54-
* For public use an instance should be obtained via a
55-
* {@link java.util.ServiceLoader}.
56-
*
57-
* Intentionally set to package private to
58-
* enable access for Unit Tests.
59-
*/
60-
MediaTypeResolverFactoryImpl() {
53+
public MediaTypeResolverFactoryImpl() {
6154
}
6255

6356
@Override

elemental-media-type/elemental-media-type-impl/src/main/java/xyz/elemental/mediatype/impl/MediaTypeResolverImpl.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -113,13 +113,6 @@ public MediaTypeResolverImpl(final ApplicationMimetypesFileTypeMap fileTypeMap,
113113
mediaTypeBuilder.addFileExtension(fileExtension);
114114
mutExtensionsIndex.put(fileExtension, mediaTypeBuilder);
115115
}
116-
} else {
117-
// present in extensionsIndex, can assume MediaType impl has this extension
118-
119-
if (!mutIdentifiersIndex.contains(identifier)) {
120-
// present in extensionsIndex, but not present in identifiersIndex
121-
mutIdentifiersIndex.put(identifier, mediaTypeBuilder);
122-
}
123116
}
124117
}
125118
}

0 commit comments

Comments
 (0)