001 package org.tynamo.components;
002
003 import org.apache.tapestry5.Asset;
004 import org.apache.tapestry5.ComponentResources;
005 import org.apache.tapestry5.Link;
006 import org.apache.tapestry5.annotations.Parameter;
007 import org.apache.tapestry5.annotations.Property;
008 import org.apache.tapestry5.ioc.annotations.Inject;
009 import org.apache.tapestry5.ioc.services.PropertyAccess;
010 import org.tynamo.blob.BlobManager;
011 import org.tynamo.descriptor.TynamoPropertyDescriptor;
012 import org.tynamo.descriptor.extension.BlobDescriptorExtension;
013 import org.tynamo.services.DescriptorService;
014 import org.tynamo.services.PersistenceService;
015
016 public class Download
017 {
018
019 @Parameter(value = "asset:cross.png")
020 @Property(write = false)
021 private Asset noIcon;
022
023 @Parameter(value = "asset:noimage.jpg")
024 @Property(write = false)
025 private Asset noImage;
026
027 @Inject
028 private BlobManager filePersister;
029
030 @Inject
031 private DescriptorService descriptorService;
032
033 @Inject
034 private PropertyAccess propertyAccess;
035
036 /*
037 @Inject
038 private IconResolver iconResolver;
039
040 @Inject
041 private AssetFactory contextAssetFactory;
042 */
043
044 @Inject
045 private ComponentResources resources;
046
047 @Parameter(required = true)
048 private Object model;
049
050 @Parameter(required = true)
051 private TynamoPropertyDescriptor propertyDescriptor;
052
053 public BlobDescriptorExtension.RenderType getRenderType()
054 {
055 return propertyDescriptor.getExtension(BlobDescriptorExtension.class).getRenderType();
056 }
057
058 public Link getBlobLink()
059 {
060 return filePersister.createBlobLink(propertyDescriptor, model);
061 }
062
063 /*
064 public Asset getIcon()
065 {
066 return getContentType() != null ? iconResolver.getAsset(getContentType()) : getNoIcon();
067 }
068 */
069
070 private String getContentType()
071 {
072 return filePersister.getContentType(propertyDescriptor, model);
073 }
074
075 public String getFileName()
076 {
077 return filePersister.getFileName(propertyDescriptor, model);
078 }
079
080 public boolean isNotNull()
081 {
082 return isModelNew() && filePersister.isNotNull(propertyDescriptor, model);
083 }
084
085 public boolean isModelNew()
086 {
087 return propertyAccess.get(model, descriptorService.getClassDescriptor(propertyDescriptor.getBeanType())
088 .getIdentifierDescriptor().getName()) != null;
089 }
090
091 public boolean isNotImageNotIconNotNull()
092 {
093 return isNotNull() && !getRenderType().isIcon() && !getRenderType().isImage();
094 }
095 }