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 }