Coverage Report - org.trails.component.blob.DefaultFilePersister
 
Classes in this File Line Coverage Branch Coverage Complexity
DefaultFilePersister
0% 
0% 
3.4
 
 1  
 package org.trails.component.blob;
 2  
 
 3  
 import org.apache.commons.io.IOUtils;
 4  
 import org.apache.commons.lang.StringUtils;
 5  
 import org.apache.hivemind.util.PropertyUtils;
 6  
 import org.apache.tapestry.IAsset;
 7  
 import org.apache.tapestry.request.IUploadFile;
 8  
 import org.trails.descriptor.IClassDescriptor;
 9  
 import org.trails.descriptor.IPropertyDescriptor;
 10  
 import org.trails.descriptor.DescriptorService;
 11  
 import org.trails.descriptor.extension.BlobDescriptorExtension;
 12  
 import org.trails.descriptor.extension.ITrailsBlob;
 13  
 import org.trails.persistence.PersistenceService;
 14  
 import org.trails.builder.BuilderDirector;
 15  
 
 16  
 import java.io.IOException;
 17  
 import java.io.InputStream;
 18  
 import java.io.Serializable;
 19  
 
 20  
 
 21  
 /**
 22  
  * The Trails {@link org.trails.component.blob.IFilePersister} default implementation.
 23  
  */
 24  0
 public class DefaultFilePersister implements IFilePersister
 25  
 {
 26  
 
 27  
         PersistenceService persistenceService;
 28  
         DescriptorService descriptorService;
 29  
         BlobDownloadService blobDownloadService;
 30  
 
 31  
         public void store(IPropertyDescriptor propertyDescriptor, Object model, IUploadFile file)
 32  
         {
 33  0
                 BlobDescriptorExtension blobDescriptorExtension = getBlobDescriptorExtension(propertyDescriptor);
 34  
 
 35  0
                 byte[] data = new byte[0];
 36  0
                 InputStream inputStream = file.getStream();
 37  
 
 38  
                 try
 39  
                 {
 40  0
                         data = IOUtils.toByteArray(inputStream);
 41  
 
 42  0
                 } catch (IOException ioe)
 43  
                 {
 44  0
                         ioe.printStackTrace();
 45  
                 }
 46  
 
 47  0
                 if (data.length > 1)
 48  
                 {
 49  0
                         if (blobDescriptorExtension.isBytes())
 50  
                         {
 51  0
                                 PropertyUtils.write(model, propertyDescriptor.getName(), data);
 52  0
                         } else if (blobDescriptorExtension.isITrailsBlob())
 53  
                         {
 54  0
                                 ITrailsBlob trailsBlob = (ITrailsBlob) PropertyUtils.read(model, propertyDescriptor.getName());
 55  
 
 56  0
                                 if (trailsBlob == null) { //trying to avoid an NPE
 57  0
                                         trailsBlob = new TrailsBlobImpl();
 58  0
                                         PropertyUtils.write(model, propertyDescriptor.getName(), trailsBlob);
 59  
                                 }
 60  
 
 61  0
                                 trailsBlob.setFileName(file.getFileName());
 62  0
                                 trailsBlob.setFilePath(file.getFilePath());
 63  0
                                 trailsBlob.setContentType(file.getContentType());
 64  0
                                 trailsBlob.setBytes(data);
 65  
                         }
 66  
                 }
 67  0
         }
 68  
 
 69  
         public byte[] getData(IPropertyDescriptor propertyDescriptor, Object model)
 70  
         {
 71  0
                 BlobDescriptorExtension blobDescriptorExtension = getBlobDescriptorExtension(propertyDescriptor);
 72  
 
 73  0
                 if (blobDescriptorExtension.isBytes())
 74  
                 {
 75  0
                         return (byte[]) PropertyUtils.read(model, propertyDescriptor.getName());
 76  
 
 77  0
                 } else if (blobDescriptorExtension.isITrailsBlob())
 78  
                 {
 79  0
                         ITrailsBlob trailsBlob = (ITrailsBlob) PropertyUtils.read(model, propertyDescriptor.getName());
 80  0
                         return trailsBlob != null ? trailsBlob.getBytes() : new byte[0];
 81  
                 }
 82  0
                 return null;
 83  
         }
 84  
 
 85  
         public void delete(IPropertyDescriptor propertyDescriptor, Object model)
 86  
         {
 87  0
                 BlobDescriptorExtension blobDescriptorExtension = getBlobDescriptorExtension(propertyDescriptor);
 88  
 
 89  0
                 if (blobDescriptorExtension.isBytes())
 90  
                 {
 91  0
                         PropertyUtils.write(model, propertyDescriptor.getName(), new byte[0]);
 92  
 
 93  0
                 } else if (blobDescriptorExtension.isITrailsBlob())
 94  
                 {
 95  0
                         ITrailsBlob trailsBlob = (ITrailsBlob) PropertyUtils.read(model, propertyDescriptor.getName());
 96  0
                         trailsBlob.reset();
 97  
                 }
 98  
 
 99  0
                 persistenceService.save(model);
 100  0
         }
 101  
 
 102  
         public IAsset getAsset(IPropertyDescriptor propertyDescriptor, Object model)
 103  
         {
 104  0
                 Serializable pk = persistenceService
 105  0
                                 .getIdentifier(model, descriptorService.getClassDescriptor(propertyDescriptor.getBeanType()));
 106  
 
 107  0
                 if (pk != null)
 108  
                 {
 109  0
                         byte[] bytes = getData(propertyDescriptor, model);
 110  
 
 111  0
                         if (bytes != null && bytes.length > 0)
 112  
                         {
 113  0
                                 return new TrailsBlobAsset(blobDownloadService, propertyDescriptor, pk);
 114  
                         }
 115  
                 }
 116  0
                 return null;
 117  
         }
 118  
 
 119  
         public String getContentType(IPropertyDescriptor propertyDescriptor, Object model)
 120  
         {
 121  0
                 BlobDescriptorExtension blobDescriptorExtension = getBlobDescriptorExtension(propertyDescriptor);
 122  
 
 123  0
                 if (StringUtils.isNotEmpty(blobDescriptorExtension.getFileName()))
 124  
                 {
 125  0
                         return blobDescriptorExtension.getContentType();
 126  
                 }
 127  
 
 128  
 
 129  0
                 if (blobDescriptorExtension.isITrailsBlob())
 130  
                 {
 131  0
                         ITrailsBlob trailsBlob = (ITrailsBlob) PropertyUtils.read(model, propertyDescriptor.getName());
 132  0
                         if (trailsBlob != null)
 133  
                         {
 134  0
                                 return trailsBlob.getContentType();
 135  
                         }
 136  
                 }
 137  
 
 138  0
                 return null;
 139  
         }
 140  
 
 141  
         public String getFileName(IPropertyDescriptor propertyDescriptor, Object model)
 142  
         {
 143  0
                 BlobDescriptorExtension blobDescriptorExtension = getBlobDescriptorExtension(propertyDescriptor);
 144  
 
 145  0
                 if (StringUtils.isNotEmpty(blobDescriptorExtension.getFileName()))
 146  
                 {
 147  0
                         return blobDescriptorExtension.getFileName();
 148  
                 }
 149  
 
 150  0
                 if (blobDescriptorExtension.isITrailsBlob())
 151  
                 {
 152  0
                         ITrailsBlob trailsBlob = (ITrailsBlob) PropertyUtils.read(model, propertyDescriptor.getName());
 153  0
                         if (trailsBlob != null)
 154  
                         {
 155  0
                                 return trailsBlob.getFileName();
 156  
                         }
 157  
                 }
 158  
 
 159  0
                 return null;
 160  
         }
 161  
 
 162  
         private BlobDescriptorExtension getBlobDescriptorExtension(IPropertyDescriptor propertyDescriptor)
 163  
         {
 164  0
                 return propertyDescriptor.getExtension(BlobDescriptorExtension.class);
 165  
         }
 166  
 
 167  
         public void setPersistenceService(PersistenceService persistenceService)
 168  
         {
 169  0
                 this.persistenceService = persistenceService;
 170  0
         }
 171  
 
 172  
         public void setBlobDownloadService(BlobDownloadService blobDownloadService)
 173  
         {
 174  0
                 this.blobDownloadService = blobDownloadService;
 175  0
         }
 176  
 
 177  
         public void setDescriptorService(DescriptorService descriptorService)
 178  
         {
 179  0
                 this.descriptorService = descriptorService;
 180  0
         }
 181  
 }