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