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

📄 wikiengine.java

📁 JSPWiki,100%Java开发的一套完整WIKI程序
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
        int word = 0;        log.debug("Expecting "+items.length+" items");        //        //  Parse incoming search string        //        while( st.hasMoreTokens() )        {            log.debug("Item "+word);            String token = st.nextToken().toLowerCase();            items[word] = new QueryItem();            switch( token.charAt(0) )            {              case '+':                items[word].type = QueryItem.REQUIRED;                token = token.substring(1);                log.debug("Required word: "+token);                break;                              case '-':                items[word].type = QueryItem.FORBIDDEN;                token = token.substring(1);                log.debug("Forbidden word: "+token);                break;              default:                items[word].type = QueryItem.REQUESTED;                log.debug("Requested word: "+token);                break;            }            items[word++].word = token;        }        Collection results = m_pageManager.findPages( items );                return results;    }    /**     *  Return a bunch of information from the web page.     */    public WikiPage getPage( String pagereq )    {        return getPage( pagereq, WikiProvider.LATEST_VERSION );    }    /**     *  Returns specific information about a Wiki page.     *  @since 1.6.7.     */    public WikiPage getPage( String pagereq, int version )    {        try        {            WikiPage p = m_pageManager.getPageInfo( pagereq, version );            if( p == null )            {                p = m_attachmentManager.getAttachmentInfo( (WikiContext)null, pagereq );            }            return p;        }        catch( ProviderException e )        {            log.error( "Unable to fetch page info",e);            return null;        }    }    /**     *  Returns a Collection of WikiPages containing the     *  version history of a page.     */    public List getVersionHistory( String page )    {        List c = null;        try        {            c = m_pageManager.getVersionHistory( page );            if( c == null )            {                c = m_attachmentManager.getVersionHistory( page );            }        }        catch( ProviderException e )        {            log.error("FIXME");        }        return c;    }    /**     *  Returns a diff of two versions of a page.     *     *  @param page Page to return     *  @param version1 Version number of the old page.  If      *         WikiPageProvider.LATEST_VERSION (-1), then uses current page.     *  @param version2 Version number of the new page.  If      *         WikiPageProvider.LATEST_VERSION (-1), then uses current page.     *     *  @return A HTML-ized difference between two pages.  If there is no difference,     *          returns an empty string.     */    public String getDiff( String page, int version1, int version2 )    {        String page1 = getPureText( page, version1 );        String page2 = getPureText( page, version2 );        // Kludge to make diffs for new pages to work this way.        if( version1 == WikiPageProvider.LATEST_VERSION )        {            page1 = "";        }        String diff  = m_differenceEngine.makeDiff( page1, page2 );        diff = TextUtil.replaceEntities( diff );                try        {            if( diff.length() > 0 )            {                diff = m_differenceEngine.colorizeDiff( diff );            }        }        catch( IOException e )        {            log.error("Failed to colorize diff result.", e);        }        return diff;    }    /**     *  Returns this object's ReferenceManager.     *  @since 1.6.1     */    // (FIXME: We may want to protect this, though...)    public ReferenceManager getReferenceManager()    {        return m_referenceManager;    }    /**           *  Returns the current plugin manager.     *  @since 1.6.1     */    public PluginManager getPluginManager()    {        return m_pluginManager;    }    public VariableManager getVariableManager()    {        return m_variableManager;    }    /**     *  Returns the current PageManager.     */    public PageManager getPageManager()    {        return m_pageManager;    }    /**     *  Returns the current AttachmentManager.     *  @since 1.9.31.     */    public AttachmentManager getAttachmentManager()    {        return m_attachmentManager;    }    /**     *  Returns the currently used authorization manager.     */    public AuthorizationManager getAuthorizationManager()    {        return m_authorizationManager;    }    /**     *  Returns the currently used user manager.     */    public UserManager getUserManager()    {        return m_userManager;    }    /**     *  Returns the manager responsible for the filters.     *  @since 2.1.88     */    public FilterManager getFilterManager()    {        return m_filterManager;    }    /**     *  Parses the given path and attempts to match it against the list     *  of specialpages to see if this path exists.  It is used to map things     *  like "UserPreferences.jsp" to page "User Preferences".     *     *  @return WikiName, or null if a match could not be found.     */    private String matchSpecialPagePath( String path )    {        //        //  Remove servlet root marker.        //        if( path.startsWith("/") )        {            path = path.substring(1);        }        for( Iterator i = m_properties.entrySet().iterator(); i.hasNext(); )        {            Map.Entry entry = (Map.Entry) i.next();                       String key = (String)entry.getKey();            if( key.startsWith( PROP_SPECIALPAGE ) )            {                String value = (String)entry.getValue();                if( value.equals( path ) )                {                                        return key.substring( PROP_SPECIALPAGE.length() );                }            }        }        return null;    }    /**     *  Figure out to which page we are really going to.  Considers     *  special page names from the jspwiki.properties, and possible aliases.     *     *  @param context The Wiki Context in which the request is being made.     *  @return A complete URL to the new page to redirect to     *  @since 2.2     */    public String getRedirectURL( WikiContext context )    {        String pagename = context.getPage().getName();        String redirURL = null;                redirURL = getSpecialPageReference( pagename );        if( redirURL == null )        {            String alias = (String)context.getPage().getAttribute( WikiPage.ALIAS );                        if( alias != null )            {                redirURL = getViewURL( alias );            }            else            {                redirURL = (String)context.getPage().getAttribute( WikiPage.REDIRECT );            }        }        return redirURL;    }    /**     *  Shortcut to create a WikiContext from the Wiki page.     *     *  @since 2.1.15.     */    // FIXME: We need to have a version which takes a fixed page    //        name as well, or check it elsewhere.    public WikiContext createContext( HttpServletRequest request,                                      String requestContext )    {        if( !m_isConfigured )        {            throw new InternalWikiException("WikiEngine has not been properly started.  It is likely that the configuration is faulty.  Please check all logs for the possible reason.");        }        String pagereq  = safeGetParameter( request, "page" );        String template = safeGetParameter( request, "skin" );        //        //  Figure out the page name.        //  We also check the list of special pages, which incidentally        //  allows us to localize them, too.        //        if( pagereq == null || pagereq.length() == 0 )        {            String servlet = request.getServletPath();            log.debug("Servlet path is: "+servlet);            pagereq = matchSpecialPagePath( servlet );            log.debug("Mapped to "+pagereq);            if( pagereq == null )            {                pagereq = getFrontPage();            }        }        int hashMark = pagereq.indexOf('#');        if( hashMark != -1 )        {            pagereq = pagereq.substring( 0, hashMark );        }        int version          = WikiProvider.LATEST_VERSION;        String rev           = request.getParameter("version");        if( rev != null )        {            version = Integer.parseInt( rev );        }        WikiPage wikipage = getPage( pagereq, version );        if( wikipage == null )        {            wikipage = new WikiPage( pagereq );        }        if( template == null )        {            template = (String)wikipage.getAttribute( PROP_TEMPLATEDIR );            // FIXME: Most definitely this should be checked for            //        existence, or else it is possible to create pages that            //        cannot be shown.            if( template == null || template.length() == 0 )            {                template = getTemplateDir();            }        }        WikiContext context = new WikiContext( this,                                                wikipage );        context.setRequestContext( requestContext );        context.setHttpRequest( request );        context.setTemplate( template );        UserProfile user = getUserManager().getUserProfile( request );        context.setCurrentUser( user );        return context;    }    /**     *  Returns the URL of the global RSS file.  May be null, if the     *  RSS file generation is not operational.     *  @since 1.7.10     */    public String getGlobalRSSURL()    {        if( m_rssURL != null )        {            return getBaseURL()+m_rssURL;        }        return null;    }    /**     * @since 2.2     */    public String getRootPath()    {        return m_rootPath;    }    /**     *  Runs the RSS generation thread.     *  FIXME: MUST be somewhere else, this is not a good place.     */    private class RSSThread extends Thread    {        public void run()        {            try            {                String fileName = m_properties.getProperty( RSSGenerator.PROP_RSSFILE,                                                            "rss.rdf" );                int rssInterval = TextUtil.parseIntParameter( m_properties.getProperty( RSSGenerator.PROP_INTERVAL ),                                                              3600 );                log.debug("RSS file will be at "+fileName);                log.debug("RSS refresh interval (seconds): "+rssInterval);                while(true)                {                    Writer out = null;                    Reader in  = null;                    try                    {                        //                        //  Generate RSS file, output it to                        //  default "rss.rdf".                        //                        log.debug("Regenerating RSS feed to "+fileName);                        String feed = m_rssGenerator.generate();                        File file = new File( m_rootPath, fileName );                        in  = new StringReader(feed);                        out = new BufferedWriter( new OutputStreamWriter( new FileOutputStream(file), "UTF-8") );                        FileUtil.copyContents( in, out );                        m_rssURL = fileName;                    }                    catch( IOException e )                    {                        log.error("Cannot generate RSS feed to "+fileName, e );                        m_rssURL = null;                    }                    finally                    {                        try                        {                            if( in != null )  in.close();                            if( out != null ) out.close();                        }                        catch( IOException e )                        {                            log.fatal("Could not close I/O for RSS", e );                            break;                        }                    }                    Thread.sleep(rssInterval*1000L);                } // while                            }            catch(InterruptedException e)            {                log.error("RSS thread interrupted, no more RSS feeds", e);            }                        //            // Signal: no more RSS feeds.            //            m_rssURL = null;        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -