⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rssgenerator.java

📁 jspwiki source code,jspwiki source code
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        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, "&amp;", "&" );            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 + -