001    package org.trails.component.blob;
002    
003    import org.apache.tapestry.IAsset;
004    import org.apache.tapestry.asset.AssetFactory;
005    
006    import java.util.HashMap;
007    import java.util.Map;
008    
009    /**
010     * The Trails {@link org.trails.component.blob.IconResolver} default implementation.
011     */
012    public class DefaultIconResolver implements IconResolver
013    {
014    
015            /**
016             * To be injected "service:tapestry.asset.ClasspathAssetFactory"
017             */
018            private AssetFactory classpathAssetFactory;
019    
020    
021            private static Map<String, String> map = new HashMap<String, String>();
022            private Map<String, IAsset> assetsMap = new HashMap<String, IAsset>();
023    
024            public static final String DEFAULT_CONTENT_TYPE = "application/octet-stream";
025    
026            static
027            {
028                    map.put("application/x-zip-compressed", "/org/trails/component/blob/image/asset/winzip.gif");
029                    map.put("application/pdf", "/org/trails/component/blob/image/asset/icadobe.gif");
030                    map.put("application/msword", "/org/trails/component/blob/image/asset/icdoc.gif");
031                    map.put("application/vnd.visio", "/org/trails/component/blob/image/asset/icdoc.gif");
032                    map.put("application/vnd.ms-powerpoint", "/org/trails/component/blob/image/asset/icppt.gif");
033                    map.put("application/vnd.ms-excel", "/org/trails/component/blob/image/asset/icxls.gif");
034                    map.put(DEFAULT_CONTENT_TYPE, "/org/trails/component/blob/image/asset/icgen.gif");
035                    map.put("text/html", "/org/trails/component/blob/image/asset/ichtm.gif");
036                    map.put("text/plain", "/org/trails/component/blob/image/asset/ictxt.gif");
037                    map.put("text/css", "/org/trails/component/blob/image/asset/ictxt.gif");
038                    map.put("text/xml", "/org/trails/component/blob/image/asset/icxml.gif");
039                    map.put("image/tiff", "/org/trails/component/blob/image/asset/icgen.gif");
040                    map.put("video/avi", "/org/trails/component/blob/image/asset/icwmp.gif");
041                    map.put("video/mpeg", "/org/trails/component/blob/image/asset/icwmp.gif");
042                    map.put("video/mp4", "/org/trails/component/blob/image/asset/icwmp.gif");
043                    map.put("video/quicktime", "/org/trails/component/blob/image/asset/icwmp.gif");
044                    map.put("video/x-ms-wmv", "/org/trails/component/blob/image/asset/icwmp.gif");
045            }
046    
047            public IAsset getAsset(String contentType)
048            {
049                    if (!assetsMap.containsKey(contentType))
050                    {
051                            if (map.containsKey(contentType))
052                            {
053                                    assetsMap.put(contentType, classpathAssetFactory.createAbsoluteAsset(map.get(contentType), null, null));
054                            } else
055                            {
056                                    return getAsset(DEFAULT_CONTENT_TYPE);
057                            }
058                    }
059    
060                    return assetsMap.get(contentType);
061            }
062    
063            public void setClasspathAssetFactory(AssetFactory classpathAssetFactory)
064            {
065                    this.classpathAssetFactory = classpathAssetFactory;
066            }
067    }