|Title|Request Rpc Handler Get Recent Changes To Take Null Date
|Date|15-Oct-2005 15:57:42 EEST
|Version|2.2.x
|Submitter|ChrisWilson
|[Bug criticality]|EnhancementRequest
|Browser version|
|[Bug status]|NewBug
|[PageProvider] used|
|Servlet Container|
|Operating System|
|URL|
|Java version|

I'm writing a Wiki synchroniser that uses the XML-RPC interface, and I need to get the metadata about all pages on each side to see which ones have changed.

Right now I need to first get a list of all page names, then enumerate over them requesting getPageInfo for each one. This is slow (takes about 3 minutes for a 1300-page wiki).

I noticed that getRecentChanges returns a Hashtable about each page, with almost all the info I need, but I can't pass a null Date to get a list of absolutely all pages.

I refactored the code a little to get this:

{{{
    public Vector getRecentChanges( Date since )
    {
        Collection pages = m_engine.getRecentChanges();
        Vector result = new Vector();

        if (since != null)
        {
            Calendar cal = Calendar.getInstance();
            cal.setTime( since );
    
            //
            //  Convert UTC to our time.
            //
            cal.add( Calendar.MILLISECOND, cal.get( Calendar.ZONE_OFFSET ));
            if (cal.getTimeZone().inDaylightTime(since))
            {
                cal.add( Calendar.MILLISECOND, cal.get( Calendar.DST_OFFSET ));
            }
            since = cal.getTime();
        }
        
        for( Iterator i = pages.iterator(); i.hasNext(); )
        {
            WikiPage page = (WikiPage)i.next();

            if (page instanceof Attachment)
            {
                continue;
            }
            
            if (since == null || page.getLastModified().after( since ))
            {
                result.add( encodeWikiPage( page ) );
            }
        }

        return result;
    }
}}}

which is also easier to read. Might I suggest supporting this in a future version?

Also, it would be really handy to have the page size in the Hashtable. Because I don't want to accidentally permanently delete a page from the wiki, I treat zero-size pages as deleted, and delete a page by removing all the contents (which at least is versioned). However, until JSPWiki's XML-RPC interface supports retrieving the page size separately, I will have to download each page to see if it's empty or not (and if you think 3 minutes is bad... :-)

I added this code to the RPCHandler:

{{{
        ht.put( "lastModified", cal.getTime() );
        ht.put( "version", new Integer(page.getVersion()) );
        ht.put( "size", new Long(page.getSize()) );
}}}

and I'm working on the equivalent code in Mahlen's client.

Cheers, [Chris Wilson].


----

This one is 17 months old, is this still relevant ?   What do we do with this ?

--HarryMetske, 21-Mar-2007


----

Let me think.  I was going to make some tweaks to the XML-RPC code anyway.

--JanneJalkanen, 22-Mar-2007