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    }