Show
Ignore:
Timestamp:
02/25/08 20:33:02 (8 months ago)
Author:
ogrisel
Message:

forward porting fix for NXP-2127

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • org.nuxeo.ecm.platform/trunk/nuxeo-platform-ui-web/src/main/java/org/nuxeo/ecm/platform/ui/web/restAPI/BaseNuxeoRestlet.java

    r25228 r30572  
    136136    } 
    137137 
     138    protected static String getQueryParamValue(Request req, String paramName, 
     139            String defaultValue) { 
     140                return req.getResourceRef().getQueryAsForm().getFirstValue(paramName, 
     141                        defaultValue); 
     142            } 
     143 
    138144} 
  • org.nuxeo.ecm.platform/trunk/nuxeo-platform-ui-web/src/main/java/org/nuxeo/ecm/platform/ui/web/restAPI/DownloadFileRestlet.java

    r30571 r30572  
    4747@Name("downloadFileRestlet") 
    4848@Scope(EVENT) 
    49 public class DownloadFileRestlet extends BaseNuxeoRestlet implements LiveEditConstants { 
     49public class DownloadFileRestlet extends BaseNuxeoRestlet implements 
     50        LiveEditConstants { 
    5051 
    51        @In(create = true) 
    52        protected NavigationContext navigationContext; 
     52    @In(create = true) 
     53    protected NavigationContext navigationContext; 
    5354 
    54        protected CoreSession documentManager; 
     55    protected CoreSession documentManager; 
    5556 
    56        @Override 
    57        public void handle(Request req, Response res) { 
     57    @Override 
     58    public void handle(Request req, Response res) { 
    5859 
    59                 String repo = (String) req.getAttributes().get("repo"); 
    60                 String docid = (String) req.getAttributes().get("docid"); 
    61                  
    62                 //TODO support custom filename and content fields 
    63                  
    64                 DocumentModel dm = null; 
     60        String repo = (String) req.getAttributes().get("repo"); 
     61        if (repo == null || repo.equals("*")) { 
     62            handleError(res, "you must specify a repository"); 
     63            return; 
     64        } 
    6565 
    66                 if (repo == null || repo.equals("*")) { 
    67                         handleError(res, "you must specify a repository"); 
    68                         return; 
    69                 } 
     66        DocumentModel dm = null; 
     67        try { 
     68            navigationContext.setCurrentServerLocation(new RepositoryLocation( 
     69                    repo)); 
     70            documentManager = navigationContext.getOrCreateDocumentManager(); 
     71            String docid = (String) req.getAttributes().get("docid"); 
     72            if (docid != null) { 
     73                dm = documentManager.getDocument(new IdRef(docid)); 
     74            } else { 
     75                handleError(res, "you must specify a valid document IdRef"); 
     76                return; 
     77            } 
     78        } catch (ClientException e) { 
     79            handleError(res, e); 
     80            return; 
     81        } 
     82        String schemaName = getQueryParamValue(req, SCHEMA, DEFAULT_SCHEMA); 
     83        String blobFieldName = getQueryParamValue(req, BLOB_FIELD, 
     84                DEFAULT_BLOB_FIELD); 
     85        String filenameFieldName = getQueryParamValue(req, FILENAME_FIELD, 
     86                DEFAULT_FILENAME_FIELD); 
    7087 
    71                 try { 
    72                         navigationContext.setCurrentServerLocation(new RepositoryLocation( 
    73                                         repo)); 
    74                         documentManager = navigationContext.getOrCreateDocumentManager(); 
    75                         if (docid != null) { 
    76                                 dm = documentManager.getDocument(new IdRef(docid)); 
    77                         } 
    78                 } catch (ClientException e) { 
    79                         handleError(res, e); 
    80                         return; 
    81                 } 
     88        try { 
    8289 
    83                 try { 
     90            final String filename = (String) dm.getProperty(schemaName, 
     91                    filenameFieldName); 
     92            final Blob blob = (Blob) dm.getProperty(schemaName, blobFieldName); 
    8493 
    85                         String filename = (String) dm.getProperty("file", "filename"); 
    86                         Blob blob = (Blob) dm.getProperty("file", "content"); 
     94            final File tempfile = File.createTempFile( 
     95                    "nuxeo-downloadrestlet-tmp", ""); 
     96            blob.transferTo(tempfile); 
     97            res.setEntity(new OutputRepresentation(null) { 
     98                @Override 
     99                public void write(OutputStream outputStream) throws IOException { 
     100                    // the write call happens after the seam conversation is 
     101                    // finished which will garbage collect the CoreSession 
     102                    // instance, hence we store the blob content in a temporary 
     103                    // file 
     104                    FileInputStream instream = new FileInputStream(tempfile); 
     105                    FileUtils.copy(instream, outputStream); 
     106                    instream.close(); 
     107                    tempfile.delete(); 
     108                    blob.transferTo(outputStream); 
     109                } 
     110            }); 
     111            HttpServletResponse response = getHttpResponse(res); 
    87112 
    88                         final File tempfile = File.createTempFile("nuxeo-downloadrestlet-tmp", ""); 
    89                          
    90                         blob.transferTo(tempfile); 
    91                          
    92                         res.setEntity(new OutputRepresentation(null) { 
    93                                 @Override 
    94                                 public void write(OutputStream outputStream) throws IOException { 
    95                                         FileInputStream instream = new FileInputStream(tempfile); 
    96                                         FileUtils.copy(instream, outputStream); 
    97                                         instream.close(); 
    98                                 } 
    99                         }); 
    100             HttpServletResponse response = getHttpResponse(res); 
    101              
    102             response.setHeader("Content-Disposition", 
    103                     "attachment; filename=\"" + filename + "\";"); 
     113            response.setHeader("Content-Disposition", "attachment; filename=\"" 
     114                    + filename + "\";"); 
     115            // TODO: add mimetype here too 
    104116 
    105                } catch (Exception e) { 
    106                        handleError(res, e); 
    107                
     117        } catch (Exception e) { 
     118            handleError(res, e); 
     119       
    108120 
    109        
     121   
    110122 
    111123} 
  • org.nuxeo.ecm.platform/trunk/nuxeo-platform-ui-web/src/main/java/org/nuxeo/ecm/platform/ui/web/tag/fn/DocumentModelFunctions.java

    r30376 r30572  
    6666 * @author <a href="mailto:og@nuxeo.com">Olivier Grisel</a> 
    6767 */ 
    68 public final class DocumentModelFunctions
     68public final class DocumentModelFunctions implements LiveEditConstants
    6969 
    7070    private static final Log log = LogFactory.getLog(DocumentModelFunctions.class); 
    71  
    72     private static final String DEFAULT_DOCTYPE = "File"; 
    73  
    74     // to be deprecated once all filenames are stored in the blob itself 
    75     private static final String DEFAULT_FILENAME_FIELD = "filename"; 
    76  
    77     private static final String DEFAULT_BLOB_FIELD = "content"; 
    78  
    79     private static final String DEFAULT_SCHEMA = "file"; 
    8071 
    8172    private static final String JSESSIONID = "JSESSIONID"; 
     
    502493            throws ClientException { 
    503494 
    504         // TODO: move constant string in the LiveEditConstants interface 
    505495        StringBuilder queryParamBuilder = new StringBuilder(); 
    506         addQueryParameter(queryParamBuilder, LiveEditConstants.ACTION, 
    507                 LiveEditConstants.ACTION_EDIT_DOCUMENT, true); 
    508         addQueryParameter(queryParamBuilder, LiveEditConstants.REPO_ID, 
    509                 doc.getRepositoryName(), false); 
    510         addQueryParameter(queryParamBuilder, LiveEditConstants.DOC_REF, 
    511                 doc.getRef().toString(), false); 
    512         addQueryParameter(queryParamBuilder, LiveEditConstants.SCHEMA, 
    513                 schemaName, false); 
    514         addQueryParameter(queryParamBuilder, LiveEditConstants.BLOB_FIELD, 
    515                 blobFieldName, false); 
    516         addQueryParameter(queryParamBuilder, LiveEditConstants.FILENAME_FIELD, 
    517                 filenameFieldName, false); 
     496        addQueryParameter(queryParamBuilder, ACTION, ACTION_EDIT_DOCUMENT, true); 
     497        addQueryParameter(queryParamBuilder, REPO_ID, doc.getRepositoryName(), 
     498                false); 
     499        addQueryParameter(queryParamBuilder, DOC_REF, doc.getRef().toString(), 
     500                false); 
     501        addQueryParameter(queryParamBuilder, SCHEMA, schemaName, false); 
     502        addQueryParameter(queryParamBuilder, BLOB_FIELD, blobFieldName, false); 
     503        addQueryParameter(queryParamBuilder, FILENAME_FIELD, filenameFieldName, 
     504                false); 
    518505        return buildNxEditUrl(queryParamBuilder.toString()); 
    519506    } 
     
    550537 
    551538        StringBuilder queryParamBuilder = new StringBuilder(); 
    552         addQueryParameter(queryParamBuilder, LiveEditConstants.ACTION, 
    553                 LiveEditConstants.ACTION_CREATE_DOCUMENT, true); 
    554         addQueryParameter(queryParamBuilder, LiveEditConstants.MIMETYPE, 
    555                 mimetype, false); 
    556         addQueryParameter(queryParamBuilder, LiveEditConstants.SCHEMA, 
    557                 schemaName, false); 
    558         addQueryParameter(queryParamBuilder, LiveEditConstants.BLOB_FIELD, 
    559                 blobFieldName, false); 
    560         addQueryParameter(queryParamBuilder, LiveEditConstants.FILENAME_FIELD, 
    561                 filenameFieldName, false); 
    562         addQueryParameter(queryParamBuilder, LiveEditConstants.DOC_TYPE, 
    563                 docType, false); 
     539        addQueryParameter(queryParamBuilder, ACTION, ACTION_CREATE_DOCUMENT, 
     540                true); 
     541        addQueryParameter(queryParamBuilder, MIMETYPE, mimetype, false); 
     542        addQueryParameter(queryParamBuilder, SCHEMA, schemaName, false); 
     543        addQueryParameter(queryParamBuilder, BLOB_FIELD, blobFieldName, false); 
     544        addQueryParameter(queryParamBuilder, FILENAME_FIELD, filenameFieldName, 
     545                false); 
     546        addQueryParameter(queryParamBuilder, DOC_TYPE, docType, false); 
    564547        return buildNxEditUrl(queryParamBuilder.toString()); 
    565548    } 
     
    601584 
    602585        StringBuilder queryParamBuilder = new StringBuilder(); 
    603         addQueryParameter(queryParamBuilder, LiveEditConstants.ACTION, 
    604                 LiveEditConstants.ACTION_CREATE_DOCUMENT_FROM_TEMPLATE, true); 
    605         addQueryParameter(queryParamBuilder, 
    606                 LiveEditConstants.TEMPLATE_REPO_ID, 
     586        addQueryParameter(queryParamBuilder, ACTION, 
     587                ACTION_CREATE_DOCUMENT_FROM_TEMPLATE, true); 
     588        addQueryParameter(queryParamBuilder, TEMPLATE_REPO_ID, 
    607589                template.getRepositoryName(), false); 
    608         addQueryParameter(queryParamBuilder, 
    609                 LiveEditConstants.TEMPLATE_DOC_REF, 
     590        addQueryParameter(queryParamBuilder, TEMPLATE_DOC_REF, 
    610591                template.getRef().toString(), false); 
    611         addQueryParameter(queryParamBuilder, LiveEditConstants.TEMPLATE_SCHEMA, 
     592        addQueryParameter(queryParamBuilder, TEMPLATE_SCHEMA, 
    612593                templateSchemaName, false); 
    613         addQueryParameter(queryParamBuilder, 
    614                 LiveEditConstants.TEMPLATE_BLOB_FIELD, templateBlobFieldName, 
     594        addQueryParameter(queryParamBuilder, TEMPLATE_BLOB_FIELD, 
     595                templateBlobFieldName, false); 
     596        addQueryParameter(queryParamBuilder, SCHEMA, schemaName, false); 
     597        addQueryParameter(queryParamBuilder, BLOB_FIELD, blobFieldName, false); 
     598        addQueryParameter(queryParamBuilder, FILENAME_FIELD, filenameFieldName, 
    615599                false); 
    616         addQueryParameter(queryParamBuilder, LiveEditConstants.SCHEMA, 
    617                 schemaName, false); 
    618         addQueryParameter(queryParamBuilder, LiveEditConstants.BLOB_FIELD, 
    619                 blobFieldName, false); 
    620         addQueryParameter(queryParamBuilder, LiveEditConstants.FILENAME_FIELD, 
    621                 filenameFieldName, false); 
    622         addQueryParameter(queryParamBuilder, LiveEditConstants.DOC_TYPE, 
    623                 docType, false); 
     600        addQueryParameter(queryParamBuilder, DOC_TYPE, docType, false); 
    624601        return buildNxEditUrl(queryParamBuilder.toString()); 
    625602    } 
  • org.nuxeo.ecm.platform/trunk/nuxeo-platform-ui-web/src/main/java/org/nuxeo/ecm/platform/ui/web/tag/fn/LiveEditConstants.java

    r30376 r30572  
    3737    public static final String ACTION_CREATE_DOCUMENT_FROM_TEMPLATE = "createFromTemplate"; 
    3838 
     39    // default fields to store LiveEditable blobs and related fields 
     40 
     41    public static final String DEFAULT_DOCTYPE = "File"; 
     42 
     43    // to be deprecated once all filenames are stored in the blob itself 
     44    public static final String DEFAULT_FILENAME_FIELD = "filename"; 
     45 
     46    public static final String DEFAULT_BLOB_FIELD = "content"; 
     47 
     48    public static final String DEFAULT_SCHEMA = "file"; 
     49 
    3950}