📄 portalurlparserimpl.java.svn-base
字号:
} // 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 + -