// Copyright (C) 2003-2009 by Object Mentor, Inc. All rights reserved.
// Released under the terms of the CPL Common Public License version 1.0.
package fitnesse.wiki;
import fitnesse.responders.ErrorResponder;
public class VirtualCouplingExtension implements Extension {
private static final long serialVersionUID = 1L;
public static final String NAME = "VirtualCoupling";
private WikiPage hostPage;
protected VirtualCouplingPage virtualCoupling;
public String getName() {
return NAME;
}
public VirtualCouplingExtension(WikiPage page) {
hostPage = page;
resetVirtualCoupling();
}
public void setVirtualCoupling(VirtualCouplingPage coupling) {
virtualCoupling = coupling;
}
public void resetVirtualCoupling() {
virtualCoupling = new NullVirtualCouplingPage(hostPage);
}
public WikiPage getVirtualCoupling() {
detectAndLoadVirtualChildren();
return virtualCoupling;
}
protected void detectAndLoadVirtualChildren() {
PageData data = hostPage.getData();
if (data.hasAttribute(WikiPageProperties.VIRTUAL_WIKI_ATTRIBUTE))
loadVirtualChildren(data.getAttribute(WikiPageProperties.VIRTUAL_WIKI_ATTRIBUTE));
}
public void loadVirtualChildren(String url) {
try {
ProxyPage proxy = ProxyPage.retrievePage(url);
virtualCoupling = new VirtualCouplingPage(hostPage, proxy);
}
catch (Exception e) {
WikiPage page = hostPage.getChildPage("VirtualWikiNetworkError");
if (page == null)
page = hostPage.addChildPage("VirtualWikiNetworkError");
PageData data = page.getData();
data.setContent("{{{" + ErrorResponder.makeExceptionString(e) + "}}}");
page.commit(data);
}
}
}