package uk.ac.cam.caret.sakai.rwiki.tool.entityproviders;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import uk.ac.cam.caret.sakai.rwiki.service.api.PageLinkRenderer;
import uk.ac.cam.caret.sakai.rwiki.tool.bean.ViewBean;
import uk.ac.cam.caret.sakai.rwiki.utils.NameHelper;
import uk.ac.cam.caret.sakai.rwiki.utils.XmlEscaper;
/**
* Renders wiki links in the format /direct/wiki/site/SITEID/page/NAME
*
* @author Adrian Fish <adrian.r.fish@gmail.com>
*/
public class DirectServletPageLinkRenderer implements PageLinkRenderer {
private static Log log = LogFactory.getLog(DirectServletPageLinkRenderer.class);
private boolean cachable = false;
private boolean useCache = false;
public String localRealm;
public String localSpace;
public String extension;
public DirectServletPageLinkRenderer(String localRealm) {
this(localRealm, localRealm,"json");
}
public DirectServletPageLinkRenderer(String localSpace, String localRealm, String extension) {
this.localSpace = localSpace;
this.localRealm = localRealm;
this.extension = extension;
}
public void appendLink(StringBuffer buffer, String name, String 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);
if (anchor != null && !"".equals(anchor))
{
vb.setAnchor(anchor);
}
try {
buffer.append("<a class=\"wiki-page-link\" href=\"")
.append("/direct/" + RWikiEntityProvider.ENTITY_PREFIX + localRealm + "/page/" + URLEncoder.encode(view,"UTF-8").replaceAll("\\+","%20") + "." + extension)
.append("\">" + XmlEscaper.xmlEscape(view) + "</a>");
} catch(UnsupportedEncodingException e) {
log.error("UTF-8 is unsupported in the the encoding of URLs. The url was not appended.");
}
}
public void appendCreateLink(StringBuffer buffer, String name, String view) {
}
public void setCachable(boolean cachable) {
this.cachable = cachable;
}
public boolean isCachable() {
return cachable;
}
public boolean canUseCache() {
return useCache;
}
public void setUseCache(boolean useCache) {
this.useCache = useCache;
}
public void appendLink(StringBuffer buffer, String name, String view, String anchor, boolean autoGenerated) {
this.appendLink(buffer, name, view, anchor);
}
}