package org.tynamo.components; import org.apache.tapestry5.Asset; import org.apache.tapestry5.Link; import org.apache.tapestry5.annotations.Parameter; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.ioc.services.PropertyAccess; import org.tynamo.blob.BlobManager; import org.tynamo.blob.IconResolver; import org.tynamo.blob.RenderType; import org.tynamo.descriptor.TynamoPropertyDescriptor; import org.tynamo.descriptor.extension.BlobDescriptorExtension; import org.tynamo.services.DescriptorService; public class Download { @Parameter(value = "asset:cross.png") @Property(write = false) private Asset noIcon; @Parameter(value = "asset:noimage.jpg") @Property(write = false) private Asset noImage; @Inject private BlobManager filePersister; @Inject private DescriptorService descriptorService; @Inject private PropertyAccess propertyAccess; @Inject private IconResolver iconResolver; @Parameter(required = true) private Object model; @Parameter(required = true) private TynamoPropertyDescriptor propertyDescriptor; public RenderType getRenderType() { return propertyDescriptor.getExtension(BlobDescriptorExtension.class).getRenderType(); } public Link getBlobLink() { return filePersister.createBlobLink(propertyDescriptor, model); } public Asset getIcon() { Asset icon = iconResolver.getAsset(getContentType()); return icon != null ? icon : iconResolver.getAsset("application/octet-stream"); } private String getContentType() { return filePersister.getContentType(propertyDescriptor, model); } public String getFileName() { return filePersister.getFileName(propertyDescriptor, model); } public boolean isNotNull() { return isModelNew() && filePersister.isNotNull(propertyDescriptor, model); } public boolean isModelNew() { return propertyAccess.get(model, descriptorService.getClassDescriptor(propertyDescriptor.getBeanType()) .getIdentifierDescriptor().getName()) != null; } public boolean isNotImageNotIconNotNull() { return isNotNull() && !getRenderType().isIcon() && !getRenderType().isImage(); } }