Author: jukka
Date: Sat Nov  3 08:15:00 2007
New Revision: 591631

URL: http://svn.apache.org/viewvc?rev=591631&view=rev
Log:
TIKA-87 - MimeTypes should allow modification of MIME types
    - Merged MimeInfo and MimeType
    - Made MimeType Comparable

Modified:
    incubator/tika/trunk/src/main/java/org/apache/tika/mime/MimeType.java
    incubator/tika/trunk/src/main/java/org/apache/tika/mime/MimeTypes.java

Modified: incubator/tika/trunk/src/main/java/org/apache/tika/mime/MimeType.java
URL: 
http://svn.apache.org/viewvc/incubator/tika/trunk/src/main/java/org/apache/tika/mime/MimeType.java?rev=591631&r1=591630&r2=591631&view=diff
==============================================================================
--- incubator/tika/trunk/src/main/java/org/apache/tika/mime/MimeType.java 
(original)
+++ incubator/tika/trunk/src/main/java/org/apache/tika/mime/MimeType.java Sat 
Nov  3 08:15:00 2007
@@ -20,6 +20,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.regex.Pattern;
+
 import org.apache.tika.utils.StringUtil;
 
 /**
@@ -27,7 +28,7 @@
  * 
  * 
  */
-public final class MimeType {
+public final class MimeType implements Comparable<MimeType> {
 
     /** The primary and sub types separator */
     private final static String SEPARATOR = "/";
@@ -331,8 +332,8 @@
         return level;
     }
 
-    void incLevel() {
-        this.level++;
+    void setLevel(int level) {
+        this.level = level;
     }
 
     /**
@@ -467,4 +468,13 @@
                     .toString();
         }
     }
+
+    public int compareTo(MimeType o) {
+        int diff = level - o.level;
+        if (diff == 0) {
+            diff = name.compareTo(o.name);
+        }
+        return diff;
+    }
+
 }

Modified: incubator/tika/trunk/src/main/java/org/apache/tika/mime/MimeTypes.java
URL: 
http://svn.apache.org/viewvc/incubator/tika/trunk/src/main/java/org/apache/tika/mime/MimeTypes.java?rev=591631&r1=591630&r2=591631&view=diff
==============================================================================
--- incubator/tika/trunk/src/main/java/org/apache/tika/mime/MimeTypes.java 
(original)
+++ incubator/tika/trunk/src/main/java/org/apache/tika/mime/MimeTypes.java Sat 
Nov  3 08:15:00 2007
@@ -28,6 +28,8 @@
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
+import java.util.SortedSet;
+import java.util.TreeSet;
 
 /**
  * This class is a MimeType repository. It gathers a set of MimeTypes and
@@ -49,7 +51,7 @@
     public final static String DEFAULT = "application/octet-stream";
 
     /** All the registered MimeTypes indexed on their name */
-    private Map<String, MimeInfo> types = new HashMap<String, MimeInfo>();
+    private Map<String, MimeType> types = new HashMap<String, MimeType>();
 
     /** The patterns matcher */
     private Patterns patterns = new Patterns();
@@ -58,10 +60,10 @@
     private ArrayList<Magic> magics = new ArrayList<Magic>();
 
     /** List of all registered rootXML */
-    private ArrayList<MimeInfo> xmls = new ArrayList<MimeInfo>();
+    private SortedSet<MimeType> xmls = new TreeSet<MimeType>();
 
-    private Map<String, List<MimeInfo>> unsolvedDeps =
-        new HashMap<String, List<MimeInfo>>();
+    private Map<String, List<MimeType>> unsolvedDeps =
+        new HashMap<String, List<MimeType>>();
 
     /**
      * A comparator used to sort the mime types based on their magics (it is
@@ -78,17 +80,6 @@
         }
     };
 
-    /**
-     * A comparator used to sort the mime types based on their level (the level
-     * is the number of super-types for a type)
-     */
-    private final static Comparator<MimeInfo> LEVELS_COMPARATOR =
-        new Comparator<MimeInfo>() {
-            public int compare(MimeInfo o1, MimeInfo o2) {
-                return o2.getLevel() - o1.getLevel();
-            }
-        };
-
     /** The minimum length of data to provide to check all MimeTypes */
     private int minLength = 0;
 
@@ -146,8 +137,7 @@
         assert data != null;
 
         // First, check for XML descriptions (level by level)
-        for (MimeInfo info : xmls) {
-            MimeType type = info.getType();
+        for (MimeType type : xmls) {
             if (type.matchesXML(data)) {
                 return type;
             }
@@ -309,8 +299,7 @@
      *         MimeType is registered for this name.
      */
     public MimeType forName(String name) {
-        MimeInfo info = types.get(name);
-        return (info == null) ? null : info.getType();
+        return types.get(name);
     }
 
     /**
@@ -353,29 +342,27 @@
         }
 
         // Add the new type in the repository
-        MimeInfo info = new MimeInfo(type);
-        types.put(type.getName(), info);
+        types.put(type.getName(), type);
 
         // Checks for some unsolved dependencies on this new type
-        List<MimeInfo> deps = unsolvedDeps.get(type.getName());
+        List<MimeType> deps = unsolvedDeps.remove(type.getName());
         if (deps != null) {
-            int level = info.getLevel();
-            for (MimeInfo dep : deps) {
+            int level = type.getLevel();
+            for (MimeType dep : deps) {
                 level = Math.max(level, dep.getLevel() + 1);
             }
-            info.setLevel(level);
-            unsolvedDeps.remove(type.getName());
+            type.setLevel(level);
         }
 
         for (String name : type.getSuperTypes()) {
-            MimeInfo superType = types.get(name);
+            MimeType superType = types.get(name);
             if (superType == null) {
                 deps = unsolvedDeps.get(name);
                 if (deps == null) {
-                    deps = new ArrayList<MimeInfo>();
+                    deps = new ArrayList<MimeType>();
                     unsolvedDeps.put(name, deps);
                 }
-                deps.add(info);
+                deps.add(type);
             }
         }
 
@@ -391,52 +378,8 @@
 
         // Update the xml (xmlRoot) index...
         if (type.hasRootXML()) {
-            this.xmls.add(info);
+            xmls.add(type);
         }
-        Collections.sort(xmls, LEVELS_COMPARATOR);
     }
 
-    // Inherited Javadoc
-    public String toString() {
-        StringBuilder builder = new StringBuilder();
-        for (MimeInfo info : types.values()) {
-            builder.append(info.getType()).append("\n");
-        }
-        return builder.toString();
-    }
-
-    private final class MimeInfo {
-
-        private final MimeType type;
-
-        private int level;
-
-        MimeInfo(MimeType type) {
-            this.type = type;
-            this.level = 0;
-        }
-
-        MimeType getType() {
-            return type;
-        }
-
-        int getLevel() {
-            return level;
-        }
-
-        void setLevel(int level) {
-            if (level > this.level) {
-                this.level = level;
-
-                // Update all my super-types
-                for (String name : type.getSuperTypes()) {
-                    MimeInfo info = types.get(name);
-                    if (info != null) {
-                        info.setLevel(level + 1);
-                    }
-                }
-            }
-        }
-
-    }
 }


Reply via email to