Changeset 30373

Show
Ignore:
Timestamp:
02/20/08 17:27:21 (9 months ago)
Author:
ogrisel
Message:

NXP-2092: refactored nxedit URL generation to URLEncode the only the values and factorize redondant code and constants

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • org.nuxeo.ecm.platform/branches/5.1/nuxeo-platform-ui-web/src/main/java/org/nuxeo/ecm/platform/ui/web/tag/fn/DocumentModelFunctions.java

    r30321 r30373  
    2020package org.nuxeo.ecm.platform.ui.web.tag.fn; 
    2121 
     22import java.io.UnsupportedEncodingException; 
    2223import java.net.URLEncoder; 
    2324import java.util.Collections; 
     
    400401 
    401402            String fileProperty = listElement + '/' 
    402                     + URLEncoder.encode("[" + index + ']', "UTF-8") + '/' 
    403                     + blobPropertyName; 
     403                    + URLEncoder.encode("[" + index + ']', URL_ENCODE_CHARSET) 
     404                    + '/' + blobPropertyName; 
    404405 
    405406            params.put(DocumentFileCodec.FILE_PROPERTY_PATH_KEY, fileProperty); 
     
    457458            log.error("Could not generate url for document", e); 
    458459        } 
    459  
    460460        return null; 
    461461    } 
    462462 
    463463    protected static void addQueryParameter(StringBuilder sb, String name, 
    464             String value, boolean isFirst)
     464            String value, boolean isFirst) throws ClientException
    465465        if (isFirst) { 
    466466            sb.append("?"); 
     
    470470        sb.append(name); 
    471471        sb.append("="); 
    472         sb.append(value); 
     472        try { 
     473            sb.append(URLEncoder.encode(value, URL_ENCODE_CHARSET)); 
     474        } catch (UnsupportedEncodingException e) { 
     475            throw new ClientException(String.format( 
     476                    "could not encode URL parameter: %s=%s", name, value), e); 
     477        } 
    473478    } 
    474479 
     
    497502        // TODO: move constant string in the LiveEditConstants interface 
    498503        StringBuilder queryParamBuilder = new StringBuilder(); 
    499         addQueryParameter(queryParamBuilder, "action"
     504        addQueryParameter(queryParamBuilder, LiveEditConstants.ACTION
    500505                LiveEditConstants.ACTION_EDIT_DOCUMENT, true); 
    501         addQueryParameter(queryParamBuilder, "repoID", doc.getRepositoryName(), 
    502                 false); 
    503         addQueryParameter(queryParamBuilder, "docRef", doc.getRef().toString(), 
    504                 false); 
    505         addQueryParameter(queryParamBuilder, "schema", schemaName, false); 
    506         addQueryParameter(queryParamBuilder, "blobField", blobFieldName, false); 
    507         addQueryParameter(queryParamBuilder, "filenameField", 
     506        addQueryParameter(queryParamBuilder, LiveEditConstants.REPO_ID, 
     507                doc.getRepositoryName(), false); 
     508        addQueryParameter(queryParamBuilder, LiveEditConstants.DOC_REF, 
     509                doc.getRef().toString(), false); 
     510        addQueryParameter(queryParamBuilder, LiveEditConstants.SCHEMA, 
     511                schemaName, false); 
     512        addQueryParameter(queryParamBuilder, LiveEditConstants.BLOB_FIELD, 
     513                blobFieldName, false); 
     514        addQueryParameter(queryParamBuilder, LiveEditConstants.FILENAME_FIELD, 
    508515                filenameFieldName, false); 
    509         return buildEncodedUrl(queryParamBuilder); 
     516        return buildNxEditUrl(queryParamBuilder.toString()); 
    510517    } 
    511518 
     
    540547            throws ClientException { 
    541548 
    542         // TODO: move constant string in the LiveEditConstants interface 
    543549        StringBuilder queryParamBuilder = new StringBuilder(); 
    544         addQueryParameter(queryParamBuilder, "action"
     550        addQueryParameter(queryParamBuilder, LiveEditConstants.ACTION
    545551                LiveEditConstants.ACTION_CREATE_DOCUMENT, true); 
    546         addQueryParameter(queryParamBuilder, "mimetype", mimetype, false); 
    547         addQueryParameter(queryParamBuilder, "schema", schemaName, false); 
    548         addQueryParameter(queryParamBuilder, "blobField", blobFieldName, false); 
    549         addQueryParameter(queryParamBuilder, "filenameField", 
     552        addQueryParameter(queryParamBuilder, LiveEditConstants.MIMETYPE, 
     553                mimetype, false); 
     554        addQueryParameter(queryParamBuilder, LiveEditConstants.SCHEMA, 
     555                schemaName, false); 
     556        addQueryParameter(queryParamBuilder, LiveEditConstants.BLOB_FIELD, 
     557                blobFieldName, false); 
     558        addQueryParameter(queryParamBuilder, LiveEditConstants.FILENAME_FIELD, 
    550559                filenameFieldName, false); 
    551         addQueryParameter(queryParamBuilder, "docType", docType, false); 
    552         return buildEncodedUrl(queryParamBuilder); 
     560        addQueryParameter(queryParamBuilder, LiveEditConstants.DOC_TYPE, 
     561                docType, false); 
     562        return buildNxEditUrl(queryParamBuilder.toString()); 
    553563    } 
    554564 
     
    587597            String docType, String schemaName, String blobFieldName, 
    588598            String filenameFieldName) throws ClientException { 
    589         // TODO: move constant string in the LiveEditConstants interface 
     599 
    590600        StringBuilder queryParamBuilder = new StringBuilder(); 
    591         addQueryParameter(queryParamBuilder, "action"
     601        addQueryParameter(queryParamBuilder, LiveEditConstants.ACTION
    592602                LiveEditConstants.ACTION_CREATE_DOCUMENT_FROM_TEMPLATE, true); 
    593         addQueryParameter(queryParamBuilder, "templateRepoID", 
     603        addQueryParameter(queryParamBuilder, 
     604                LiveEditConstants.TEMPLATE_REPO_ID, 
    594605                template.getRepositoryName(), false); 
    595         addQueryParameter(queryParamBuilder, "templateDocRef", 
     606        addQueryParameter(queryParamBuilder, 
     607                LiveEditConstants.TEMPLATE_DOC_REF, 
    596608                template.getRef().toString(), false); 
    597         addQueryParameter(queryParamBuilder, "templateSchema"
     609        addQueryParameter(queryParamBuilder, LiveEditConstants.TEMPLATE_SCHEMA
    598610                templateSchemaName, false); 
    599         addQueryParameter(queryParamBuilder, "templateBlobField", 
    600                 templateBlobFieldName, false); 
    601         addQueryParameter(queryParamBuilder, "schema", schemaName, false); 
    602         addQueryParameter(queryParamBuilder, "blobField", blobFieldName, false); 
    603         addQueryParameter(queryParamBuilder, "filenameField", 
     611        addQueryParameter(queryParamBuilder, 
     612                LiveEditConstants.TEMPLATE_BLOB_FIELD, templateBlobFieldName, 
     613                false); 
     614        addQueryParameter(queryParamBuilder, LiveEditConstants.SCHEMA, 
     615                schemaName, false); 
     616        addQueryParameter(queryParamBuilder, LiveEditConstants.BLOB_FIELD, 
     617                blobFieldName, false); 
     618        addQueryParameter(queryParamBuilder, LiveEditConstants.FILENAME_FIELD, 
    604619                filenameFieldName, false); 
    605         addQueryParameter(queryParamBuilder, "docType", docType, false); 
    606         return buildEncodedUrl(queryParamBuilder); 
    607     } 
    608  
    609     private static String buildEncodedUrl(StringBuilder queryParamBuilder) 
     620        addQueryParameter(queryParamBuilder, LiveEditConstants.DOC_TYPE, 
     621                docType, false); 
     622        return buildNxEditUrl(queryParamBuilder.toString()); 
     623    } 
     624 
     625    private static String buildNxEditUrl(String queryParameters) 
    610626            throws ClientException { 
    611         StringBuilder sb = new StringBuilder(); 
    612627        FacesContext context = FacesContext.getCurrentInstance(); 
    613628        HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest(); 
    614         sb.append(composeBaseURL(request)); 
    615         queryParamBuilder.append(composeTailURL(request)); 
    616         String queryParams = queryParamBuilder.toString(); 
    617         try { 
    618             // do not encode the nxedit:// part since URLEncoder will not handle 
    619             // it correctly 
    620  
    621             // TODO: OG: disable URLEncoding for now since it breaks FF for some 
    622             // reason (more investigation required) 
    623             // queryParams = URLEncoder.encode(queryParams, URL_ENCODE_CHARSET); 
    624             sb.append(queryParams); 
    625             return sb.toString(); 
    626         } catch (Exception e) { 
    627             throw new ClientException("failed to encode nxedit URL", e); 
    628         } 
    629     } 
    630  
    631     /** 
    632      * Build the base nxedit:* url based on the current URL from the servlet 
    633      * request context 
    634      * 
    635      * @param request the current HttpServletRequest request 
    636      * @return a raw nxedit string url with the current server name, port and 
    637      *         URL prefix 
    638      */ 
    639     private static String composeBaseURL(HttpServletRequest request) { 
    640         String baseURL = BaseURL.getBaseURL(request); 
    641  
    642         if (baseURL.contains("http://")) { 
    643             baseURL = baseURL.replace("http://", NXEDIT_URL_SCHEME + "://"); 
    644         } else if (baseURL.contains("https://")) { 
    645             baseURL = baseURL.replace("https://", NXEDIT_URL_SCHEME + "://"); 
    646         } else { 
    647             // fallback that should never happen: raise an exception instead? 
    648             baseURL = NXEDIT_URL_SCHEME + "://" + baseURL; 
    649         } 
    650         return baseURL.concat(NXEDIT_URL_VIEW_ID); 
     629 
     630        // build the URL prefix by concatenating nxedit: scheme with the http:// 
     631        // or https:// base URL from the current request context and the 
     632        // LiveEditBoostrapHelper JSF view 
     633        StringBuilder nxeditUrlBuilder = new StringBuilder(NXEDIT_URL_SCHEME); 
     634        nxeditUrlBuilder.append(":"); 
     635        nxeditUrlBuilder.append(BaseURL.getBaseURL(request)); 
     636        nxeditUrlBuilder.append(NXEDIT_URL_VIEW_ID); 
     637 
     638        // add the query parameters them selves 
     639        nxeditUrlBuilder.append(queryParameters); 
     640 
     641        // add seam conversation and JSESSION ids 
     642        addQueryParameter(nxeditUrlBuilder, 
     643                Manager.instance().getConversationIdParameter(), 
     644                Manager.instance().getCurrentConversationId(), false); 
     645        addQueryParameter(nxeditUrlBuilder, JSESSIONID, 
     646                extractJSessionId(request), false); 
     647        return nxeditUrlBuilder.toString(); 
    651648    } 
    652649 
     
    664661        } 
    665662        return null; 
    666     } 
    667  
    668     /** 
    669      * Extract conversation and session ids and build a query parameters string 
    670      * 
    671      * @param request the current HttpServletRequest request 
    672      * @return the query parameter string 
    673      */ 
    674     private static String composeTailURL(HttpServletRequest request) { 
    675         StringBuilder sb = new StringBuilder(); 
    676         addQueryParameter(sb, Manager.instance().getConversationIdParameter(), 
    677                 Manager.instance().getCurrentConversationId(), false); 
    678         addQueryParameter(sb, JSESSIONID, extractJSessionId(request), false); 
    679         return sb.toString(); 
    680663    } 
    681664 
  • org.nuxeo.ecm.platform/branches/5.1/nuxeo-platform-ui-web/src/main/java/org/nuxeo/ecm/platform/ui/web/tag/fn/LiveEditConstants.java

    r30239 r30373  
    22 
    33public interface LiveEditConstants { 
     4 
     5    // nxedit query parameter names 
     6 
     7    public static final String ACTION = "action"; 
     8 
     9    public static final String DOC_TYPE = "docType"; 
     10 
     11    public static final String FILENAME_FIELD = "filenameField"; 
     12 
     13    public static final String BLOB_FIELD = "blobField"; 
     14 
     15    public static final String SCHEMA = "schema"; 
     16 
     17    public static final String MIMETYPE = "mimetype"; 
     18 
     19    public static final String REPO_ID = "repoID"; 
     20 
     21    public static final String DOC_REF = "docRef"; 
     22 
     23    public static final String TEMPLATE_BLOB_FIELD = "templateBlobField"; 
     24 
     25    public static final String TEMPLATE_SCHEMA = "templateSchema"; 
     26 
     27    public static final String TEMPLATE_DOC_REF = "templateDocRef"; 
     28 
     29    public static final String TEMPLATE_REPO_ID = "templateRepoID"; 
     30 
     31    // action values 
    432 
    533    public static final String ACTION_EDIT_DOCUMENT = "edit";