📄 rssgenerator.java
字号:
if( ATOM.equals(type) ) { feed = new AtomFeed( wikiContext ); } else if( RSS20.equals( type ) ) { feed = new RSS20Feed( wikiContext ); } else { feed = new RSS10Feed( wikiContext ); } feed.setMode( mode ); if( MODE_BLOG.equals( mode ) ) { res = generateBlogRSS( wikiContext, changed, feed ); } else if( MODE_FULL.equals(mode) ) { res = generateFullWikiRSS( wikiContext, feed ); } else if( MODE_WIKI.equals(mode) ) { res = generateWikiPageRSS( wikiContext, changed, feed ); } else { throw new IllegalArgumentException( "Invalid value for feed mode: "+mode ); } return res; } /** * Returns <code>true</code> if RSS generation is enabled. * @return whether RSS generation is currently enabled */ public boolean isEnabled() { return m_enabled; } /** * Turns RSS generation on or off. This setting is used to set * the "enabled" flag only for use by callers, and does not * actually affect whether the {@link #generate()} or * {@link #generateFeed(WikiContext, List, String, String)} * methods output anything. * @param enabled whether RSS generation is considered enabled. */ public synchronized void setEnabled( boolean enabled ) { m_enabled = enabled; } /** * Generates an RSS feed for the entire wiki. Each item should be an instance of the RSSItem class. * * @param wikiContext A WikiContext * @param feed A Feed to generate the feed to. * @return feed.getString(). */ protected String generateFullWikiRSS( WikiContext wikiContext, Feed feed ) { feed.setChannelTitle( m_engine.getApplicationName() ); feed.setFeedURL( m_engine.getBaseURL() ); feed.setChannelLanguage( m_channelLanguage ); feed.setChannelDescription( m_channelDescription ); Collection changed = m_engine.getRecentChanges(); WikiSession session = WikiSession.guestSession( m_engine ); int items = 0; for( Iterator i = changed.iterator(); i.hasNext() && items < 15; items++ ) { WikiPage page = (WikiPage) i.next(); // // Check if the anonymous user has view access to this page. // if( !m_engine.getAuthorizationManager().checkPermission(session, new PagePermission(page,PagePermission.VIEW_ACTION) ) ) { // No permission, skip to the next one. continue; } Entry e = new Entry(); e.setPage( page ); String url; if( page instanceof Attachment ) { url = m_engine.getURL( WikiContext.ATTACH, page.getName(), null, true ); } else { url = m_engine.getURL( WikiContext.VIEW, page.getName(), null, true ); } e.setURL( url ); e.setTitle( page.getName() ); e.setContent( getEntryDescription(page) ); e.setAuthor( getAuthor(page) ); feed.addEntry( e ); } return feed.getString(); } /** * Create RSS/Atom as if this page was a wikipage (in contrast to Blog mode). * * @param wikiContext The WikiContext * @param changed A List of changed WikiPages. * @param feed A Feed object to fill. * @return the RSS representation of the wiki context */ @SuppressWarnings("unchecked") protected String generateWikiPageRSS( WikiContext wikiContext, List changed, Feed feed ) { feed.setChannelTitle( m_engine.getApplicationName()+": "+wikiContext.getPage().getName() ); feed.setFeedURL( wikiContext.getViewURL( wikiContext.getPage().getName() ) ); String language = m_engine.getVariable( wikiContext, PROP_CHANNEL_LANGUAGE ); if( language != null ) feed.setChannelLanguage( language ); else feed.setChannelLanguage( m_channelLanguage ); String channelDescription = m_engine.getVariable( wikiContext, PROP_CHANNEL_DESCRIPTION ); if( channelDescription != null ) { feed.setChannelDescription( channelDescription ); } Collections.sort( changed, new PageTimeComparator() ); int items = 0; for( Iterator i = changed.iterator(); i.hasNext() && items < 15; items++ ) { WikiPage page = (WikiPage) i.next(); Entry e = new Entry(); e.setPage( page ); String url; if( page instanceof Attachment ) { url = m_engine.getURL( WikiContext.ATTACH, page.getName(), "version="+page.getVersion(), true ); } else { url = m_engine.getURL( WikiContext.VIEW, page.getName(), "version="+page.getVersion(), true ); } // Unfortunately, this is needed because the code will again go through // replacement conversion url = TextUtil.replaceString( url, "&", "&" ); e.setURL( url ); e.setTitle( getEntryTitle(page) ); e.setContent( getEntryDescription(page) ); e.setAuthor( getAuthor(page) ); feed.addEntry( e ); } return feed.getString(); } /** * Creates RSS from modifications as if this page was a blog (using the WeblogPlugin). * * @param wikiContext The WikiContext, as usual. * @param changed A list of the changed pages. * @param feed A valid Feed object. The feed will be used to create the RSS/Atom, depending * on which kind of an object you want to put in it. * @return A String of valid RSS or Atom. * @throws ProviderException If reading of pages was not possible. */ @SuppressWarnings("unchecked") protected String generateBlogRSS( WikiContext wikiContext, List changed, Feed feed ) throws ProviderException { if( log.isDebugEnabled() ) log.debug("Generating RSS for blog, size="+changed.size()); String ctitle = m_engine.getVariable( wikiContext, PROP_CHANNEL_TITLE ); if( ctitle != null ) feed.setChannelTitle( ctitle ); else feed.setChannelTitle( m_engine.getApplicationName()+":"+wikiContext.getPage().getName() ); feed.setFeedURL( wikiContext.getViewURL( wikiContext.getPage().getName() ) ); String language = m_engine.getVariable( wikiContext, PROP_CHANNEL_LANGUAGE ); if( language != null ) feed.setChannelLanguage( language ); else feed.setChannelLanguage( m_channelLanguage ); String channelDescription = m_engine.getVariable( wikiContext, PROP_CHANNEL_DESCRIPTION ); if( channelDescription != null ) { feed.setChannelDescription( channelDescription ); } Collections.sort( changed, new PageTimeComparator() ); int items = 0; for( Iterator i = changed.iterator(); i.hasNext() && items < 15; items++ ) { WikiPage page = (WikiPage) i.next(); Entry e = new Entry(); e.setPage( page ); String url; if( page instanceof Attachment ) { url = m_engine.getURL( WikiContext.ATTACH, page.getName(), null, true ); } else { url = m_engine.getURL( WikiContext.VIEW, page.getName(), null, true ); } e.setURL( url ); // // Title // String pageText = m_engine.getPureText(page.getName(), WikiProvider.LATEST_VERSION ); String title = ""; int firstLine = pageText.indexOf('\n'); if( firstLine > 0 ) { title = pageText.substring( 0, firstLine ).trim(); } if( title.length() == 0 ) title = page.getName(); // Remove wiki formatting while( title.startsWith("!") ) title = title.substring(1); e.setTitle( title ); // // Description // if( firstLine > 0 ) { int maxlen = pageText.length(); if( maxlen > MAX_CHARACTERS ) maxlen = MAX_CHARACTERS; if( maxlen > 0 ) { pageText = m_engine.textToHTML( wikiContext, pageText.substring( firstLine+1, maxlen ).trim() ); if( maxlen == MAX_CHARACTERS ) pageText += "..."; e.setContent( pageText ); } else { e.setContent( title ); } } else { e.setContent( title ); } e.setAuthor( getAuthor(page) ); feed.addEntry( e ); } return feed.getString(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -