⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 portalurlparserimpl.java

📁 portal越来越流行了
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        }
        
        // Append action and render parameters.
        StringBuffer query = new StringBuffer("?");
        boolean firstParam = true;
        for (Iterator it = portalURL.getParameters().iterator();
        		it.hasNext(); ) {
            
        	PortalURLParameter param = (PortalURLParameter) it.next();
            
            // Encode action params in the query appended at the end of the URL.
            if (portalURL.getActionWindow() != null
            		&& portalURL.getActionWindow().equals(param.getWindowId())
            		|| (portalURL.getResourceWindow() != null
            				&& portalURL.getResourceWindow().equals(param.getWindowId()))) {
            	for (int i = 0; i < param.getValues().length; i++) {
                    // FIX for PLUTO-247
                    if ( firstParam ) {
                        firstParam = false;
                    } else {
                        query.append("&");
                    }
                    query.append(encodeQueryParam(param.getName())).append("=")
                    		.append(encodeQueryParam(param.getValues()[i]));
                }
            }
            
            // Encode render params as a part of the URL.
            else if (param.getValues() != null
            		&& param.getValues().length > 0) {
                String valueString = encodeMultiValues(param.getValues());
                if (valueString.length() > 0) {
                	buffer.append("/").append(
                			encodeControlParameter(RENDER_PARAM, param.getWindowId(),
                               param.getName()));
                	buffer.append("/").append(valueString);
                }
            }
        }

        StringUtils.encode(buffer);
        
        
        Map<String, String[]> publicParamList = portalURL.getPublicParameters();
        if (publicParamList!=null){
	        for (Iterator iter = publicParamList.keySet().iterator();iter.hasNext();){
	        	String paramname = (String)iter.next();
	        	String[] tmp = (String[])publicParamList.get(paramname);
	        	String valueString = encodeMultiValues(tmp);
	        	if (valueString.length()>0){
	        		buffer.append("/").append(encodePublicParamname(PUBLIC_RENDER_PARAM, paramname));
	        		buffer.append("/").append(valueString);
	        	}
	        }
        }
        
        // Construct the string representing the portal URL.
        // Fix for PLUTO-247 - check if query string contains parameters
        if ( query.length() > 1 ) {
            return buffer.append(query).toString();
        }
        
        // Construct the string representing the portal URL.
        return buffer.append(query).toString();
    }

    private String encodeQueryParam(String param) {
        try {
            return URLEncoder.encode(param, "UTF-8");
        }
        catch (UnsupportedEncodingException e) {
            // If this happens, we've got bigger problems.
            throw new RuntimeException(e);
        }
    }

    // Private Encoding/Decoding Methods ---------------------------------------
    
    /**
     * Encode a control parameter.
     * @param type  the type of the control parameter, which may be:
     *              portlet mode, window state, or render parameter.
     * @param windowId  the portlet window ID.
     * @param name  the name to encode.
     */
    private String encodeControlParameter(String type,
                                          String windowId,
                                          String name) {
    	StringBuffer buffer = new StringBuffer();
    	buffer.append(PREFIX).append(type)
    			.append(encodeCharacters(windowId))
    			.append(DELIM).append(name);
    	return buffer.toString();
    }
    
    private String encodePublicParamname(String type, String name){
    	StringBuffer buffer = new StringBuffer();
    	buffer.append(PREFIX).append(type)
    	.append(DELIM).append(name);
    	return buffer.toString();
    }
    
    /**
     * Encode a string array containing multiple values into a single string.
     * This method is used to encode multiple render parameter values.
     * @param values  the string array to encode.
     * @return a single string containing all the values.
     */
    private String encodeMultiValues(String[] values) {
    	StringBuffer buffer = new StringBuffer();
        for (int i = 0; i < values.length; i++) {
        	// Do not operate on the array reference
        	String currentValue = values[i];
        	try {
        		if (currentValue != null)
        			currentValue = URLEncoder.encode(values[i], "UTF-8");
			} catch (UnsupportedEncodingException e) {
				LOG.warn(e);
			}
        	buffer.append(currentValue != null ? currentValue : "");
            if (i + 1 < values.length) {
            	buffer.append(VALUE_DELIM);
            }
        }
        return encodeCharacters(buffer.toString());
    }
    
    /**
     * Encode special characters contained in the string value.
     * @param string  the string value to encode.
     * @return the encoded string.
     */
    private String encodeCharacters(String string) {
        for (int i = 0; i < ENCODINGS.length; i++) {
            string = StringUtils.replace(string,
                                         ENCODINGS[i][0],
                                         ENCODINGS[i][1]);
        }
        return string;
    }


    /**
     * Decode a control parameter.
     * @param control  the control parameter to decode.
     * @return values  a pair of decoded values.
     */
    private String[] decodeControlParameter(String control) {
        String[] valuePair = new String[2];
        control = control.substring((PREFIX + PORTLET_ID).length());
        int index = control.indexOf(DELIM);
        if (index >= 0) {
        	valuePair[0] = control.substring(0, index);
        	valuePair[0] = decodeCharacters(valuePair[0]);
        	if (index + 1 <= control.length()) {
        		valuePair[1] = control.substring(index + 1);
        		valuePair[1] = decodeCharacters(valuePair[1]);
        	} else {
        		valuePair[1] = "";
        	}
        } else {
        	valuePair[0] = decodeCharacters(control);
        }
        return valuePair;
    }

    /**
     * Decode a name-value pair into a portal URL parameter.
     * @param name  the parameter name.
     * @param value  the parameter value.
     * @return the decoded portal URL parameter.
     */
    private PortalURLParameter decodeParameter(String name, String value) {
    	
        if (LOG.isDebugEnabled()) {
            LOG.debug("Decoding parameter: name=" + name
            		+ ", value=" + value);
        }
    	
    	// Decode the name into window ID and parameter name.
        String noPrefix = name.substring((PREFIX + PORTLET_ID).length());
        String windowId = noPrefix.substring(0, noPrefix.indexOf(DELIM));
        String paramName = noPrefix.substring(noPrefix.indexOf(DELIM) + 1);
        
        // Decode special characters in window ID and parameter value.
        windowId = decodeCharacters(windowId);
        if (value != null) {
        	value = decodeCharacters(value);
        }
        
        // Split multiple values into a value array.
        String[] paramValues = value.split(VALUE_DELIM);
        for (int i = 0; i < paramValues.length;i++){
        	try {
        		paramValues[i] = URLDecoder.decode(paramValues[i], "UTF-8");
			} catch (UnsupportedEncodingException e) {
				LOG.warn(e);
			}
        }
        // Construct portal URL parameter and return.
        return new PortalURLParameter(windowId, paramName, paramValues);
    }
    
    private PortalURLParameter decodePublicParameter(String name, String value) {
    	
        if (LOG.isDebugEnabled()) {
            LOG.debug("Decoding parameter: name=" + name
            		+ ", value=" + value);
        }
    	
//    	// Decode the name into window ID and parameter name.
        String noPrefix = name.substring((PREFIX + PORTLET_ID).length());
        String paramName = noPrefix.substring(noPrefix.indexOf(DELIM) + 1);
        
        // Decode special characters in parameter value.

        if (value != null) {
        	value = decodeCharacters(value);
        }
        
        // Split multiple values into a value array.
        String[] paramValues = value.split(VALUE_DELIM);
        
        // Construct portal URL parameter and return.
        return new PortalURLParameter(null, paramName, paramValues);
    }
    
    /**
     * Decode special characters contained in the string value.
     * @param string  the string value to decode.
     * @return the decoded string.
     */
    private String decodeCharacters(String string) {
        for (int i = 0; i < ENCODINGS.length; i++) {
        	string = StringUtils.replace(string,
        	                             ENCODINGS[i][1],
        	                             ENCODINGS[i][0]);
        }
		return string;
    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -