Index: rwiki-service-impl/src/java/uk/ac/cam/caret/sakai/rwiki/component/service/impl/ComponentPageLinkRenderImpl.java =================================================================== --- rwiki-service-impl/src/java/uk/ac/cam/caret/sakai/rwiki/component/service/impl/ComponentPageLinkRenderImpl.java (revision 17080) +++ rwiki-service-impl/src/java/uk/ac/cam/caret/sakai/rwiki/component/service/impl/ComponentPageLinkRenderImpl.java (working copy) @@ -22,6 +22,8 @@ **********************************************************************************/ package uk.ac.cam.caret.sakai.rwiki.component.service.impl; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; import java.text.MessageFormat; import uk.ac.cam.caret.sakai.rwiki.service.api.PageLinkRenderer; @@ -70,16 +72,22 @@ * Generates a publiv navigation link */ public void appendLink(StringBuffer buffer, String name, String view) { - name = NameHelper.globaliseName(name, localSpace); - String url = MessageFormat.format(standardURLFormat,new Object[] {name}); - buffer.append(MessageFormat.format(urlFormat,new Object[] {XmlEscaper.xmlEscape(url),XmlEscaper.xmlEscape(view)})); + this.appendLink(buffer, name, view, null); } /** * Generated a public navigation link */ public void appendLink(StringBuffer buffer, String name, String view, String anchor) { name = NameHelper.globaliseName(name, localSpace); - String url = MessageFormat.format(anchorURLFormat,new Object[] {name,anchor}); + String url; + if (anchor != null && !"".equals(anchor)) { + url = MessageFormat.format(anchorURLFormat, new Object[] { encode(name), + encode(anchor) }); + } else { + url = MessageFormat.format(standardURLFormat, + new Object[] { encode(name) }); + } + buffer.append(MessageFormat.format(urlFormat,new Object[] {XmlEscaper.xmlEscape(url),XmlEscaper.xmlEscape(view)})); } /** @@ -92,6 +100,11 @@ buffer.append(XmlEscaper.xmlEscape(view)); } + public void appendLink(StringBuffer buffer, String name, String view, String anchor, boolean autoGenerated) + { + this.appendLink(buffer, name, view, anchor); + } + /* * (non-Javadoc) * @see uk.ac.cam.caret.sakai.rwiki.service.api.PageLinkRenderer#isCachable() @@ -159,5 +172,24 @@ public boolean isUseCache() { return useCache; } - + /** + * Takes a string to encode and encodes it as a UTF-8 URL-Encoded string. + * + * @param toEncode + * string to encode. + * @return url encoded string. + */ + public static String encode(String toEncode) { + try { + String encoded = URLEncoder.encode(toEncode, "UTF-8"); + encoded = encoded.replaceAll("\\+", "%20").replaceAll("%2F", "/"); + + return encoded; + + } catch (UnsupportedEncodingException e) { + throw new IllegalStateException("UTF-8 Encoding is not supported when encoding: " + toEncode + ": " + e.getMessage()); + } + + } + } Index: rwiki-service-impl/src/java/uk/ac/cam/caret/sakai/rwiki/component/service/impl/RWikiObjectServiceImpl.java =================================================================== --- rwiki-service-impl/src/java/uk/ac/cam/caret/sakai/rwiki/component/service/impl/RWikiObjectServiceImpl.java (revision 17080) +++ rwiki-service-impl/src/java/uk/ac/cam/caret/sakai/rwiki/component/service/impl/RWikiObjectServiceImpl.java (working copy) @@ -454,10 +454,16 @@ rwo.getRealm()); PageLinkRenderer plr = new PageLinkRenderer() { + public void appendLink(StringBuffer buffer, String name, String view, String anchor, boolean autoGenerated) + { + if (!autoGenerated) + { + this.appendLink(buffer, name, view, anchor); + } + } public void appendLink(StringBuffer buffer, String name, String view) { - referenced - .add(NameHelper.globaliseName(name, currentSpace)); + this.appendLink(buffer, name, view, null); } public void appendLink(StringBuffer buffer, String name, @@ -481,10 +487,11 @@ } public void setCachable(boolean cachable) { + //do nothing } public void setUseCache(boolean b) { - + //do nothing } }; Index: rwiki-service-impl/src/java/uk/ac/cam/caret/sakai/rwiki/component/radeox/service/impl/SpecializedRenderEngine.java =================================================================== --- rwiki-service-impl/src/java/uk/ac/cam/caret/sakai/rwiki/component/radeox/service/impl/SpecializedRenderEngine.java (revision 17080) +++ rwiki-service-impl/src/java/uk/ac/cam/caret/sakai/rwiki/component/radeox/service/impl/SpecializedRenderEngine.java (working copy) @@ -58,7 +58,10 @@ this.renderEngine = renderEngine; } - + public void appendLink(StringBuffer buffer, String name, String view, String anchor, boolean autoGenerated) { + plr.appendLink(buffer, name, view, anchor, autoGenerated); + } + public void appendLink(StringBuffer buffer, String name, String view) { plr.appendLink(buffer, name, view); } Index: rwiki-service-impl/src/java/uk/ac/cam/caret/sakai/rwiki/component/macros/IndexMacro.java =================================================================== --- rwiki-service-impl/src/java/uk/ac/cam/caret/sakai/rwiki/component/macros/IndexMacro.java (revision 17080) +++ rwiki-service-impl/src/java/uk/ac/cam/caret/sakai/rwiki/component/macros/IndexMacro.java (working copy) @@ -194,7 +194,7 @@ writer.write("
  • "); StringBuffer sb = new StringBuffer(chars.length * 3); - plr.appendLink(sb, new String(chars), new String(chars, start, chars.length - start)); + plr.appendLink(sb, new String(chars), new String(chars, start, chars.length - start), null, true); writer.write(sb.toString()); writer.write("
  • \n"); } Index: rwiki-service-impl/src/java/uk/ac/cam/caret/sakai/rwiki/component/macros/RecentChangesMacro.java =================================================================== --- rwiki-service-impl/src/java/uk/ac/cam/caret/sakai/rwiki/component/macros/RecentChangesMacro.java (revision 17080) +++ rwiki-service-impl/src/java/uk/ac/cam/caret/sakai/rwiki/component/macros/RecentChangesMacro.java (working copy) @@ -138,8 +138,13 @@ while (iterator.hasNext()) { RWikiObject object = (RWikiObject) iterator.next(); if ( objectService.checkRead(object) ) { - //SAK-2671 We should localize against the renderspace not the object's realm! - writer.write("\n* [" + NameHelper.localizeName(object.getName(), localRenderSpace) + "]"); + // SAK-2671 We should localize against the renderspace not + // the object's realm + String linkName = NameHelper.localizeName(object.getName(), localRenderSpace); + StringBuffer buffer = new StringBuffer(); + spRe.appendLink(buffer, linkName, linkName, null, true); + writer.write("\n* "); + writer.write(buffer.toString()); writer.write(" was last modified " + dateFormat.format(object.getVersion())); Index: rwiki-service/src/java/uk/ac/cam/caret/sakai/rwiki/service/api/PageLinkRenderer.java =================================================================== --- rwiki-service/src/java/uk/ac/cam/caret/sakai/rwiki/service/api/PageLinkRenderer.java (revision 17080) +++ rwiki-service/src/java/uk/ac/cam/caret/sakai/rwiki/service/api/PageLinkRenderer.java (working copy) @@ -76,4 +76,14 @@ */ void setUseCache(boolean b); + /** + * append an auto generated link to the buffer. + * @param buffer + * @param name + * @param view + * @param anchor + * @param autoGenerated TODO + */ + void appendLink(StringBuffer buffer, String name, String view, String anchor, boolean autoGenerated); + } Index: rwiki/src/java/uk/ac/cam/caret/sakai/rwiki/tool/service/impl/PublicPageLinkRendererImpl.java =================================================================== --- rwiki/src/java/uk/ac/cam/caret/sakai/rwiki/tool/service/impl/PublicPageLinkRendererImpl.java (revision 17080) +++ rwiki/src/java/uk/ac/cam/caret/sakai/rwiki/tool/service/impl/PublicPageLinkRendererImpl.java (working copy) @@ -58,10 +58,7 @@ * Generates a publiv navigation link */ public void appendLink(StringBuffer buffer, String name, String view) { - name = NameHelper.globaliseName(name, localSpace); - ViewBean vb = new ViewBean(name, localRealm); - - buffer.append("" + XmlEscaper.xmlEscape(view) + ""); + this.appendLink(buffer, name, view, null); } /** * Generated a public navigation link @@ -69,9 +66,15 @@ public void appendLink(StringBuffer buffer, String name, String view, String anchor) { name = NameHelper.globaliseName(name, localSpace); ViewBean vb = new ViewBean(name, localRealm); - vb.setAnchor(anchor); + if (anchor != null && !"".equals(anchor)) { + vb.setAnchor(anchor); + } buffer.append("" + XmlEscaper.xmlEscape(view) + ""); } + public void appendLink(StringBuffer buffer, String name, String view, String anchor, boolean autoGenerated) { + this.appendLink(buffer, name, view, anchor); + } + /** * Generates a create link */ Index: rwiki/src/java/uk/ac/cam/caret/sakai/rwiki/tool/service/impl/PageLinkRendererImpl.java =================================================================== --- rwiki/src/java/uk/ac/cam/caret/sakai/rwiki/tool/service/impl/PageLinkRendererImpl.java (revision 17080) +++ rwiki/src/java/uk/ac/cam/caret/sakai/rwiki/tool/service/impl/PageLinkRendererImpl.java (working copy) @@ -48,16 +48,15 @@ this.localRealm = localRealm; } public void appendLink(StringBuffer buffer, String name, String view) { - name = NameHelper.globaliseName(name, localSpace); - ViewBean vb = new ViewBean(name, localRealm); - - buffer.append("" + XmlEscaper.xmlEscape(view) + ""); + this.appendLink(buffer, name, view, null); } public void appendLink(StringBuffer buffer, String name, String view, String anchor) { name = NameHelper.globaliseName(name, localSpace); ViewBean vb = new ViewBean(name, localRealm); - vb.setAnchor(anchor); + if (anchor != null && !"".equals(anchor)) { + vb.setAnchor(anchor); + } buffer.append("" + XmlEscaper.xmlEscape(view) + ""); } @@ -67,6 +66,9 @@ ViewBean vb = new ViewBean(name, localRealm); buffer.append("" + XmlEscaper.xmlEscape(view) + "?"); } + public void appendLink(StringBuffer buffer, String name, String view, String anchor, boolean autoGenerated) { + this.appendLink(buffer, name, view, anchor); + } /* * (non-Javadoc) * @see uk.ac.cam.caret.sakai.rwiki.service.api.PageLinkRenderer#isCachable() Index: rwiki/src/java/uk/ac/cam/caret/sakai/rwiki/tool/service/impl/PopulateServiceImpl.java =================================================================== --- rwiki/src/java/uk/ac/cam/caret/sakai/rwiki/tool/service/impl/PopulateServiceImpl.java (revision 17080) +++ rwiki/src/java/uk/ac/cam/caret/sakai/rwiki/tool/service/impl/PopulateServiceImpl.java (working copy) @@ -213,6 +213,11 @@ referenced .add(NameHelper.globaliseName(name, currentRealm)); } + public void appendLink(StringBuffer buffer, String name, String view, String anchor, boolean autoGenerated) { + if (!autoGenerated) { + this.appendLink(buffer, name, view, anchor); + } + } public boolean isCachable() { return false; // should not cache this render op @@ -223,9 +228,10 @@ } public void setCachable(boolean cachable) { + //do nothing } public void setUseCache(boolean b) { - + //do nothing } };