001    package org.tynamo.blob;
002    
003    public class BlobDownloadService //implements Dispatcher
004    {
005    /*
006            private static final Log LOG = LogFactory.getLog(BlobDownloadService.class);
007    
008            public static final String SERVICE_NAME = "download";
009    
010            private LinkFactory _linkFactory;
011    
012            private WebResponse _response;
013    
014            private PersistenceService persistenceService;
015    
016            private BlobManager filePersister;
017    
018            DataSqueezer dataSqueezer;
019    
020            private static final String BLOBID_PARAMETER_NAME = "id";
021    
022            private static final String PROP_DESC_PARAMETER_NAME = "propDesc";
023    
024            public ILink getLink(boolean post, Object parameter)
025            {
026    
027                    Defense.isAssignable(((Object[]) parameter)[0], BlobAsset.class, "parameter");
028    
029                    BlobAsset asset = (BlobAsset) ((Object[]) parameter)[0];
030    
031                    Map<String, String> parameters = new HashMap<String, String>();
032    
033                    parameters.put(PROP_DESC_PARAMETER_NAME, dataSqueezer.squeeze(asset.getPropertyDescriptor()));
034                    parameters.put(BLOBID_PARAMETER_NAME, dataSqueezer.squeeze(asset.getId()));
035    
036                    return _linkFactory.constructLink(this, false, parameters, true);
037    
038            }
039    
040            public void service(IRequestCycle cycle) throws IOException
041            {
042                    String blobID = cycle.getParameter(BLOBID_PARAMETER_NAME);
043                    String bytesProp = cycle.getParameter(PROP_DESC_PARAMETER_NAME);
044    
045                    IPropertyDescriptor propertyDescriptor = (IPropertyDescriptor) dataSqueezer.unsqueeze(bytesProp);
046                    BlobDescriptorExtension blobDescriptor = propertyDescriptor.getExtension(BlobDescriptorExtension.class);
047    
048                    if (blobDescriptor != null && blobID != null && !"".equals(blobID))
049                    {
050                            Object model = persistenceService
051                                            .getInstance(propertyDescriptor.getBeanType(), (Serializable) dataSqueezer.unsqueeze(blobID));
052    
053                            if (model != null)
054                            {
055                                    String fileName = filePersister.getFileName(propertyDescriptor, model);
056                                    String contentType = filePersister.getContentType(propertyDescriptor, model);
057                                    byte[] bytes = filePersister.getData(propertyDescriptor, model);
058    
059                                    if (bytes.length > 0)
060                                    {
061                                            _response.setHeader("Expires", "0");
062                                            _response.setHeader("Cache-Control", "must-revalidate, post-check=0,pre-check=0");
063                                            _response.setHeader("Pragma", "public");
064                                            _response.setHeader("Content-Disposition",
065                                                            blobDescriptor.getContentDisposition().getValue() +
066                                                                            (fileName != null ? "; filename=" + fileName : ""));
067                                            _response.setContentLength(bytes.length);
068    
069                                            OutputStream output = null;
070                                            try
071                                            {
072                                                    output = _response.getOutputStream(
073                                                                    contentType != null ? new ContentType(contentType) : new ContentType());
074                                                    output.write(bytes);
075                                            } finally
076                                            {
077                                                    try
078                                                    {
079                                                            if (output != null)
080                                                            {
081                                                                    output.flush();
082                                                                    output.close();
083                                                            }
084                                                    } catch (Throwable t)
085                                                    {
086                                                            // do nothing;
087                                                    }
088                                            }
089                                    } else
090                                    {
091                                            String errorText = "BlobDownloadServcie: entityName->" +
092                                                            propertyDescriptor.getBeanType().getName() + ", blobID ->" + blobID +
093                                                            " : has not been ingested yet";
094                                            LOG.info(errorText);
095    //                                                       muted kwc - throw new TrailsRuntimeException(errorText);
096                                    }
097                            }
098    
099                    } else
100                    {
101                            String errorText = "BlobDownloadServcie: entityName->" + propertyDescriptor.getBeanType().getName() +
102                                            ", blobID ->" + blobID +
103                                            " : has not been ingested yet";
104                            LOG.info(errorText);
105                            // muted kwc - throw new TrailsRuntimeException(errorText);
106                    }
107            }
108    
109            public String getName()
110            {
111                    return SERVICE_NAME;
112            }
113    
114            public void setLinkFactory(LinkFactory linkFactory)
115            {
116                    _linkFactory = linkFactory;
117            }
118    
119            public void setResponse(WebResponse response)
120            {
121                    _response = response;
122            }
123    
124            public void setPersistenceService(PersistenceService persistenceService)
125            {
126                    this.persistenceService = persistenceService;
127            }
128    
129            public void setFilePersister(BlobManager filePersister)
130            {
131                    this.filePersister = filePersister;
132            }
133    
134            public void setDataSqueezer(DataSqueezer dataSqueezer)
135            {
136                    this.dataSqueezer = dataSqueezer;
137            }
138    */
139    }