package org.exoplatform.wiki.webui;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.exoplatform.container.PortalContainer;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
import org.exoplatform.webui.config.annotation.ComponentConfig;
import org.exoplatform.webui.config.annotation.EventConfig;
import org.exoplatform.wiki.chromattic.ext.ntdef.NTVersion;
import org.exoplatform.wiki.commons.Utils;
import org.exoplatform.wiki.commons.VersionNameComparatorDesc;
import org.exoplatform.wiki.mow.api.Page;
import org.exoplatform.wiki.mow.api.WikiNodeType;
import org.exoplatform.wiki.mow.core.api.wiki.PageImpl;
import org.exoplatform.wiki.rendering.RenderingService;
import org.exoplatform.wiki.service.WikiPageParams;
import org.exoplatform.wiki.webui.control.UIRelatedPagesContainer;
import org.exoplatform.wiki.webui.control.action.ShowHistoryActionListener;
import org.exoplatform.wiki.webui.control.action.ViewRevisionActionListener;
import org.exoplatform.wiki.webui.core.UIWikiContainer;
import org.xwiki.rendering.syntax.Syntax;
@ComponentConfig(
template = "app:/templates/wiki/webui/UIWikiPageInfo.gtmpl",
events = {
@EventConfig(listeners = ViewRevisionActionListener.class),
@EventConfig(listeners = ShowHistoryActionListener.class)
}
)
public class UIWikiPageInfo extends UIWikiContainer {
private static final Log log = ExoLogger.getLogger(UIWikiPageInfo.class);
private static final int NUMBER_OF_SHOWN_CHANGES = 5;
public UIWikiPageInfo() throws Exception {
super();
this.accept_Modes = Arrays.asList(new WikiMode[] { WikiMode.PAGEINFO });
addChild(UIRelatedPagesContainer.class, null, null);
}
List<NTVersion> getVersionList(Page page) {
List<NTVersion> versions = new ArrayList<NTVersion>();
try {
PageImpl pageImpl = (PageImpl) page;
Iterator<NTVersion> iter = pageImpl.getVersionableMixin().getVersionHistory().iterator();
while (iter.hasNext()) {
NTVersion version = iter.next();
if (!(WikiNodeType.Definition.ROOT_VERSION.equals(version.getName()))) {
versions.add(version);
}
}
Collections.sort(versions, new VersionNameComparatorDesc());
return versions.subList(0,
versions.size() > NUMBER_OF_SHOWN_CHANGES ? NUMBER_OF_SHOWN_CHANGES
: versions.size());
} catch (Exception e) {
if (log.isWarnEnabled()) {
log.warn(String.format("getting version list of page %s failed", page.getName()), e);
}
}
return versions;
}
String getPageLink(Page page) throws Exception {
WikiPageParams params = org.exoplatform.wiki.utils.Utils.getWikiPageParams(page);
return Utils.getURLFromParams(params);
}
String renderHierarchy() throws Exception {
RenderingService renderingService = (RenderingService) PortalContainer.getComponent(RenderingService.class);
Utils.setUpWikiContext(getAncestorOfType(UIWikiPortlet.class));
String content = renderingService.render("{{pagetree /}}",
Syntax.XWIKI_2_0.toIdString(),
Syntax.XHTML_1_0.toIdString(),
false);
Utils.removeWikiContext();
return content;
}
private Page getCurrentPage() throws Exception {
return Utils.getCurrentWikiPage();
}
}