diff --git a/pom.xml b/pom.xml
index 3a78e29c..4038947e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -348,7 +348,20 @@
joda-time
2.4
-
+
+
+
+ org.apache.odftoolkit
+ simple-odf
+ 0.7-incubating
+
+
+
+ org.apache.poi
+ poi-ooxml
+ 3.11
+
+
junit
diff --git a/src/main/java/info/bukova/isspst/AppInitListener.java b/src/main/java/info/bukova/isspst/AppInitListener.java
index c1155426..1314cd04 100644
--- a/src/main/java/info/bukova/isspst/AppInitListener.java
+++ b/src/main/java/info/bukova/isspst/AppInitListener.java
@@ -11,8 +11,8 @@ import info.bukova.isspst.data.User;
import info.bukova.isspst.reporting.Report;
import info.bukova.isspst.reporting.ReportMapping;
import info.bukova.isspst.reporting.ReportType;
-import info.bukova.isspst.services.FullTextService;
import info.bukova.isspst.services.dbinfo.DbInfoService;
+import info.bukova.isspst.services.fulltext.FullTextService;
import info.bukova.isspst.services.munits.MUnitService;
import info.bukova.isspst.services.numberseries.NumberSeriesService;
import info.bukova.isspst.services.requirement.RequirementTypeService;
@@ -20,19 +20,17 @@ import info.bukova.isspst.services.settings.GlobalSettingsService;
import info.bukova.isspst.services.users.PermissionService;
import info.bukova.isspst.services.users.RoleService;
import info.bukova.isspst.services.users.UserService;
-
-import java.math.BigDecimal;
-import java.util.List;
-
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+import java.math.BigDecimal;
+import java.util.List;
+
public class AppInitListener implements ServletContextListener {
diff --git a/src/main/java/info/bukova/isspst/Constants.java b/src/main/java/info/bukova/isspst/Constants.java
index 0645cce3..b802a111 100644
--- a/src/main/java/info/bukova/isspst/Constants.java
+++ b/src/main/java/info/bukova/isspst/Constants.java
@@ -10,7 +10,7 @@ import info.bukova.isspst.data.TripBill;
import info.bukova.isspst.data.TripRequirement;
import info.bukova.isspst.reporting.Report;
import info.bukova.isspst.reporting.ReportMapping;
-import info.bukova.isspst.services.FullTextService;
+import info.bukova.isspst.services.fulltext.FullTextService;
import info.bukova.isspst.services.addressbook.AdbService;
import info.bukova.isspst.services.buildings.BuildingService;
import info.bukova.isspst.services.invoicing.InvoicingService;
diff --git a/src/main/java/info/bukova/isspst/data/FileContent.java b/src/main/java/info/bukova/isspst/data/FileContent.java
new file mode 100644
index 00000000..f2aeaf73
--- /dev/null
+++ b/src/main/java/info/bukova/isspst/data/FileContent.java
@@ -0,0 +1,97 @@
+package info.bukova.isspst.data;
+
+import org.hibernate.annotations.Type;
+import org.hibernate.search.annotations.Analyze;
+import org.hibernate.search.annotations.Field;
+import org.hibernate.search.annotations.Index;
+import org.hibernate.search.annotations.Indexed;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+/**
+ * @author Pepa Rokos
+ */
+@Entity
+@Table(name = "FILE_CONTENTS")
+@Indexed
+public class FileContent {
+
+ @Id
+ @Column(name = "ID")
+ @GeneratedValue
+ private int id;
+
+ @Column(name = "CONTENT")
+ @Type(type = "text")
+ @Field(index = Index.YES, analyze = Analyze.YES)
+ private String plainText;
+
+ @Column(name = "CONTENT_TYPE")
+ private String contentType;
+
+ @Column(name = "PATH_IN_FILESYSTEM")
+ private String pathInFilesystem;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getPlainText() {
+ return plainText;
+
+ }
+
+ public void setPlainText(String content) {
+ this.plainText = content;
+ }
+
+ public String getContentType() {
+ return contentType;
+ }
+
+ public void setContentType(String contentType) {
+ this.contentType = contentType;
+ }
+
+ public String getPathInFilesystem() {
+ return pathInFilesystem;
+ }
+
+ public void setPathInFilesystem(String pathInFilesystem) {
+ this.pathInFilesystem = pathInFilesystem;
+ }
+
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) return true;
+ if (!(o instanceof FileContent)) return false;
+
+ FileContent that = (FileContent) o;
+
+ if (id != that.id) return false;
+ if (plainText != null ? !plainText.equals(that.plainText) : that.plainText != null) return false;
+ if (contentType != null ? !contentType.equals(that.contentType) : that.contentType != null) return false;
+ if (pathInFilesystem != null ? !pathInFilesystem.equals(that.pathInFilesystem) : that.pathInFilesystem != null)
+ return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode() {
+ int result = id;
+ result = 31 * result + (plainText != null ? plainText.hashCode() : 0);
+ result = 31 * result + (contentType != null ? contentType.hashCode() : 0);
+ result = 31 * result + (pathInFilesystem != null ? pathInFilesystem.hashCode() : 0);
+ return result;
+ }
+}
diff --git a/src/main/java/info/bukova/isspst/data/FileMetainfo.java b/src/main/java/info/bukova/isspst/data/FileMetainfo.java
index f04484ff..c2697eef 100644
--- a/src/main/java/info/bukova/isspst/data/FileMetainfo.java
+++ b/src/main/java/info/bukova/isspst/data/FileMetainfo.java
@@ -1,13 +1,17 @@
package info.bukova.isspst.data;
-import org.hibernate.annotations.Type;
import org.hibernate.search.annotations.Analyze;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.Index;
import org.hibernate.search.annotations.Indexed;
+import org.hibernate.search.annotations.IndexedEmbedded;
+import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@@ -16,23 +20,32 @@ import javax.persistence.Table;
public class FileMetainfo extends BaseData {
@Column(name = "FILE_NAME")
+ @Field(index = Index.YES, analyze = Analyze.YES)
private String fileName;
- @Column(name = "PATH_IN_FILESYSTEM")
- private String pathInFilesystem;
+
@Column(name = "MODULE_ID")
private String moduleId;
+
@Column(name = "RECORD_ID")
private int recordId;
- @Column(name = "CONTENT")
- @Type(type = "text")
- @Field(index = Index.YES, analyze = Analyze.YES)
- private String content;
+
+ @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
+ @JoinColumn(name = "CONTENT_ID")
+ @IndexedEmbedded
+ private FileContent content;
+
@Column(name = "MD5")
private String md5;
+
@Column(name = "DESCRIPTION")
+ @Field(index = Index.YES, analyze = Analyze.YES)
private String description;
- @Column(name = "CONTENT_TYPE")
- private String contentType;
+
+ private void ensureContentExists() {
+ if (content == null) {
+ content = new FileContent();
+ }
+ }
public String getFileName() {
return fileName;
@@ -43,11 +56,15 @@ public class FileMetainfo extends BaseData {
}
public String getPathInFilesystem() {
- return pathInFilesystem;
+ if (content != null) {
+ return content.getPathInFilesystem();
+ }
+ return null;
}
public void setPathInFilesystem(String pathInFilesystem) {
- this.pathInFilesystem = pathInFilesystem;
+ ensureContentExists();
+ content.setPathInFilesystem(pathInFilesystem);
}
public String getModuleId() {
@@ -66,11 +83,11 @@ public class FileMetainfo extends BaseData {
this.recordId = recordId;
}
- public String getContent() {
+ public FileContent getContent() {
return content;
}
- public void setContent(String content) {
+ public void setContent(FileContent content) {
this.content = content;
}
@@ -91,11 +108,16 @@ public class FileMetainfo extends BaseData {
}
public String getContentType() {
- return contentType;
+ if (content != null) {
+ return content.getContentType();
+ }
+
+ return null;
}
public void setContentType(String contentType) {
- this.contentType = contentType;
+ ensureContentExists();
+ content.setContentType(contentType);
}
@Override
@@ -105,16 +127,12 @@ public class FileMetainfo extends BaseData {
FileMetainfo that = (FileMetainfo) o;
- if (getId() != 0 && getId() != that.getId()) return false;
if (recordId != that.recordId) return false;
if (content != null ? !content.equals(that.content) : that.content != null) return false;
- if (contentType != null ? !contentType.equals(that.contentType) : that.contentType != null) return false;
if (description != null ? !description.equals(that.description) : that.description != null) return false;
if (fileName != null ? !fileName.equals(that.fileName) : that.fileName != null) return false;
if (md5 != null ? !md5.equals(that.md5) : that.md5 != null) return false;
if (moduleId != null ? !moduleId.equals(that.moduleId) : that.moduleId != null) return false;
- if (pathInFilesystem != null ? !pathInFilesystem.equals(that.pathInFilesystem) : that.pathInFilesystem != null)
- return false;
return true;
}
@@ -122,13 +140,11 @@ public class FileMetainfo extends BaseData {
@Override
public int hashCode() {
int result = fileName != null ? fileName.hashCode() : 0;
- result = 31 * result + (pathInFilesystem != null ? pathInFilesystem.hashCode() : 0);
result = 31 * result + (moduleId != null ? moduleId.hashCode() : 0);
result = 31 * result + recordId;
result = 31 * result + (content != null ? content.hashCode() : 0);
result = 31 * result + (md5 != null ? md5.hashCode() : 0);
result = 31 * result + (description != null ? description.hashCode() : 0);
- result = 31 * result + (contentType != null ? contentType.hashCode() : 0);
return result;
}
}
diff --git a/src/main/java/info/bukova/isspst/services/fulltext/AbstractExtractor.java b/src/main/java/info/bukova/isspst/services/fulltext/AbstractExtractor.java
new file mode 100644
index 00000000..eb03f3f9
--- /dev/null
+++ b/src/main/java/info/bukova/isspst/services/fulltext/AbstractExtractor.java
@@ -0,0 +1,14 @@
+package info.bukova.isspst.services.fulltext;
+
+import java.io.ByteArrayInputStream;
+
+/**
+ * @author Pepa Rokos
+ */
+public abstract class AbstractExtractor implements Extractor {
+
+ public String extract(byte[] data) {
+ return extract(new ByteArrayInputStream(data));
+ }
+
+}
diff --git a/src/main/java/info/bukova/isspst/services/fulltext/AbstractOfficeExtractor.java b/src/main/java/info/bukova/isspst/services/fulltext/AbstractOfficeExtractor.java
new file mode 100644
index 00000000..08f91464
--- /dev/null
+++ b/src/main/java/info/bukova/isspst/services/fulltext/AbstractOfficeExtractor.java
@@ -0,0 +1,25 @@
+package info.bukova.isspst.services.fulltext;
+
+import org.apache.poi.POIXMLTextExtractor;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * @author Pepa Rokos
+ */
+public abstract class AbstractOfficeExtractor extends AbstractExtractor {
+
+ @Override
+ public String extract(InputStream is) throws ExtractorException {
+ try {
+ POIXMLTextExtractor extractor = createExtractor(is);
+ return extractor.getText();
+ } catch (IOException e) {
+ throw new ExtractorException(e);
+ }
+ }
+
+ protected abstract POIXMLTextExtractor createExtractor(InputStream is) throws IOException;
+
+}
diff --git a/src/main/java/info/bukova/isspst/services/fulltext/ExcelExtractor.java b/src/main/java/info/bukova/isspst/services/fulltext/ExcelExtractor.java
new file mode 100644
index 00000000..281bc5f7
--- /dev/null
+++ b/src/main/java/info/bukova/isspst/services/fulltext/ExcelExtractor.java
@@ -0,0 +1,19 @@
+package info.bukova.isspst.services.fulltext;
+
+import org.apache.poi.POIXMLTextExtractor;
+import org.apache.poi.xssf.extractor.XSSFExcelExtractor;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * @author Pepa Rokos
+ */
+public class ExcelExtractor extends AbstractOfficeExtractor implements Extractor {
+
+ @Override
+ protected POIXMLTextExtractor createExtractor(InputStream is) throws IOException {
+ return new XSSFExcelExtractor(new XSSFWorkbook(is));
+ }
+}
diff --git a/src/main/java/info/bukova/isspst/services/fulltext/Extractor.java b/src/main/java/info/bukova/isspst/services/fulltext/Extractor.java
new file mode 100644
index 00000000..8dd0a458
--- /dev/null
+++ b/src/main/java/info/bukova/isspst/services/fulltext/Extractor.java
@@ -0,0 +1,30 @@
+package info.bukova.isspst.services.fulltext;
+
+import java.io.InputStream;
+
+/**
+ * @author Pepa Rokos
+ *
+ * Rozhraní extractoru čistého textu z formátů Office a PDF
+ */
+public interface Extractor {
+
+ /**
+ * Extrahuje text z předaného pole bytů
+ *
+ * @param data zdrajová data
+ * @return čistý text
+ * @throws ExtractorException
+ */
+ public String extract(byte[] data) throws ExtractorException;
+
+ /**
+ * Extrahuje text z předaného InputStream objektu
+ *
+ * @param is zdrojový InputStream
+ * @return čistý text
+ * @throws ExtractorException
+ */
+ public String extract(InputStream is) throws ExtractorException;
+
+}
diff --git a/src/main/java/info/bukova/isspst/services/fulltext/ExtractorException.java b/src/main/java/info/bukova/isspst/services/fulltext/ExtractorException.java
new file mode 100644
index 00000000..0ce846ea
--- /dev/null
+++ b/src/main/java/info/bukova/isspst/services/fulltext/ExtractorException.java
@@ -0,0 +1,16 @@
+package info.bukova.isspst.services.fulltext;
+
+import info.bukova.isspst.services.IsspstException;
+
+/**
+ * @author Pepa Rokos
+ *
+ * Výjimka extrakce textu
+ */
+public class ExtractorException extends IsspstException {
+
+ public ExtractorException(Throwable cause) {
+ super("Extractor exception: ", cause);
+ }
+
+}
diff --git a/src/main/java/info/bukova/isspst/services/fulltext/ExtractorFactory.java b/src/main/java/info/bukova/isspst/services/fulltext/ExtractorFactory.java
new file mode 100644
index 00000000..3f37269a
--- /dev/null
+++ b/src/main/java/info/bukova/isspst/services/fulltext/ExtractorFactory.java
@@ -0,0 +1,42 @@
+package info.bukova.isspst.services.fulltext;
+
+/**
+ * @author Pepa Rokos
+ *
+ * Factory pro konkrétní extractor
+ */
+public class ExtractorFactory {
+
+ /**
+ * Vytvoří extractor podle předaného content typu
+ *
+ * @param contentType
+ * @return Extractor
+ */
+ public static Extractor createExtractor(String contentType) {
+ if (contentType.equals("application/vnd.oasis.opendocument.text")
+ || contentType.equals("application/vnd.oasis.opendocument.spreadsheet")
+ || contentType.equals("application/vnd.oasis.opendocument.presentation")) {
+ return new OdfExtractor();
+ }
+
+ if (contentType.equals("application/vnd.openxmlformats-officedocument.wordprocessingml.document")) {
+ return new WordExtractor();
+ }
+
+ if (contentType.equals("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")) {
+ return new ExcelExtractor();
+ }
+
+ if (contentType.equals("application/vnd.openxmlformats-officedocument.presentationml.slideshow")) {
+ return new PowerPointExtractor();
+ }
+
+ if (contentType.equals("application/pdf")) {
+ return new PdfExtractor();
+ }
+
+ return null;
+ }
+
+}
diff --git a/src/main/java/info/bukova/isspst/services/FullTextService.java b/src/main/java/info/bukova/isspst/services/fulltext/FullTextService.java
similarity index 95%
rename from src/main/java/info/bukova/isspst/services/FullTextService.java
rename to src/main/java/info/bukova/isspst/services/fulltext/FullTextService.java
index 7217663b..f1fa4aa8 100644
--- a/src/main/java/info/bukova/isspst/services/FullTextService.java
+++ b/src/main/java/info/bukova/isspst/services/fulltext/FullTextService.java
@@ -1,10 +1,10 @@
-package info.bukova.isspst.services;
-
-import java.util.List;
+package info.bukova.isspst.services.fulltext;
import org.hibernate.search.annotations.Field;
import org.hibernate.search.annotations.Indexed;
+import java.util.List;
+
/**
* @author Pepa Rokos
*
diff --git a/src/main/java/info/bukova/isspst/services/FullTextServiceImpl.java b/src/main/java/info/bukova/isspst/services/fulltext/FullTextServiceImpl.java
similarity index 97%
rename from src/main/java/info/bukova/isspst/services/FullTextServiceImpl.java
rename to src/main/java/info/bukova/isspst/services/fulltext/FullTextServiceImpl.java
index c2583459..518a32a0 100644
--- a/src/main/java/info/bukova/isspst/services/FullTextServiceImpl.java
+++ b/src/main/java/info/bukova/isspst/services/fulltext/FullTextServiceImpl.java
@@ -1,9 +1,10 @@
-package info.bukova.isspst.services;
+package info.bukova.isspst.services.fulltext;
import info.bukova.isspst.ModuleUtils;
import info.bukova.isspst.dao.QueryDao;
import info.bukova.isspst.data.BaseData;
import info.bukova.isspst.data.User;
+import info.bukova.isspst.services.ModuleNotActiveException;
import info.bukova.isspst.sort.ReflectionTools;
import org.apache.lucene.search.Query;
import org.hibernate.Hibernate;
diff --git a/src/main/java/info/bukova/isspst/services/fulltext/OdfExtractor.java b/src/main/java/info/bukova/isspst/services/fulltext/OdfExtractor.java
new file mode 100644
index 00000000..b194fb97
--- /dev/null
+++ b/src/main/java/info/bukova/isspst/services/fulltext/OdfExtractor.java
@@ -0,0 +1,24 @@
+package info.bukova.isspst.services.fulltext;
+
+import org.odftoolkit.simple.Document;
+import org.odftoolkit.simple.common.TextExtractor;
+
+import java.io.InputStream;
+
+/**
+ * @author Pepa Rokos
+ */
+public class OdfExtractor extends AbstractExtractor implements Extractor {
+
+ @Override
+ public String extract(InputStream is) throws ExtractorException {
+ try {
+ Document odfDocument = Document.loadDocument(is);
+ TextExtractor extractor = TextExtractor.newOdfTextExtractor(odfDocument.getContentRoot());
+
+ return extractor.getText();
+ } catch (Exception e) {
+ throw new ExtractorException(e);
+ }
+ }
+}
diff --git a/src/main/java/info/bukova/isspst/services/fulltext/PdfExtractor.java b/src/main/java/info/bukova/isspst/services/fulltext/PdfExtractor.java
new file mode 100644
index 00000000..06712a65
--- /dev/null
+++ b/src/main/java/info/bukova/isspst/services/fulltext/PdfExtractor.java
@@ -0,0 +1,32 @@
+package info.bukova.isspst.services.fulltext;
+
+import com.lowagie.text.pdf.PdfReader;
+import com.lowagie.text.pdf.parser.PdfTextExtractor;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * @author Pepa Rokos
+ */
+public class PdfExtractor extends AbstractExtractor implements Extractor {
+
+ @Override
+ public String extract(InputStream is) throws ExtractorException {
+ try {
+ PdfReader reader = new PdfReader(is);
+ PdfTextExtractor extractor = new PdfTextExtractor(reader);
+ StringBuilder sb = new StringBuilder();
+
+ for (int i = 1; i <= reader.getNumberOfPages(); i++) {
+ sb.append(extractor.getTextFromPage(i));
+ }
+
+ return sb.toString();
+
+ } catch (IOException e) {
+ throw new ExtractorException(e);
+ }
+ }
+
+}
diff --git a/src/main/java/info/bukova/isspst/services/fulltext/PowerPointExtractor.java b/src/main/java/info/bukova/isspst/services/fulltext/PowerPointExtractor.java
new file mode 100644
index 00000000..87ee535c
--- /dev/null
+++ b/src/main/java/info/bukova/isspst/services/fulltext/PowerPointExtractor.java
@@ -0,0 +1,20 @@
+package info.bukova.isspst.services.fulltext;
+
+import org.apache.poi.POIXMLTextExtractor;
+import org.apache.poi.xslf.extractor.XSLFPowerPointExtractor;
+import org.apache.poi.xslf.usermodel.XMLSlideShow;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * @author Pepa Rokos
+ */
+public class PowerPointExtractor extends AbstractOfficeExtractor implements Extractor {
+
+ @Override
+ protected POIXMLTextExtractor createExtractor(InputStream is) throws IOException {
+ return new XSLFPowerPointExtractor(new XMLSlideShow(is));
+ }
+
+}
diff --git a/src/main/java/info/bukova/isspst/services/fulltext/WordExtractor.java b/src/main/java/info/bukova/isspst/services/fulltext/WordExtractor.java
new file mode 100644
index 00000000..eb58c544
--- /dev/null
+++ b/src/main/java/info/bukova/isspst/services/fulltext/WordExtractor.java
@@ -0,0 +1,19 @@
+package info.bukova.isspst.services.fulltext;
+
+import org.apache.poi.POIXMLTextExtractor;
+import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
+import org.apache.poi.xwpf.usermodel.XWPFDocument;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * @author Pepa Rokos
+ */
+public class WordExtractor extends AbstractOfficeExtractor implements Extractor {
+
+ @Override
+ protected POIXMLTextExtractor createExtractor(InputStream is) throws IOException {
+ return new XWPFWordExtractor(new XWPFDocument(is));
+ }
+}
diff --git a/src/main/java/info/bukova/isspst/storage/DocumentFileStorageImpl.java b/src/main/java/info/bukova/isspst/storage/DocumentFileStorageImpl.java
index 7a6a9387..91e5d08c 100644
--- a/src/main/java/info/bukova/isspst/storage/DocumentFileStorageImpl.java
+++ b/src/main/java/info/bukova/isspst/storage/DocumentFileStorageImpl.java
@@ -2,6 +2,8 @@ package info.bukova.isspst.storage;
import info.bukova.isspst.dao.QueryDao;
import info.bukova.isspst.data.FileMetainfo;
+import info.bukova.isspst.services.fulltext.Extractor;
+import info.bukova.isspst.services.fulltext.ExtractorFactory;
import org.apache.commons.codec.binary.Hex;
import org.hibernate.Query;
import org.springframework.beans.factory.annotation.Autowired;
@@ -68,6 +70,15 @@ public class DocumentFileStorageImpl extends AbstractFileStorage i
return fileName;
}
+ private void extractContent(InputStream is, FileMetainfo fileID) {
+ Extractor extractor = ExtractorFactory.createExtractor(fileID.getContentType());
+
+ if (extractor != null) {
+ fileID.getContent().setPlainText(extractor.extract(is));
+ }
+
+ }
+
@Override
@Transactional
public void removeFile(FileMetainfo fileID) {
@@ -126,6 +137,7 @@ public class DocumentFileStorageImpl extends AbstractFileStorage i
if (!checkForDuplicate(new ByteArrayInputStream(data), metaInfo)) {
saveFile(data, metaInfo);
+ extractContent(new ByteArrayInputStream(data), metaInfo);
}
return metaInfo;
@@ -140,6 +152,7 @@ public class DocumentFileStorageImpl extends AbstractFileStorage i
try {
if (!checkForDuplicate(new FileInputStream(file), metaInfo)) {
saveFile(file, metaInfo);
+ extractContent(new FileInputStream(file), metaInfo);
}
} catch (FileNotFoundException e) {
//TODO: ošetřit
@@ -192,9 +205,8 @@ public class DocumentFileStorageImpl extends AbstractFileStorage i
if (!found.isEmpty()) {
FileMetainfo foundInfo = found.get(0);
- info.setPathInFilesystem(foundInfo.getPathInFilesystem());
info.setMd5(foundInfo.getMd5());
- info.setContentType(foundInfo.getContentType());
+ info.setContent(foundInfo.getContent());
return true;
} else {
diff --git a/src/main/java/info/bukova/isspst/storage/MimeTypes.java b/src/main/java/info/bukova/isspst/storage/MimeTypes.java
index 74fb2059..4bc272a7 100644
--- a/src/main/java/info/bukova/isspst/storage/MimeTypes.java
+++ b/src/main/java/info/bukova/isspst/storage/MimeTypes.java
@@ -231,7 +231,7 @@ public class MimeTypes {
if (mimeTypes.size() == 0)
{
HashMap tempMap = new HashMap();
- InputStream is = MimeTypes.class.getResourceAsStream("mime.types.properties");
+ InputStream is = MimeTypes.class.getResourceAsStream("/mime.types.properties");
try
{
Properties properties = new Properties();
@@ -248,6 +248,7 @@ public class MimeTypes {
}
catch (IOException e)
{
+ //ToDo: ošetřit
//Debug.error(e);
}
finally
@@ -258,6 +259,7 @@ public class MimeTypes {
}
catch (IOException e)
{
+ //ToDo: ošetřit
//Debug.error(e);
}
}
diff --git a/src/main/java/info/bukova/isspst/ui/search/SearchForm.java b/src/main/java/info/bukova/isspst/ui/search/SearchForm.java
index 24b3ae64..eea266be 100644
--- a/src/main/java/info/bukova/isspst/ui/search/SearchForm.java
+++ b/src/main/java/info/bukova/isspst/ui/search/SearchForm.java
@@ -1,14 +1,13 @@
package info.bukova.isspst.ui.search;
import info.bukova.isspst.UrlResolverHolder;
-import info.bukova.isspst.services.FullTextService;
-
-import java.util.List;
-
+import info.bukova.isspst.services.fulltext.FullTextService;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zk.ui.select.annotation.WireVariable;
+import java.util.List;
+
public class SearchForm {
@WireVariable
diff --git a/src/main/resources/hibernate.cfg.xml b/src/main/resources/hibernate.cfg.xml
index 2e5d8952..95356639 100644
--- a/src/main/resources/hibernate.cfg.xml
+++ b/src/main/resources/hibernate.cfg.xml
@@ -34,5 +34,6 @@
+
\ No newline at end of file
diff --git a/src/main/resources/mime.types.properties b/src/main/resources/mime.types.properties
new file mode 100644
index 00000000..96cf4ac6
--- /dev/null
+++ b/src/main/resources/mime.types.properties
@@ -0,0 +1,1351 @@
+# This file maps Internet media types to unique file extension(s).
+# Although created for httpd, this file is used by many software systems
+# and has been placed in the public domain for unlimited redisribution.
+#
+# The table below contains both registered and (common) unregistered types.
+# A type that has no unique extension can be ignored -- they are listed
+# here to guide configurations toward known types and to make it easier to
+# identify "new" types. File extensions are also commonly used to indicate
+# content languages and encodings, so choose them carefully.
+#
+# Internet media types should be registered as described in RFC 4288.
+# The registry is at .
+#
+# MIME type=Extensions
+# application/3gpp-ims+xml
+# application/activemessage
+application/andrew-inset=ez
+# application/applefile
+application/applixware=aw
+application/atom+xml=atom
+application/atomcat+xml=atomcat
+# application/atomicmail
+application/atomsvc+xml=atomsvc
+# application/auth-policy+xml
+# application/batch-smtp
+# application/beep+xml
+# application/cals-1840
+application/ccxml+xml=ccxml
+# application/cea-2018+xml
+# application/cellml+xml
+# application/cnrp+xml
+# application/commonground
+# application/conference-info+xml
+# application/cpl+xml
+# application/csta+xml
+# application/cstadata+xml
+application/cu-seeme=cu
+# application/cybercash
+application/davmount+xml=davmount
+# application/dca-rft
+# application/dec-dx
+# application/dialog-info+xml
+# application/dicom
+# application/dns
+application/dssc+der=dssc
+application/dssc+xml=xdssc
+# application/dvcs
+application/ecmascript=ecma
+# application/edi-consent
+# application/edi-x12
+# application/edifact
+application/emma+xml=emma
+# application/epp+xml
+application/epub+zip=epub
+# application/eshop
+# application/example
+# application/fastinfoset
+# application/fastsoap
+# application/fits
+application/font-tdpfr=pfr
+# application/h224
+# application/held+xml
+# application/http
+application/hyperstudio=stk
+# application/ibe-key-request+xml
+# application/ibe-pkg-reply+xml
+# application/ibe-pp-data
+# application/iges
+# application/im-iscomposing+xml
+# application/index
+# application/index.cmd
+# application/index.obj
+# application/index.response
+# application/index.vnd
+# application/iotp
+application/ipfix=ipfix
+# application/ipp
+# application/isup
+application/java-archive=jar
+application/java-serialized-object=ser
+application/java-vm=class
+#application/javascript=js
+application/json=json
+# application/kpml-request+xml
+# application/kpml-response+xml
+application/lost+xml=lostxml
+application/mac-binhex40=hqx
+application/mac-compactpro=cpt
+# application/macwriteii
+application/marc=mrc
+application/mathematica=ma nb mb
+application/mathml+xml=mathml
+# application/mbms-associated-procedure-description+xml
+# application/mbms-deregister+xml
+# application/mbms-envelope+xml
+# application/mbms-msk+xml
+# application/mbms-msk-response+xml
+# application/mbms-protection-description+xml
+# application/mbms-reception-report+xml
+# application/mbms-register+xml
+# application/mbms-register-response+xml
+# application/mbms-user-service-description+xml
+application/mbox=mbox
+# application/media_control+xml
+application/mediaservercontrol+xml=mscml
+# application/mikey
+# application/moss-keys
+# application/moss-signature
+# application/mosskey-data
+# application/mosskey-request
+application/mp4=mp4s
+# application/mpeg4-generic
+# application/mpeg4-iod
+# application/mpeg4-iod-xmt
+application/msword=doc dot
+application/mxf=mxf
+# application/nasdata
+# application/news-checkgroups
+# application/news-groupinfo
+# application/news-transmission
+# application/nss
+# application/ocsp-request
+# application/ocsp-response
+application/octet-stream=bin dms lha lrf lzh so iso dmg dist distz pkg bpk dump elc deploy
+application/oda=oda
+application/oebps-package+xml=opf
+application/ogg=ogx
+application/onenote=onetoc onetoc2 onetmp onepkg
+# application/parityfec
+application/patch-ops-error+xml=xer
+application/pdf=pdf
+application/pgp-encrypted=pgp
+# application/pgp-keys
+application/pgp-signature=asc sig
+application/pics-rules=prf
+# application/pidf+xml
+# application/pidf-diff+xml
+application/pkcs10=p10
+application/pkcs7-mime=p7m p7c
+application/pkcs7-signature=p7s
+application/pkix-cert=cer
+application/pkix-crl=crl
+application/pkix-pkipath=pkipath
+application/pkixcmp=pki
+application/pls+xml=pls
+# application/poc-settings+xml
+application/postscript=ai eps ps
+# application/prs.alvestrand.titrax-sheet
+application/prs.cww=cww
+# application/prs.nprend
+# application/prs.plucker
+# application/qsig
+application/rdf+xml=rdf
+application/reginfo+xml=rif
+application/relax-ng-compact-syntax=rnc
+# application/remote-printing
+application/resource-lists+xml=rl
+application/resource-lists-diff+xml=rld
+# application/riscos
+# application/rlmi+xml
+application/rls-services+xml=rs
+application/rsd+xml=rsd
+application/rss+xml=rss
+application/rtf=rtf
+# application/rtx
+# application/samlassertion+xml
+# application/samlmetadata+xml
+application/sbml+xml=sbml
+application/scvp-cv-request=scq
+application/scvp-cv-response=scs
+application/scvp-vp-request=spq
+application/scvp-vp-response=spp
+application/sdp=sdp
+# application/set-payment
+application/set-payment-initiation=setpay
+# application/set-registration
+application/set-registration-initiation=setreg
+# application/sgml
+# application/sgml-open-catalog
+application/shf+xml=shf
+# application/sieve
+# application/simple-filter+xml
+# application/simple-message-summary
+# application/simplesymbolcontainer
+# application/slate
+# application/smil
+application/smil+xml=smi smil
+# application/soap+fastinfoset
+# application/soap+xml
+application/sparql-query=rq
+application/sparql-results+xml=srx
+# application/spirits-event+xml
+application/srgs=gram
+application/srgs+xml=grxml
+application/ssml+xml=ssml
+# application/timestamp-query
+# application/timestamp-reply
+# application/tve-trigger
+# application/ulpfec
+# application/vemmi
+# application/vividence.scriptfile
+# application/vnd.3gpp.bsf+xml
+application/vnd.3gpp.pic-bw-large=plb
+application/vnd.3gpp.pic-bw-small=psb
+application/vnd.3gpp.pic-bw-var=pvb
+# application/vnd.3gpp.sms
+# application/vnd.3gpp2.bcmcsinfo+xml
+# application/vnd.3gpp2.sms
+application/vnd.3gpp2.tcap=tcap
+application/vnd.3m.post-it-notes=pwn
+application/vnd.accpac.simply.aso=aso
+application/vnd.accpac.simply.imp=imp
+application/vnd.acucobol=acu
+application/vnd.acucorp=atc acutc
+application/vnd.adobe.air-application-installer-package+zip=air
+# application/vnd.adobe.partial-upload
+application/vnd.adobe.xdp+xml=xdp
+application/vnd.adobe.xfdf=xfdf
+# application/vnd.aether.imp
+application/vnd.airzip.filesecure.azf=azf
+application/vnd.airzip.filesecure.azs=azs
+application/vnd.amazon.ebook=azw
+application/vnd.americandynamics.acc=acc
+application/vnd.amiga.ami=ami
+application/vnd.android.package-archive=apk
+application/vnd.anser-web-certificate-issue-initiation=cii
+application/vnd.anser-web-funds-transfer-initiation=fti
+application/vnd.antix.game-component=atx
+application/vnd.apple.installer+xml=mpkg
+application/vnd.apple.mpegurl=m3u8
+# application/vnd.arastra.swi
+application/vnd.aristanetworks.swi=swi
+application/vnd.audiograph=aep
+# application/vnd.autopackage
+# application/vnd.avistar+xml
+application/vnd.blueice.multipass=mpm
+# application/vnd.bluetooth.ep.oob
+application/vnd.bmi=bmi
+application/vnd.businessobjects=rep
+# application/vnd.cab-jscript
+# application/vnd.canon-cpdl
+# application/vnd.canon-lips
+# application/vnd.cendio.thinlinc.clientconf
+application/vnd.chemdraw+xml=cdxml
+application/vnd.chipnuts.karaoke-mmd=mmd
+application/vnd.cinderella=cdy
+# application/vnd.cirpack.isdn-ext
+application/vnd.claymore=cla
+application/vnd.cloanto.rp9=rp9
+application/vnd.clonk.c4group=c4g c4d c4f c4p c4u
+# application/vnd.commerce-battelle
+application/vnd.commonspace=csp
+application/vnd.contact.cmsg=cdbcmsg
+application/vnd.cosmocaller=cmc
+application/vnd.crick.clicker=clkx
+application/vnd.crick.clicker.keyboard=clkk
+application/vnd.crick.clicker.palette=clkp
+application/vnd.crick.clicker.template=clkt
+application/vnd.crick.clicker.wordbank=clkw
+application/vnd.criticaltools.wbs+xml=wbs
+application/vnd.ctc-posml=pml
+# application/vnd.ctct.ws+xml
+# application/vnd.cups-pdf
+# application/vnd.cups-postscript
+application/vnd.cups-ppd=ppd
+# application/vnd.cups-raster
+# application/vnd.cups-raw
+application/vnd.curl.car=car
+application/vnd.curl.pcurl=pcurl
+# application/vnd.cybank
+application/vnd.data-vision.rdz=rdz
+application/vnd.denovo.fcselayout-link=fe_launch
+# application/vnd.dir-bi.plate-dl-nosuffix
+application/vnd.dna=dna
+application/vnd.dolby.mlp=mlp
+# application/vnd.dolby.mobile.1
+# application/vnd.dolby.mobile.2
+application/vnd.dpgraph=dpg
+application/vnd.dreamfactory=dfac
+# application/vnd.dvb.esgcontainer
+# application/vnd.dvb.ipdcdftnotifaccess
+# application/vnd.dvb.ipdcesgaccess
+# application/vnd.dvb.ipdcroaming
+# application/vnd.dvb.iptv.alfec-base
+# application/vnd.dvb.iptv.alfec-enhancement
+# application/vnd.dvb.notif-aggregate-root+xml
+# application/vnd.dvb.notif-container+xml
+# application/vnd.dvb.notif-generic+xml
+# application/vnd.dvb.notif-ia-msglist+xml
+# application/vnd.dvb.notif-ia-registration-request+xml
+# application/vnd.dvb.notif-ia-registration-response+xml
+# application/vnd.dvb.notif-init+xml
+# application/vnd.dxr
+application/vnd.dynageo=geo
+# application/vnd.ecdis-update
+application/vnd.ecowin.chart=mag
+# application/vnd.ecowin.filerequest
+# application/vnd.ecowin.fileupdate
+# application/vnd.ecowin.series
+# application/vnd.ecowin.seriesrequest
+# application/vnd.ecowin.seriesupdate
+# application/vnd.emclient.accessrequest+xml
+application/vnd.enliven=nml
+application/vnd.epson.esf=esf
+application/vnd.epson.msf=msf
+application/vnd.epson.quickanime=qam
+application/vnd.epson.salt=slt
+application/vnd.epson.ssf=ssf
+# application/vnd.ericsson.quickcall
+application/vnd.eszigno3+xml=es3 et3
+# application/vnd.etsi.aoc+xml
+# application/vnd.etsi.cug+xml
+# application/vnd.etsi.iptvcommand+xml
+# application/vnd.etsi.iptvdiscovery+xml
+# application/vnd.etsi.iptvprofile+xml
+# application/vnd.etsi.iptvsad-bc+xml
+# application/vnd.etsi.iptvsad-cod+xml
+# application/vnd.etsi.iptvsad-npvr+xml
+# application/vnd.etsi.iptvueprofile+xml
+# application/vnd.etsi.mcid+xml
+# application/vnd.etsi.sci+xml
+# application/vnd.etsi.simservs+xml
+# application/vnd.etsi.tsl+xml
+# application/vnd.etsi.tsl.der
+# application/vnd.eudora.data
+application/vnd.ezpix-album=ez2
+application/vnd.ezpix-package=ez3
+# application/vnd.f-secure.mobile
+application/vnd.fdf=fdf
+application/vnd.fdsn.mseed=mseed
+application/vnd.fdsn.seed=seed dataless
+# application/vnd.ffsns
+# application/vnd.fints
+application/vnd.flographit=gph
+application/vnd.fluxtime.clip=ftc
+# application/vnd.font-fontforge-sfd
+application/vnd.framemaker=fm frame maker book
+application/vnd.frogans.fnc=fnc
+application/vnd.frogans.ltf=ltf
+application/vnd.fsc.weblaunch=fsc
+application/vnd.fujitsu.oasys=oas
+application/vnd.fujitsu.oasys2=oa2
+application/vnd.fujitsu.oasys3=oa3
+application/vnd.fujitsu.oasysgp=fg5
+application/vnd.fujitsu.oasysprs=bh2
+# application/vnd.fujixerox.art-ex
+# application/vnd.fujixerox.art4
+# application/vnd.fujixerox.hbpl
+application/vnd.fujixerox.ddd=ddd
+application/vnd.fujixerox.docuworks=xdw
+application/vnd.fujixerox.docuworks.binder=xbd
+# application/vnd.fut-misnet
+application/vnd.fuzzysheet=fzs
+application/vnd.genomatix.tuxedo=txd
+# application/vnd.geocube+xml
+application/vnd.geogebra.file=ggb
+application/vnd.geogebra.tool=ggt
+application/vnd.geometry-explorer=gex gre
+application/vnd.geonext=gxt
+application/vnd.geoplan=g2w
+application/vnd.geospace=g3w
+# application/vnd.globalplatform.card-content-mgt
+# application/vnd.globalplatform.card-content-mgt-response
+application/vnd.gmx=gmx
+application/vnd.google-earth.kml+xml=kml
+application/vnd.google-earth.kmz=kmz
+application/vnd.grafeq=gqf gqs
+# application/vnd.gridmp
+application/vnd.groove-account=gac
+application/vnd.groove-help=ghf
+application/vnd.groove-identity-message=gim
+application/vnd.groove-injector=grv
+application/vnd.groove-tool-message=gtm
+application/vnd.groove-tool-template=tpl
+application/vnd.groove-vcard=vcg
+application/vnd.handheld-entertainment+xml=zmm
+application/vnd.hbci=hbci
+# application/vnd.hcl-bireports
+application/vnd.hhe.lesson-player=les
+application/vnd.hp-hpgl=hpgl
+application/vnd.hp-hpid=hpid
+application/vnd.hp-hps=hps
+application/vnd.hp-jlyt=jlt
+application/vnd.hp-pcl=pcl
+application/vnd.hp-pclxl=pclxl
+# application/vnd.httphone
+application/vnd.hydrostatix.sof-data=sfd-hdstx
+application/vnd.hzn-3d-crossword=x3d
+# application/vnd.ibm.afplinedata
+# application/vnd.ibm.electronic-media
+application/vnd.ibm.minipay=mpy
+application/vnd.ibm.modcap=afp listafp list3820
+application/vnd.ibm.rights-management=irm
+application/vnd.ibm.secure-container=sc
+application/vnd.iccprofile=icc icm
+application/vnd.igloader=igl
+application/vnd.immervision-ivp=ivp
+application/vnd.immervision-ivu=ivu
+# application/vnd.informedcontrol.rms+xml
+# application/vnd.informix-visionary
+application/vnd.intercon.formnet=xpw xpx
+# application/vnd.intertrust.digibox
+# application/vnd.intertrust.nncp
+application/vnd.intu.qbo=qbo
+application/vnd.intu.qfx=qfx
+# application/vnd.iptc.g2.conceptitem+xml
+# application/vnd.iptc.g2.knowledgeitem+xml
+# application/vnd.iptc.g2.newsitem+xml
+# application/vnd.iptc.g2.packageitem+xml
+application/vnd.ipunplugged.rcprofile=rcprofile
+application/vnd.irepository.package+xml=irp
+application/vnd.is-xpr=xpr
+application/vnd.jam=jam
+# application/vnd.japannet-directory-service
+# application/vnd.japannet-jpnstore-wakeup
+# application/vnd.japannet-payment-wakeup
+# application/vnd.japannet-registration
+# application/vnd.japannet-registration-wakeup
+# application/vnd.japannet-setstore-wakeup
+# application/vnd.japannet-verification
+# application/vnd.japannet-verification-wakeup
+application/vnd.jcp.javame.midlet-rms=rms
+application/vnd.jisp=jisp
+application/vnd.joost.joda-archive=joda
+application/vnd.kahootz=ktz ktr
+application/vnd.kde.karbon=karbon
+application/vnd.kde.kchart=chrt
+application/vnd.kde.kformula=kfo
+application/vnd.kde.kivio=flw
+application/vnd.kde.kontour=kon
+application/vnd.kde.kpresenter=kpr kpt
+application/vnd.kde.kspread=ksp
+application/vnd.kde.kword=kwd kwt
+application/vnd.kenameaapp=htke
+application/vnd.kidspiration=kia
+application/vnd.kinar=kne knp
+application/vnd.koan=skp skd skt skm
+application/vnd.kodak-descriptor=sse
+# application/vnd.liberty-request+xml
+application/vnd.llamagraphics.life-balance.desktop=lbd
+application/vnd.llamagraphics.life-balance.exchange+xml=lbe
+application/vnd.lotus-1-2-3=123
+application/vnd.lotus-approach=apr
+application/vnd.lotus-freelance=pre
+application/vnd.lotus-notes=nsf
+application/vnd.lotus-organizer=org
+application/vnd.lotus-screencam=scm
+application/vnd.lotus-wordpro=lwp
+application/vnd.macports.portpkg=portpkg
+# application/vnd.marlin.drm.actiontoken+xml
+# application/vnd.marlin.drm.conftoken+xml
+# application/vnd.marlin.drm.license+xml
+# application/vnd.marlin.drm.mdcf
+application/vnd.mcd=mcd
+application/vnd.medcalcdata=mc1
+application/vnd.mediastation.cdkey=cdkey
+# application/vnd.meridian-slingshot
+application/vnd.mfer=mwf
+application/vnd.mfmp=mfm
+application/vnd.micrografx.flo=flo
+application/vnd.micrografx.igx=igx
+application/vnd.mif=mif
+# application/vnd.minisoft-hp3000-save
+# application/vnd.mitsubishi.misty-guard.trustweb
+application/vnd.mobius.daf=daf
+application/vnd.mobius.dis=dis
+application/vnd.mobius.mbk=mbk
+application/vnd.mobius.mqy=mqy
+application/vnd.mobius.msl=msl
+application/vnd.mobius.plc=plc
+application/vnd.mobius.txf=txf
+application/vnd.mophun.application=mpn
+application/vnd.mophun.certificate=mpc
+# application/vnd.motorola.flexsuite
+# application/vnd.motorola.flexsuite.adsi
+# application/vnd.motorola.flexsuite.fis
+# application/vnd.motorola.flexsuite.gotap
+# application/vnd.motorola.flexsuite.kmr
+# application/vnd.motorola.flexsuite.ttc
+# application/vnd.motorola.flexsuite.wem
+# application/vnd.motorola.iprm
+application/vnd.mozilla.xul+xml=xul
+application/vnd.ms-artgalry=cil
+# application/vnd.ms-asf
+application/vnd.ms-cab-compressed=cab
+application/vnd.ms-excel=xls xlm xla xlc xlt xlw
+application/vnd.ms-excel.addin.macroenabled.12=xlam
+application/vnd.ms-excel.sheet.binary.macroenabled.12=xlsb
+application/vnd.ms-excel.sheet.macroenabled.12=xlsm
+application/vnd.ms-excel.template.macroenabled.12=xltm
+application/vnd.ms-fontobject=eot
+application/vnd.ms-htmlhelp=chm
+application/vnd.ms-ims=ims
+application/vnd.ms-lrm=lrm
+application/vnd.ms-pki.seccat=cat
+application/vnd.ms-pki.stl=stl
+# application/vnd.ms-playready.initiator+xml
+application/vnd.ms-powerpoint=ppt pps pot
+application/vnd.ms-powerpoint.addin.macroenabled.12=ppam
+application/vnd.ms-powerpoint.presentation.macroenabled.12=pptm
+application/vnd.ms-powerpoint.slide.macroenabled.12=sldm
+application/vnd.ms-powerpoint.slideshow.macroenabled.12=ppsm
+application/vnd.ms-powerpoint.template.macroenabled.12=potm
+application/vnd.ms-project=mpp mpt
+# application/vnd.ms-tnef
+# application/vnd.ms-wmdrm.lic-chlg-req
+# application/vnd.ms-wmdrm.lic-resp
+# application/vnd.ms-wmdrm.meter-chlg-req
+# application/vnd.ms-wmdrm.meter-resp
+application/vnd.ms-word.document.macroenabled.12=docm
+application/vnd.ms-word.template.macroenabled.12=dotm
+application/vnd.ms-works=wps wks wcm wdb
+application/vnd.ms-wpl=wpl
+application/vnd.ms-xpsdocument=xps
+application/vnd.mseq=mseq
+# application/vnd.msign
+# application/vnd.multiad.creator
+# application/vnd.multiad.creator.cif
+# application/vnd.music-niff
+application/vnd.musician=mus
+application/vnd.muvee.style=msty
+# application/vnd.ncd.control
+# application/vnd.ncd.reference
+# application/vnd.nervana
+# application/vnd.netfpx
+application/vnd.neurolanguage.nlu=nlu
+application/vnd.noblenet-directory=nnd
+application/vnd.noblenet-sealer=nns
+application/vnd.noblenet-web=nnw
+# application/vnd.nokia.catalogs
+# application/vnd.nokia.conml+wbxml
+# application/vnd.nokia.conml+xml
+# application/vnd.nokia.isds-radio-presets
+# application/vnd.nokia.iptv.config+xml
+# application/vnd.nokia.landmark+wbxml
+# application/vnd.nokia.landmark+xml
+# application/vnd.nokia.landmarkcollection+xml
+# application/vnd.nokia.n-gage.ac+xml
+application/vnd.nokia.n-gage.data=ngdat
+application/vnd.nokia.n-gage.symbian.install=n-gage
+# application/vnd.nokia.ncd
+# application/vnd.nokia.pcd+wbxml
+# application/vnd.nokia.pcd+xml
+application/vnd.nokia.radio-preset=rpst
+application/vnd.nokia.radio-presets=rpss
+application/vnd.novadigm.edm=edm
+application/vnd.novadigm.edx=edx
+application/vnd.novadigm.ext=ext
+# application/vnd.ntt-local.file-transfer
+application/vnd.oasis.opendocument.chart=odc
+application/vnd.oasis.opendocument.chart-template=otc
+application/vnd.oasis.opendocument.database=odb
+application/vnd.oasis.opendocument.formula=odf
+application/vnd.oasis.opendocument.formula-template=odft
+application/vnd.oasis.opendocument.graphics=odg
+application/vnd.oasis.opendocument.graphics-template=otg
+application/vnd.oasis.opendocument.image=odi
+application/vnd.oasis.opendocument.image-template=oti
+application/vnd.oasis.opendocument.presentation=odp
+application/vnd.oasis.opendocument.presentation-template=otp
+application/vnd.oasis.opendocument.spreadsheet=ods
+application/vnd.oasis.opendocument.spreadsheet-template=ots
+application/vnd.oasis.opendocument.text=odt
+application/vnd.oasis.opendocument.text-master=otm
+application/vnd.oasis.opendocument.text-template=ott
+application/vnd.oasis.opendocument.text-web=oth
+# application/vnd.obn
+application/vnd.olpc-sugar=xo
+# application/vnd.oma-scws-config
+# application/vnd.oma-scws-http-request
+# application/vnd.oma-scws-http-response
+# application/vnd.oma.bcast.associated-procedure-parameter+xml
+# application/vnd.oma.bcast.drm-trigger+xml
+# application/vnd.oma.bcast.imd+xml
+# application/vnd.oma.bcast.ltkm
+# application/vnd.oma.bcast.notification+xml
+# application/vnd.oma.bcast.provisioningtrigger
+# application/vnd.oma.bcast.sgboot
+# application/vnd.oma.bcast.sgdd+xml
+# application/vnd.oma.bcast.sgdu
+# application/vnd.oma.bcast.simple-symbol-container
+# application/vnd.oma.bcast.smartcard-trigger+xml
+# application/vnd.oma.bcast.sprov+xml
+# application/vnd.oma.bcast.stkm
+# application/vnd.oma.dcd
+# application/vnd.oma.dcdc
+application/vnd.oma.dd2+xml=dd2
+# application/vnd.oma.drm.risd+xml
+# application/vnd.oma.group-usage-list+xml
+# application/vnd.oma.poc.detailed-progress-report+xml
+# application/vnd.oma.poc.final-report+xml
+# application/vnd.oma.poc.groups+xml
+# application/vnd.oma.poc.invocation-descriptor+xml
+# application/vnd.oma.poc.optimized-progress-report+xml
+# application/vnd.oma.push
+# application/vnd.oma.scidm.messages+xml
+# application/vnd.oma.xcap-directory+xml
+# application/vnd.omads-email+xml
+# application/vnd.omads-file+xml
+# application/vnd.omads-folder+xml
+# application/vnd.omaloc-supl-init
+application/vnd.openofficeorg.extension=oxt
+# application/vnd.openxmlformats-officedocument.custom-properties+xml
+# application/vnd.openxmlformats-officedocument.customxmlproperties+xml
+# application/vnd.openxmlformats-officedocument.drawing+xml
+# application/vnd.openxmlformats-officedocument.drawingml.chart+xml
+# application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml
+# application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml
+# application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml
+# application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml
+# application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml
+# application/vnd.openxmlformats-officedocument.extended-properties+xml
+# application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml
+# application/vnd.openxmlformats-officedocument.presentationml.comments+xml
+# application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml
+# application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml
+# application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml
+application/vnd.openxmlformats-officedocument.presentationml.presentation=pptx
+# application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml
+# application/vnd.openxmlformats-officedocument.presentationml.presprops+xml
+application/vnd.openxmlformats-officedocument.presentationml.slide=sldx
+# application/vnd.openxmlformats-officedocument.presentationml.slide+xml
+# application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml
+# application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml
+application/vnd.openxmlformats-officedocument.presentationml.slideshow=ppsx
+# application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml
+# application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml
+# application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml
+# application/vnd.openxmlformats-officedocument.presentationml.tags+xml
+application/vnd.openxmlformats-officedocument.presentationml.template=potx
+# application/vnd.openxmlformats-officedocument.presentationml.template.main+xml
+# application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.sheet=xlsx
+# application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml
+application/vnd.openxmlformats-officedocument.spreadsheetml.template=xltx
+# application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml
+# application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml
+# application/vnd.openxmlformats-officedocument.theme+xml
+# application/vnd.openxmlformats-officedocument.themeoverride+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml
+application/vnd.openxmlformats-officedocument.wordprocessingml.document=docx
+# application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml
+application/vnd.openxmlformats-officedocument.wordprocessingml.template=dotx
+# application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml
+# application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml
+# application/vnd.openxmlformats-package.core-properties+xml
+# application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml
+# application/vnd.osa.netdeploy
+# application/vnd.osgi.bundle
+application/vnd.osgi.dp=dp
+# application/vnd.otps.ct-kip+xml
+application/vnd.palm=pdb pqa oprc
+# application/vnd.paos.xml
+application/vnd.pawaafile=paw
+application/vnd.pg.format=str
+application/vnd.pg.osasli=ei6
+# application/vnd.piaccess.application-licence
+application/vnd.picsel=efif
+application/vnd.pmi.widget=wg
+# application/vnd.poc.group-advertisement+xml
+application/vnd.pocketlearn=plf
+application/vnd.powerbuilder6=pbd
+# application/vnd.powerbuilder6-s
+# application/vnd.powerbuilder7
+# application/vnd.powerbuilder7-s
+# application/vnd.powerbuilder75
+# application/vnd.powerbuilder75-s
+# application/vnd.preminet
+application/vnd.previewsystems.box=box
+application/vnd.proteus.magazine=mgz
+application/vnd.publishare-delta-tree=qps
+application/vnd.pvi.ptid1=ptid
+# application/vnd.pwg-multiplexed
+# application/vnd.pwg-xhtml-print+xml
+# application/vnd.qualcomm.brew-app-res
+application/vnd.quark.quarkxpress=qxd qxt qwd qwt qxl qxb
+# application/vnd.radisys.moml+xml
+# application/vnd.radisys.msml+xml
+# application/vnd.radisys.msml-audit+xml
+# application/vnd.radisys.msml-audit-conf+xml
+# application/vnd.radisys.msml-audit-conn+xml
+# application/vnd.radisys.msml-audit-dialog+xml
+# application/vnd.radisys.msml-audit-stream+xml
+# application/vnd.radisys.msml-conf+xml
+# application/vnd.radisys.msml-dialog+xml
+# application/vnd.radisys.msml-dialog-base+xml
+# application/vnd.radisys.msml-dialog-fax-detect+xml
+# application/vnd.radisys.msml-dialog-fax-sendrecv+xml
+# application/vnd.radisys.msml-dialog-group+xml
+# application/vnd.radisys.msml-dialog-speech+xml
+# application/vnd.radisys.msml-dialog-transform+xml
+# application/vnd.rapid
+application/vnd.realvnc.bed=bed
+application/vnd.recordare.musicxml=mxl
+application/vnd.recordare.musicxml+xml=musicxml
+# application/vnd.renlearn.rlprint
+application/vnd.rim.cod=cod
+application/vnd.rn-realmedia=rm
+application/vnd.route66.link66+xml=link66
+# application/vnd.ruckus.download
+# application/vnd.s3sms
+application/vnd.sailingtracker.track=st
+# application/vnd.sbm.cid
+# application/vnd.sbm.mid2
+# application/vnd.scribus
+# application/vnd.sealed.3df
+# application/vnd.sealed.csf
+# application/vnd.sealed.doc
+# application/vnd.sealed.eml
+# application/vnd.sealed.mht
+# application/vnd.sealed.net
+# application/vnd.sealed.ppt
+# application/vnd.sealed.tiff
+# application/vnd.sealed.xls
+# application/vnd.sealedmedia.softseal.html
+# application/vnd.sealedmedia.softseal.pdf
+application/vnd.seemail=see
+application/vnd.sema=sema
+application/vnd.semd=semd
+application/vnd.semf=semf
+application/vnd.shana.informed.formdata=ifm
+application/vnd.shana.informed.formtemplate=itp
+application/vnd.shana.informed.interchange=iif
+application/vnd.shana.informed.package=ipk
+application/vnd.simtech-mindmapper=twd twds
+application/vnd.smaf=mmf
+# application/vnd.smart.notebook
+application/vnd.smart.teacher=teacher
+# application/vnd.software602.filler.form+xml
+# application/vnd.software602.filler.form-xml-zip
+application/vnd.solent.sdkm+xml=sdkm sdkd
+application/vnd.spotfire.dxp=dxp
+application/vnd.spotfire.sfs=sfs
+# application/vnd.sss-cod
+# application/vnd.sss-dtf
+# application/vnd.sss-ntf
+application/vnd.stardivision.calc=sdc
+application/vnd.stardivision.draw=sda
+application/vnd.stardivision.impress=sdd
+application/vnd.stardivision.math=smf
+application/vnd.stardivision.writer=sdw
+application/vnd.stardivision.writer=vor
+application/vnd.stardivision.writer-global=sgl
+# application/vnd.street-stream
+application/vnd.sun.xml.calc=sxc
+application/vnd.sun.xml.calc.template=stc
+application/vnd.sun.xml.draw=sxd
+application/vnd.sun.xml.draw.template=std
+application/vnd.sun.xml.impress=sxi
+application/vnd.sun.xml.impress.template=sti
+application/vnd.sun.xml.math=sxm
+application/vnd.sun.xml.writer=sxw
+application/vnd.sun.xml.writer.global=sxg
+application/vnd.sun.xml.writer.template=stw
+# application/vnd.sun.wadl+xml
+application/vnd.sus-calendar=sus susp
+application/vnd.svd=svd
+# application/vnd.swiftview-ics
+application/vnd.symbian.install=sis sisx
+application/vnd.syncml+xml=xsm
+application/vnd.syncml.dm+wbxml=bdm
+application/vnd.syncml.dm+xml=xdm
+# application/vnd.syncml.dm.notification
+# application/vnd.syncml.ds.notification
+application/vnd.tao.intent-module-archive=tao
+application/vnd.tmobile-livetv=tmo
+application/vnd.trid.tpt=tpt
+application/vnd.triscape.mxs=mxs
+application/vnd.trueapp=tra
+# application/vnd.truedoc
+application/vnd.ufdl=ufd ufdl
+application/vnd.uiq.theme=utz
+application/vnd.umajin=umj
+application/vnd.unity=unityweb
+application/vnd.uoml+xml=uoml
+# application/vnd.uplanet.alert
+# application/vnd.uplanet.alert-wbxml
+# application/vnd.uplanet.bearer-choice
+# application/vnd.uplanet.bearer-choice-wbxml
+# application/vnd.uplanet.cacheop
+# application/vnd.uplanet.cacheop-wbxml
+# application/vnd.uplanet.channel
+# application/vnd.uplanet.channel-wbxml
+# application/vnd.uplanet.list
+# application/vnd.uplanet.list-wbxml
+# application/vnd.uplanet.listcmd
+# application/vnd.uplanet.listcmd-wbxml
+# application/vnd.uplanet.signal
+application/vnd.vcx=vcx
+# application/vnd.vd-study
+# application/vnd.vectorworks
+# application/vnd.vidsoft.vidconference
+application/vnd.visio=vsd vst vss vsw
+application/vnd.visionary=vis
+# application/vnd.vividence.scriptfile
+application/vnd.vsf=vsf
+# application/vnd.wap.sic
+# application/vnd.wap.slc
+application/vnd.wap.wbxml=wbxml
+application/vnd.wap.wmlc=wmlc
+application/vnd.wap.wmlscriptc=wmlsc
+application/vnd.webturbo=wtb
+# application/vnd.wfa.wsc
+# application/vnd.wmc
+# application/vnd.wmf.bootstrap
+# application/vnd.wolfram.mathematica
+# application/vnd.wolfram.mathematica.package
+application/vnd.wolfram.player=nbp
+application/vnd.wordperfect=wpd
+application/vnd.wqd=wqd
+# application/vnd.wrq-hp3000-labelled
+application/vnd.wt.stf=stf
+# application/vnd.wv.csp+wbxml
+# application/vnd.wv.csp+xml
+# application/vnd.wv.ssp+xml
+application/vnd.xara=xar
+application/vnd.xfdl=xfdl
+# application/vnd.xfdl.webform
+# application/vnd.xmi+xml
+# application/vnd.xmpie.cpkg
+# application/vnd.xmpie.dpkg
+# application/vnd.xmpie.plan
+# application/vnd.xmpie.ppkg
+# application/vnd.xmpie.xlim
+application/vnd.yamaha.hv-dic=hvd
+application/vnd.yamaha.hv-script=hvs
+application/vnd.yamaha.hv-voice=hvp
+application/vnd.yamaha.openscoreformat=osf
+application/vnd.yamaha.openscoreformat.osfpvg+xml=osfpvg
+application/vnd.yamaha.smaf-audio=saf
+application/vnd.yamaha.smaf-phrase=spf
+application/vnd.yellowriver-custom-menu=cmp
+application/vnd.zul=zir zirz
+application/vnd.zzazz.deck+xml=zaz
+application/voicexml+xml=vxml
+# application/watcherinfo+xml
+# application/whoispp-query
+# application/whoispp-response
+application/winhlp=hlp
+# application/wita
+# application/wordperfect5.1
+application/wsdl+xml=wsdl
+application/wspolicy+xml=wspolicy
+application/x-abiword=abw
+application/x-ace-compressed=ace
+application/x-authorware-bin=aab x32 u32 vox
+application/x-authorware-map=aam
+application/x-authorware-seg=aas
+application/x-bcpio=bcpio
+application/x-bittorrent=torrent
+application/x-bzip=bz
+application/x-bzip2=bz2 boz
+application/x-cdlink=vcd
+application/x-chat=chat
+application/x-chess-pgn=pgn
+# application/x-compress
+application/x-cpio=cpio
+application/x-csh=csh
+application/x-debian-package=deb udeb
+application/x-director=dir dcr dxr cst cct cxt w3d fgd swa
+application/x-doom=wad
+application/x-dtbncx+xml=ncx
+application/x-dtbook+xml=dtb
+application/x-dtbresource+xml=res
+application/x-dvi=dvi
+application/x-font-bdf=bdf
+# application/x-font-dos
+# application/x-font-framemaker
+application/x-font-ghostscript=gsf
+# application/x-font-libgrx
+application/x-font-linux-psf=psf
+application/x-font-otf=otf
+application/x-font-pcf=pcf
+application/x-font-snf=snf
+# application/x-font-speedo
+# application/x-font-sunos-news
+application/x-font-ttf=ttf ttc
+application/x-font-type1=pfa pfb pfm afm
+# application/x-font-vfont
+application/x-futuresplash=spl
+application/x-gnumeric=gnumeric
+application/x-gtar=gtar
+# application/x-gzip
+application/x-hdf=hdf
+application/x-java-jnlp-file=jnlp
+application/x-latex=latex
+application/x-mobipocket-ebook=prc mobi
+application/x-ms-application=application
+application/x-ms-wmd=wmd
+application/x-ms-wmz=wmz
+application/x-ms-xbap=xbap
+application/x-msaccess=mdb
+application/x-msbinder=obd
+application/x-mscardfile=crd
+application/x-msclip=clp
+application/x-msdownload=exe dll com bat msi
+application/x-msmediaview=mvb m13 m14
+application/x-msmetafile=wmf
+application/x-msmoney=mny
+application/x-mspublisher=pub
+application/x-msschedule=scd
+application/x-msterminal=trm
+application/x-mswrite=wri
+application/x-netcdf=nc cdf
+application/x-pkcs12=p12 pfx
+application/x-pkcs7-certificates=p7b spc
+application/x-pkcs7-certreqresp=p7r
+application/x-rar-compressed=rar
+application/x-sh=sh
+application/x-shar=shar
+application/x-shockwave-flash=swf
+application/x-silverlight-app=xap
+application/x-stuffit=sit
+application/x-stuffitx=sitx
+application/x-sv4cpio=sv4cpio
+application/x-sv4crc=sv4crc
+application/x-tar=tar
+application/x-tcl=tcl
+application/x-tex=tex
+application/x-tex-tfm=tfm
+application/x-texinfo=texinfo texi
+application/x-ustar=ustar
+application/x-wais-source=src
+application/x-x509-ca-cert=der crt
+application/x-xfig=fig
+application/x-xpinstall=xpi
+# application/x400-bp
+# application/xcap-att+xml
+# application/xcap-caps+xml
+# application/xcap-el+xml
+# application/xcap-error+xml
+# application/xcap-ns+xml
+# application/xcon-conference-info-diff+xml
+# application/xcon-conference-info+xml
+application/xenc+xml=xenc
+application/xhtml+xml=xhtml xht
+# application/xhtml-voice+xml
+application/xml=xml xsl
+application/xml-dtd=dtd
+# application/xml-external-parsed-entity
+# application/xmpp+xml
+application/xop+xml=xop
+application/xslt+xml=xslt
+application/xspf+xml=xspf
+application/xv+xml=mxml xhvml xvml xvm
+application/zip=zip
+# audio/32kadpcm
+# audio/3gpp
+# audio/3gpp2
+# audio/ac3
+audio/adpcm=adp
+# audio/amr
+# audio/amr-wb
+# audio/amr-wb+
+# audio/asc
+# audio/atrac-advanced-lossless
+# audio/atrac-x
+# audio/atrac3
+audio/basic=au snd
+# audio/bv16
+# audio/bv32
+# audio/clearmode
+# audio/cn
+# audio/dat12
+# audio/dls
+# audio/dsr-es201108
+# audio/dsr-es202050
+# audio/dsr-es202211
+# audio/dsr-es202212
+# audio/dvi4
+# audio/eac3
+# audio/evrc
+# audio/evrc-qcp
+# audio/evrc0
+# audio/evrc1
+# audio/evrcb
+# audio/evrcb0
+# audio/evrcb1
+# audio/evrcwb
+# audio/evrcwb0
+# audio/evrcwb1
+# audio/example
+# audio/g719
+# audio/g722
+# audio/g7221
+# audio/g723
+# audio/g726-16
+# audio/g726-24
+# audio/g726-32
+# audio/g726-40
+# audio/g728
+# audio/g729
+# audio/g7291
+# audio/g729d
+# audio/g729e
+# audio/gsm
+# audio/gsm-efr
+# audio/ilbc
+# audio/l16
+# audio/l20
+# audio/l24
+# audio/l8
+# audio/lpc
+audio/midi=mid midi kar rmi
+# audio/mobile-xmf
+audio/mp4=mp4a
+# audio/mp4a-latm
+# audio/mpa
+# audio/mpa-robust
+audio/mpeg=mpga mp2 mp2a mp3 m2a m3a
+# audio/mpeg4-generic
+audio/ogg=oga ogg spx
+# audio/parityfec
+# audio/pcma
+# audio/pcma-wb
+# audio/pcmu-wb
+# audio/pcmu
+# audio/prs.sid
+# audio/qcelp
+# audio/red
+# audio/rtp-enc-aescm128
+# audio/rtp-midi
+# audio/rtx
+# audio/smv
+# audio/smv0
+# audio/smv-qcp
+# audio/sp-midi
+# audio/speex
+# audio/t140c
+# audio/t38
+# audio/telephone-event
+# audio/tone
+# audio/uemclip
+# audio/ulpfec
+# audio/vdvi
+# audio/vmr-wb
+# audio/vnd.3gpp.iufp
+# audio/vnd.4sb
+# audio/vnd.audiokoz
+# audio/vnd.celp
+# audio/vnd.cisco.nse
+# audio/vnd.cmles.radio-events
+# audio/vnd.cns.anp1
+# audio/vnd.cns.inf1
+audio/vnd.digital-winds=eol
+# audio/vnd.dlna.adts
+# audio/vnd.dolby.heaac.1
+# audio/vnd.dolby.heaac.2
+# audio/vnd.dolby.mlp
+# audio/vnd.dolby.mps
+# audio/vnd.dolby.pl2
+# audio/vnd.dolby.pl2x
+# audio/vnd.dolby.pl2z
+# audio/vnd.dolby.pulse.1
+audio/vnd.dra=dra
+audio/vnd.dts=dts
+audio/vnd.dts.hd=dtshd
+# audio/vnd.everad.plj
+# audio/vnd.hns.audio
+audio/vnd.lucent.voice=lvp
+audio/vnd.ms-playready.media.pya=pya
+# audio/vnd.nokia.mobile-xmf
+# audio/vnd.nortel.vbk
+audio/vnd.nuera.ecelp4800=ecelp4800
+audio/vnd.nuera.ecelp7470=ecelp7470
+audio/vnd.nuera.ecelp9600=ecelp9600
+# audio/vnd.octel.sbc
+# audio/vnd.qcelp
+# audio/vnd.rhetorex.32kadpcm
+# audio/vnd.sealedmedia.softseal.mpeg
+# audio/vnd.vmx.cvsd
+# audio/vorbis
+# audio/vorbis-config
+audio/x-aac=aac
+audio/x-aiff=aif aiff aifc
+audio/x-mpegurl=m3u
+audio/x-ms-wax=wax
+audio/x-ms-wma=wma
+audio/x-pn-realaudio=ram ra
+audio/x-pn-realaudio-plugin=rmp
+audio/x-wav=wav
+chemical/x-cdx=cdx
+chemical/x-cif=cif
+chemical/x-cmdf=cmdf
+chemical/x-cml=cml
+chemical/x-csml=csml
+# chemical/x-pdb
+chemical/x-xyz=xyz
+image/bmp=bmp
+image/cgm=cgm
+# image/example
+# image/fits
+image/g3fax=g3
+image/gif=gif
+image/ief=ief
+# image/jp2
+image/jpeg=jpeg jpg jpe
+# image/jpm
+# image/jpx
+# image/naplps
+image/png=png
+image/prs.btif=btif
+# image/prs.pti
+image/svg+xml=svg svgz
+# image/t38
+image/tiff=tiff tif
+# image/tiff-fx
+image/vnd.adobe.photoshop=psd
+# image/vnd.cns.inf2
+image/vnd.djvu=djvu djv
+image/vnd.dwg=dwg
+image/vnd.dxf=dxf
+image/vnd.fastbidsheet=fbs
+image/vnd.fpx=fpx
+image/vnd.fst=fst
+image/vnd.fujixerox.edmics-mmr=mmr
+image/vnd.fujixerox.edmics-rlc=rlc
+# image/vnd.globalgraphics.pgb
+# image/vnd.microsoft.icon
+# image/vnd.mix
+image/vnd.ms-modi=mdi
+image/vnd.net-fpx=npx
+# image/vnd.radiance
+# image/vnd.sealed.png
+# image/vnd.sealedmedia.softseal.gif
+# image/vnd.sealedmedia.softseal.jpg
+# image/vnd.svf
+image/vnd.wap.wbmp=wbmp
+image/vnd.xiff=xif
+image/x-cmu-raster=ras
+image/x-cmx=cmx
+image/x-freehand=fh fhc fh4 fh5 fh7
+image/x-icon=ico
+image/x-pcx=pcx
+image/x-pict=pic pct
+image/x-portable-anymap=pnm
+image/x-portable-bitmap=pbm
+image/x-portable-graymap=pgm
+image/x-portable-pixmap=ppm
+image/x-rgb=rgb
+image/x-xbitmap=xbm
+image/x-xpixmap=xpm
+image/x-xwindowdump=xwd
+# message/cpim
+# message/delivery-status
+# message/disposition-notification
+# message/example
+# message/external-body
+# message/global
+# message/global-delivery-status
+# message/global-disposition-notification
+# message/global-headers
+# message/http
+# message/imdn+xml
+# message/news
+# message/partial
+message/rfc822=eml mime
+# message/s-http
+# message/sip
+# message/sipfrag
+# message/tracking-status
+# message/vnd.si.simp
+# model/example
+model/iges=igs iges
+model/mesh=msh mesh silo
+model/vnd.dwf=dwf
+# model/vnd.flatland.3dml
+model/vnd.gdl=gdl
+# model/vnd.gs-gdl
+# model/vnd.gs.gdl
+model/vnd.gtw=gtw
+# model/vnd.moml+xml
+model/vnd.mts=mts
+# model/vnd.parasolid.transmit.binary
+# model/vnd.parasolid.transmit.text
+model/vnd.vtu=vtu
+model/vrml=wrl vrml
+# multipart/alternative
+# multipart/appledouble
+# multipart/byteranges
+# multipart/digest
+# multipart/encrypted
+# multipart/example
+# multipart/form-data
+# multipart/header-set
+# multipart/mixed
+# multipart/parallel
+# multipart/related
+# multipart/report
+# multipart/signed
+# multipart/voice-message
+text/calendar=ics ifb
+text/css=css
+text/csv=csv
+# text/directory
+# text/dns
+# text/ecmascript
+# text/enriched
+# text/example
+text/html=html htm
+text/javascript=js
+# text/parityfec
+text/plain=txt text conf def list log in
+# text/prs.fallenstein.rst
+text/prs.lines.tag=dsc
+# text/vnd.radisys.msml-basic-layout
+# text/red
+# text/rfc822-headers
+text/richtext=rtx
+# text/rtf
+# text/rtp-enc-aescm128
+# text/rtx
+text/sgml=sgml sgm
+# text/t140
+text/tab-separated-values=tsv
+text/troff=t tr roff man me ms
+# text/ulpfec
+text/uri-list=uri uris urls
+# text/vnd.abc
+text/vnd.curl=curl
+text/vnd.curl.dcurl=dcurl
+text/vnd.curl.scurl=scurl
+text/vnd.curl.mcurl=mcurl
+# text/vnd.dmclientscript
+# text/vnd.esmertec.theme-descriptor
+text/vnd.fly=fly
+text/vnd.fmi.flexstor=flx
+text/vnd.graphviz=gv
+text/vnd.in3d.3dml=3dml
+text/vnd.in3d.spot=spot
+# text/vnd.iptc.newsml
+# text/vnd.iptc.nitf
+# text/vnd.latex-z
+# text/vnd.motorola.reflex
+# text/vnd.ms-mediapackage
+# text/vnd.net2phone.commcenter.command
+# text/vnd.si.uricatalogue
+text/vnd.sun.j2me.app-descriptor=jad
+# text/vnd.trolltech.linguist
+# text/vnd.wap.si
+# text/vnd.wap.sl
+text/vnd.wap.wml=wml
+text/vnd.wap.wmlscript=wmls
+text/x-asm=s asm
+text/x-c=c cc cxx cpp h hh dic
+text/x-fortran=f for f77 f90
+text/x-pascal=p pas
+text/x-java-source=java
+text/x-setext=etx
+text/x-uuencode=uu
+text/x-vcalendar=vcs
+text/x-vcard=vcf
+# text/xml
+# text/xml-external-parsed-entity
+video/3gpp=3gp
+# video/3gpp-tt
+video/3gpp2=3g2
+# video/bmpeg
+# video/bt656
+# video/celb
+# video/dv
+# video/example
+video/h261=h261
+video/h263=h263
+# video/h263-1998
+# video/h263-2000
+video/h264=h264
+video/jpeg=jpgv
+# video/jpeg2000
+video/jpm=jpm jpgm
+video/mj2=mj2 mjp2
+# video/mp1s
+# video/mp2p
+# video/mp2t
+video/mp4=mp4 mp4v mpg4
+# video/mp4v-es
+video/mpeg=mpeg mpg mpe m1v m2v
+# video/mpeg4-generic
+# video/mpv
+# video/nv
+video/ogg=ogv
+# video/parityfec
+# video/pointer
+video/quicktime=qt mov
+# video/raw
+# video/rtp-enc-aescm128
+# video/rtx
+# video/smpte292m
+# video/ulpfec
+# video/vc1
+# video/vnd.cctv
+# video/vnd.dlna.mpeg-tts
+video/vnd.fvt=fvt
+# video/vnd.hns.video
+# video/vnd.iptvforum.1dparityfec-1010
+# video/vnd.iptvforum.1dparityfec-2005
+# video/vnd.iptvforum.2dparityfec-1010
+# video/vnd.iptvforum.2dparityfec-2005
+# video/vnd.iptvforum.ttsavc
+# video/vnd.iptvforum.ttsmpeg2
+# video/vnd.motorola.video
+# video/vnd.motorola.videop
+video/vnd.mpegurl=mxu m4u
+video/vnd.ms-playready.media.pyv=pyv
+# video/vnd.nokia.interleaved-multimedia
+# video/vnd.nokia.videovoip
+# video/vnd.objectvideo
+# video/vnd.sealed.mpeg1
+# video/vnd.sealed.mpeg4
+# video/vnd.sealed.swf
+# video/vnd.sealedmedia.softseal.mov
+video/vnd.vivo=viv
+video/x-f4v=f4v
+video/x-fli=fli
+video/x-flv=flv
+video/x-m4v=m4v
+video/x-ms-asf=asf asx
+video/x-ms-wm=wm
+video/x-ms-wmv=wmv
+video/x-ms-wmx=wmx
+video/x-ms-wvx=wvx
+video/x-msvideo=avi
+video/x-sgi-movie=movie
+x-conference/x-cooltalk=ice
diff --git a/src/main/webapp/WEB-INF/spring/root-context.xml b/src/main/webapp/WEB-INF/spring/root-context.xml
index fcd38e91..558f9e61 100644
--- a/src/main/webapp/WEB-INF/spring/root-context.xml
+++ b/src/main/webapp/WEB-INF/spring/root-context.xml
@@ -107,7 +107,7 @@
-
+
@@ -181,7 +181,7 @@
-
+
@@ -440,6 +440,6 @@
-
+