001    package org.trails.component.blob;
002    
003    import org.apache.tapestry.BaseComponent;
004    import org.apache.tapestry.IAsset;
005    import org.apache.tapestry.annotations.ComponentClass;
006    import org.apache.tapestry.annotations.InjectObject;
007    import org.apache.tapestry.annotations.Parameter;
008    import org.apache.tapestry.asset.AssetFactory;
009    import org.trails.descriptor.IClassDescriptor;
010    import org.trails.descriptor.IPropertyDescriptor;
011    import org.trails.descriptor.extension.BlobDescriptorExtension;
012    
013    @ComponentClass(allowBody = true, allowInformalParameters = true)
014    public abstract class TrailsDownload extends BaseComponent
015    {
016            private final static String noIcon = "/images/cross.png";
017            private final static String noImage = "/images/noimage.jpg";
018    
019            @InjectObject("service:trails.core.FilePersister")
020            public abstract IFilePersister getFilePersister();
021    
022            @InjectObject("service:trails.core.IconResolver")
023            public abstract IconResolver getIconResolver();
024    
025            @InjectObject("service:tapestry.asset.ContextAssetFactory")
026            public abstract AssetFactory getContextAssetFactory();
027    
028            @Parameter(required = true)
029            public abstract Object getModel();
030    
031            @Parameter(required = true)
032            public abstract IPropertyDescriptor getPropertyDescriptor();
033    
034            public BlobDescriptorExtension.RenderType getRenderType()
035            {
036                    return getPropertyDescriptor().getExtension(BlobDescriptorExtension.class).getRenderType();
037            }
038    
039            public IAsset getByteArrayAsset()
040            {
041                    return getFilePersister().getAsset(getPropertyDescriptor(), getModel());
042            }
043    
044            public IAsset getIcon()
045            {
046                    return getContentType() != null ? getIconResolver().getAsset(getContentType()) : getNoIcon();
047            }
048    
049            private String getContentType()
050            {
051                    return getFilePersister().getContentType(getPropertyDescriptor(), getModel());
052            }
053    
054            public String getFileName()
055            {
056                    return getFilePersister().getFileName(getPropertyDescriptor(), getModel());
057            }
058    
059            public IAsset getNoIcon()
060            {
061                    return getContextAssetFactory().createAbsoluteAsset(noIcon, null, null);
062            }
063    
064            public IAsset getNoImage()
065            {
066                    return getContextAssetFactory().createAbsoluteAsset(noImage, null, null);
067            }
068    }