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