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 }