You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:24:02 UTC

[sling-org-apache-sling-commons-mime] 21/22: Move Sling to new TLP location

This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag org.apache.sling.commons.mime-2.1.0-incubator
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-mime.git

commit 4e6962940913cbc227e7a06a990b4d14f6725144
Author: Felix Meschberger <fm...@apache.org>
AuthorDate: Thu Jun 18 09:21:02 2009 +0000

    Move Sling to new TLP location
    
    git-svn-id: https://svn.eu.apache.org/repos/asf/sling/tags/org.apache.sling.commons.mime-2.1.0-incubator@785979 13f79535-47bb-0310-9956-ffa450edef68
---
 LICENSE                                            |  234 ++++
 NOTICE                                             |   13 +
 README.txt                                         |   36 +
 pom.xml                                            |  117 ++
 .../sling/commons/mime/MimeTypeProvider.java       |   69 ++
 .../apache/sling/commons/mime/MimeTypeService.java |   68 ++
 .../commons/mime/internal/MimeTypeServiceImpl.java |  338 ++++++
 .../mime/internal/MimeTypeWebConsolePlugin.java    |  200 +++
 src/main/resources/META-INF/DISCLAIMER             |    7 +
 src/main/resources/META-INF/LICENSE                |  234 ++++
 src/main/resources/META-INF/NOTICE                 |   13 +
 src/main/resources/META-INF/core_mime.types        | 1267 ++++++++++++++++++++
 src/main/resources/META-INF/mime.types             |   31 +
 .../OSGI-INF/metatype/metatype.properties          |   36 +
 src/main/resources/res/jquery.treeTable.css        |   43 +
 src/main/resources/res/jquery.treeTable.min.js     |   10 +
 .../mime/internal/MimeTypeServiceImplTest.java     |  194 +++
 17 files changed, 2910 insertions(+)

diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..ef13dba
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,234 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+APACHE SLING SUBCOMPONENTS:
+
+Apache Sling includes subcomponents with separate copyright notices and
+license terms. Your use of these subcomponents is subject to the terms
+and conditions of the following licenses.
+
+JQuery TreeTable plugin
+
+    Copyright (c) 2009 Ludo van den Boom
+    
+    Permission is hereby granted, free of charge, to any person
+    obtaining a copy of this software and associated documentation
+    files (the "Software"), to deal in the Software without
+    restriction, including without limitation the rights to use,
+    copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following
+    conditions:
+    
+    The above copyright notice and this permission notice shall be
+    included in all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+    OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+    OTHER DEALINGS IN THE SOFTWARE.
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 0000000..9837e87
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,13 @@
+Apache Sling MIME type mapping support
+Copyright 2008-2009 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+This product includes software developed by
+Ludo van den Boom (http://blog.cubicphuse.nl/)
+Copyright (c) 2009 Ludo van den Boom
+Licensed under the MIT License
+
+Apache Sling is based on source code originally developed 
+by Day Software (http://www.day.com/).
\ No newline at end of file
diff --git a/README.txt b/README.txt
new file mode 100644
index 0000000..70d25e3
--- /dev/null
+++ b/README.txt
@@ -0,0 +1,36 @@
+Apache Sling Mime Library
+
+Support for configurable MIME type mapping and querying.
+
+Disclaimer
+==========
+Apache Sling is an effort undergoing incubation at The Apache Software Foundation (ASF),
+sponsored by the Apache Jackrabbit PMC. Incubation is required of all newly accepted
+projects until a further review indicates that the infrastructure, communications,
+and decision making process have stabilized in a manner consistent with other
+successful ASF projects. While incubation status is not necessarily a reflection of
+the completeness or stability of the code, it does indicate that the project has yet
+to be fully endorsed by the ASF.
+
+Getting Started
+===============
+
+This component uses a Maven 2 (http://maven.apache.org/) build
+environment. It requires a Java 5 JDK (or higher) and Maven (http://maven.apache.org/)
+2.0.7 or later. We recommend to use the latest Maven version.
+
+If you have Maven 2 installed, you can compile and
+package the jar using the following command:
+
+    mvn package
+
+See the Maven 2 documentation for other build features.
+
+The latest source code for this component is available in the
+Subversion (http://subversion.tigris.org/) source repository of
+the Apache Software Foundation. If you have Subversion installed,
+you can checkout the latest source using the following command:
+
+    svn checkout http://svn.apache.org/repos/asf/incubator/sling/trunk/commons/mime
+
+See the Subversion documentation for other source control features.
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..1b9086f
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>org.apache.sling</groupId>
+        <artifactId>sling</artifactId>
+        <version>5-incubator</version>
+        <relativePath>../../../parent/pom.xml</relativePath>
+    </parent>
+
+    <artifactId>org.apache.sling.commons.mime</artifactId>
+    <packaging>bundle</packaging>
+    <version>2.1.0-incubator</version>
+
+    <name>Apache Sling MIME type mapping support</name>
+    <description>
+	Support for configurable MIME type mapping and querying
+    </description>
+
+    <scm>
+        <connection>scm:svn:http://svn.apache.org/repos/asf/incubator/sling/tags/org.apache.sling.commons.mime-2.1.0-incubator</connection>
+        <developerConnection>scm:svn:https://svn.apache.org/repos/asf/incubator/sling/tags/org.apache.sling.commons.mime-2.1.0-incubator</developerConnection>
+        <url>http://svn.apache.org/viewvc/incubator/sling/tags/org.apache.sling.commons.mime-2.1.0-incubator</url>
+    </scm>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-scr-plugin</artifactId>
+            </plugin>
+            <plugin>
+                <groupId>org.apache.felix</groupId>
+                <artifactId>maven-bundle-plugin</artifactId>
+                <extensions>true</extensions>
+                <configuration>
+                    <instructions>
+                        <Bundle-DocURL>
+                            http://incubator.apache.org/sling/site/mime-type-support.html
+                        </Bundle-DocURL>
+                        <Export-Package>
+                            org.apache.sling.commons.mime;version=${pom.version}
+                        </Export-Package>
+                        <Private-Package>
+                            org.apache.sling.commons.mime.internal
+                        </Private-Package>
+                        <Import-Package>
+                            javax.servlet.*;
+                            org.apache.felix.webconsole;resolution:=optional,
+                            *
+                        </Import-Package>
+                    </instructions>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+    <reporting>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-javadoc-plugin</artifactId>
+                <configuration>
+                    <excludePackageNames>
+                        org.apache.sling.commons.mime.internal
+                    </excludePackageNames>
+                </configuration>
+            </plugin>
+        </plugins>
+    </reporting>
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>org.apache.sling.commons.osgi</artifactId>
+            <version>2.0.2-incubator</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.osgi.core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.osgi.compendium</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.felix</groupId>
+            <artifactId>org.apache.felix.webconsole</artifactId>
+            <version>1.2.0</version>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/src/main/java/org/apache/sling/commons/mime/MimeTypeProvider.java b/src/main/java/org/apache/sling/commons/mime/MimeTypeProvider.java
new file mode 100644
index 0000000..97de2ba
--- /dev/null
+++ b/src/main/java/org/apache/sling/commons/mime/MimeTypeProvider.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.commons.mime;
+
+/**
+ * The <code>MimeTypeProvider</code> interface defines an API for services
+ * which are asked for MIME type mappings for unknown MIME types or extensions.
+ * <p>
+ * It is important to understand, that services registered with this interface
+ * are only called as a last resort and that the first service asked and
+ * replying with a non-<code>null</code> answer wins. Specifically if a MIME
+ * type mapping is configured by default or as an extension to the MIME type
+ * service, MimeTypeProvider services are not queried.
+ * <p>
+ * This interface may be implemented by bundles wishing to provide control over
+ * how extensions are mapped to MIME types and vice-versa.
+ */
+public interface MimeTypeProvider {
+
+    /**
+     * Returns the MIME type of the extension of the given <code>name</code>.
+     * The extension is the part of the name after the last dot. If the name
+     * does not contain a dot, the name as a whole is assumed to be the
+     * extension.
+     *
+     * @param name The name for which the MIME type is to be returned.
+     * @return The MIME type for the extension of the name. If the extension
+     *         cannot be mapped to a MIME type or <code>name</code> is
+     *         <code>null</code>, <code>null</code> is returned.
+     * @see #getExtension(String)
+     */
+    String getMimeType(String name);
+
+    /**
+     * Returns the primary name extension to which the given
+     * <code>mimeType</code> maps. The returned extension must map to the
+     * given <code>mimeType</code> when fed to the
+     * {@link #getMimeType(String)} method. In other words, the expression
+     * <code>mimeType.equals(getMimeType(getExtension(mimeType)))</code> must
+     * always be <code>true</code> for any non-<code>null</code> MIME type.
+     * <p>
+     * A MIME type may be mapped to multiple extensions (e.g.
+     * <code>text/plain</code> to <code>txt</code>, <code>log</code>,
+     * ...). This method is expected to returned one of those extensions. It is
+     * up to the implementation to select an appropriate extension if multiple
+     * mappings exist for a single MIME type.
+     *
+     * @param mimeType The MIME type whose primary extension is requested.
+     * @return A extension which maps to the given MIME type or
+     *         <code>null</code> if no such mapping exists.
+     * @see #getMimeType(String)
+     */
+    String getExtension(String mimeType);
+
+}
diff --git a/src/main/java/org/apache/sling/commons/mime/MimeTypeService.java b/src/main/java/org/apache/sling/commons/mime/MimeTypeService.java
new file mode 100644
index 0000000..1d17c53
--- /dev/null
+++ b/src/main/java/org/apache/sling/commons/mime/MimeTypeService.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.commons.mime;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * The <code>MimeTypeService</code> TODO
+ * <p>
+ * This interface is not intended to be implemented by bundles. It is
+ * implemented by this bundle and may be used by client bundles.
+ */
+public interface MimeTypeService {
+
+    /**
+     * Returns the MIME type of the extension of the given <code>name</code>.
+     * The extension is the part of the name after the last dot. If the name
+     * does not contain a dot, the name as a whole is assumed to be the
+     * extension.
+     *
+     * @param name The name for which the MIME type is to be returned.
+     * @return The MIME type for the extension of the name. If the extension
+     *         cannot be mapped to a MIME type or <code>name</code> is
+     *         <code>null</code>, <code>null</code> is returned.
+     * @see #getExtension(String)
+     */
+    String getMimeType(String name);
+
+    /**
+     * Returns the primary name extension to which the given
+     * <code>mimeType</code> maps. The returned extension must map to the
+     * given <code>mimeType</code> when fed to the
+     * {@link #getMimeType(String)} method. In other words, the expression
+     * <code>mimeType.equals(getMimeType(getExtension(mimeType)))</code> must
+     * always be <code>true</code> for any non-<code>null</code> MIME type.
+     * <p>
+     * A MIME type may be mapped to multiple extensions (e.g.
+     * <code>text/plain</code> to <code>txt</code>, <code>log</code>,
+     * ...). This method is expected to returned one of those extensions. It is
+     * up to the implementation to select an appropriate extension if multiple
+     * mappings exist for a single MIME type.
+     *
+     * @param mimeType The MIME type whose primary extension is requested.
+     * @return A extension which maps to the given MIME type or
+     *         <code>null</code> if no such mapping exists.
+     * @see #getMimeType(String)
+     */
+    String getExtension(String mimeType);
+
+    void registerMimeType(String mimeType, String... extensions);
+
+    void registerMimeType(InputStream mimeTabStream) throws IOException;
+}
diff --git a/src/main/java/org/apache/sling/commons/mime/internal/MimeTypeServiceImpl.java b/src/main/java/org/apache/sling/commons/mime/internal/MimeTypeServiceImpl.java
new file mode 100644
index 0000000..fdef83a
--- /dev/null
+++ b/src/main/java/org/apache/sling/commons/mime/internal/MimeTypeServiceImpl.java
@@ -0,0 +1,338 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.commons.mime.internal;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.PrintStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Dictionary;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.felix.webconsole.WebConsoleConstants;
+import org.apache.sling.commons.mime.MimeTypeProvider;
+import org.apache.sling.commons.mime.MimeTypeService;
+import org.apache.sling.commons.osgi.OsgiUtil;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleEvent;
+import org.osgi.framework.BundleListener;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.component.ComponentContext;
+import org.osgi.service.log.LogService;
+
+/**
+ * The <code>MimeTypeServiceImpl</code> is the official implementation of the
+ * {@link MimeTypeService} interface.
+ * 
+ * @scr.component immediate="false" label="%mime.service.name"
+ *                description="%mime.service.description"
+ * @scr.property name="service.vendor" value="The Apache Software Foundation"
+ * @scr.property name="service.description"
+ *               value="Apache Sling MIME Type Service"
+ * @scr.service interface="org.apache.sling.commons.mime.MimeTypeService"
+ * @scr.reference name="MimeTypeProvider"
+ *                interface="org.apache.sling.commons.mime.MimeTypeProvider"
+ *                cardinality="0..n" policy="dynamic"
+ */
+public class MimeTypeServiceImpl implements MimeTypeService, BundleListener {
+
+    public static final String CORE_MIME_TYPES = "/META-INF/core_mime.types";
+
+    public static final String MIME_TYPES = "/META-INF/mime.types";
+
+    /** @scr.property cardinality="-2147483647" type="String" */
+    private static final String PROP_MIME_TYPES = "mime.types";
+
+    /** @scr.reference cardinality="0..1" policy="dynamic" */
+    private LogService logService;
+
+    private Map<String, String> mimeTab = new HashMap<String, String>();
+
+    private Map<String, String> extensionMap = new HashMap<String, String>();
+
+    private MimeTypeProvider[] typeProviders;
+
+    private List<MimeTypeProvider> typeProviderList = new ArrayList<MimeTypeProvider>();
+
+    private MimeTypeWebConsolePlugin webConsolePlugin;
+
+    private ServiceRegistration webConsolePluginService;
+
+    // --------- MimeTypeService interface
+
+    public String getMimeType(String name) {
+        if (name == null) {
+            return null;
+        }
+
+        String ext = name.substring(name.lastIndexOf('.') + 1);
+        ext = ext.toLowerCase();
+
+        String type = this.mimeTab.get(ext);
+        if (type == null) {
+            MimeTypeProvider[] mtp = this.getMimeTypeProviders();
+            for (int i = 0; type == null && i < mtp.length; i++) {
+                type = mtp[i].getMimeType(ext);
+            }
+        }
+
+        return type;
+    }
+
+    public String getExtension(String mimeType) {
+        if (mimeType == null) {
+            return null;
+        }
+
+        // compare using lowercase only
+        mimeType = mimeType.toLowerCase();
+
+        String ext = this.extensionMap.get(mimeType);
+        if (ext == null) {
+            MimeTypeProvider[] mtp = this.getMimeTypeProviders();
+            for (int i = 0; ext == null && i < mtp.length; i++) {
+                ext = mtp[i].getExtension(mimeType);
+            }
+        }
+        return ext;
+    }
+
+    public void registerMimeType(String mimeType, String... extensions) {
+        if (mimeType == null || mimeType.length() == 0 || extensions == null
+            || extensions.length == 0) {
+            return;
+        }
+
+        mimeType = mimeType.toLowerCase();
+
+        String defaultExtension = extensionMap.get(mimeType);
+
+        for (String extension : extensions) {
+            if (extension != null && extension.length() > 0) {
+                extension = extension.toLowerCase();
+
+                String oldMimeType = mimeTab.get(extension);
+                if (oldMimeType == null) {
+
+                    log(LogService.LOG_DEBUG, "registerMimeType: Add mapping "
+                        + extension + "=" + mimeType, null);
+
+                    this.mimeTab.put(extension, mimeType);
+
+                    if (defaultExtension == null) {
+                        defaultExtension = extension;
+                    }
+
+                } else {
+
+                    log(LogService.LOG_INFO,
+                        "registerMimeType: Ignoring mapping " + extension + "="
+                            + mimeType + ": Mapping " + extension + "="
+                            + oldMimeType + " alread exists", null);
+
+                }
+
+            }
+        }
+
+        if (defaultExtension != null) {
+            this.extensionMap.put(mimeType, defaultExtension);
+        }
+    }
+
+    public void registerMimeType(InputStream mimeTabStream) throws IOException {
+        BufferedReader br = new BufferedReader(new InputStreamReader(
+            mimeTabStream, "ISO-8859-1"));
+
+        String line;
+        while ((line = br.readLine()) != null) {
+
+            // ignore comment lines
+            if (line.startsWith("#")) {
+                continue;
+            }
+
+            registerMimeType(line);
+        }
+    }
+
+    // ---------- SCR implementation -------------------------------------------
+
+    protected void activate(ComponentContext context) {
+        context.getBundleContext().addBundleListener(this);
+
+        // register core and default sling mime types
+        Bundle bundle = context.getBundleContext().getBundle();
+        registerMimeType(bundle.getEntry(CORE_MIME_TYPES));
+        registerMimeType(bundle.getEntry(MIME_TYPES));
+
+        // register maps of existing bundles
+        Bundle[] bundles = context.getBundleContext().getBundles();
+        for (int i = 0; i < bundles.length; i++) {
+            if ((bundles[i].getState() & (Bundle.RESOLVED | Bundle.STARTING
+                | Bundle.ACTIVE | Bundle.STOPPING)) != 0
+                && bundles[i].getBundleId() != bundle.getBundleId()) {
+                this.registerMimeType(bundles[i].getEntry(MIME_TYPES));
+            }
+        }
+
+        // register configuration properties
+        String[] configTypes = OsgiUtil.toStringArray(context.getProperties().get(
+            PROP_MIME_TYPES));
+        if (configTypes != null) {
+            for (String configType : configTypes) {
+                registerMimeType(configType);
+            }
+        }
+
+        try {
+            MimeTypeWebConsolePlugin plugin = new MimeTypeWebConsolePlugin(this);
+            plugin.activate(context.getBundleContext());
+
+            Dictionary<String, String> props = new Hashtable<String, String>();
+            props.put(WebConsoleConstants.PLUGIN_LABEL, plugin.getLabel());
+
+            webConsolePluginService = context.getBundleContext().registerService(
+                WebConsoleConstants.SERVICE_NAME, plugin, props);
+            webConsolePlugin = plugin;
+        } catch (Throwable t) {
+            // don't care, we thus don't have the console plugin
+        }
+    }
+
+    protected void deactivate(ComponentContext context) {
+        context.getBundleContext().removeBundleListener(this);
+
+        if (webConsolePluginService != null) {
+            webConsolePluginService.unregister();
+            webConsolePluginService = null;
+
+        }
+
+        if (webConsolePlugin != null) {
+            webConsolePlugin.deactivate();
+            webConsolePlugin = null;
+        }
+    }
+
+    protected void bindMimeTypeProvider(MimeTypeProvider mimeTypeProvider) {
+        synchronized (this.typeProviderList) {
+            this.typeProviderList.add(mimeTypeProvider);
+            this.typeProviders = null;
+        }
+    }
+
+    protected void unbindMimeTypeProvider(MimeTypeProvider mimeTypeProvider) {
+        synchronized (this.typeProviderList) {
+            this.typeProviderList.remove(mimeTypeProvider);
+            this.typeProviders = null;
+        }
+    }
+
+    // ---------- BundleListener ----------------------------------------------
+
+    public void bundleChanged(BundleEvent event) {
+        if (event.getType() == BundleEvent.RESOLVED) {
+            this.registerMimeType(event.getBundle().getEntry(MIME_TYPES));
+        }
+    }
+
+    // ---------- plugin support -----------------------------------------------
+
+    Map<String, String> getMimeMap() {
+        return mimeTab;
+    }
+
+    Map<String, String> getExtensionMap() {
+        return extensionMap;
+    }
+
+    // ---------- internal -----------------------------------------------------
+
+    private MimeTypeProvider[] getMimeTypeProviders() {
+        MimeTypeProvider[] list = this.typeProviders;
+
+        if (list == null) {
+            synchronized (this.typeProviderList) {
+                this.typeProviders = this.typeProviderList.toArray(new MimeTypeProvider[this.typeProviderList.size()]);
+                list = this.typeProviders;
+            }
+        }
+
+        return list;
+    }
+
+    private void registerMimeType(URL mimetypes) {
+        if (mimetypes != null) {
+            InputStream ins = null;
+            try {
+                ins = mimetypes.openStream();
+                this.registerMimeType(ins);
+            } catch (IOException ioe) {
+                // log but don't actually care
+                this.log(LogService.LOG_WARNING, "An error occurred reading "
+                    + mimetypes, ioe);
+            } finally {
+                if (ins != null) {
+                    try {
+                        ins.close();
+                    } catch (IOException ioe) {
+                        // ignore
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Splits the <code>line</code> on whitespace an registers the MIME type
+     * mappings provided the line contains more than one whitespace separated
+     * fields.
+     * 
+     * @throws NullPointerException if <code>line</code> is <code>null</code>.
+     */
+    private void registerMimeType(String line) {
+        String[] parts = line.split("\\s+");
+        if (parts.length > 1) {
+            String[] extensions = new String[parts.length - 1];
+            System.arraycopy(parts, 1, extensions, 0, extensions.length);
+            this.registerMimeType(parts[0], extensions);
+        }
+    }
+
+    private void log(int level, String message, Throwable t) {
+        LogService log = this.logService;
+        if (log != null) {
+            log.log(level, message, t);
+        } else {
+            PrintStream out = (level == LogService.LOG_ERROR)
+                    ? System.err
+                    : System.out;
+            out.println(message);
+            if (t != null) {
+                t.printStackTrace(out);
+            }
+        }
+    }
+
+}
diff --git a/src/main/java/org/apache/sling/commons/mime/internal/MimeTypeWebConsolePlugin.java b/src/main/java/org/apache/sling/commons/mime/internal/MimeTypeWebConsolePlugin.java
new file mode 100644
index 0000000..d130bce
--- /dev/null
+++ b/src/main/java/org/apache/sling/commons/mime/internal/MimeTypeWebConsolePlugin.java
@@ -0,0 +1,200 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.sling.commons.mime.internal;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.Map.Entry;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.felix.webconsole.AbstractWebConsolePlugin;
+
+class MimeTypeWebConsolePlugin extends AbstractWebConsolePlugin {
+
+    /** Serial Version */
+    private static final long serialVersionUID = -2025952303202431607L;
+
+    private static final String LABEL = "mimetypes";
+
+    private static final String TITLE = "MIME Types";
+
+    private final MimeTypeServiceImpl mimeTypeService;
+
+    MimeTypeWebConsolePlugin(MimeTypeServiceImpl mimeTypeService) {
+        this.mimeTypeService = mimeTypeService;
+    }
+
+    @Override
+    public String getLabel() {
+        return LABEL;
+    }
+
+    @Override
+    public String getTitle() {
+        return TITLE;
+    }
+
+    @Override
+    protected void doGet(HttpServletRequest request,
+            HttpServletResponse response) throws ServletException, IOException {
+
+        if (!spoolResource(request, response)) {
+            super.doGet(request, response);
+        }
+    }
+
+    @Override
+    protected void renderContent(HttpServletRequest req, HttpServletResponse res)
+            throws IOException {
+
+        Map<String, Set<String>> mimetab = new TreeMap<String, Set<String>>();
+
+        Map<String, String> extMap = mimeTypeService.getExtensionMap();
+
+        int numExt = 0;
+        for (Entry<String, String> entry : mimeTypeService.getMimeMap().entrySet()) {
+            String ext = entry.getKey();
+            String mime = entry.getValue();
+
+            Set<String> extList = mimetab.get(mime);
+            if (extList == null) {
+                extList = new HashSet<String>();
+                mimetab.put(mime, extList);
+            }
+
+            if (ext.equals(extMap.get(mime))) {
+                ext = "*" + ext + "*";
+            }
+
+            extList.add(ext);
+
+            numExt++;
+        }
+
+        PrintWriter pw = res.getWriter();
+
+        String resLoc = getLabel() + "/res";
+        pw.println("<link href='" + resLoc
+            + "/jquery.treeTable.css' rel='stylesheet' type='text/css' />");
+        pw.println("<script type='text/javascript' src='" + resLoc
+            + "/jquery.treeTable.min.js'></script>");
+        pw.println("<script type='text/javascript'>");
+        pw.println("  $(document).ready(function()  {");
+        pw.println("    $('#mimetabtable').treeTable({ treeColumn: 1 });");
+        pw.println("  });");
+        pw.println("</script>");
+
+        pw.println("<div id='plugin_content'>");
+        pw.println("<div class='fullwidth'>");
+        pw.println("<div class='statusline'>Statistic: " + mimetab.size()
+            + " MIME Types, " + numExt + " Extensions</div>");
+        pw.println("</div>");
+
+        pw.println("<div class='table'>");
+        pw.println("<table id='mimetabtable' class='tablelayout'>");
+
+        pw.println("<colgroup>");
+        pw.println("<col width='20px'>");
+        pw.println("<col width='50%'>");
+        pw.println("<col width='50%'>");
+        pw.println("</colgroup>");
+
+        pw.println("<thead>");
+        pw.println("<tr>");
+        pw.println("<th colspan='2'>Mime Type</th>");
+        pw.println("<th>Extensions</th>");
+        pw.println("</tr>");
+        pw.println("</thead>");
+
+        pw.println("<tbody>");
+
+        String currentMajor = null;
+
+        for (Entry<String, Set<String>> entry : mimetab.entrySet()) {
+            String major = getMajorType(entry.getKey());
+
+            if (!major.equals(currentMajor)) {
+                currentMajor = major;
+                pw.println("<tr id='" + currentMajor + "'>");
+                pw.println("<td>&nbsp;</td>");
+                pw.println("<td>" + currentMajor + "</td>");
+                pw.println("<td>--</td>");
+                pw.println("</tr>");
+            }
+
+            pw.println("<tr id='" + entry.getKey().replace('/', '-')
+                + "' class='child-of-" + currentMajor + "'>");
+            pw.println("<td>&nbsp;</td>");
+            pw.println("<td>" + entry.getKey() + "</td>");
+            pw.println("<td>" + entry.getValue() + "</td>");
+            pw.println("</tr>");
+        }
+
+        pw.println("</tbody>");
+        pw.println("</table>");
+        pw.println("</div>");
+        pw.println("</div>");
+    }
+
+    private String getMajorType(String type) {
+        int slash = type.indexOf('/');
+        return (slash > 0) ? type.substring(0, slash) : type;
+    }
+    
+    private boolean spoolResource(HttpServletRequest request,
+            HttpServletResponse response) throws IOException {
+
+        String pi = request.getPathInfo();
+        int rPi = pi.indexOf("/res/");
+        if (rPi >= 0) {
+            pi = pi.substring(rPi);
+            InputStream ins = getClass().getResourceAsStream(pi);
+            if (ins != null) {
+                try {
+                    response.setContentType(getServletContext().getMimeType(pi));
+                    OutputStream out = response.getOutputStream();
+                    byte[] buf = new byte[2048];
+                    int rd;
+                    while ((rd = ins.read(buf)) >= 0) {
+                        out.write(buf, 0, rd);
+                    }
+                    return true;
+                } finally {
+                    try {
+                        ins.close();
+                    } catch (IOException ignore) {
+                    }
+                }
+            }
+        }
+
+        return false;
+    }
+
+}
diff --git a/src/main/resources/META-INF/DISCLAIMER b/src/main/resources/META-INF/DISCLAIMER
new file mode 100644
index 0000000..90850c2
--- /dev/null
+++ b/src/main/resources/META-INF/DISCLAIMER
@@ -0,0 +1,7 @@
+Apache Sling is an effort undergoing incubation at The Apache Software Foundation (ASF),
+sponsored by the Apache Jackrabbit PMC. Incubation is required of all newly accepted
+projects until a further review indicates that the infrastructure, communications,
+and decision making process have stabilized in a manner consistent with other
+successful ASF projects. While incubation status is not necessarily a reflection of
+the completeness or stability of the code, it does indicate that the project has yet
+to be fully endorsed by the ASF.
\ No newline at end of file
diff --git a/src/main/resources/META-INF/LICENSE b/src/main/resources/META-INF/LICENSE
new file mode 100644
index 0000000..ef13dba
--- /dev/null
+++ b/src/main/resources/META-INF/LICENSE
@@ -0,0 +1,234 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+
+APACHE SLING SUBCOMPONENTS:
+
+Apache Sling includes subcomponents with separate copyright notices and
+license terms. Your use of these subcomponents is subject to the terms
+and conditions of the following licenses.
+
+JQuery TreeTable plugin
+
+    Copyright (c) 2009 Ludo van den Boom
+    
+    Permission is hereby granted, free of charge, to any person
+    obtaining a copy of this software and associated documentation
+    files (the "Software"), to deal in the Software without
+    restriction, including without limitation the rights to use,
+    copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the
+    Software is furnished to do so, subject to the following
+    conditions:
+    
+    The above copyright notice and this permission notice shall be
+    included in all copies or substantial portions of the Software.
+    
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+    OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+    HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+    WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+    FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+    OTHER DEALINGS IN THE SOFTWARE.
diff --git a/src/main/resources/META-INF/NOTICE b/src/main/resources/META-INF/NOTICE
new file mode 100644
index 0000000..9837e87
--- /dev/null
+++ b/src/main/resources/META-INF/NOTICE
@@ -0,0 +1,13 @@
+Apache Sling MIME type mapping support
+Copyright 2008-2009 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
+
+This product includes software developed by
+Ludo van den Boom (http://blog.cubicphuse.nl/)
+Copyright (c) 2009 Ludo van den Boom
+Licensed under the MIT License
+
+Apache Sling is based on source code originally developed 
+by Day Software (http://www.day.com/).
\ No newline at end of file
diff --git a/src/main/resources/META-INF/core_mime.types b/src/main/resources/META-INF/core_mime.types
new file mode 100644
index 0000000..a5eba4e
--- /dev/null
+++ b/src/main/resources/META-INF/core_mime.types
@@ -0,0 +1,1267 @@
+#
+#  Licensed to the Apache Software Foundation (ASF) under one
+#  or more contributor license agreements.  See the NOTICE file
+#  distributed with this work for additional information
+#  regarding copyright ownership.  The ASF licenses this file
+#  to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance
+#  with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing,
+#  software distributed under the License is distributed on an
+#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#  KIND, either express or implied.  See the License for the
+#  specific language governing permissions and limitations
+#  under the License.
+#
+
+#
+# This file is copied from
+#
+#   http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
+#   Rev. 774215
+#
+#
+# NOTE: Please do not edit this file other than syncing its content
+#       with the mime.types file from the Apache httpd project.
+#       To add SLING specific default mappings rather ammend the
+#       mime.types file.
+#
+#
+# See SLING-964 for more information
+#
+
+
+# This is a comment. I love comments.
+
+# This file controls what Internet media types are sent to the client for
+# given file extension(s).  Sending the correct media type to the client
+# is important so they know how to handle the content of the file.
+# Extra types can either be added here or by using an AddType directive
+# in your config files. For more information about Internet media types,
+# please read RFC 2045, 2046, 2047, 2048, and 2077.  The Internet media type
+# registry is at <http://www.iana.org/assignments/media-types/>.
+
+# MIME type                 Extensions
+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/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/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/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
+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.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.arastra.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.clonk.c4group           c4g c4d c4f c4p c4u
+application/vnd.commerce-battelle
+application/vnd.commonspace         csp cst
+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.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.geogebra.file           ggb
+application/vnd.geogebra.tool           ggt
+application/vnd.geometry-explorer       gex gre
+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              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.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.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.presentationml.presentation pptx
+application/vnd.openxmlformats-officedocument.presentationml.slide  sldx
+application/vnd.openxmlformats-officedocument.presentationml.slideshow  ppsx
+application/vnd.openxmlformats-officedocument.presentationml.template   potx
+application/vnd.openxmlformats-officedocument.spreadsheetml.sheet   xlsx
+application/vnd.openxmlformats-officedocument.spreadsheetml.template    xltx
+application/vnd.openxmlformats-officedocument.wordprocessingml.document docx
+application/vnd.openxmlformats-officedocument.wordprocessingml.template dotx
+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.pg.format           str
+application/vnd.pg.osasli           ei6
+application/vnd.piaccess.application-licence
+application/vnd.picsel              efif
+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.rapid
+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.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.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.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-wmd                wmd
+application/x-ms-wmz                wmz
+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-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/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/t140c
+audio/t38
+audio/telephone-event
+audio/tone
+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.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/wav                   wav
+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                  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
+text/parityfec
+text/plain                  txt text conf def list log in
+text/prs.fallenstein.rst
+text/prs.lines.tag              dsc
+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/resources/META-INF/mime.types b/src/main/resources/META-INF/mime.types
new file mode 100644
index 0000000..23894e0
--- /dev/null
+++ b/src/main/resources/META-INF/mime.types
@@ -0,0 +1,31 @@
+#
+#  Licensed to the Apache Software Foundation (ASF) under one
+#  or more contributor license agreements.  See the NOTICE file
+#  distributed with this work for additional information
+#  regarding copyright ownership.  The ASF licenses this file
+#  to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance
+#  with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing,
+#  software distributed under the License is distributed on an
+#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#  KIND, either express or implied.  See the License for the
+#  specific language governing permissions and limitations
+#  under the License.
+#
+
+#
+# Sling extensions to the core_mime.types
+#
+
+application/compress           z
+application/msexcel            xls xlsx
+application/mspowerpoint       ppt pptx
+application/octet-stream       class exe msi
+application/photoshop          psd
+image/pict                     pict
+text/plain                     apt
+text/rtf                       rtf
diff --git a/src/main/resources/OSGI-INF/metatype/metatype.properties b/src/main/resources/OSGI-INF/metatype/metatype.properties
new file mode 100644
index 0000000..b8a8461
--- /dev/null
+++ b/src/main/resources/OSGI-INF/metatype/metatype.properties
@@ -0,0 +1,36 @@
+#
+#  Licensed to the Apache Software Foundation (ASF) under one
+#  or more contributor license agreements.  See the NOTICE file
+#  distributed with this work for additional information
+#  regarding copyright ownership.  The ASF licenses this file
+#  to you under the Apache License, Version 2.0 (the
+#  "License"); you may not use this file except in compliance
+#  with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing,
+#  software distributed under the License is distributed on an
+#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+#  KIND, either express or implied.  See the License for the
+#  specific language governing permissions and limitations
+#  under the License.
+#
+
+
+#
+# This file contains localization strings for configuration labels and
+# descriptions as used in the metatype.xml descriptor generated by the
+# the Felix SCR plugin
+
+mime.service.name = Apache Sling MIME Type Service
+mime.service.description = The Sling MIME Type Service provides support for \
+ maintaining and configuring MIME Type mappings.
+mime.types.name = MIME Types
+mime.types.description = Configures additional MIME type mappings in the \
+ traditional mime.types file format: Each property is a blank space separated \
+ list of strings where the first string is the MIME type and the rest of the \
+ strings are filename extensions referring to the MIME type. Using this \
+ property additional MIME type mappings may be defined. Existing MIME type \
+ mappings cannot be redefined and setting such mappings in this property \
+ has no effect. For a list of existing mappings refer to the MIME Types page.
\ No newline at end of file
diff --git a/src/main/resources/res/jquery.treeTable.css b/src/main/resources/res/jquery.treeTable.css
new file mode 100644
index 0000000..647df57
--- /dev/null
+++ b/src/main/resources/res/jquery.treeTable.css
@@ -0,0 +1,43 @@
+/* jQuery TreeTable Core 2.0 stylesheet
+ *
+ * This file contains styles that are used to display the tree table. Each tree
+ * table is assigned the +treeTable+ class.
+ * ========================================================================= */
+
+/* jquery.treeTable.collapsible
+ * ------------------------------------------------------------------------- */
+.treeTable tr td .expander {
+  background-position: left center;
+  background-repeat: no-repeat;
+  cursor: pointer;
+  padding: 0;
+  zoom: 1; /* IE7 Hack */
+}
+
+.treeTable tr.collapsed td .expander {
+  background-image: url(../../res/imgs/arrow_right.png);
+}
+
+.treeTable tr.expanded td .expander {
+  background-image: url(../../res/imgs/arrow_down.png);
+}
+
+/* jquery.treeTable.sortable
+ * ------------------------------------------------------------------------- */
+.treeTable tr.selected, .treeTable tr.accept {
+  background-color: #3875d7;
+  color: #fff;
+}
+
+.treeTable tr.collapsed.selected td .expander, .treeTable tr.collapsed.accept td .expander {
+  background-image: url(../../res/imgs/arrow_right.png);
+}
+
+.treeTable tr.expanded.selected td .expander, .treeTable tr.expanded.accept td .expander {
+  background-image: url(../../res/imgs/arrow_down.png);
+}
+
+.treeTable .ui-draggable-dragging {
+  color: #000;
+  z-index: 1;
+}
\ No newline at end of file
diff --git a/src/main/resources/res/jquery.treeTable.min.js b/src/main/resources/res/jquery.treeTable.min.js
new file mode 100644
index 0000000..6ba8137
--- /dev/null
+++ b/src/main/resources/res/jquery.treeTable.min.js
@@ -0,0 +1,10 @@
+/* jQuery treeTable Plugin 2.2.1 - http://ludo.cubicphuse.nl/jquery-plugins/treeTable/ */
+(function($){var options;$.fn.treeTable=function(opts){options=$.extend({},$.fn.treeTable.defaults,opts);return this.each(function(){$(this).addClass("treeTable").find("tbody tr").each(function(){if(!options.expandable||$(this)[0].className.search("child-of-")==-1){initialize($(this));}});});};$.fn.treeTable.defaults={childPrefix:"child-of-",expandable:true,indent:19,initialState:"collapsed",treeColumn:0};$.fn.collapse=function(){$(this).addClass("collapsed");childrenOf($(this)).each(fun [...]
+$(this).hide();});return this;};$.fn.expand=function(){$(this).removeClass("collapsed").addClass("expanded");childrenOf($(this)).each(function(){initialize($(this));if($(this).is(".expanded.parent")){$(this).expand();}
+$(this).show();});return this;};$.fn.appendBranchTo=function(destination){var node=$(this);var parent=parentOf(node);var ancestorNames=$.map(ancestorsOf($(destination)),function(a){return a.id;});if($.inArray(node[0].id,ancestorNames)==-1&&(!parent||(destination.id!=parent[0].id))&&destination.id!=node[0].id){indent(node,ancestorsOf(node).length*options.indent*-1);if(parent){node.removeClass(options.childPrefix+parent[0].id);}
+node.addClass(options.childPrefix+destination.id);move(node,destination);indent(node,ancestorsOf(node).length*options.indent);}
+return this;};$.fn.reverse=function(){return this.pushStack(this.get().reverse(),arguments);};$.fn.toggleBranch=function(){if($(this).hasClass("collapsed")){$(this).expand();}else{$(this).removeClass("expanded").collapse();}
+return this;};function ancestorsOf(node){var ancestors=[];while(node=parentOf(node)){ancestors[ancestors.length]=node[0];}
+return ancestors;};function childrenOf(node){return $("table.treeTable tbody tr."+options.childPrefix+node[0].id);};function indent(node,value){var cell=$(node.children("td")[options.treeColumn]);var padding=parseInt(cell.css("padding-left"),10)+value;cell.css("padding-left",+padding+"px");childrenOf(node).each(function(){indent($(this),value);});};function initialize(node){if(!node.hasClass("initialized")){node.addClass("initialized");var childNodes=childrenOf(node);if(!node.hasClass("p [...]
+if(node.hasClass("parent")){var cell=$(node.children("td")[options.treeColumn]);var padding=parseInt(cell.css("padding-left"),10)+options.indent;childNodes.each(function(){$($(this).children("td")[options.treeColumn]).css("padding-left",padding+"px");});if(options.expandable){cell.prepend('<span style="margin-left: -'+options.indent+'px; padding-left: '+options.indent+'px" class="expander"></span>');$(cell[0].firstChild).click(function(){node.toggleBranch();});if(!(node.hasClass("expande [...]
+if(node.hasClass("collapsed")){node.collapse();}else if(node.hasClass("expanded")){node.expand();}}}}};function move(node,destination){node.insertAfter(destination);childrenOf(node).reverse().each(function(){move($(this),node[0]);});};function parentOf(node){var classNames=node[0].className.split(' ');for(key in classNames){if(classNames[key].match("child-of-")){return $("#"+classNames[key].substring(9));}}};})(jQuery);
\ No newline at end of file
diff --git a/src/test/java/org/apache/sling/commons/mime/internal/MimeTypeServiceImplTest.java b/src/test/java/org/apache/sling/commons/mime/internal/MimeTypeServiceImplTest.java
new file mode 100644
index 0000000..de2c227
--- /dev/null
+++ b/src/test/java/org/apache/sling/commons/mime/internal/MimeTypeServiceImplTest.java
@@ -0,0 +1,194 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.sling.commons.mime.internal;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.sling.commons.mime.MimeTypeProvider;
+import org.apache.sling.commons.mime.internal.MimeTypeServiceImpl;
+
+import junit.framework.TestCase;
+
+/**
+ * The <code>MimeTypeServiceImplTest</code> TODO
+ */
+public class MimeTypeServiceImplTest extends TestCase {
+
+    private static final String IMAGE_GIF = "image/gif";
+
+    private static final String GIF = "gif";
+
+    private static final String UNMAPPED_GIF = "unmapped_gif";
+
+    private static final String LOG = "log";
+
+    private static final String TXT = "txt";
+
+    private static final String APT = "apt";
+
+    private static final String TEXT_PLAIN = "text/plain";
+
+    private MimeTypeServiceImpl service;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+
+        this.service = new MimeTypeServiceImpl();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        this.service = null;
+
+        super.tearDown();
+    }
+
+    public void testNoMapping() throws Exception {
+        assertNull(this.service.getMimeType("file." + TXT));
+        assertNull(this.service.getMimeType(TXT));
+        assertNull(this.service.getExtension(TEXT_PLAIN));
+    }
+
+    public void testTxtMapping() throws Exception {
+
+        this.service.registerMimeType(TEXT_PLAIN, TXT, LOG, APT);
+
+        final String [] exts = { TXT, LOG, APT };
+        for(String ext : exts) {
+            assertEquals("Extension " + ext + " (1)", TEXT_PLAIN, this.service.getMimeType("file." + ext));
+            assertEquals("Extension " + ext + " (2)", TEXT_PLAIN, this.service.getMimeType(ext));
+        }
+
+        assertEquals(TEXT_PLAIN,
+            this.service.getMimeType(("file." + TXT).toUpperCase()));
+        assertEquals(TEXT_PLAIN, this.service.getMimeType((TXT).toUpperCase()));
+        assertEquals(TEXT_PLAIN,
+            this.service.getMimeType(("file." + LOG).toUpperCase()));
+        assertEquals(TEXT_PLAIN, this.service.getMimeType((LOG).toUpperCase()));
+
+        assertNull(this.service.getMimeType(GIF));
+
+        assertEquals(TXT, this.service.getExtension(TEXT_PLAIN));
+    }
+
+    public void testFileLoading() throws Exception {
+        loadMimeTypes(MimeTypeServiceImpl.CORE_MIME_TYPES);
+        loadMimeTypes(MimeTypeServiceImpl.MIME_TYPES);
+
+        final String [] exts = { TXT, LOG, APT };
+        for(String ext : exts) {
+            assertEquals("Extension " + ext + " (1)", TEXT_PLAIN, this.service.getMimeType("file." + ext));
+            assertEquals("Extension " + ext + " (2)", TEXT_PLAIN, this.service.getMimeType(ext));
+        }
+
+        assertEquals(TEXT_PLAIN,
+            this.service.getMimeType(("file." + TXT).toUpperCase()));
+        assertEquals(TEXT_PLAIN, this.service.getMimeType((TXT).toUpperCase()));
+        assertEquals(TEXT_PLAIN,
+            this.service.getMimeType(("file." + LOG).toUpperCase()));
+        assertEquals(TEXT_PLAIN, this.service.getMimeType((LOG).toUpperCase()));
+
+        assertEquals(IMAGE_GIF, this.service.getMimeType(GIF));
+        assertNull(this.service.getMimeType(UNMAPPED_GIF));
+
+        assertEquals(TXT, this.service.getExtension(TEXT_PLAIN));
+    }
+
+    public void testProvider() throws Exception {
+        MimeTypeProvider mtp = this.createMimeTypeProvider(IMAGE_GIF, GIF);
+
+        assertNull(this.service.getMimeType(GIF));
+        assertNull(this.service.getExtension(IMAGE_GIF));
+
+        this.service.bindMimeTypeProvider(mtp);
+
+        assertEquals(IMAGE_GIF, this.service.getMimeType(GIF));
+        assertEquals(GIF, this.service.getExtension(IMAGE_GIF));
+
+        this.service.unbindMimeTypeProvider(mtp);
+
+        assertNull(this.service.getMimeType(GIF));
+        assertNull(this.service.getExtension(IMAGE_GIF));
+    }
+
+    public void testProvider2() throws Exception {
+        MimeTypeProvider mtp = this.createMimeTypeProvider(IMAGE_GIF, GIF);
+
+        this.service.registerMimeType(IMAGE_GIF, UNMAPPED_GIF);
+
+        assertEquals(IMAGE_GIF, this.service.getMimeType(UNMAPPED_GIF));
+        assertEquals(UNMAPPED_GIF, this.service.getExtension(IMAGE_GIF));
+
+        assertNull(this.service.getMimeType(GIF));
+
+        this.service.bindMimeTypeProvider(mtp);
+
+        assertEquals(IMAGE_GIF, this.service.getMimeType(UNMAPPED_GIF));
+        assertEquals(UNMAPPED_GIF, this.service.getExtension(IMAGE_GIF));
+
+        assertEquals(IMAGE_GIF, this.service.getMimeType(GIF));
+
+        this.service.unbindMimeTypeProvider(mtp);
+
+        assertEquals(IMAGE_GIF, this.service.getMimeType(UNMAPPED_GIF));
+        assertEquals(UNMAPPED_GIF, this.service.getExtension(IMAGE_GIF));
+
+        assertNull(this.service.getMimeType(GIF));
+    }
+
+    private MimeTypeProvider createMimeTypeProvider(final String type, final String ext) {
+        return new MimeTypeProvider() {
+            public String getMimeType(String name) {
+                if (name == null) {
+                    return null;
+                } else if (name.toLowerCase().endsWith(ext)) {
+                    return type;
+                } else {
+                    return null;
+                }
+            }
+
+            public String getExtension(String mimeType) {
+                if (mimeType == null) {
+                    return null;
+                } else if (mimeType.toLowerCase().equals(type)) {
+                    return ext;
+                } else {
+                    return null;
+                }
+            }
+        };
+
+    }
+    
+    private void loadMimeTypes(String path) throws IOException {
+        InputStream ins = this.getClass().getResourceAsStream(path);
+        assertNotNull(ins);
+
+        try {
+            this.service.registerMimeType(ins);
+        } finally {
+            try {
+                ins.close();
+            } catch (IOException ignore) {
+            }
+        }
+
+    }
+}

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.