Use properties file to map file extensions to CM3 mime types
Use a properties file to map file extensions to the mime types
used for syntax highlighting in codemirror.
Using a properties file makes it easier to update the mapping
and keep the lines sorted.
Change-Id: Ic84c01b5fd783ffbc59873daa5e758317409f163
(cherry picked from commit bac7d1c053
)
This commit is contained in:

committed by
Jacob Floyd

parent
b4c181dc07
commit
6b47596c47
@@ -16,60 +16,44 @@ package com.google.gerrit.server;
|
|||||||
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
|
|
||||||
|
import eu.medsea.mimeutil.MimeException;
|
||||||
import eu.medsea.mimeutil.MimeType;
|
import eu.medsea.mimeutil.MimeType;
|
||||||
import eu.medsea.mimeutil.MimeUtil;
|
import eu.medsea.mimeutil.MimeUtil;
|
||||||
import eu.medsea.mimeutil.detector.MimeDetector;
|
import eu.medsea.mimeutil.detector.MimeDetector;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
/** Loads mime types from {@code mime-types.properties} at specificity of 2. */
|
||||||
public class DefaultFileExtensionRegistry extends MimeDetector {
|
public class DefaultFileExtensionRegistry extends MimeDetector {
|
||||||
private static final MimeType INI = newMimeType("text/x-ini", 2);
|
private static final Logger log = LoggerFactory.getLogger(DefaultFileExtensionRegistry.class);
|
||||||
private static final MimeType PYTHON = newMimeType("text/x-python", 2);
|
private static final ImmutableMap<String, MimeType> TYPES;
|
||||||
private static final MimeType PERL = newMimeType("text/x-perl", 2);
|
|
||||||
private static final MimeType LISP = newMimeType("text/x-common-lisp", 2);
|
|
||||||
|
|
||||||
private static final ImmutableMap<String, MimeType> TYPES =
|
|
||||||
ImmutableMap.<String,MimeType>builder()
|
|
||||||
.put(".gitmodules", INI)
|
|
||||||
.put("project.config", INI)
|
|
||||||
.put("BUCK", PYTHON)
|
|
||||||
.put("bucklet", newMimeType(PYTHON.toString(), 1))
|
|
||||||
.put("defs", newMimeType(PYTHON.toString(), 1))
|
|
||||||
.put("py", newMimeType(PYTHON.toString(), 1))
|
|
||||||
.put("go", newMimeType("text/x-go", 1))
|
|
||||||
.put("cxx", newMimeType("text/x-c++src", 1))
|
|
||||||
.put("hxx", newMimeType("text/x-c++hdr", 1))
|
|
||||||
.put("scala", newMimeType("text/x-scala", 1))
|
|
||||||
.put("pl", PERL)
|
|
||||||
.put("pm", PERL)
|
|
||||||
.put("rb", newMimeType("text/x-ruby", 2))
|
|
||||||
.put("cl", LISP)
|
|
||||||
.put("el", LISP)
|
|
||||||
.put("lisp", LISP)
|
|
||||||
.put("lsp", LISP)
|
|
||||||
.put("clj", newMimeType("text/x-clojure", 2))
|
|
||||||
.put("groovy", newMimeType("text/x-groovy", 2))
|
|
||||||
.build();
|
|
||||||
|
|
||||||
private static MimeType newMimeType(String type, final int specificity) {
|
|
||||||
return new MimeType(type) {
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public int getSpecificity() {
|
|
||||||
return specificity;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
static {
|
static {
|
||||||
for (MimeType type : TYPES.values()) {
|
Properties prop = new Properties();
|
||||||
|
try (InputStream in = DefaultFileExtensionRegistry.class
|
||||||
|
.getResourceAsStream("mime-types.properties")) {
|
||||||
|
prop.load(in);
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.warn("Cannot load mime-types.properties", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
ImmutableMap.Builder<String, MimeType> b = ImmutableMap.builder();
|
||||||
|
for (Map.Entry<Object, Object> e : prop.entrySet()) {
|
||||||
|
MimeType type = new FileExtensionMimeType((String) e.getValue());
|
||||||
|
b.put((String) e.getKey(), type);
|
||||||
MimeUtil.addKnownMimeType(type);
|
MimeUtil.addKnownMimeType(type);
|
||||||
}
|
}
|
||||||
|
TYPES = b.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -119,4 +103,17 @@ public class DefaultFileExtensionRegistry extends MimeDetector {
|
|||||||
protected Collection<MimeType> getMimeTypesByteArray(byte[] arg0) {
|
protected Collection<MimeType> getMimeTypesByteArray(byte[] arg0) {
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final class FileExtensionMimeType extends MimeType {
|
||||||
|
private static final long serialVersionUID = 1L;
|
||||||
|
|
||||||
|
FileExtensionMimeType(String mimeType) throws MimeException {
|
||||||
|
super(mimeType);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getSpecificity() {
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,19 @@
|
|||||||
|
bucklet = text/x-python
|
||||||
|
BUCK = text/x-python
|
||||||
|
clj = text/x-clojure
|
||||||
|
cl = text/x-common-lisp
|
||||||
|
cxx = text/x-c++src
|
||||||
|
defs = text/x-python
|
||||||
|
el = text/x-common-lisp
|
||||||
|
gitmodules = text/x-ini
|
||||||
|
go = text/x-go
|
||||||
|
groovy = text/x-groovy
|
||||||
|
hxx = text/x-c++hdr
|
||||||
|
lisp = text/x-common-lisp
|
||||||
|
lsp = text/x-common-lisp
|
||||||
|
pl = text/x-perl
|
||||||
|
pm = text/x-perl
|
||||||
|
project.config = text/x-ini
|
||||||
|
py = text/x-python
|
||||||
|
rb = text/x-ruby
|
||||||
|
scala = text/x-scala
|
Reference in New Issue
Block a user