Changeset 30376

Show
Ignore:
Timestamp:
02/20/08 18:07:28 (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/trunk/nuxeo-platform-ui-web/src/main/java/org/nuxeo/ecm/platform/ui/web/tag/fn/DocumentModelFunctions.java

    r30325 r30376  
    2020package org.nuxeo.ecm.platform.ui.web.tag.fn; 
    2121 
     22import java.io.UnsupportedEncodingException; 
    2223import java.net.URLEncoder; 
    2324import java.util.Collections; 
     
    402403 
    403404            String fileProperty = listElement + '/' 
    404                     + URLEncoder.encode("[" + index + ']', "UTF-8") + '/' 
    405                     + blobPropertyName; 
     405                    + URLEncoder.encode("[" + index + ']', URL_ENCODE_CHARSET) 
     406                    + '/' + blobPropertyName; 
    406407 
    407408            params.put(DocumentFileCodec.FILE_PROPERTY_PATH_KEY, fileProperty); 
     
    459460            log.error("Could not generate url for document", e); 
    460461        } 
    461  
    462462        return null; 
    463463    } 
    464464 
    465465    protected static void addQueryParameter(StringBuilder sb, String name, 
    466             String value, boolean isFirst)
     466            String value, boolean isFirst) throws ClientException
    467467        if (isFirst) { 
    468468            sb.append("?"); 
     
    472472        sb.append(name); 
    473473        sb.append("="); 
    474         sb.append(value); 
     474        try { 
     475            sb.append(URLEncoder.encode(value, URL_ENCODE_CHARSET)); 
     476        } catch (UnsupportedEncodingException e) { 
     477            throw new ClientException(String.format( 
     478                    "could not encode URL parameter: %s=%s", name, value), e); 
     479        } 
    475480    } 
    476481 
     
    499504        // TODO: move constant string in the LiveEditConstants interface 
    500505        StringBuilder queryParamBuilder = new StringBuilder(); 
    501         addQueryParameter(queryParamBuilder, "action"
     506        addQueryParameter(queryParamBuilder, LiveEditConstants.ACTION
    502507                LiveEditConstants.ACTION_EDIT_DOCUMENT, true); 
    503         addQueryParameter(queryParamBuilder, "repoID", doc.getRepositoryName(), 
    504                 false); 
    505         addQueryParameter(queryParamBuilder, "docRef", doc.getRef().toString(), 
    506                 false); 
    507         addQueryParameter(queryParamBuilder, "schema", schemaName, false); 
    508         addQueryParameter(queryParamBuilder, "blobField", blobFieldName, false); 
    509         addQueryParameter(queryParamBuilder, "filenameField", 
     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, 
    510517                filenameFieldName, false); 
    511         return buildEncodedUrl(queryParamBuilder); 
     518        return buildNxEditUrl(queryParamBuilder.toString()); 
    512519    } 
    513520 
     
    542549            throws ClientException { 
    543550 
    544         // TODO: move constant string in the LiveEditConstants interface 
    545551        StringBuilder queryParamBuilder = new StringBuilder(); 
    546         addQueryParameter(queryParamBuilder, "action"
     552        addQueryParameter(queryParamBuilder, LiveEditConstants.ACTION
    547553                LiveEditConstants.ACTION_CREATE_DOCUMENT, true); 
    548         addQueryParameter(queryParamBuilder, "mimetype", mimetype, false); 
    549         addQueryParameter(queryParamBuilder, "schema", schemaName, false); 
    550         addQueryParameter(queryParamBuilder, "blobField", blobFieldName, false); 
    551         addQueryParameter(queryParamBuilder, "filenameField", 
     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, 
    552561                filenameFieldName, false); 
    553         addQueryParameter(queryParamBuilder, "docType", docType, false); 
    554         return buildEncodedUrl(queryParamBuilder); 
     562        addQueryParameter(queryParamBuilder, LiveEditConstants.DOC_TYPE, 
     563                docType, false); 
     564        return buildNxEditUrl(queryParamBuilder.toString()); 
    555565    } 
    556566 
     
    589599            String docType, String schemaName, String blobFieldName, 
    590600            String filenameFieldName) throws ClientException { 
    591         // TODO: move constant string in the LiveEditConstants interface 
     601 
    592602        StringBuilder queryParamBuilder = new StringBuilder(); 
    593         addQueryParameter(queryParamBuilder, "action"
     603        addQueryParameter(queryParamBuilder, LiveEditConstants.ACTION
    594604                LiveEditConstants.ACTION_CREATE_DOCUMENT_FROM_TEMPLATE, true); 
    595         addQueryParameter(queryParamBuilder, "templateRepoID", 
     605        addQueryParameter(queryParamBuilder, 
     606                LiveEditConstants.TEMPLATE_REPO_ID, 
    596607                template.getRepositoryName(), false); 
    597         addQueryParameter(queryParamBuilder, "templateDocRef", 
     608        addQueryParameter(queryParamBuilder, 
     609                LiveEditConstants.TEMPLATE_DOC_REF, 
    598610                template.getRef().toString(), false); 
    599         addQueryParameter(queryParamBuilder, "templateSchema"
     611        addQueryParameter(queryParamBuilder, LiveEditConstants.TEMPLATE_SCHEMA
    600612                templateSchemaName, false); 
    601         addQueryParameter(queryParamBuilder, "templateBlobField", 
    602                 templateBlobFieldName, false); 
    603         addQueryParameter(queryParamBuilder, "schema", schemaName, false); 
    604         addQueryParameter(queryParamBuilder, "blobField", blobFieldName, false); 
    605         addQueryParameter(queryParamBuilder, "filenameField", 
     613        addQueryParameter(queryParamBuilder, 
     614                LiveEditConstants.TEMPLATE_BLOB_FIELD, templateBlobFieldName, 
     615                false); 
     616        addQueryParameter(queryParamBuilder, LiveEditConstants.SCHEMA, 
     617                schemaName, false); 
     618        addQueryParameter(queryParamBuilder, LiveEditConstants.BLOB_FIELD, 
     619                blobFieldName, false); 
     620        addQueryParameter(queryParamBuilder, LiveEditConstants.FILENAME_FIELD, 
    606621                filenameFieldName, false); 
    607         addQueryParameter(queryParamBuilder, "docType", docType, false); 
    608         return buildEncodedUrl(queryParamBuilder); 
    609     } 
    610  
    611     private static String buildEncodedUrl(StringBuilder queryParamBuilder) 
     622        addQueryParameter(queryParamBuilder, LiveEditConstants.DOC_TYPE, 
     623                docType, false); 
     624        return buildNxEditUrl(queryParamBuilder.toString()); 
     625    } 
     626 
     627    private static String buildNxEditUrl(String queryParameters) 
    612628            throws ClientException { 
    613         StringBuilder sb = new StringBuilder(); 
    614629        FacesContext context = FacesContext.getCurrentInstance(); 
    615630        HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest(); 
    616         sb.append(composeBaseURL(request)); 
    617         queryParamBuilder.append(composeTailURL(request)); 
    618         String queryParams = queryParamBuilder.toString(); 
    619         try { 
    620             // do not encode the nxedit:// part since URLEncoder will not handle 
    621             // it correctly 
    622  
    623             // TODO: OG: disable URLEncoding for now since it breaks FF for some 
    624             // reason (more investigation required) 
    625             // queryParams = URLEncoder.encode(queryParams, URL_ENCODE_CHARSET); 
    626             sb.append(queryParams); 
    627             return sb.toString(); 
    628         } catch (Exception e) { 
    629             throw new ClientException("failed to encode nxedit URL", e); 
    630         } 
    631     } 
    632  
    633     /** 
    634      * Build the base nxedit:* url based on the current URL from the servlet 
    635      * request context 
    636      * 
    637      * @param request the current HttpServletRequest request 
    638      * @return a raw nxedit string url with the current server name, port and 
    639      *         URL prefix 
    640      */ 
    641     private static String composeBaseURL(HttpServletRequest request) { 
    642         String baseURL = BaseURL.getBaseURL(request); 
    643  
    644         if (baseURL.contains("http://")) { 
    645             baseURL = baseURL.replace("http://", NXEDIT_URL_SCHEME + "://"); 
    646         } else if (baseURL.contains("https://")) { 
    647             baseURL = baseURL.replace("https://", NXEDIT_URL_SCHEME + "://"); 
    648         } else { 
    649             // fallback that should never happen: raise an exception instead? 
    650             baseURL = NXEDIT_URL_SCHEME + "://" + baseURL; 
    651         } 
    652         return baseURL.concat(NXEDIT_URL_VIEW_ID); 
     631 
     632        // build the URL prefix by concatenating nxedit: scheme with the http:// 
     633        // or https:// base URL from the current request context and the 
     634        // LiveEditBoostrapHelper JSF view 
     635        StringBuilder nxeditUrlBuilder = new StringBuilder(NXEDIT_URL_SCHEME); 
     636        nxeditUrlBuilder.append(":"); 
     637        nxeditUrlBuilder.append(BaseURL.getBaseURL(request)); 
     638        nxeditUrlBuilder.append(NXEDIT_URL_VIEW_ID); 
     639 
     640        // add the query parameters them selves 
     641        nxeditUrlBuilder.append(queryParameters); 
     642 
     643        // add seam conversation and JSESSION ids 
     644        addQueryParameter(nxeditUrlBuilder, 
     645                Manager.instance().getConversationIdParameter(), 
     646                Manager.instance().getCurrentConversationId(), false); 
     647        addQueryParameter(nxeditUrlBuilder, JSESSIONID, 
     648                extractJSessionId(request), false); 
     649        return nxeditUrlBuilder.toString(); 
    653650    } 
    654651 
     
    666663        } 
    667664        return null; 
    668     } 
    669  
    670     /** 
    671      * Extract conversation and session ids and build a query parameters string 
    672      * 
    673      * @param request the current HttpServletRequest request 
    674      * @return the query parameter string 
    675      */ 
    676     private static String composeTailURL(HttpServletRequest request) { 
    677         StringBuilder sb = new StringBuilder(); 
    678         addQueryParameter(sb, Manager.instance().getConversationIdParameter(), 
    679                 Manager.instance().getCurrentConversationId(), false); 
    680         addQueryParameter(sb, JSESSIONID, extractJSessionId(request), false); 
    681         return sb.toString(); 
    682665    } 
    683666 
  • org.nuxeo.ecm.platform/trunk/nuxeo-platform-ui-web/src/main/java/org/nuxeo/ecm/platform/ui/web/tag/fn/LiveEditConstants.java

    r30255 r30376  
    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";