/**
  * Encode a shared resource target.
  *
  * <p>If you override this method to behave different then also {@link
  * #addResourceParameters(Request, RequestParameters)} should be overridden to by in sync with
  * that behaviour.
  *
  * @param requestCycle the current request cycle
  * @param requestTarget the target to encode
  * @return the encoded url
  */
 protected CharSequence encode(
     RequestCycle requestCycle, ISharedResourceRequestTarget requestTarget) {
   final CharSequence prefix = urlPrefix(requestCycle);
   final String sharedResourceKey = requestTarget.getResourceKey();
   if ((sharedResourceKey == null) || (sharedResourceKey.trim().length() == 0)) {
     return prefix;
   } else {
     final AppendingStringBuffer buffer =
         new AppendingStringBuffer(sharedResourceKey.length() + prefix.length() + 11);
     buffer.append(prefix);
     if ((buffer.length() > 0) && buffer.charAt(buffer.length() - 1) == '/') {
       buffer.append("resources/");
     } else {
       buffer.append("/resources/");
     }
     buffer.append(sharedResourceKey);
     Map<String, ? extends Object> map = requestTarget.getRequestParameters().getParameters();
     if (map != null && map.size() > 0) {
       buffer.append('?');
       for (String key : map.keySet()) {
         buffer.append(key);
         buffer.append('=');
         buffer.append(map.get(key));
         buffer.append('&');
       }
       buffer.setLength(buffer.length() - 1);
     }
     return requestCycle.getOriginalResponse().encodeURL(buffer);
   }
 }