/*
* JBoss, Home of Professional Open Source
*
* Distributable under LGPL license.
* See terms of license at gnu.org.
*/
package org.jboss.seam.wiki.core.feeds;
import antlr.ANTLRException;
import antlr.RecognitionException;
import org.jboss.seam.Component;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.log.Log;
import org.jboss.seam.wiki.core.wikitext.engine.WikiLink;
import org.jboss.seam.wiki.core.wikitext.engine.WikiLinkResolver;
import org.jboss.seam.wiki.core.wikitext.engine.WikiTextParser;
import org.jboss.seam.wiki.core.wikitext.editor.WikiFormattedTextValidator;
import org.jboss.seam.wiki.core.wikitext.renderer.DefaultWikiTextRenderer;
import org.jboss.seam.wiki.core.model.FeedEntry;
import org.jboss.seam.wiki.core.model.WikiTextMacro;
import org.jboss.seam.wiki.core.ui.WikiURLRenderer;
import org.jboss.seam.wiki.util.WikiUtil;
/**
* @author Christian Bauer
*/
@Scope(ScopeType.APPLICATION)
public abstract class FeedEntryManager<M, FE extends FeedEntry> {
@Logger
static Log log;
@In
protected WikiURLRenderer wikiURLRenderer;
public abstract FE createFeedEntry(M source);
public abstract void updateFeedEntry(FE feedEntry, M source);
public abstract String getFeedEntryTitle(M source);
protected String renderWikiText(Long currentAreaNumber, String wikiText) {
WikiTextParser parser = new WikiTextParser(wikiText, true, true);
parser.setCurrentAreaNumber(currentAreaNumber);
parser.setResolver((WikiLinkResolver) Component.getInstance("wikiLinkResolver"));
class FeedRenderer extends DefaultWikiTextRenderer {
@Override
public String renderInternalLink(WikiLink internalLink) {
return !internalLink.isBroken() ?
"<a href=\""
+ wikiURLRenderer.renderURL(internalLink.getFile())
+ "\">"
+ internalLink.getDescription()
+ "</a>" : "[Broken Link]";
}
// Remove all macros
@Override
public String renderMacro(WikiTextMacro macro) {
return "";
}
}
parser.setRenderer( new FeedRenderer() );
// Run the parser
try {
parser.parse();
} catch (RecognitionException rex) {
// Swallow and log and low debug level
log.debug( "Ignored parse error generating feed entry text: " + WikiFormattedTextValidator.getErrorMessage(wikiText, rex) );
} catch (ANTLRException ex) {
// All other errors are fatal;
throw new RuntimeException(ex);
}
return parser.toString();
}
protected String renderPlainText(String plainText) {
return WikiUtil.escapeHtml(plainText, true, true);
}
}